i386-dis.c revision 1.1.1.1.8.1 1 1.1 christos /* Print i386 instructions for GDB, the GNU debugger.
2 1.1 christos Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3 1.1.1.1.8.1 tls 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
4 1.1 christos Free Software Foundation, Inc.
5 1.1 christos
6 1.1 christos This file is part of the GNU opcodes library.
7 1.1 christos
8 1.1 christos This library is free software; you can redistribute it and/or modify
9 1.1 christos it under the terms of the GNU General Public License as published by
10 1.1 christos the Free Software Foundation; either version 3, or (at your option)
11 1.1 christos any later version.
12 1.1 christos
13 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
14 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
16 1.1 christos License for more details.
17 1.1 christos
18 1.1 christos You should have received a copy of the GNU General Public License
19 1.1 christos along with this program; if not, write to the Free Software
20 1.1 christos Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 1.1 christos MA 02110-1301, USA. */
22 1.1 christos
23 1.1 christos
24 1.1 christos /* 80386 instruction printer by Pace Willisson (pace (at) prep.ai.mit.edu)
25 1.1 christos July 1988
26 1.1 christos modified by John Hassey (hassey (at) dg-rtp.dg.com)
27 1.1 christos x86-64 support added by Jan Hubicka (jh (at) suse.cz)
28 1.1 christos VIA PadLock support by Michal Ludvig (mludvig (at) suse.cz). */
29 1.1 christos
30 1.1 christos /* The main tables describing the instructions is essentially a copy
31 1.1 christos of the "Opcode Map" chapter (Appendix A) of the Intel 80386
32 1.1 christos Programmers Manual. Usually, there is a capital letter, followed
33 1.1 christos by a small letter. The capital letter tell the addressing mode,
34 1.1 christos and the small letter tells about the operand size. Refer to
35 1.1 christos the Intel manual for details. */
36 1.1 christos
37 1.1 christos #include "sysdep.h"
38 1.1 christos #include "dis-asm.h"
39 1.1 christos #include "opintl.h"
40 1.1 christos #include "opcode/i386.h"
41 1.1 christos #include "libiberty.h"
42 1.1 christos
43 1.1 christos #include <setjmp.h>
44 1.1 christos
45 1.1 christos static int print_insn (bfd_vma, disassemble_info *);
46 1.1 christos static void dofloat (int);
47 1.1 christos static void OP_ST (int, int);
48 1.1 christos static void OP_STi (int, int);
49 1.1 christos static int putop (const char *, int);
50 1.1 christos static void oappend (const char *);
51 1.1 christos static void append_seg (void);
52 1.1 christos static void OP_indirE (int, int);
53 1.1 christos static void print_operand_value (char *, int, bfd_vma);
54 1.1 christos static void OP_E_register (int, int);
55 1.1 christos static void OP_E_memory (int, int);
56 1.1 christos static void print_displacement (char *, bfd_vma);
57 1.1 christos static void OP_E (int, int);
58 1.1 christos static void OP_G (int, int);
59 1.1 christos static bfd_vma get64 (void);
60 1.1 christos static bfd_signed_vma get32 (void);
61 1.1 christos static bfd_signed_vma get32s (void);
62 1.1 christos static int get16 (void);
63 1.1 christos static void set_op (bfd_vma, int);
64 1.1 christos static void OP_Skip_MODRM (int, int);
65 1.1 christos static void OP_REG (int, int);
66 1.1 christos static void OP_IMREG (int, int);
67 1.1 christos static void OP_I (int, int);
68 1.1 christos static void OP_I64 (int, int);
69 1.1 christos static void OP_sI (int, int);
70 1.1 christos static void OP_J (int, int);
71 1.1 christos static void OP_SEG (int, int);
72 1.1 christos static void OP_DIR (int, int);
73 1.1 christos static void OP_OFF (int, int);
74 1.1 christos static void OP_OFF64 (int, int);
75 1.1 christos static void ptr_reg (int, int);
76 1.1 christos static void OP_ESreg (int, int);
77 1.1 christos static void OP_DSreg (int, int);
78 1.1 christos static void OP_C (int, int);
79 1.1 christos static void OP_D (int, int);
80 1.1 christos static void OP_T (int, int);
81 1.1 christos static void OP_R (int, int);
82 1.1 christos static void OP_MMX (int, int);
83 1.1 christos static void OP_XMM (int, int);
84 1.1 christos static void OP_EM (int, int);
85 1.1 christos static void OP_EX (int, int);
86 1.1 christos static void OP_EMC (int,int);
87 1.1 christos static void OP_MXC (int,int);
88 1.1 christos static void OP_MS (int, int);
89 1.1 christos static void OP_XS (int, int);
90 1.1 christos static void OP_M (int, int);
91 1.1 christos static void OP_VEX (int, int);
92 1.1 christos static void OP_EX_Vex (int, int);
93 1.1 christos static void OP_EX_VexW (int, int);
94 1.1 christos static void OP_EX_VexImmW (int, int);
95 1.1 christos static void OP_XMM_Vex (int, int);
96 1.1 christos static void OP_XMM_VexW (int, int);
97 1.1.1.1.8.1 tls static void OP_Rounding (int, int);
98 1.1 christos static void OP_REG_VexI4 (int, int);
99 1.1 christos static void PCLMUL_Fixup (int, int);
100 1.1 christos static void VEXI4_Fixup (int, int);
101 1.1 christos static void VZERO_Fixup (int, int);
102 1.1 christos static void VCMP_Fixup (int, int);
103 1.1.1.1.8.1 tls static void VPCMP_Fixup (int, int);
104 1.1 christos static void OP_0f07 (int, int);
105 1.1 christos static void OP_Monitor (int, int);
106 1.1 christos static void OP_Mwait (int, int);
107 1.1 christos static void NOP_Fixup1 (int, int);
108 1.1 christos static void NOP_Fixup2 (int, int);
109 1.1 christos static void OP_3DNowSuffix (int, int);
110 1.1 christos static void CMP_Fixup (int, int);
111 1.1 christos static void BadOp (void);
112 1.1 christos static void REP_Fixup (int, int);
113 1.1.1.1.8.1 tls static void BND_Fixup (int, int);
114 1.1.1.1.8.1 tls static void HLE_Fixup1 (int, int);
115 1.1.1.1.8.1 tls static void HLE_Fixup2 (int, int);
116 1.1.1.1.8.1 tls static void HLE_Fixup3 (int, int);
117 1.1 christos static void CMPXCHG8B_Fixup (int, int);
118 1.1 christos static void XMM_Fixup (int, int);
119 1.1 christos static void CRC32_Fixup (int, int);
120 1.1 christos static void FXSAVE_Fixup (int, int);
121 1.1 christos static void OP_LWPCB_E (int, int);
122 1.1 christos static void OP_LWP_E (int, int);
123 1.1 christos static void OP_Vex_2src_1 (int, int);
124 1.1 christos static void OP_Vex_2src_2 (int, int);
125 1.1 christos
126 1.1 christos static void MOVBE_Fixup (int, int);
127 1.1 christos
128 1.1.1.1.8.1 tls static void OP_Mask (int, int);
129 1.1.1.1.8.1 tls
130 1.1 christos struct dis_private {
131 1.1 christos /* Points to first byte not fetched. */
132 1.1 christos bfd_byte *max_fetched;
133 1.1 christos bfd_byte the_buffer[MAX_MNEM_SIZE];
134 1.1 christos bfd_vma insn_start;
135 1.1 christos int orig_sizeflag;
136 1.1 christos jmp_buf bailout;
137 1.1 christos };
138 1.1 christos
139 1.1 christos enum address_mode
140 1.1 christos {
141 1.1 christos mode_16bit,
142 1.1 christos mode_32bit,
143 1.1 christos mode_64bit
144 1.1 christos };
145 1.1 christos
146 1.1 christos enum address_mode address_mode;
147 1.1 christos
148 1.1 christos /* Flags for the prefixes for the current instruction. See below. */
149 1.1 christos static int prefixes;
150 1.1 christos
151 1.1 christos /* REX prefix the current instruction. See below. */
152 1.1 christos static int rex;
153 1.1 christos /* Bits of REX we've already used. */
154 1.1 christos static int rex_used;
155 1.1 christos /* REX bits in original REX prefix ignored. */
156 1.1 christos static int rex_ignored;
157 1.1 christos /* Mark parts used in the REX prefix. When we are testing for
158 1.1 christos empty prefix (for 8bit register REX extension), just mask it
159 1.1 christos out. Otherwise test for REX bit is excuse for existence of REX
160 1.1 christos only in case value is nonzero. */
161 1.1 christos #define USED_REX(value) \
162 1.1 christos { \
163 1.1 christos if (value) \
164 1.1 christos { \
165 1.1 christos if ((rex & value)) \
166 1.1 christos rex_used |= (value) | REX_OPCODE; \
167 1.1 christos } \
168 1.1 christos else \
169 1.1 christos rex_used |= REX_OPCODE; \
170 1.1 christos }
171 1.1 christos
172 1.1 christos /* Flags for prefixes which we somehow handled when printing the
173 1.1 christos current instruction. */
174 1.1 christos static int used_prefixes;
175 1.1 christos
176 1.1 christos /* Flags stored in PREFIXES. */
177 1.1 christos #define PREFIX_REPZ 1
178 1.1 christos #define PREFIX_REPNZ 2
179 1.1 christos #define PREFIX_LOCK 4
180 1.1 christos #define PREFIX_CS 8
181 1.1 christos #define PREFIX_SS 0x10
182 1.1 christos #define PREFIX_DS 0x20
183 1.1 christos #define PREFIX_ES 0x40
184 1.1 christos #define PREFIX_FS 0x80
185 1.1 christos #define PREFIX_GS 0x100
186 1.1 christos #define PREFIX_DATA 0x200
187 1.1 christos #define PREFIX_ADDR 0x400
188 1.1 christos #define PREFIX_FWAIT 0x800
189 1.1 christos
190 1.1 christos /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
191 1.1 christos to ADDR (exclusive) are valid. Returns 1 for success, longjmps
192 1.1 christos on error. */
193 1.1 christos #define FETCH_DATA(info, addr) \
194 1.1 christos ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
195 1.1 christos ? 1 : fetch_data ((info), (addr)))
196 1.1 christos
197 1.1 christos static int
198 1.1 christos fetch_data (struct disassemble_info *info, bfd_byte *addr)
199 1.1 christos {
200 1.1 christos int status;
201 1.1 christos struct dis_private *priv = (struct dis_private *) info->private_data;
202 1.1 christos bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
203 1.1 christos
204 1.1 christos if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
205 1.1 christos status = (*info->read_memory_func) (start,
206 1.1 christos priv->max_fetched,
207 1.1 christos addr - priv->max_fetched,
208 1.1 christos info);
209 1.1 christos else
210 1.1 christos status = -1;
211 1.1 christos if (status != 0)
212 1.1 christos {
213 1.1 christos /* If we did manage to read at least one byte, then
214 1.1 christos print_insn_i386 will do something sensible. Otherwise, print
215 1.1 christos an error. We do that here because this is where we know
216 1.1 christos STATUS. */
217 1.1 christos if (priv->max_fetched == priv->the_buffer)
218 1.1 christos (*info->memory_error_func) (status, start, info);
219 1.1 christos longjmp (priv->bailout, 1);
220 1.1 christos }
221 1.1 christos else
222 1.1 christos priv->max_fetched = addr;
223 1.1 christos return 1;
224 1.1 christos }
225 1.1 christos
226 1.1 christos #define XX { NULL, 0 }
227 1.1 christos #define Bad_Opcode NULL, { { NULL, 0 } }
228 1.1 christos
229 1.1 christos #define Eb { OP_E, b_mode }
230 1.1.1.1.8.1 tls #define Ebnd { OP_E, bnd_mode }
231 1.1 christos #define EbS { OP_E, b_swap_mode }
232 1.1 christos #define Ev { OP_E, v_mode }
233 1.1.1.1.8.1 tls #define Ev_bnd { OP_E, v_bnd_mode }
234 1.1 christos #define EvS { OP_E, v_swap_mode }
235 1.1 christos #define Ed { OP_E, d_mode }
236 1.1 christos #define Edq { OP_E, dq_mode }
237 1.1 christos #define Edqw { OP_E, dqw_mode }
238 1.1 christos #define Edqb { OP_E, dqb_mode }
239 1.1 christos #define Edqd { OP_E, dqd_mode }
240 1.1 christos #define Eq { OP_E, q_mode }
241 1.1 christos #define indirEv { OP_indirE, stack_v_mode }
242 1.1 christos #define indirEp { OP_indirE, f_mode }
243 1.1 christos #define stackEv { OP_E, stack_v_mode }
244 1.1 christos #define Em { OP_E, m_mode }
245 1.1 christos #define Ew { OP_E, w_mode }
246 1.1 christos #define M { OP_M, 0 } /* lea, lgdt, etc. */
247 1.1 christos #define Ma { OP_M, a_mode }
248 1.1 christos #define Mb { OP_M, b_mode }
249 1.1 christos #define Md { OP_M, d_mode }
250 1.1 christos #define Mo { OP_M, o_mode }
251 1.1 christos #define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
252 1.1 christos #define Mq { OP_M, q_mode }
253 1.1 christos #define Mx { OP_M, x_mode }
254 1.1 christos #define Mxmm { OP_M, xmm_mode }
255 1.1 christos #define Gb { OP_G, b_mode }
256 1.1.1.1.8.1 tls #define Gbnd { OP_G, bnd_mode }
257 1.1 christos #define Gv { OP_G, v_mode }
258 1.1 christos #define Gd { OP_G, d_mode }
259 1.1 christos #define Gdq { OP_G, dq_mode }
260 1.1 christos #define Gm { OP_G, m_mode }
261 1.1 christos #define Gw { OP_G, w_mode }
262 1.1 christos #define Rd { OP_R, d_mode }
263 1.1.1.1.8.1 tls #define Rdq { OP_R, dq_mode }
264 1.1 christos #define Rm { OP_R, m_mode }
265 1.1 christos #define Ib { OP_I, b_mode }
266 1.1 christos #define sIb { OP_sI, b_mode } /* sign extened byte */
267 1.1 christos #define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
268 1.1 christos #define Iv { OP_I, v_mode }
269 1.1.1.1.8.1 tls #define sIv { OP_sI, v_mode }
270 1.1 christos #define Iq { OP_I, q_mode }
271 1.1 christos #define Iv64 { OP_I64, v_mode }
272 1.1 christos #define Iw { OP_I, w_mode }
273 1.1 christos #define I1 { OP_I, const_1_mode }
274 1.1 christos #define Jb { OP_J, b_mode }
275 1.1 christos #define Jv { OP_J, v_mode }
276 1.1 christos #define Cm { OP_C, m_mode }
277 1.1 christos #define Dm { OP_D, m_mode }
278 1.1 christos #define Td { OP_T, d_mode }
279 1.1 christos #define Skip_MODRM { OP_Skip_MODRM, 0 }
280 1.1 christos
281 1.1 christos #define RMeAX { OP_REG, eAX_reg }
282 1.1 christos #define RMeBX { OP_REG, eBX_reg }
283 1.1 christos #define RMeCX { OP_REG, eCX_reg }
284 1.1 christos #define RMeDX { OP_REG, eDX_reg }
285 1.1 christos #define RMeSP { OP_REG, eSP_reg }
286 1.1 christos #define RMeBP { OP_REG, eBP_reg }
287 1.1 christos #define RMeSI { OP_REG, eSI_reg }
288 1.1 christos #define RMeDI { OP_REG, eDI_reg }
289 1.1 christos #define RMrAX { OP_REG, rAX_reg }
290 1.1 christos #define RMrBX { OP_REG, rBX_reg }
291 1.1 christos #define RMrCX { OP_REG, rCX_reg }
292 1.1 christos #define RMrDX { OP_REG, rDX_reg }
293 1.1 christos #define RMrSP { OP_REG, rSP_reg }
294 1.1 christos #define RMrBP { OP_REG, rBP_reg }
295 1.1 christos #define RMrSI { OP_REG, rSI_reg }
296 1.1 christos #define RMrDI { OP_REG, rDI_reg }
297 1.1 christos #define RMAL { OP_REG, al_reg }
298 1.1 christos #define RMCL { OP_REG, cl_reg }
299 1.1 christos #define RMDL { OP_REG, dl_reg }
300 1.1 christos #define RMBL { OP_REG, bl_reg }
301 1.1 christos #define RMAH { OP_REG, ah_reg }
302 1.1 christos #define RMCH { OP_REG, ch_reg }
303 1.1 christos #define RMDH { OP_REG, dh_reg }
304 1.1 christos #define RMBH { OP_REG, bh_reg }
305 1.1 christos #define RMAX { OP_REG, ax_reg }
306 1.1 christos #define RMDX { OP_REG, dx_reg }
307 1.1 christos
308 1.1 christos #define eAX { OP_IMREG, eAX_reg }
309 1.1 christos #define eBX { OP_IMREG, eBX_reg }
310 1.1 christos #define eCX { OP_IMREG, eCX_reg }
311 1.1 christos #define eDX { OP_IMREG, eDX_reg }
312 1.1 christos #define eSP { OP_IMREG, eSP_reg }
313 1.1 christos #define eBP { OP_IMREG, eBP_reg }
314 1.1 christos #define eSI { OP_IMREG, eSI_reg }
315 1.1 christos #define eDI { OP_IMREG, eDI_reg }
316 1.1 christos #define AL { OP_IMREG, al_reg }
317 1.1 christos #define CL { OP_IMREG, cl_reg }
318 1.1 christos #define DL { OP_IMREG, dl_reg }
319 1.1 christos #define BL { OP_IMREG, bl_reg }
320 1.1 christos #define AH { OP_IMREG, ah_reg }
321 1.1 christos #define CH { OP_IMREG, ch_reg }
322 1.1 christos #define DH { OP_IMREG, dh_reg }
323 1.1 christos #define BH { OP_IMREG, bh_reg }
324 1.1 christos #define AX { OP_IMREG, ax_reg }
325 1.1 christos #define DX { OP_IMREG, dx_reg }
326 1.1 christos #define zAX { OP_IMREG, z_mode_ax_reg }
327 1.1 christos #define indirDX { OP_IMREG, indir_dx_reg }
328 1.1 christos
329 1.1 christos #define Sw { OP_SEG, w_mode }
330 1.1 christos #define Sv { OP_SEG, v_mode }
331 1.1 christos #define Ap { OP_DIR, 0 }
332 1.1 christos #define Ob { OP_OFF64, b_mode }
333 1.1 christos #define Ov { OP_OFF64, v_mode }
334 1.1 christos #define Xb { OP_DSreg, eSI_reg }
335 1.1 christos #define Xv { OP_DSreg, eSI_reg }
336 1.1 christos #define Xz { OP_DSreg, eSI_reg }
337 1.1 christos #define Yb { OP_ESreg, eDI_reg }
338 1.1 christos #define Yv { OP_ESreg, eDI_reg }
339 1.1 christos #define DSBX { OP_DSreg, eBX_reg }
340 1.1 christos
341 1.1 christos #define es { OP_REG, es_reg }
342 1.1 christos #define ss { OP_REG, ss_reg }
343 1.1 christos #define cs { OP_REG, cs_reg }
344 1.1 christos #define ds { OP_REG, ds_reg }
345 1.1 christos #define fs { OP_REG, fs_reg }
346 1.1 christos #define gs { OP_REG, gs_reg }
347 1.1 christos
348 1.1 christos #define MX { OP_MMX, 0 }
349 1.1 christos #define XM { OP_XMM, 0 }
350 1.1 christos #define XMScalar { OP_XMM, scalar_mode }
351 1.1.1.1.8.1 tls #define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
352 1.1 christos #define XMM { OP_XMM, xmm_mode }
353 1.1.1.1.8.1 tls #define XMxmmq { OP_XMM, xmmq_mode }
354 1.1 christos #define EM { OP_EM, v_mode }
355 1.1 christos #define EMS { OP_EM, v_swap_mode }
356 1.1 christos #define EMd { OP_EM, d_mode }
357 1.1 christos #define EMx { OP_EM, x_mode }
358 1.1 christos #define EXw { OP_EX, w_mode }
359 1.1 christos #define EXd { OP_EX, d_mode }
360 1.1 christos #define EXdScalar { OP_EX, d_scalar_mode }
361 1.1 christos #define EXdS { OP_EX, d_swap_mode }
362 1.1.1.1.8.1 tls #define EXdScalarS { OP_EX, d_scalar_swap_mode }
363 1.1 christos #define EXq { OP_EX, q_mode }
364 1.1 christos #define EXqScalar { OP_EX, q_scalar_mode }
365 1.1 christos #define EXqScalarS { OP_EX, q_scalar_swap_mode }
366 1.1 christos #define EXqS { OP_EX, q_swap_mode }
367 1.1 christos #define EXx { OP_EX, x_mode }
368 1.1 christos #define EXxS { OP_EX, x_swap_mode }
369 1.1 christos #define EXxmm { OP_EX, xmm_mode }
370 1.1.1.1.8.1 tls #define EXymm { OP_EX, ymm_mode }
371 1.1 christos #define EXxmmq { OP_EX, xmmq_mode }
372 1.1.1.1.8.1 tls #define EXEvexHalfBcstXmmq { OP_EX, evex_half_bcst_xmmq_mode }
373 1.1.1.1.8.1 tls #define EXxmm_mb { OP_EX, xmm_mb_mode }
374 1.1.1.1.8.1 tls #define EXxmm_mw { OP_EX, xmm_mw_mode }
375 1.1.1.1.8.1 tls #define EXxmm_md { OP_EX, xmm_md_mode }
376 1.1.1.1.8.1 tls #define EXxmm_mq { OP_EX, xmm_mq_mode }
377 1.1.1.1.8.1 tls #define EXxmm_mdq { OP_EX, xmm_mdq_mode }
378 1.1.1.1.8.1 tls #define EXxmmdw { OP_EX, xmmdw_mode }
379 1.1.1.1.8.1 tls #define EXxmmqd { OP_EX, xmmqd_mode }
380 1.1 christos #define EXymmq { OP_EX, ymmq_mode }
381 1.1 christos #define EXVexWdq { OP_EX, vex_w_dq_mode }
382 1.1 christos #define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
383 1.1.1.1.8.1 tls #define EXEvexXGscat { OP_EX, evex_x_gscat_mode }
384 1.1.1.1.8.1 tls #define EXEvexXNoBcst { OP_EX, evex_x_nobcst_mode }
385 1.1 christos #define MS { OP_MS, v_mode }
386 1.1 christos #define XS { OP_XS, v_mode }
387 1.1 christos #define EMCq { OP_EMC, q_mode }
388 1.1 christos #define MXC { OP_MXC, 0 }
389 1.1 christos #define OPSUF { OP_3DNowSuffix, 0 }
390 1.1 christos #define CMP { CMP_Fixup, 0 }
391 1.1 christos #define XMM0 { XMM_Fixup, 0 }
392 1.1 christos #define FXSAVE { FXSAVE_Fixup, 0 }
393 1.1 christos #define Vex_2src_1 { OP_Vex_2src_1, 0 }
394 1.1 christos #define Vex_2src_2 { OP_Vex_2src_2, 0 }
395 1.1 christos
396 1.1 christos #define Vex { OP_VEX, vex_mode }
397 1.1 christos #define VexScalar { OP_VEX, vex_scalar_mode }
398 1.1.1.1.8.1 tls #define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
399 1.1 christos #define Vex128 { OP_VEX, vex128_mode }
400 1.1 christos #define Vex256 { OP_VEX, vex256_mode }
401 1.1 christos #define VexGdq { OP_VEX, dq_mode }
402 1.1 christos #define VexI4 { VEXI4_Fixup, 0}
403 1.1 christos #define EXdVex { OP_EX_Vex, d_mode }
404 1.1 christos #define EXdVexS { OP_EX_Vex, d_swap_mode }
405 1.1 christos #define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
406 1.1 christos #define EXqVex { OP_EX_Vex, q_mode }
407 1.1 christos #define EXqVexS { OP_EX_Vex, q_swap_mode }
408 1.1 christos #define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
409 1.1 christos #define EXVexW { OP_EX_VexW, x_mode }
410 1.1 christos #define EXdVexW { OP_EX_VexW, d_mode }
411 1.1 christos #define EXqVexW { OP_EX_VexW, q_mode }
412 1.1 christos #define EXVexImmW { OP_EX_VexImmW, x_mode }
413 1.1 christos #define XMVex { OP_XMM_Vex, 0 }
414 1.1 christos #define XMVexScalar { OP_XMM_Vex, scalar_mode }
415 1.1 christos #define XMVexW { OP_XMM_VexW, 0 }
416 1.1 christos #define XMVexI4 { OP_REG_VexI4, x_mode }
417 1.1 christos #define PCLMUL { PCLMUL_Fixup, 0 }
418 1.1 christos #define VZERO { VZERO_Fixup, 0 }
419 1.1 christos #define VCMP { VCMP_Fixup, 0 }
420 1.1.1.1.8.1 tls #define VPCMP { VPCMP_Fixup, 0 }
421 1.1.1.1.8.1 tls
422 1.1.1.1.8.1 tls #define EXxEVexR { OP_Rounding, evex_rounding_mode }
423 1.1.1.1.8.1 tls #define EXxEVexS { OP_Rounding, evex_sae_mode }
424 1.1.1.1.8.1 tls
425 1.1.1.1.8.1 tls #define XMask { OP_Mask, mask_mode }
426 1.1.1.1.8.1 tls #define MaskG { OP_G, mask_mode }
427 1.1.1.1.8.1 tls #define MaskE { OP_E, mask_mode }
428 1.1.1.1.8.1 tls #define MaskR { OP_R, mask_mode }
429 1.1.1.1.8.1 tls #define MaskVex { OP_VEX, mask_mode }
430 1.1.1.1.8.1 tls
431 1.1.1.1.8.1 tls #define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
432 1.1.1.1.8.1 tls #define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
433 1.1 christos
434 1.1 christos /* Used handle "rep" prefix for string instructions. */
435 1.1 christos #define Xbr { REP_Fixup, eSI_reg }
436 1.1 christos #define Xvr { REP_Fixup, eSI_reg }
437 1.1 christos #define Ybr { REP_Fixup, eDI_reg }
438 1.1 christos #define Yvr { REP_Fixup, eDI_reg }
439 1.1 christos #define Yzr { REP_Fixup, eDI_reg }
440 1.1 christos #define indirDXr { REP_Fixup, indir_dx_reg }
441 1.1 christos #define ALr { REP_Fixup, al_reg }
442 1.1 christos #define eAXr { REP_Fixup, eAX_reg }
443 1.1 christos
444 1.1.1.1.8.1 tls /* Used handle HLE prefix for lockable instructions. */
445 1.1.1.1.8.1 tls #define Ebh1 { HLE_Fixup1, b_mode }
446 1.1.1.1.8.1 tls #define Evh1 { HLE_Fixup1, v_mode }
447 1.1.1.1.8.1 tls #define Ebh2 { HLE_Fixup2, b_mode }
448 1.1.1.1.8.1 tls #define Evh2 { HLE_Fixup2, v_mode }
449 1.1.1.1.8.1 tls #define Ebh3 { HLE_Fixup3, b_mode }
450 1.1.1.1.8.1 tls #define Evh3 { HLE_Fixup3, v_mode }
451 1.1.1.1.8.1 tls
452 1.1.1.1.8.1 tls #define BND { BND_Fixup, 0 }
453 1.1.1.1.8.1 tls
454 1.1 christos #define cond_jump_flag { NULL, cond_jump_mode }
455 1.1 christos #define loop_jcxz_flag { NULL, loop_jcxz_mode }
456 1.1 christos
457 1.1 christos /* bits in sizeflag */
458 1.1 christos #define SUFFIX_ALWAYS 4
459 1.1 christos #define AFLAG 2
460 1.1 christos #define DFLAG 1
461 1.1 christos
462 1.1 christos enum
463 1.1 christos {
464 1.1 christos /* byte operand */
465 1.1 christos b_mode = 1,
466 1.1 christos /* byte operand with operand swapped */
467 1.1 christos b_swap_mode,
468 1.1 christos /* byte operand, sign extend like 'T' suffix */
469 1.1 christos b_T_mode,
470 1.1 christos /* operand size depends on prefixes */
471 1.1 christos v_mode,
472 1.1 christos /* operand size depends on prefixes with operand swapped */
473 1.1 christos v_swap_mode,
474 1.1 christos /* word operand */
475 1.1 christos w_mode,
476 1.1 christos /* double word operand */
477 1.1 christos d_mode,
478 1.1 christos /* double word operand with operand swapped */
479 1.1 christos d_swap_mode,
480 1.1 christos /* quad word operand */
481 1.1 christos q_mode,
482 1.1 christos /* quad word operand with operand swapped */
483 1.1 christos q_swap_mode,
484 1.1 christos /* ten-byte operand */
485 1.1 christos t_mode,
486 1.1.1.1.8.1 tls /* 16-byte XMM, 32-byte YMM or 64-byte ZMM operand. In EVEX with
487 1.1.1.1.8.1 tls broadcast enabled. */
488 1.1 christos x_mode,
489 1.1.1.1.8.1 tls /* Similar to x_mode, but with different EVEX mem shifts. */
490 1.1.1.1.8.1 tls evex_x_gscat_mode,
491 1.1.1.1.8.1 tls /* Similar to x_mode, but with disabled broadcast. */
492 1.1.1.1.8.1 tls evex_x_nobcst_mode,
493 1.1.1.1.8.1 tls /* Similar to x_mode, but with operands swapped and disabled broadcast
494 1.1.1.1.8.1 tls in EVEX. */
495 1.1 christos x_swap_mode,
496 1.1 christos /* 16-byte XMM operand */
497 1.1 christos xmm_mode,
498 1.1.1.1.8.1 tls /* XMM, XMM or YMM register operand, or quad word, xmmword or ymmword
499 1.1.1.1.8.1 tls memory operand (depending on vector length). Broadcast isn't
500 1.1.1.1.8.1 tls allowed. */
501 1.1 christos xmmq_mode,
502 1.1.1.1.8.1 tls /* Same as xmmq_mode, but broadcast is allowed. */
503 1.1.1.1.8.1 tls evex_half_bcst_xmmq_mode,
504 1.1.1.1.8.1 tls /* XMM register or byte memory operand */
505 1.1.1.1.8.1 tls xmm_mb_mode,
506 1.1.1.1.8.1 tls /* XMM register or word memory operand */
507 1.1.1.1.8.1 tls xmm_mw_mode,
508 1.1.1.1.8.1 tls /* XMM register or double word memory operand */
509 1.1.1.1.8.1 tls xmm_md_mode,
510 1.1.1.1.8.1 tls /* XMM register or quad word memory operand */
511 1.1.1.1.8.1 tls xmm_mq_mode,
512 1.1.1.1.8.1 tls /* XMM register or double/quad word memory operand, depending on
513 1.1.1.1.8.1 tls VEX.W. */
514 1.1.1.1.8.1 tls xmm_mdq_mode,
515 1.1.1.1.8.1 tls /* 16-byte XMM, word, double word or quad word operand. */
516 1.1.1.1.8.1 tls xmmdw_mode,
517 1.1.1.1.8.1 tls /* 16-byte XMM, double word, quad word operand or xmm word operand. */
518 1.1.1.1.8.1 tls xmmqd_mode,
519 1.1.1.1.8.1 tls /* 32-byte YMM operand */
520 1.1.1.1.8.1 tls ymm_mode,
521 1.1.1.1.8.1 tls /* quad word, ymmword or zmmword memory operand. */
522 1.1 christos ymmq_mode,
523 1.1.1.1.8.1 tls /* 32-byte YMM or 16-byte word operand */
524 1.1.1.1.8.1 tls ymmxmm_mode,
525 1.1 christos /* d_mode in 32bit, q_mode in 64bit mode. */
526 1.1 christos m_mode,
527 1.1 christos /* pair of v_mode operands */
528 1.1 christos a_mode,
529 1.1 christos cond_jump_mode,
530 1.1 christos loop_jcxz_mode,
531 1.1.1.1.8.1 tls v_bnd_mode,
532 1.1 christos /* operand size depends on REX prefixes. */
533 1.1 christos dq_mode,
534 1.1 christos /* registers like dq_mode, memory like w_mode. */
535 1.1 christos dqw_mode,
536 1.1.1.1.8.1 tls bnd_mode,
537 1.1 christos /* 4- or 6-byte pointer operand */
538 1.1 christos f_mode,
539 1.1 christos const_1_mode,
540 1.1 christos /* v_mode for stack-related opcodes. */
541 1.1 christos stack_v_mode,
542 1.1 christos /* non-quad operand size depends on prefixes */
543 1.1 christos z_mode,
544 1.1 christos /* 16-byte operand */
545 1.1 christos o_mode,
546 1.1 christos /* registers like dq_mode, memory like b_mode. */
547 1.1 christos dqb_mode,
548 1.1 christos /* registers like dq_mode, memory like d_mode. */
549 1.1 christos dqd_mode,
550 1.1 christos /* normal vex mode */
551 1.1 christos vex_mode,
552 1.1 christos /* 128bit vex mode */
553 1.1 christos vex128_mode,
554 1.1 christos /* 256bit vex mode */
555 1.1 christos vex256_mode,
556 1.1 christos /* operand size depends on the VEX.W bit. */
557 1.1 christos vex_w_dq_mode,
558 1.1 christos
559 1.1.1.1.8.1 tls /* Similar to vex_w_dq_mode, with VSIB dword indices. */
560 1.1.1.1.8.1 tls vex_vsib_d_w_dq_mode,
561 1.1.1.1.8.1 tls /* Similar to vex_w_dq_mode, with VSIB qword indices. */
562 1.1.1.1.8.1 tls vex_vsib_q_w_dq_mode,
563 1.1.1.1.8.1 tls
564 1.1 christos /* scalar, ignore vector length. */
565 1.1 christos scalar_mode,
566 1.1 christos /* like d_mode, ignore vector length. */
567 1.1 christos d_scalar_mode,
568 1.1 christos /* like d_swap_mode, ignore vector length. */
569 1.1 christos d_scalar_swap_mode,
570 1.1 christos /* like q_mode, ignore vector length. */
571 1.1 christos q_scalar_mode,
572 1.1 christos /* like q_swap_mode, ignore vector length. */
573 1.1 christos q_scalar_swap_mode,
574 1.1 christos /* like vex_mode, ignore vector length. */
575 1.1 christos vex_scalar_mode,
576 1.1 christos /* like vex_w_dq_mode, ignore vector length. */
577 1.1 christos vex_scalar_w_dq_mode,
578 1.1 christos
579 1.1.1.1.8.1 tls /* Static rounding. */
580 1.1.1.1.8.1 tls evex_rounding_mode,
581 1.1.1.1.8.1 tls /* Supress all exceptions. */
582 1.1.1.1.8.1 tls evex_sae_mode,
583 1.1.1.1.8.1 tls
584 1.1.1.1.8.1 tls /* Mask register operand. */
585 1.1.1.1.8.1 tls mask_mode,
586 1.1.1.1.8.1 tls
587 1.1 christos es_reg,
588 1.1 christos cs_reg,
589 1.1 christos ss_reg,
590 1.1 christos ds_reg,
591 1.1 christos fs_reg,
592 1.1 christos gs_reg,
593 1.1 christos
594 1.1 christos eAX_reg,
595 1.1 christos eCX_reg,
596 1.1 christos eDX_reg,
597 1.1 christos eBX_reg,
598 1.1 christos eSP_reg,
599 1.1 christos eBP_reg,
600 1.1 christos eSI_reg,
601 1.1 christos eDI_reg,
602 1.1 christos
603 1.1 christos al_reg,
604 1.1 christos cl_reg,
605 1.1 christos dl_reg,
606 1.1 christos bl_reg,
607 1.1 christos ah_reg,
608 1.1 christos ch_reg,
609 1.1 christos dh_reg,
610 1.1 christos bh_reg,
611 1.1 christos
612 1.1 christos ax_reg,
613 1.1 christos cx_reg,
614 1.1 christos dx_reg,
615 1.1 christos bx_reg,
616 1.1 christos sp_reg,
617 1.1 christos bp_reg,
618 1.1 christos si_reg,
619 1.1 christos di_reg,
620 1.1 christos
621 1.1 christos rAX_reg,
622 1.1 christos rCX_reg,
623 1.1 christos rDX_reg,
624 1.1 christos rBX_reg,
625 1.1 christos rSP_reg,
626 1.1 christos rBP_reg,
627 1.1 christos rSI_reg,
628 1.1 christos rDI_reg,
629 1.1 christos
630 1.1 christos z_mode_ax_reg,
631 1.1 christos indir_dx_reg
632 1.1 christos };
633 1.1 christos
634 1.1 christos enum
635 1.1 christos {
636 1.1 christos FLOATCODE = 1,
637 1.1 christos USE_REG_TABLE,
638 1.1 christos USE_MOD_TABLE,
639 1.1 christos USE_RM_TABLE,
640 1.1 christos USE_PREFIX_TABLE,
641 1.1 christos USE_X86_64_TABLE,
642 1.1 christos USE_3BYTE_TABLE,
643 1.1 christos USE_XOP_8F_TABLE,
644 1.1 christos USE_VEX_C4_TABLE,
645 1.1 christos USE_VEX_C5_TABLE,
646 1.1 christos USE_VEX_LEN_TABLE,
647 1.1.1.1.8.1 tls USE_VEX_W_TABLE,
648 1.1.1.1.8.1 tls USE_EVEX_TABLE
649 1.1 christos };
650 1.1 christos
651 1.1 christos #define FLOAT NULL, { { NULL, FLOATCODE } }
652 1.1 christos
653 1.1 christos #define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
654 1.1 christos #define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
655 1.1 christos #define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
656 1.1 christos #define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
657 1.1 christos #define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
658 1.1 christos #define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
659 1.1 christos #define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
660 1.1 christos #define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
661 1.1 christos #define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
662 1.1 christos #define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
663 1.1 christos #define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
664 1.1 christos #define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
665 1.1.1.1.8.1 tls #define EVEX_TABLE(I) DIS386 (USE_EVEX_TABLE, (I))
666 1.1 christos
667 1.1 christos enum
668 1.1 christos {
669 1.1 christos REG_80 = 0,
670 1.1 christos REG_81,
671 1.1 christos REG_82,
672 1.1 christos REG_8F,
673 1.1 christos REG_C0,
674 1.1 christos REG_C1,
675 1.1 christos REG_C6,
676 1.1 christos REG_C7,
677 1.1 christos REG_D0,
678 1.1 christos REG_D1,
679 1.1 christos REG_D2,
680 1.1 christos REG_D3,
681 1.1 christos REG_F6,
682 1.1 christos REG_F7,
683 1.1 christos REG_FE,
684 1.1 christos REG_FF,
685 1.1 christos REG_0F00,
686 1.1 christos REG_0F01,
687 1.1 christos REG_0F0D,
688 1.1 christos REG_0F18,
689 1.1 christos REG_0F71,
690 1.1 christos REG_0F72,
691 1.1 christos REG_0F73,
692 1.1 christos REG_0FA6,
693 1.1 christos REG_0FA7,
694 1.1 christos REG_0FAE,
695 1.1 christos REG_0FBA,
696 1.1 christos REG_0FC7,
697 1.1 christos REG_VEX_0F71,
698 1.1 christos REG_VEX_0F72,
699 1.1 christos REG_VEX_0F73,
700 1.1 christos REG_VEX_0FAE,
701 1.1 christos REG_VEX_0F38F3,
702 1.1 christos REG_XOP_LWPCB,
703 1.1 christos REG_XOP_LWP,
704 1.1 christos REG_XOP_TBM_01,
705 1.1.1.1.8.1 tls REG_XOP_TBM_02,
706 1.1.1.1.8.1 tls
707 1.1.1.1.8.1 tls REG_EVEX_0F72,
708 1.1.1.1.8.1 tls REG_EVEX_0F73,
709 1.1.1.1.8.1 tls REG_EVEX_0F38C6,
710 1.1.1.1.8.1 tls REG_EVEX_0F38C7
711 1.1 christos };
712 1.1 christos
713 1.1 christos enum
714 1.1 christos {
715 1.1 christos MOD_8D = 0,
716 1.1.1.1.8.1 tls MOD_C6_REG_7,
717 1.1.1.1.8.1 tls MOD_C7_REG_7,
718 1.1.1.1.8.1 tls MOD_FF_REG_3,
719 1.1.1.1.8.1 tls MOD_FF_REG_5,
720 1.1 christos MOD_0F01_REG_0,
721 1.1 christos MOD_0F01_REG_1,
722 1.1 christos MOD_0F01_REG_2,
723 1.1 christos MOD_0F01_REG_3,
724 1.1 christos MOD_0F01_REG_7,
725 1.1 christos MOD_0F12_PREFIX_0,
726 1.1 christos MOD_0F13,
727 1.1 christos MOD_0F16_PREFIX_0,
728 1.1 christos MOD_0F17,
729 1.1 christos MOD_0F18_REG_0,
730 1.1 christos MOD_0F18_REG_1,
731 1.1 christos MOD_0F18_REG_2,
732 1.1 christos MOD_0F18_REG_3,
733 1.1.1.1.8.1 tls MOD_0F18_REG_4,
734 1.1.1.1.8.1 tls MOD_0F18_REG_5,
735 1.1.1.1.8.1 tls MOD_0F18_REG_6,
736 1.1.1.1.8.1 tls MOD_0F18_REG_7,
737 1.1.1.1.8.1 tls MOD_0F1A_PREFIX_0,
738 1.1.1.1.8.1 tls MOD_0F1B_PREFIX_0,
739 1.1.1.1.8.1 tls MOD_0F1B_PREFIX_1,
740 1.1 christos MOD_0F20,
741 1.1 christos MOD_0F21,
742 1.1 christos MOD_0F22,
743 1.1 christos MOD_0F23,
744 1.1 christos MOD_0F24,
745 1.1 christos MOD_0F26,
746 1.1 christos MOD_0F2B_PREFIX_0,
747 1.1 christos MOD_0F2B_PREFIX_1,
748 1.1 christos MOD_0F2B_PREFIX_2,
749 1.1 christos MOD_0F2B_PREFIX_3,
750 1.1 christos MOD_0F51,
751 1.1 christos MOD_0F71_REG_2,
752 1.1 christos MOD_0F71_REG_4,
753 1.1 christos MOD_0F71_REG_6,
754 1.1 christos MOD_0F72_REG_2,
755 1.1 christos MOD_0F72_REG_4,
756 1.1 christos MOD_0F72_REG_6,
757 1.1 christos MOD_0F73_REG_2,
758 1.1 christos MOD_0F73_REG_3,
759 1.1 christos MOD_0F73_REG_6,
760 1.1 christos MOD_0F73_REG_7,
761 1.1 christos MOD_0FAE_REG_0,
762 1.1 christos MOD_0FAE_REG_1,
763 1.1 christos MOD_0FAE_REG_2,
764 1.1 christos MOD_0FAE_REG_3,
765 1.1 christos MOD_0FAE_REG_4,
766 1.1 christos MOD_0FAE_REG_5,
767 1.1 christos MOD_0FAE_REG_6,
768 1.1 christos MOD_0FAE_REG_7,
769 1.1 christos MOD_0FB2,
770 1.1 christos MOD_0FB4,
771 1.1 christos MOD_0FB5,
772 1.1 christos MOD_0FC7_REG_6,
773 1.1 christos MOD_0FC7_REG_7,
774 1.1 christos MOD_0FD7,
775 1.1 christos MOD_0FE7_PREFIX_2,
776 1.1 christos MOD_0FF0_PREFIX_3,
777 1.1 christos MOD_0F382A_PREFIX_2,
778 1.1 christos MOD_62_32BIT,
779 1.1 christos MOD_C4_32BIT,
780 1.1 christos MOD_C5_32BIT,
781 1.1 christos MOD_VEX_0F12_PREFIX_0,
782 1.1 christos MOD_VEX_0F13,
783 1.1 christos MOD_VEX_0F16_PREFIX_0,
784 1.1 christos MOD_VEX_0F17,
785 1.1 christos MOD_VEX_0F2B,
786 1.1 christos MOD_VEX_0F50,
787 1.1 christos MOD_VEX_0F71_REG_2,
788 1.1 christos MOD_VEX_0F71_REG_4,
789 1.1 christos MOD_VEX_0F71_REG_6,
790 1.1 christos MOD_VEX_0F72_REG_2,
791 1.1 christos MOD_VEX_0F72_REG_4,
792 1.1 christos MOD_VEX_0F72_REG_6,
793 1.1 christos MOD_VEX_0F73_REG_2,
794 1.1 christos MOD_VEX_0F73_REG_3,
795 1.1 christos MOD_VEX_0F73_REG_6,
796 1.1 christos MOD_VEX_0F73_REG_7,
797 1.1 christos MOD_VEX_0FAE_REG_2,
798 1.1 christos MOD_VEX_0FAE_REG_3,
799 1.1 christos MOD_VEX_0FD7_PREFIX_2,
800 1.1 christos MOD_VEX_0FE7_PREFIX_2,
801 1.1 christos MOD_VEX_0FF0_PREFIX_3,
802 1.1 christos MOD_VEX_0F381A_PREFIX_2,
803 1.1 christos MOD_VEX_0F382A_PREFIX_2,
804 1.1 christos MOD_VEX_0F382C_PREFIX_2,
805 1.1 christos MOD_VEX_0F382D_PREFIX_2,
806 1.1 christos MOD_VEX_0F382E_PREFIX_2,
807 1.1.1.1.8.1 tls MOD_VEX_0F382F_PREFIX_2,
808 1.1.1.1.8.1 tls MOD_VEX_0F385A_PREFIX_2,
809 1.1.1.1.8.1 tls MOD_VEX_0F388C_PREFIX_2,
810 1.1.1.1.8.1 tls MOD_VEX_0F388E_PREFIX_2,
811 1.1.1.1.8.1 tls
812 1.1.1.1.8.1 tls MOD_EVEX_0F10_PREFIX_1,
813 1.1.1.1.8.1 tls MOD_EVEX_0F10_PREFIX_3,
814 1.1.1.1.8.1 tls MOD_EVEX_0F11_PREFIX_1,
815 1.1.1.1.8.1 tls MOD_EVEX_0F11_PREFIX_3,
816 1.1.1.1.8.1 tls MOD_EVEX_0F12_PREFIX_0,
817 1.1.1.1.8.1 tls MOD_EVEX_0F16_PREFIX_0,
818 1.1.1.1.8.1 tls MOD_EVEX_0F38C6_REG_1,
819 1.1.1.1.8.1 tls MOD_EVEX_0F38C6_REG_2,
820 1.1.1.1.8.1 tls MOD_EVEX_0F38C6_REG_5,
821 1.1.1.1.8.1 tls MOD_EVEX_0F38C6_REG_6,
822 1.1.1.1.8.1 tls MOD_EVEX_0F38C7_REG_1,
823 1.1.1.1.8.1 tls MOD_EVEX_0F38C7_REG_2,
824 1.1.1.1.8.1 tls MOD_EVEX_0F38C7_REG_5,
825 1.1.1.1.8.1 tls MOD_EVEX_0F38C7_REG_6
826 1.1 christos };
827 1.1 christos
828 1.1 christos enum
829 1.1 christos {
830 1.1.1.1.8.1 tls RM_C6_REG_7 = 0,
831 1.1.1.1.8.1 tls RM_C7_REG_7,
832 1.1.1.1.8.1 tls RM_0F01_REG_0,
833 1.1 christos RM_0F01_REG_1,
834 1.1 christos RM_0F01_REG_2,
835 1.1 christos RM_0F01_REG_3,
836 1.1 christos RM_0F01_REG_7,
837 1.1 christos RM_0FAE_REG_5,
838 1.1 christos RM_0FAE_REG_6,
839 1.1 christos RM_0FAE_REG_7
840 1.1 christos };
841 1.1 christos
842 1.1 christos enum
843 1.1 christos {
844 1.1 christos PREFIX_90 = 0,
845 1.1 christos PREFIX_0F10,
846 1.1 christos PREFIX_0F11,
847 1.1 christos PREFIX_0F12,
848 1.1 christos PREFIX_0F16,
849 1.1.1.1.8.1 tls PREFIX_0F1A,
850 1.1.1.1.8.1 tls PREFIX_0F1B,
851 1.1 christos PREFIX_0F2A,
852 1.1 christos PREFIX_0F2B,
853 1.1 christos PREFIX_0F2C,
854 1.1 christos PREFIX_0F2D,
855 1.1 christos PREFIX_0F2E,
856 1.1 christos PREFIX_0F2F,
857 1.1 christos PREFIX_0F51,
858 1.1 christos PREFIX_0F52,
859 1.1 christos PREFIX_0F53,
860 1.1 christos PREFIX_0F58,
861 1.1 christos PREFIX_0F59,
862 1.1 christos PREFIX_0F5A,
863 1.1 christos PREFIX_0F5B,
864 1.1 christos PREFIX_0F5C,
865 1.1 christos PREFIX_0F5D,
866 1.1 christos PREFIX_0F5E,
867 1.1 christos PREFIX_0F5F,
868 1.1 christos PREFIX_0F60,
869 1.1 christos PREFIX_0F61,
870 1.1 christos PREFIX_0F62,
871 1.1 christos PREFIX_0F6C,
872 1.1 christos PREFIX_0F6D,
873 1.1 christos PREFIX_0F6F,
874 1.1 christos PREFIX_0F70,
875 1.1 christos PREFIX_0F73_REG_3,
876 1.1 christos PREFIX_0F73_REG_7,
877 1.1 christos PREFIX_0F78,
878 1.1 christos PREFIX_0F79,
879 1.1 christos PREFIX_0F7C,
880 1.1 christos PREFIX_0F7D,
881 1.1 christos PREFIX_0F7E,
882 1.1 christos PREFIX_0F7F,
883 1.1 christos PREFIX_0FAE_REG_0,
884 1.1 christos PREFIX_0FAE_REG_1,
885 1.1 christos PREFIX_0FAE_REG_2,
886 1.1 christos PREFIX_0FAE_REG_3,
887 1.1 christos PREFIX_0FB8,
888 1.1 christos PREFIX_0FBC,
889 1.1 christos PREFIX_0FBD,
890 1.1 christos PREFIX_0FC2,
891 1.1 christos PREFIX_0FC3,
892 1.1 christos PREFIX_0FC7_REG_6,
893 1.1 christos PREFIX_0FD0,
894 1.1 christos PREFIX_0FD6,
895 1.1 christos PREFIX_0FE6,
896 1.1 christos PREFIX_0FE7,
897 1.1 christos PREFIX_0FF0,
898 1.1 christos PREFIX_0FF7,
899 1.1 christos PREFIX_0F3810,
900 1.1 christos PREFIX_0F3814,
901 1.1 christos PREFIX_0F3815,
902 1.1 christos PREFIX_0F3817,
903 1.1 christos PREFIX_0F3820,
904 1.1 christos PREFIX_0F3821,
905 1.1 christos PREFIX_0F3822,
906 1.1 christos PREFIX_0F3823,
907 1.1 christos PREFIX_0F3824,
908 1.1 christos PREFIX_0F3825,
909 1.1 christos PREFIX_0F3828,
910 1.1 christos PREFIX_0F3829,
911 1.1 christos PREFIX_0F382A,
912 1.1 christos PREFIX_0F382B,
913 1.1 christos PREFIX_0F3830,
914 1.1 christos PREFIX_0F3831,
915 1.1 christos PREFIX_0F3832,
916 1.1 christos PREFIX_0F3833,
917 1.1 christos PREFIX_0F3834,
918 1.1 christos PREFIX_0F3835,
919 1.1 christos PREFIX_0F3837,
920 1.1 christos PREFIX_0F3838,
921 1.1 christos PREFIX_0F3839,
922 1.1 christos PREFIX_0F383A,
923 1.1 christos PREFIX_0F383B,
924 1.1 christos PREFIX_0F383C,
925 1.1 christos PREFIX_0F383D,
926 1.1 christos PREFIX_0F383E,
927 1.1 christos PREFIX_0F383F,
928 1.1 christos PREFIX_0F3840,
929 1.1 christos PREFIX_0F3841,
930 1.1 christos PREFIX_0F3880,
931 1.1 christos PREFIX_0F3881,
932 1.1.1.1.8.1 tls PREFIX_0F3882,
933 1.1.1.1.8.1 tls PREFIX_0F38C8,
934 1.1.1.1.8.1 tls PREFIX_0F38C9,
935 1.1.1.1.8.1 tls PREFIX_0F38CA,
936 1.1.1.1.8.1 tls PREFIX_0F38CB,
937 1.1.1.1.8.1 tls PREFIX_0F38CC,
938 1.1.1.1.8.1 tls PREFIX_0F38CD,
939 1.1 christos PREFIX_0F38DB,
940 1.1 christos PREFIX_0F38DC,
941 1.1 christos PREFIX_0F38DD,
942 1.1 christos PREFIX_0F38DE,
943 1.1 christos PREFIX_0F38DF,
944 1.1 christos PREFIX_0F38F0,
945 1.1 christos PREFIX_0F38F1,
946 1.1.1.1.8.1 tls PREFIX_0F38F6,
947 1.1 christos PREFIX_0F3A08,
948 1.1 christos PREFIX_0F3A09,
949 1.1 christos PREFIX_0F3A0A,
950 1.1 christos PREFIX_0F3A0B,
951 1.1 christos PREFIX_0F3A0C,
952 1.1 christos PREFIX_0F3A0D,
953 1.1 christos PREFIX_0F3A0E,
954 1.1 christos PREFIX_0F3A14,
955 1.1 christos PREFIX_0F3A15,
956 1.1 christos PREFIX_0F3A16,
957 1.1 christos PREFIX_0F3A17,
958 1.1 christos PREFIX_0F3A20,
959 1.1 christos PREFIX_0F3A21,
960 1.1 christos PREFIX_0F3A22,
961 1.1 christos PREFIX_0F3A40,
962 1.1 christos PREFIX_0F3A41,
963 1.1 christos PREFIX_0F3A42,
964 1.1 christos PREFIX_0F3A44,
965 1.1 christos PREFIX_0F3A60,
966 1.1 christos PREFIX_0F3A61,
967 1.1 christos PREFIX_0F3A62,
968 1.1 christos PREFIX_0F3A63,
969 1.1.1.1.8.1 tls PREFIX_0F3ACC,
970 1.1 christos PREFIX_0F3ADF,
971 1.1 christos PREFIX_VEX_0F10,
972 1.1 christos PREFIX_VEX_0F11,
973 1.1 christos PREFIX_VEX_0F12,
974 1.1 christos PREFIX_VEX_0F16,
975 1.1 christos PREFIX_VEX_0F2A,
976 1.1 christos PREFIX_VEX_0F2C,
977 1.1 christos PREFIX_VEX_0F2D,
978 1.1 christos PREFIX_VEX_0F2E,
979 1.1 christos PREFIX_VEX_0F2F,
980 1.1.1.1.8.1 tls PREFIX_VEX_0F41,
981 1.1.1.1.8.1 tls PREFIX_VEX_0F42,
982 1.1.1.1.8.1 tls PREFIX_VEX_0F44,
983 1.1.1.1.8.1 tls PREFIX_VEX_0F45,
984 1.1.1.1.8.1 tls PREFIX_VEX_0F46,
985 1.1.1.1.8.1 tls PREFIX_VEX_0F47,
986 1.1.1.1.8.1 tls PREFIX_VEX_0F4B,
987 1.1 christos PREFIX_VEX_0F51,
988 1.1 christos PREFIX_VEX_0F52,
989 1.1 christos PREFIX_VEX_0F53,
990 1.1 christos PREFIX_VEX_0F58,
991 1.1 christos PREFIX_VEX_0F59,
992 1.1 christos PREFIX_VEX_0F5A,
993 1.1 christos PREFIX_VEX_0F5B,
994 1.1 christos PREFIX_VEX_0F5C,
995 1.1 christos PREFIX_VEX_0F5D,
996 1.1 christos PREFIX_VEX_0F5E,
997 1.1 christos PREFIX_VEX_0F5F,
998 1.1 christos PREFIX_VEX_0F60,
999 1.1 christos PREFIX_VEX_0F61,
1000 1.1 christos PREFIX_VEX_0F62,
1001 1.1 christos PREFIX_VEX_0F63,
1002 1.1 christos PREFIX_VEX_0F64,
1003 1.1 christos PREFIX_VEX_0F65,
1004 1.1 christos PREFIX_VEX_0F66,
1005 1.1 christos PREFIX_VEX_0F67,
1006 1.1 christos PREFIX_VEX_0F68,
1007 1.1 christos PREFIX_VEX_0F69,
1008 1.1 christos PREFIX_VEX_0F6A,
1009 1.1 christos PREFIX_VEX_0F6B,
1010 1.1 christos PREFIX_VEX_0F6C,
1011 1.1 christos PREFIX_VEX_0F6D,
1012 1.1 christos PREFIX_VEX_0F6E,
1013 1.1 christos PREFIX_VEX_0F6F,
1014 1.1 christos PREFIX_VEX_0F70,
1015 1.1 christos PREFIX_VEX_0F71_REG_2,
1016 1.1 christos PREFIX_VEX_0F71_REG_4,
1017 1.1 christos PREFIX_VEX_0F71_REG_6,
1018 1.1 christos PREFIX_VEX_0F72_REG_2,
1019 1.1 christos PREFIX_VEX_0F72_REG_4,
1020 1.1 christos PREFIX_VEX_0F72_REG_6,
1021 1.1 christos PREFIX_VEX_0F73_REG_2,
1022 1.1 christos PREFIX_VEX_0F73_REG_3,
1023 1.1 christos PREFIX_VEX_0F73_REG_6,
1024 1.1 christos PREFIX_VEX_0F73_REG_7,
1025 1.1 christos PREFIX_VEX_0F74,
1026 1.1 christos PREFIX_VEX_0F75,
1027 1.1 christos PREFIX_VEX_0F76,
1028 1.1 christos PREFIX_VEX_0F77,
1029 1.1 christos PREFIX_VEX_0F7C,
1030 1.1 christos PREFIX_VEX_0F7D,
1031 1.1 christos PREFIX_VEX_0F7E,
1032 1.1 christos PREFIX_VEX_0F7F,
1033 1.1.1.1.8.1 tls PREFIX_VEX_0F90,
1034 1.1.1.1.8.1 tls PREFIX_VEX_0F91,
1035 1.1.1.1.8.1 tls PREFIX_VEX_0F92,
1036 1.1.1.1.8.1 tls PREFIX_VEX_0F93,
1037 1.1.1.1.8.1 tls PREFIX_VEX_0F98,
1038 1.1 christos PREFIX_VEX_0FC2,
1039 1.1 christos PREFIX_VEX_0FC4,
1040 1.1 christos PREFIX_VEX_0FC5,
1041 1.1 christos PREFIX_VEX_0FD0,
1042 1.1 christos PREFIX_VEX_0FD1,
1043 1.1 christos PREFIX_VEX_0FD2,
1044 1.1 christos PREFIX_VEX_0FD3,
1045 1.1 christos PREFIX_VEX_0FD4,
1046 1.1 christos PREFIX_VEX_0FD5,
1047 1.1 christos PREFIX_VEX_0FD6,
1048 1.1 christos PREFIX_VEX_0FD7,
1049 1.1 christos PREFIX_VEX_0FD8,
1050 1.1 christos PREFIX_VEX_0FD9,
1051 1.1 christos PREFIX_VEX_0FDA,
1052 1.1 christos PREFIX_VEX_0FDB,
1053 1.1 christos PREFIX_VEX_0FDC,
1054 1.1 christos PREFIX_VEX_0FDD,
1055 1.1 christos PREFIX_VEX_0FDE,
1056 1.1 christos PREFIX_VEX_0FDF,
1057 1.1 christos PREFIX_VEX_0FE0,
1058 1.1 christos PREFIX_VEX_0FE1,
1059 1.1 christos PREFIX_VEX_0FE2,
1060 1.1 christos PREFIX_VEX_0FE3,
1061 1.1 christos PREFIX_VEX_0FE4,
1062 1.1 christos PREFIX_VEX_0FE5,
1063 1.1 christos PREFIX_VEX_0FE6,
1064 1.1 christos PREFIX_VEX_0FE7,
1065 1.1 christos PREFIX_VEX_0FE8,
1066 1.1 christos PREFIX_VEX_0FE9,
1067 1.1 christos PREFIX_VEX_0FEA,
1068 1.1 christos PREFIX_VEX_0FEB,
1069 1.1 christos PREFIX_VEX_0FEC,
1070 1.1 christos PREFIX_VEX_0FED,
1071 1.1 christos PREFIX_VEX_0FEE,
1072 1.1 christos PREFIX_VEX_0FEF,
1073 1.1 christos PREFIX_VEX_0FF0,
1074 1.1 christos PREFIX_VEX_0FF1,
1075 1.1 christos PREFIX_VEX_0FF2,
1076 1.1 christos PREFIX_VEX_0FF3,
1077 1.1 christos PREFIX_VEX_0FF4,
1078 1.1 christos PREFIX_VEX_0FF5,
1079 1.1 christos PREFIX_VEX_0FF6,
1080 1.1 christos PREFIX_VEX_0FF7,
1081 1.1 christos PREFIX_VEX_0FF8,
1082 1.1 christos PREFIX_VEX_0FF9,
1083 1.1 christos PREFIX_VEX_0FFA,
1084 1.1 christos PREFIX_VEX_0FFB,
1085 1.1 christos PREFIX_VEX_0FFC,
1086 1.1 christos PREFIX_VEX_0FFD,
1087 1.1 christos PREFIX_VEX_0FFE,
1088 1.1 christos PREFIX_VEX_0F3800,
1089 1.1 christos PREFIX_VEX_0F3801,
1090 1.1 christos PREFIX_VEX_0F3802,
1091 1.1 christos PREFIX_VEX_0F3803,
1092 1.1 christos PREFIX_VEX_0F3804,
1093 1.1 christos PREFIX_VEX_0F3805,
1094 1.1 christos PREFIX_VEX_0F3806,
1095 1.1 christos PREFIX_VEX_0F3807,
1096 1.1 christos PREFIX_VEX_0F3808,
1097 1.1 christos PREFIX_VEX_0F3809,
1098 1.1 christos PREFIX_VEX_0F380A,
1099 1.1 christos PREFIX_VEX_0F380B,
1100 1.1 christos PREFIX_VEX_0F380C,
1101 1.1 christos PREFIX_VEX_0F380D,
1102 1.1 christos PREFIX_VEX_0F380E,
1103 1.1 christos PREFIX_VEX_0F380F,
1104 1.1 christos PREFIX_VEX_0F3813,
1105 1.1.1.1.8.1 tls PREFIX_VEX_0F3816,
1106 1.1 christos PREFIX_VEX_0F3817,
1107 1.1 christos PREFIX_VEX_0F3818,
1108 1.1 christos PREFIX_VEX_0F3819,
1109 1.1 christos PREFIX_VEX_0F381A,
1110 1.1 christos PREFIX_VEX_0F381C,
1111 1.1 christos PREFIX_VEX_0F381D,
1112 1.1 christos PREFIX_VEX_0F381E,
1113 1.1 christos PREFIX_VEX_0F3820,
1114 1.1 christos PREFIX_VEX_0F3821,
1115 1.1 christos PREFIX_VEX_0F3822,
1116 1.1 christos PREFIX_VEX_0F3823,
1117 1.1 christos PREFIX_VEX_0F3824,
1118 1.1 christos PREFIX_VEX_0F3825,
1119 1.1 christos PREFIX_VEX_0F3828,
1120 1.1 christos PREFIX_VEX_0F3829,
1121 1.1 christos PREFIX_VEX_0F382A,
1122 1.1 christos PREFIX_VEX_0F382B,
1123 1.1 christos PREFIX_VEX_0F382C,
1124 1.1 christos PREFIX_VEX_0F382D,
1125 1.1 christos PREFIX_VEX_0F382E,
1126 1.1 christos PREFIX_VEX_0F382F,
1127 1.1 christos PREFIX_VEX_0F3830,
1128 1.1 christos PREFIX_VEX_0F3831,
1129 1.1 christos PREFIX_VEX_0F3832,
1130 1.1 christos PREFIX_VEX_0F3833,
1131 1.1 christos PREFIX_VEX_0F3834,
1132 1.1 christos PREFIX_VEX_0F3835,
1133 1.1.1.1.8.1 tls PREFIX_VEX_0F3836,
1134 1.1 christos PREFIX_VEX_0F3837,
1135 1.1 christos PREFIX_VEX_0F3838,
1136 1.1 christos PREFIX_VEX_0F3839,
1137 1.1 christos PREFIX_VEX_0F383A,
1138 1.1 christos PREFIX_VEX_0F383B,
1139 1.1 christos PREFIX_VEX_0F383C,
1140 1.1 christos PREFIX_VEX_0F383D,
1141 1.1 christos PREFIX_VEX_0F383E,
1142 1.1 christos PREFIX_VEX_0F383F,
1143 1.1 christos PREFIX_VEX_0F3840,
1144 1.1 christos PREFIX_VEX_0F3841,
1145 1.1.1.1.8.1 tls PREFIX_VEX_0F3845,
1146 1.1.1.1.8.1 tls PREFIX_VEX_0F3846,
1147 1.1.1.1.8.1 tls PREFIX_VEX_0F3847,
1148 1.1.1.1.8.1 tls PREFIX_VEX_0F3858,
1149 1.1.1.1.8.1 tls PREFIX_VEX_0F3859,
1150 1.1.1.1.8.1 tls PREFIX_VEX_0F385A,
1151 1.1.1.1.8.1 tls PREFIX_VEX_0F3878,
1152 1.1.1.1.8.1 tls PREFIX_VEX_0F3879,
1153 1.1.1.1.8.1 tls PREFIX_VEX_0F388C,
1154 1.1.1.1.8.1 tls PREFIX_VEX_0F388E,
1155 1.1.1.1.8.1 tls PREFIX_VEX_0F3890,
1156 1.1.1.1.8.1 tls PREFIX_VEX_0F3891,
1157 1.1.1.1.8.1 tls PREFIX_VEX_0F3892,
1158 1.1.1.1.8.1 tls PREFIX_VEX_0F3893,
1159 1.1 christos PREFIX_VEX_0F3896,
1160 1.1 christos PREFIX_VEX_0F3897,
1161 1.1 christos PREFIX_VEX_0F3898,
1162 1.1 christos PREFIX_VEX_0F3899,
1163 1.1 christos PREFIX_VEX_0F389A,
1164 1.1 christos PREFIX_VEX_0F389B,
1165 1.1 christos PREFIX_VEX_0F389C,
1166 1.1 christos PREFIX_VEX_0F389D,
1167 1.1 christos PREFIX_VEX_0F389E,
1168 1.1 christos PREFIX_VEX_0F389F,
1169 1.1 christos PREFIX_VEX_0F38A6,
1170 1.1 christos PREFIX_VEX_0F38A7,
1171 1.1 christos PREFIX_VEX_0F38A8,
1172 1.1 christos PREFIX_VEX_0F38A9,
1173 1.1 christos PREFIX_VEX_0F38AA,
1174 1.1 christos PREFIX_VEX_0F38AB,
1175 1.1 christos PREFIX_VEX_0F38AC,
1176 1.1 christos PREFIX_VEX_0F38AD,
1177 1.1 christos PREFIX_VEX_0F38AE,
1178 1.1 christos PREFIX_VEX_0F38AF,
1179 1.1 christos PREFIX_VEX_0F38B6,
1180 1.1 christos PREFIX_VEX_0F38B7,
1181 1.1 christos PREFIX_VEX_0F38B8,
1182 1.1 christos PREFIX_VEX_0F38B9,
1183 1.1 christos PREFIX_VEX_0F38BA,
1184 1.1 christos PREFIX_VEX_0F38BB,
1185 1.1 christos PREFIX_VEX_0F38BC,
1186 1.1 christos PREFIX_VEX_0F38BD,
1187 1.1 christos PREFIX_VEX_0F38BE,
1188 1.1 christos PREFIX_VEX_0F38BF,
1189 1.1 christos PREFIX_VEX_0F38DB,
1190 1.1 christos PREFIX_VEX_0F38DC,
1191 1.1 christos PREFIX_VEX_0F38DD,
1192 1.1 christos PREFIX_VEX_0F38DE,
1193 1.1 christos PREFIX_VEX_0F38DF,
1194 1.1 christos PREFIX_VEX_0F38F2,
1195 1.1 christos PREFIX_VEX_0F38F3_REG_1,
1196 1.1 christos PREFIX_VEX_0F38F3_REG_2,
1197 1.1 christos PREFIX_VEX_0F38F3_REG_3,
1198 1.1.1.1.8.1 tls PREFIX_VEX_0F38F5,
1199 1.1.1.1.8.1 tls PREFIX_VEX_0F38F6,
1200 1.1 christos PREFIX_VEX_0F38F7,
1201 1.1.1.1.8.1 tls PREFIX_VEX_0F3A00,
1202 1.1.1.1.8.1 tls PREFIX_VEX_0F3A01,
1203 1.1.1.1.8.1 tls PREFIX_VEX_0F3A02,
1204 1.1 christos PREFIX_VEX_0F3A04,
1205 1.1 christos PREFIX_VEX_0F3A05,
1206 1.1 christos PREFIX_VEX_0F3A06,
1207 1.1 christos PREFIX_VEX_0F3A08,
1208 1.1 christos PREFIX_VEX_0F3A09,
1209 1.1 christos PREFIX_VEX_0F3A0A,
1210 1.1 christos PREFIX_VEX_0F3A0B,
1211 1.1 christos PREFIX_VEX_0F3A0C,
1212 1.1 christos PREFIX_VEX_0F3A0D,
1213 1.1 christos PREFIX_VEX_0F3A0E,
1214 1.1 christos PREFIX_VEX_0F3A0F,
1215 1.1 christos PREFIX_VEX_0F3A14,
1216 1.1 christos PREFIX_VEX_0F3A15,
1217 1.1 christos PREFIX_VEX_0F3A16,
1218 1.1 christos PREFIX_VEX_0F3A17,
1219 1.1 christos PREFIX_VEX_0F3A18,
1220 1.1 christos PREFIX_VEX_0F3A19,
1221 1.1 christos PREFIX_VEX_0F3A1D,
1222 1.1 christos PREFIX_VEX_0F3A20,
1223 1.1 christos PREFIX_VEX_0F3A21,
1224 1.1 christos PREFIX_VEX_0F3A22,
1225 1.1.1.1.8.1 tls PREFIX_VEX_0F3A30,
1226 1.1.1.1.8.1 tls PREFIX_VEX_0F3A32,
1227 1.1.1.1.8.1 tls PREFIX_VEX_0F3A38,
1228 1.1.1.1.8.1 tls PREFIX_VEX_0F3A39,
1229 1.1 christos PREFIX_VEX_0F3A40,
1230 1.1 christos PREFIX_VEX_0F3A41,
1231 1.1 christos PREFIX_VEX_0F3A42,
1232 1.1 christos PREFIX_VEX_0F3A44,
1233 1.1.1.1.8.1 tls PREFIX_VEX_0F3A46,
1234 1.1 christos PREFIX_VEX_0F3A48,
1235 1.1 christos PREFIX_VEX_0F3A49,
1236 1.1 christos PREFIX_VEX_0F3A4A,
1237 1.1 christos PREFIX_VEX_0F3A4B,
1238 1.1 christos PREFIX_VEX_0F3A4C,
1239 1.1 christos PREFIX_VEX_0F3A5C,
1240 1.1 christos PREFIX_VEX_0F3A5D,
1241 1.1 christos PREFIX_VEX_0F3A5E,
1242 1.1 christos PREFIX_VEX_0F3A5F,
1243 1.1 christos PREFIX_VEX_0F3A60,
1244 1.1 christos PREFIX_VEX_0F3A61,
1245 1.1 christos PREFIX_VEX_0F3A62,
1246 1.1 christos PREFIX_VEX_0F3A63,
1247 1.1 christos PREFIX_VEX_0F3A68,
1248 1.1 christos PREFIX_VEX_0F3A69,
1249 1.1 christos PREFIX_VEX_0F3A6A,
1250 1.1 christos PREFIX_VEX_0F3A6B,
1251 1.1 christos PREFIX_VEX_0F3A6C,
1252 1.1 christos PREFIX_VEX_0F3A6D,
1253 1.1 christos PREFIX_VEX_0F3A6E,
1254 1.1 christos PREFIX_VEX_0F3A6F,
1255 1.1 christos PREFIX_VEX_0F3A78,
1256 1.1 christos PREFIX_VEX_0F3A79,
1257 1.1 christos PREFIX_VEX_0F3A7A,
1258 1.1 christos PREFIX_VEX_0F3A7B,
1259 1.1 christos PREFIX_VEX_0F3A7C,
1260 1.1 christos PREFIX_VEX_0F3A7D,
1261 1.1 christos PREFIX_VEX_0F3A7E,
1262 1.1 christos PREFIX_VEX_0F3A7F,
1263 1.1.1.1.8.1 tls PREFIX_VEX_0F3ADF,
1264 1.1.1.1.8.1 tls PREFIX_VEX_0F3AF0,
1265 1.1.1.1.8.1 tls
1266 1.1.1.1.8.1 tls PREFIX_EVEX_0F10,
1267 1.1.1.1.8.1 tls PREFIX_EVEX_0F11,
1268 1.1.1.1.8.1 tls PREFIX_EVEX_0F12,
1269 1.1.1.1.8.1 tls PREFIX_EVEX_0F13,
1270 1.1.1.1.8.1 tls PREFIX_EVEX_0F14,
1271 1.1.1.1.8.1 tls PREFIX_EVEX_0F15,
1272 1.1.1.1.8.1 tls PREFIX_EVEX_0F16,
1273 1.1.1.1.8.1 tls PREFIX_EVEX_0F17,
1274 1.1.1.1.8.1 tls PREFIX_EVEX_0F28,
1275 1.1.1.1.8.1 tls PREFIX_EVEX_0F29,
1276 1.1.1.1.8.1 tls PREFIX_EVEX_0F2A,
1277 1.1.1.1.8.1 tls PREFIX_EVEX_0F2B,
1278 1.1.1.1.8.1 tls PREFIX_EVEX_0F2C,
1279 1.1.1.1.8.1 tls PREFIX_EVEX_0F2D,
1280 1.1.1.1.8.1 tls PREFIX_EVEX_0F2E,
1281 1.1.1.1.8.1 tls PREFIX_EVEX_0F2F,
1282 1.1.1.1.8.1 tls PREFIX_EVEX_0F51,
1283 1.1.1.1.8.1 tls PREFIX_EVEX_0F58,
1284 1.1.1.1.8.1 tls PREFIX_EVEX_0F59,
1285 1.1.1.1.8.1 tls PREFIX_EVEX_0F5A,
1286 1.1.1.1.8.1 tls PREFIX_EVEX_0F5B,
1287 1.1.1.1.8.1 tls PREFIX_EVEX_0F5C,
1288 1.1.1.1.8.1 tls PREFIX_EVEX_0F5D,
1289 1.1.1.1.8.1 tls PREFIX_EVEX_0F5E,
1290 1.1.1.1.8.1 tls PREFIX_EVEX_0F5F,
1291 1.1.1.1.8.1 tls PREFIX_EVEX_0F62,
1292 1.1.1.1.8.1 tls PREFIX_EVEX_0F66,
1293 1.1.1.1.8.1 tls PREFIX_EVEX_0F6A,
1294 1.1.1.1.8.1 tls PREFIX_EVEX_0F6C,
1295 1.1.1.1.8.1 tls PREFIX_EVEX_0F6D,
1296 1.1.1.1.8.1 tls PREFIX_EVEX_0F6E,
1297 1.1.1.1.8.1 tls PREFIX_EVEX_0F6F,
1298 1.1.1.1.8.1 tls PREFIX_EVEX_0F70,
1299 1.1.1.1.8.1 tls PREFIX_EVEX_0F72_REG_0,
1300 1.1.1.1.8.1 tls PREFIX_EVEX_0F72_REG_1,
1301 1.1.1.1.8.1 tls PREFIX_EVEX_0F72_REG_2,
1302 1.1.1.1.8.1 tls PREFIX_EVEX_0F72_REG_4,
1303 1.1.1.1.8.1 tls PREFIX_EVEX_0F72_REG_6,
1304 1.1.1.1.8.1 tls PREFIX_EVEX_0F73_REG_2,
1305 1.1.1.1.8.1 tls PREFIX_EVEX_0F73_REG_6,
1306 1.1.1.1.8.1 tls PREFIX_EVEX_0F76,
1307 1.1.1.1.8.1 tls PREFIX_EVEX_0F78,
1308 1.1.1.1.8.1 tls PREFIX_EVEX_0F79,
1309 1.1.1.1.8.1 tls PREFIX_EVEX_0F7A,
1310 1.1.1.1.8.1 tls PREFIX_EVEX_0F7B,
1311 1.1.1.1.8.1 tls PREFIX_EVEX_0F7E,
1312 1.1.1.1.8.1 tls PREFIX_EVEX_0F7F,
1313 1.1.1.1.8.1 tls PREFIX_EVEX_0FC2,
1314 1.1.1.1.8.1 tls PREFIX_EVEX_0FC6,
1315 1.1.1.1.8.1 tls PREFIX_EVEX_0FD2,
1316 1.1.1.1.8.1 tls PREFIX_EVEX_0FD3,
1317 1.1.1.1.8.1 tls PREFIX_EVEX_0FD4,
1318 1.1.1.1.8.1 tls PREFIX_EVEX_0FD6,
1319 1.1.1.1.8.1 tls PREFIX_EVEX_0FDB,
1320 1.1.1.1.8.1 tls PREFIX_EVEX_0FDF,
1321 1.1.1.1.8.1 tls PREFIX_EVEX_0FE2,
1322 1.1.1.1.8.1 tls PREFIX_EVEX_0FE6,
1323 1.1.1.1.8.1 tls PREFIX_EVEX_0FE7,
1324 1.1.1.1.8.1 tls PREFIX_EVEX_0FEB,
1325 1.1.1.1.8.1 tls PREFIX_EVEX_0FEF,
1326 1.1.1.1.8.1 tls PREFIX_EVEX_0FF2,
1327 1.1.1.1.8.1 tls PREFIX_EVEX_0FF3,
1328 1.1.1.1.8.1 tls PREFIX_EVEX_0FF4,
1329 1.1.1.1.8.1 tls PREFIX_EVEX_0FFA,
1330 1.1.1.1.8.1 tls PREFIX_EVEX_0FFB,
1331 1.1.1.1.8.1 tls PREFIX_EVEX_0FFE,
1332 1.1.1.1.8.1 tls PREFIX_EVEX_0F380C,
1333 1.1.1.1.8.1 tls PREFIX_EVEX_0F380D,
1334 1.1.1.1.8.1 tls PREFIX_EVEX_0F3811,
1335 1.1.1.1.8.1 tls PREFIX_EVEX_0F3812,
1336 1.1.1.1.8.1 tls PREFIX_EVEX_0F3813,
1337 1.1.1.1.8.1 tls PREFIX_EVEX_0F3814,
1338 1.1.1.1.8.1 tls PREFIX_EVEX_0F3815,
1339 1.1.1.1.8.1 tls PREFIX_EVEX_0F3816,
1340 1.1.1.1.8.1 tls PREFIX_EVEX_0F3818,
1341 1.1.1.1.8.1 tls PREFIX_EVEX_0F3819,
1342 1.1.1.1.8.1 tls PREFIX_EVEX_0F381A,
1343 1.1.1.1.8.1 tls PREFIX_EVEX_0F381B,
1344 1.1.1.1.8.1 tls PREFIX_EVEX_0F381E,
1345 1.1.1.1.8.1 tls PREFIX_EVEX_0F381F,
1346 1.1.1.1.8.1 tls PREFIX_EVEX_0F3821,
1347 1.1.1.1.8.1 tls PREFIX_EVEX_0F3822,
1348 1.1.1.1.8.1 tls PREFIX_EVEX_0F3823,
1349 1.1.1.1.8.1 tls PREFIX_EVEX_0F3824,
1350 1.1.1.1.8.1 tls PREFIX_EVEX_0F3825,
1351 1.1.1.1.8.1 tls PREFIX_EVEX_0F3827,
1352 1.1.1.1.8.1 tls PREFIX_EVEX_0F3828,
1353 1.1.1.1.8.1 tls PREFIX_EVEX_0F3829,
1354 1.1.1.1.8.1 tls PREFIX_EVEX_0F382A,
1355 1.1.1.1.8.1 tls PREFIX_EVEX_0F382C,
1356 1.1.1.1.8.1 tls PREFIX_EVEX_0F382D,
1357 1.1.1.1.8.1 tls PREFIX_EVEX_0F3831,
1358 1.1.1.1.8.1 tls PREFIX_EVEX_0F3832,
1359 1.1.1.1.8.1 tls PREFIX_EVEX_0F3833,
1360 1.1.1.1.8.1 tls PREFIX_EVEX_0F3834,
1361 1.1.1.1.8.1 tls PREFIX_EVEX_0F3835,
1362 1.1.1.1.8.1 tls PREFIX_EVEX_0F3836,
1363 1.1.1.1.8.1 tls PREFIX_EVEX_0F3837,
1364 1.1.1.1.8.1 tls PREFIX_EVEX_0F3839,
1365 1.1.1.1.8.1 tls PREFIX_EVEX_0F383A,
1366 1.1.1.1.8.1 tls PREFIX_EVEX_0F383B,
1367 1.1.1.1.8.1 tls PREFIX_EVEX_0F383D,
1368 1.1.1.1.8.1 tls PREFIX_EVEX_0F383F,
1369 1.1.1.1.8.1 tls PREFIX_EVEX_0F3840,
1370 1.1.1.1.8.1 tls PREFIX_EVEX_0F3842,
1371 1.1.1.1.8.1 tls PREFIX_EVEX_0F3843,
1372 1.1.1.1.8.1 tls PREFIX_EVEX_0F3844,
1373 1.1.1.1.8.1 tls PREFIX_EVEX_0F3845,
1374 1.1.1.1.8.1 tls PREFIX_EVEX_0F3846,
1375 1.1.1.1.8.1 tls PREFIX_EVEX_0F3847,
1376 1.1.1.1.8.1 tls PREFIX_EVEX_0F384C,
1377 1.1.1.1.8.1 tls PREFIX_EVEX_0F384D,
1378 1.1.1.1.8.1 tls PREFIX_EVEX_0F384E,
1379 1.1.1.1.8.1 tls PREFIX_EVEX_0F384F,
1380 1.1.1.1.8.1 tls PREFIX_EVEX_0F3858,
1381 1.1.1.1.8.1 tls PREFIX_EVEX_0F3859,
1382 1.1.1.1.8.1 tls PREFIX_EVEX_0F385A,
1383 1.1.1.1.8.1 tls PREFIX_EVEX_0F385B,
1384 1.1.1.1.8.1 tls PREFIX_EVEX_0F3864,
1385 1.1.1.1.8.1 tls PREFIX_EVEX_0F3865,
1386 1.1.1.1.8.1 tls PREFIX_EVEX_0F3876,
1387 1.1.1.1.8.1 tls PREFIX_EVEX_0F3877,
1388 1.1.1.1.8.1 tls PREFIX_EVEX_0F387C,
1389 1.1.1.1.8.1 tls PREFIX_EVEX_0F387E,
1390 1.1.1.1.8.1 tls PREFIX_EVEX_0F387F,
1391 1.1.1.1.8.1 tls PREFIX_EVEX_0F3888,
1392 1.1.1.1.8.1 tls PREFIX_EVEX_0F3889,
1393 1.1.1.1.8.1 tls PREFIX_EVEX_0F388A,
1394 1.1.1.1.8.1 tls PREFIX_EVEX_0F388B,
1395 1.1.1.1.8.1 tls PREFIX_EVEX_0F3890,
1396 1.1.1.1.8.1 tls PREFIX_EVEX_0F3891,
1397 1.1.1.1.8.1 tls PREFIX_EVEX_0F3892,
1398 1.1.1.1.8.1 tls PREFIX_EVEX_0F3893,
1399 1.1.1.1.8.1 tls PREFIX_EVEX_0F3896,
1400 1.1.1.1.8.1 tls PREFIX_EVEX_0F3897,
1401 1.1.1.1.8.1 tls PREFIX_EVEX_0F3898,
1402 1.1.1.1.8.1 tls PREFIX_EVEX_0F3899,
1403 1.1.1.1.8.1 tls PREFIX_EVEX_0F389A,
1404 1.1.1.1.8.1 tls PREFIX_EVEX_0F389B,
1405 1.1.1.1.8.1 tls PREFIX_EVEX_0F389C,
1406 1.1.1.1.8.1 tls PREFIX_EVEX_0F389D,
1407 1.1.1.1.8.1 tls PREFIX_EVEX_0F389E,
1408 1.1.1.1.8.1 tls PREFIX_EVEX_0F389F,
1409 1.1.1.1.8.1 tls PREFIX_EVEX_0F38A0,
1410 1.1.1.1.8.1 tls PREFIX_EVEX_0F38A1,
1411 1.1.1.1.8.1 tls PREFIX_EVEX_0F38A2,
1412 1.1.1.1.8.1 tls PREFIX_EVEX_0F38A3,
1413 1.1.1.1.8.1 tls PREFIX_EVEX_0F38A6,
1414 1.1.1.1.8.1 tls PREFIX_EVEX_0F38A7,
1415 1.1.1.1.8.1 tls PREFIX_EVEX_0F38A8,
1416 1.1.1.1.8.1 tls PREFIX_EVEX_0F38A9,
1417 1.1.1.1.8.1 tls PREFIX_EVEX_0F38AA,
1418 1.1.1.1.8.1 tls PREFIX_EVEX_0F38AB,
1419 1.1.1.1.8.1 tls PREFIX_EVEX_0F38AC,
1420 1.1.1.1.8.1 tls PREFIX_EVEX_0F38AD,
1421 1.1.1.1.8.1 tls PREFIX_EVEX_0F38AE,
1422 1.1.1.1.8.1 tls PREFIX_EVEX_0F38AF,
1423 1.1.1.1.8.1 tls PREFIX_EVEX_0F38B6,
1424 1.1.1.1.8.1 tls PREFIX_EVEX_0F38B7,
1425 1.1.1.1.8.1 tls PREFIX_EVEX_0F38B8,
1426 1.1.1.1.8.1 tls PREFIX_EVEX_0F38B9,
1427 1.1.1.1.8.1 tls PREFIX_EVEX_0F38BA,
1428 1.1.1.1.8.1 tls PREFIX_EVEX_0F38BB,
1429 1.1.1.1.8.1 tls PREFIX_EVEX_0F38BC,
1430 1.1.1.1.8.1 tls PREFIX_EVEX_0F38BD,
1431 1.1.1.1.8.1 tls PREFIX_EVEX_0F38BE,
1432 1.1.1.1.8.1 tls PREFIX_EVEX_0F38BF,
1433 1.1.1.1.8.1 tls PREFIX_EVEX_0F38C4,
1434 1.1.1.1.8.1 tls PREFIX_EVEX_0F38C6_REG_1,
1435 1.1.1.1.8.1 tls PREFIX_EVEX_0F38C6_REG_2,
1436 1.1.1.1.8.1 tls PREFIX_EVEX_0F38C6_REG_5,
1437 1.1.1.1.8.1 tls PREFIX_EVEX_0F38C6_REG_6,
1438 1.1.1.1.8.1 tls PREFIX_EVEX_0F38C7_REG_1,
1439 1.1.1.1.8.1 tls PREFIX_EVEX_0F38C7_REG_2,
1440 1.1.1.1.8.1 tls PREFIX_EVEX_0F38C7_REG_5,
1441 1.1.1.1.8.1 tls PREFIX_EVEX_0F38C7_REG_6,
1442 1.1.1.1.8.1 tls PREFIX_EVEX_0F38C8,
1443 1.1.1.1.8.1 tls PREFIX_EVEX_0F38CA,
1444 1.1.1.1.8.1 tls PREFIX_EVEX_0F38CB,
1445 1.1.1.1.8.1 tls PREFIX_EVEX_0F38CC,
1446 1.1.1.1.8.1 tls PREFIX_EVEX_0F38CD,
1447 1.1.1.1.8.1 tls
1448 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A00,
1449 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A01,
1450 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A03,
1451 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A04,
1452 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A05,
1453 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A08,
1454 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A09,
1455 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A0A,
1456 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A0B,
1457 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A17,
1458 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A18,
1459 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A19,
1460 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A1A,
1461 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A1B,
1462 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A1D,
1463 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A1E,
1464 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A1F,
1465 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A21,
1466 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A23,
1467 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A25,
1468 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A26,
1469 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A27,
1470 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A38,
1471 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A39,
1472 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A3A,
1473 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A3B,
1474 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A43,
1475 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A54,
1476 1.1.1.1.8.1 tls PREFIX_EVEX_0F3A55,
1477 1.1 christos };
1478 1.1 christos
1479 1.1 christos enum
1480 1.1 christos {
1481 1.1 christos X86_64_06 = 0,
1482 1.1 christos X86_64_07,
1483 1.1 christos X86_64_0D,
1484 1.1 christos X86_64_16,
1485 1.1 christos X86_64_17,
1486 1.1 christos X86_64_1E,
1487 1.1 christos X86_64_1F,
1488 1.1 christos X86_64_27,
1489 1.1 christos X86_64_2F,
1490 1.1 christos X86_64_37,
1491 1.1 christos X86_64_3F,
1492 1.1 christos X86_64_60,
1493 1.1 christos X86_64_61,
1494 1.1 christos X86_64_62,
1495 1.1 christos X86_64_63,
1496 1.1 christos X86_64_6D,
1497 1.1 christos X86_64_6F,
1498 1.1 christos X86_64_9A,
1499 1.1 christos X86_64_C4,
1500 1.1 christos X86_64_C5,
1501 1.1 christos X86_64_CE,
1502 1.1 christos X86_64_D4,
1503 1.1 christos X86_64_D5,
1504 1.1 christos X86_64_EA,
1505 1.1 christos X86_64_0F01_REG_0,
1506 1.1 christos X86_64_0F01_REG_1,
1507 1.1 christos X86_64_0F01_REG_2,
1508 1.1 christos X86_64_0F01_REG_3
1509 1.1 christos };
1510 1.1 christos
1511 1.1 christos enum
1512 1.1 christos {
1513 1.1 christos THREE_BYTE_0F38 = 0,
1514 1.1 christos THREE_BYTE_0F3A,
1515 1.1 christos THREE_BYTE_0F7A
1516 1.1 christos };
1517 1.1 christos
1518 1.1 christos enum
1519 1.1 christos {
1520 1.1 christos XOP_08 = 0,
1521 1.1 christos XOP_09,
1522 1.1 christos XOP_0A
1523 1.1 christos };
1524 1.1 christos
1525 1.1 christos enum
1526 1.1 christos {
1527 1.1 christos VEX_0F = 0,
1528 1.1 christos VEX_0F38,
1529 1.1 christos VEX_0F3A
1530 1.1 christos };
1531 1.1 christos
1532 1.1 christos enum
1533 1.1 christos {
1534 1.1.1.1.8.1 tls EVEX_0F = 0,
1535 1.1.1.1.8.1 tls EVEX_0F38,
1536 1.1.1.1.8.1 tls EVEX_0F3A
1537 1.1.1.1.8.1 tls };
1538 1.1.1.1.8.1 tls
1539 1.1.1.1.8.1 tls enum
1540 1.1.1.1.8.1 tls {
1541 1.1 christos VEX_LEN_0F10_P_1 = 0,
1542 1.1 christos VEX_LEN_0F10_P_3,
1543 1.1 christos VEX_LEN_0F11_P_1,
1544 1.1 christos VEX_LEN_0F11_P_3,
1545 1.1 christos VEX_LEN_0F12_P_0_M_0,
1546 1.1 christos VEX_LEN_0F12_P_0_M_1,
1547 1.1 christos VEX_LEN_0F12_P_2,
1548 1.1 christos VEX_LEN_0F13_M_0,
1549 1.1 christos VEX_LEN_0F16_P_0_M_0,
1550 1.1 christos VEX_LEN_0F16_P_0_M_1,
1551 1.1 christos VEX_LEN_0F16_P_2,
1552 1.1 christos VEX_LEN_0F17_M_0,
1553 1.1 christos VEX_LEN_0F2A_P_1,
1554 1.1 christos VEX_LEN_0F2A_P_3,
1555 1.1 christos VEX_LEN_0F2C_P_1,
1556 1.1 christos VEX_LEN_0F2C_P_3,
1557 1.1 christos VEX_LEN_0F2D_P_1,
1558 1.1 christos VEX_LEN_0F2D_P_3,
1559 1.1 christos VEX_LEN_0F2E_P_0,
1560 1.1 christos VEX_LEN_0F2E_P_2,
1561 1.1 christos VEX_LEN_0F2F_P_0,
1562 1.1 christos VEX_LEN_0F2F_P_2,
1563 1.1.1.1.8.1 tls VEX_LEN_0F41_P_0,
1564 1.1.1.1.8.1 tls VEX_LEN_0F42_P_0,
1565 1.1.1.1.8.1 tls VEX_LEN_0F44_P_0,
1566 1.1.1.1.8.1 tls VEX_LEN_0F45_P_0,
1567 1.1.1.1.8.1 tls VEX_LEN_0F46_P_0,
1568 1.1.1.1.8.1 tls VEX_LEN_0F47_P_0,
1569 1.1.1.1.8.1 tls VEX_LEN_0F4B_P_2,
1570 1.1 christos VEX_LEN_0F51_P_1,
1571 1.1 christos VEX_LEN_0F51_P_3,
1572 1.1 christos VEX_LEN_0F52_P_1,
1573 1.1 christos VEX_LEN_0F53_P_1,
1574 1.1 christos VEX_LEN_0F58_P_1,
1575 1.1 christos VEX_LEN_0F58_P_3,
1576 1.1 christos VEX_LEN_0F59_P_1,
1577 1.1 christos VEX_LEN_0F59_P_3,
1578 1.1 christos VEX_LEN_0F5A_P_1,
1579 1.1 christos VEX_LEN_0F5A_P_3,
1580 1.1 christos VEX_LEN_0F5C_P_1,
1581 1.1 christos VEX_LEN_0F5C_P_3,
1582 1.1 christos VEX_LEN_0F5D_P_1,
1583 1.1 christos VEX_LEN_0F5D_P_3,
1584 1.1 christos VEX_LEN_0F5E_P_1,
1585 1.1 christos VEX_LEN_0F5E_P_3,
1586 1.1 christos VEX_LEN_0F5F_P_1,
1587 1.1 christos VEX_LEN_0F5F_P_3,
1588 1.1 christos VEX_LEN_0F6E_P_2,
1589 1.1 christos VEX_LEN_0F7E_P_1,
1590 1.1 christos VEX_LEN_0F7E_P_2,
1591 1.1.1.1.8.1 tls VEX_LEN_0F90_P_0,
1592 1.1.1.1.8.1 tls VEX_LEN_0F91_P_0,
1593 1.1.1.1.8.1 tls VEX_LEN_0F92_P_0,
1594 1.1.1.1.8.1 tls VEX_LEN_0F93_P_0,
1595 1.1.1.1.8.1 tls VEX_LEN_0F98_P_0,
1596 1.1 christos VEX_LEN_0FAE_R_2_M_0,
1597 1.1 christos VEX_LEN_0FAE_R_3_M_0,
1598 1.1 christos VEX_LEN_0FC2_P_1,
1599 1.1 christos VEX_LEN_0FC2_P_3,
1600 1.1 christos VEX_LEN_0FC4_P_2,
1601 1.1 christos VEX_LEN_0FC5_P_2,
1602 1.1 christos VEX_LEN_0FD6_P_2,
1603 1.1 christos VEX_LEN_0FF7_P_2,
1604 1.1.1.1.8.1 tls VEX_LEN_0F3816_P_2,
1605 1.1.1.1.8.1 tls VEX_LEN_0F3819_P_2,
1606 1.1 christos VEX_LEN_0F381A_P_2_M_0,
1607 1.1.1.1.8.1 tls VEX_LEN_0F3836_P_2,
1608 1.1 christos VEX_LEN_0F3841_P_2,
1609 1.1.1.1.8.1 tls VEX_LEN_0F385A_P_2_M_0,
1610 1.1 christos VEX_LEN_0F38DB_P_2,
1611 1.1 christos VEX_LEN_0F38DC_P_2,
1612 1.1 christos VEX_LEN_0F38DD_P_2,
1613 1.1 christos VEX_LEN_0F38DE_P_2,
1614 1.1 christos VEX_LEN_0F38DF_P_2,
1615 1.1 christos VEX_LEN_0F38F2_P_0,
1616 1.1 christos VEX_LEN_0F38F3_R_1_P_0,
1617 1.1 christos VEX_LEN_0F38F3_R_2_P_0,
1618 1.1 christos VEX_LEN_0F38F3_R_3_P_0,
1619 1.1.1.1.8.1 tls VEX_LEN_0F38F5_P_0,
1620 1.1.1.1.8.1 tls VEX_LEN_0F38F5_P_1,
1621 1.1.1.1.8.1 tls VEX_LEN_0F38F5_P_3,
1622 1.1.1.1.8.1 tls VEX_LEN_0F38F6_P_3,
1623 1.1 christos VEX_LEN_0F38F7_P_0,
1624 1.1.1.1.8.1 tls VEX_LEN_0F38F7_P_1,
1625 1.1.1.1.8.1 tls VEX_LEN_0F38F7_P_2,
1626 1.1.1.1.8.1 tls VEX_LEN_0F38F7_P_3,
1627 1.1.1.1.8.1 tls VEX_LEN_0F3A00_P_2,
1628 1.1.1.1.8.1 tls VEX_LEN_0F3A01_P_2,
1629 1.1 christos VEX_LEN_0F3A06_P_2,
1630 1.1 christos VEX_LEN_0F3A0A_P_2,
1631 1.1 christos VEX_LEN_0F3A0B_P_2,
1632 1.1 christos VEX_LEN_0F3A14_P_2,
1633 1.1 christos VEX_LEN_0F3A15_P_2,
1634 1.1 christos VEX_LEN_0F3A16_P_2,
1635 1.1 christos VEX_LEN_0F3A17_P_2,
1636 1.1 christos VEX_LEN_0F3A18_P_2,
1637 1.1 christos VEX_LEN_0F3A19_P_2,
1638 1.1 christos VEX_LEN_0F3A20_P_2,
1639 1.1 christos VEX_LEN_0F3A21_P_2,
1640 1.1 christos VEX_LEN_0F3A22_P_2,
1641 1.1.1.1.8.1 tls VEX_LEN_0F3A30_P_2,
1642 1.1.1.1.8.1 tls VEX_LEN_0F3A32_P_2,
1643 1.1.1.1.8.1 tls VEX_LEN_0F3A38_P_2,
1644 1.1.1.1.8.1 tls VEX_LEN_0F3A39_P_2,
1645 1.1 christos VEX_LEN_0F3A41_P_2,
1646 1.1 christos VEX_LEN_0F3A44_P_2,
1647 1.1.1.1.8.1 tls VEX_LEN_0F3A46_P_2,
1648 1.1 christos VEX_LEN_0F3A60_P_2,
1649 1.1 christos VEX_LEN_0F3A61_P_2,
1650 1.1 christos VEX_LEN_0F3A62_P_2,
1651 1.1 christos VEX_LEN_0F3A63_P_2,
1652 1.1 christos VEX_LEN_0F3A6A_P_2,
1653 1.1 christos VEX_LEN_0F3A6B_P_2,
1654 1.1 christos VEX_LEN_0F3A6E_P_2,
1655 1.1 christos VEX_LEN_0F3A6F_P_2,
1656 1.1 christos VEX_LEN_0F3A7A_P_2,
1657 1.1 christos VEX_LEN_0F3A7B_P_2,
1658 1.1 christos VEX_LEN_0F3A7E_P_2,
1659 1.1 christos VEX_LEN_0F3A7F_P_2,
1660 1.1 christos VEX_LEN_0F3ADF_P_2,
1661 1.1.1.1.8.1 tls VEX_LEN_0F3AF0_P_3,
1662 1.1.1.1.8.1 tls VEX_LEN_0FXOP_08_CC,
1663 1.1.1.1.8.1 tls VEX_LEN_0FXOP_08_CD,
1664 1.1.1.1.8.1 tls VEX_LEN_0FXOP_08_CE,
1665 1.1.1.1.8.1 tls VEX_LEN_0FXOP_08_CF,
1666 1.1.1.1.8.1 tls VEX_LEN_0FXOP_08_EC,
1667 1.1.1.1.8.1 tls VEX_LEN_0FXOP_08_ED,
1668 1.1.1.1.8.1 tls VEX_LEN_0FXOP_08_EE,
1669 1.1.1.1.8.1 tls VEX_LEN_0FXOP_08_EF,
1670 1.1 christos VEX_LEN_0FXOP_09_80,
1671 1.1 christos VEX_LEN_0FXOP_09_81
1672 1.1 christos };
1673 1.1 christos
1674 1.1 christos enum
1675 1.1 christos {
1676 1.1 christos VEX_W_0F10_P_0 = 0,
1677 1.1 christos VEX_W_0F10_P_1,
1678 1.1 christos VEX_W_0F10_P_2,
1679 1.1 christos VEX_W_0F10_P_3,
1680 1.1 christos VEX_W_0F11_P_0,
1681 1.1 christos VEX_W_0F11_P_1,
1682 1.1 christos VEX_W_0F11_P_2,
1683 1.1 christos VEX_W_0F11_P_3,
1684 1.1 christos VEX_W_0F12_P_0_M_0,
1685 1.1 christos VEX_W_0F12_P_0_M_1,
1686 1.1 christos VEX_W_0F12_P_1,
1687 1.1 christos VEX_W_0F12_P_2,
1688 1.1 christos VEX_W_0F12_P_3,
1689 1.1 christos VEX_W_0F13_M_0,
1690 1.1 christos VEX_W_0F14,
1691 1.1 christos VEX_W_0F15,
1692 1.1 christos VEX_W_0F16_P_0_M_0,
1693 1.1 christos VEX_W_0F16_P_0_M_1,
1694 1.1 christos VEX_W_0F16_P_1,
1695 1.1 christos VEX_W_0F16_P_2,
1696 1.1 christos VEX_W_0F17_M_0,
1697 1.1 christos VEX_W_0F28,
1698 1.1 christos VEX_W_0F29,
1699 1.1 christos VEX_W_0F2B_M_0,
1700 1.1 christos VEX_W_0F2E_P_0,
1701 1.1 christos VEX_W_0F2E_P_2,
1702 1.1 christos VEX_W_0F2F_P_0,
1703 1.1 christos VEX_W_0F2F_P_2,
1704 1.1.1.1.8.1 tls VEX_W_0F41_P_0_LEN_1,
1705 1.1.1.1.8.1 tls VEX_W_0F42_P_0_LEN_1,
1706 1.1.1.1.8.1 tls VEX_W_0F44_P_0_LEN_0,
1707 1.1.1.1.8.1 tls VEX_W_0F45_P_0_LEN_1,
1708 1.1.1.1.8.1 tls VEX_W_0F46_P_0_LEN_1,
1709 1.1.1.1.8.1 tls VEX_W_0F47_P_0_LEN_1,
1710 1.1.1.1.8.1 tls VEX_W_0F4B_P_2_LEN_1,
1711 1.1 christos VEX_W_0F50_M_0,
1712 1.1 christos VEX_W_0F51_P_0,
1713 1.1 christos VEX_W_0F51_P_1,
1714 1.1 christos VEX_W_0F51_P_2,
1715 1.1 christos VEX_W_0F51_P_3,
1716 1.1 christos VEX_W_0F52_P_0,
1717 1.1 christos VEX_W_0F52_P_1,
1718 1.1 christos VEX_W_0F53_P_0,
1719 1.1 christos VEX_W_0F53_P_1,
1720 1.1 christos VEX_W_0F58_P_0,
1721 1.1 christos VEX_W_0F58_P_1,
1722 1.1 christos VEX_W_0F58_P_2,
1723 1.1 christos VEX_W_0F58_P_3,
1724 1.1 christos VEX_W_0F59_P_0,
1725 1.1 christos VEX_W_0F59_P_1,
1726 1.1 christos VEX_W_0F59_P_2,
1727 1.1 christos VEX_W_0F59_P_3,
1728 1.1 christos VEX_W_0F5A_P_0,
1729 1.1 christos VEX_W_0F5A_P_1,
1730 1.1 christos VEX_W_0F5A_P_3,
1731 1.1 christos VEX_W_0F5B_P_0,
1732 1.1 christos VEX_W_0F5B_P_1,
1733 1.1 christos VEX_W_0F5B_P_2,
1734 1.1 christos VEX_W_0F5C_P_0,
1735 1.1 christos VEX_W_0F5C_P_1,
1736 1.1 christos VEX_W_0F5C_P_2,
1737 1.1 christos VEX_W_0F5C_P_3,
1738 1.1 christos VEX_W_0F5D_P_0,
1739 1.1 christos VEX_W_0F5D_P_1,
1740 1.1 christos VEX_W_0F5D_P_2,
1741 1.1 christos VEX_W_0F5D_P_3,
1742 1.1 christos VEX_W_0F5E_P_0,
1743 1.1 christos VEX_W_0F5E_P_1,
1744 1.1 christos VEX_W_0F5E_P_2,
1745 1.1 christos VEX_W_0F5E_P_3,
1746 1.1 christos VEX_W_0F5F_P_0,
1747 1.1 christos VEX_W_0F5F_P_1,
1748 1.1 christos VEX_W_0F5F_P_2,
1749 1.1 christos VEX_W_0F5F_P_3,
1750 1.1 christos VEX_W_0F60_P_2,
1751 1.1 christos VEX_W_0F61_P_2,
1752 1.1 christos VEX_W_0F62_P_2,
1753 1.1 christos VEX_W_0F63_P_2,
1754 1.1 christos VEX_W_0F64_P_2,
1755 1.1 christos VEX_W_0F65_P_2,
1756 1.1 christos VEX_W_0F66_P_2,
1757 1.1 christos VEX_W_0F67_P_2,
1758 1.1 christos VEX_W_0F68_P_2,
1759 1.1 christos VEX_W_0F69_P_2,
1760 1.1 christos VEX_W_0F6A_P_2,
1761 1.1 christos VEX_W_0F6B_P_2,
1762 1.1 christos VEX_W_0F6C_P_2,
1763 1.1 christos VEX_W_0F6D_P_2,
1764 1.1 christos VEX_W_0F6F_P_1,
1765 1.1 christos VEX_W_0F6F_P_2,
1766 1.1 christos VEX_W_0F70_P_1,
1767 1.1 christos VEX_W_0F70_P_2,
1768 1.1 christos VEX_W_0F70_P_3,
1769 1.1 christos VEX_W_0F71_R_2_P_2,
1770 1.1 christos VEX_W_0F71_R_4_P_2,
1771 1.1 christos VEX_W_0F71_R_6_P_2,
1772 1.1 christos VEX_W_0F72_R_2_P_2,
1773 1.1 christos VEX_W_0F72_R_4_P_2,
1774 1.1 christos VEX_W_0F72_R_6_P_2,
1775 1.1 christos VEX_W_0F73_R_2_P_2,
1776 1.1 christos VEX_W_0F73_R_3_P_2,
1777 1.1 christos VEX_W_0F73_R_6_P_2,
1778 1.1 christos VEX_W_0F73_R_7_P_2,
1779 1.1 christos VEX_W_0F74_P_2,
1780 1.1 christos VEX_W_0F75_P_2,
1781 1.1 christos VEX_W_0F76_P_2,
1782 1.1 christos VEX_W_0F77_P_0,
1783 1.1 christos VEX_W_0F7C_P_2,
1784 1.1 christos VEX_W_0F7C_P_3,
1785 1.1 christos VEX_W_0F7D_P_2,
1786 1.1 christos VEX_W_0F7D_P_3,
1787 1.1 christos VEX_W_0F7E_P_1,
1788 1.1 christos VEX_W_0F7F_P_1,
1789 1.1 christos VEX_W_0F7F_P_2,
1790 1.1.1.1.8.1 tls VEX_W_0F90_P_0_LEN_0,
1791 1.1.1.1.8.1 tls VEX_W_0F91_P_0_LEN_0,
1792 1.1.1.1.8.1 tls VEX_W_0F92_P_0_LEN_0,
1793 1.1.1.1.8.1 tls VEX_W_0F93_P_0_LEN_0,
1794 1.1.1.1.8.1 tls VEX_W_0F98_P_0_LEN_0,
1795 1.1 christos VEX_W_0FAE_R_2_M_0,
1796 1.1 christos VEX_W_0FAE_R_3_M_0,
1797 1.1 christos VEX_W_0FC2_P_0,
1798 1.1 christos VEX_W_0FC2_P_1,
1799 1.1 christos VEX_W_0FC2_P_2,
1800 1.1 christos VEX_W_0FC2_P_3,
1801 1.1 christos VEX_W_0FC4_P_2,
1802 1.1 christos VEX_W_0FC5_P_2,
1803 1.1 christos VEX_W_0FD0_P_2,
1804 1.1 christos VEX_W_0FD0_P_3,
1805 1.1 christos VEX_W_0FD1_P_2,
1806 1.1 christos VEX_W_0FD2_P_2,
1807 1.1 christos VEX_W_0FD3_P_2,
1808 1.1 christos VEX_W_0FD4_P_2,
1809 1.1 christos VEX_W_0FD5_P_2,
1810 1.1 christos VEX_W_0FD6_P_2,
1811 1.1 christos VEX_W_0FD7_P_2_M_1,
1812 1.1 christos VEX_W_0FD8_P_2,
1813 1.1 christos VEX_W_0FD9_P_2,
1814 1.1 christos VEX_W_0FDA_P_2,
1815 1.1 christos VEX_W_0FDB_P_2,
1816 1.1 christos VEX_W_0FDC_P_2,
1817 1.1 christos VEX_W_0FDD_P_2,
1818 1.1 christos VEX_W_0FDE_P_2,
1819 1.1 christos VEX_W_0FDF_P_2,
1820 1.1 christos VEX_W_0FE0_P_2,
1821 1.1 christos VEX_W_0FE1_P_2,
1822 1.1 christos VEX_W_0FE2_P_2,
1823 1.1 christos VEX_W_0FE3_P_2,
1824 1.1 christos VEX_W_0FE4_P_2,
1825 1.1 christos VEX_W_0FE5_P_2,
1826 1.1 christos VEX_W_0FE6_P_1,
1827 1.1 christos VEX_W_0FE6_P_2,
1828 1.1 christos VEX_W_0FE6_P_3,
1829 1.1 christos VEX_W_0FE7_P_2_M_0,
1830 1.1 christos VEX_W_0FE8_P_2,
1831 1.1 christos VEX_W_0FE9_P_2,
1832 1.1 christos VEX_W_0FEA_P_2,
1833 1.1 christos VEX_W_0FEB_P_2,
1834 1.1 christos VEX_W_0FEC_P_2,
1835 1.1 christos VEX_W_0FED_P_2,
1836 1.1 christos VEX_W_0FEE_P_2,
1837 1.1 christos VEX_W_0FEF_P_2,
1838 1.1 christos VEX_W_0FF0_P_3_M_0,
1839 1.1 christos VEX_W_0FF1_P_2,
1840 1.1 christos VEX_W_0FF2_P_2,
1841 1.1 christos VEX_W_0FF3_P_2,
1842 1.1 christos VEX_W_0FF4_P_2,
1843 1.1 christos VEX_W_0FF5_P_2,
1844 1.1 christos VEX_W_0FF6_P_2,
1845 1.1 christos VEX_W_0FF7_P_2,
1846 1.1 christos VEX_W_0FF8_P_2,
1847 1.1 christos VEX_W_0FF9_P_2,
1848 1.1 christos VEX_W_0FFA_P_2,
1849 1.1 christos VEX_W_0FFB_P_2,
1850 1.1 christos VEX_W_0FFC_P_2,
1851 1.1 christos VEX_W_0FFD_P_2,
1852 1.1 christos VEX_W_0FFE_P_2,
1853 1.1 christos VEX_W_0F3800_P_2,
1854 1.1 christos VEX_W_0F3801_P_2,
1855 1.1 christos VEX_W_0F3802_P_2,
1856 1.1 christos VEX_W_0F3803_P_2,
1857 1.1 christos VEX_W_0F3804_P_2,
1858 1.1 christos VEX_W_0F3805_P_2,
1859 1.1 christos VEX_W_0F3806_P_2,
1860 1.1 christos VEX_W_0F3807_P_2,
1861 1.1 christos VEX_W_0F3808_P_2,
1862 1.1 christos VEX_W_0F3809_P_2,
1863 1.1 christos VEX_W_0F380A_P_2,
1864 1.1 christos VEX_W_0F380B_P_2,
1865 1.1 christos VEX_W_0F380C_P_2,
1866 1.1 christos VEX_W_0F380D_P_2,
1867 1.1 christos VEX_W_0F380E_P_2,
1868 1.1 christos VEX_W_0F380F_P_2,
1869 1.1.1.1.8.1 tls VEX_W_0F3816_P_2,
1870 1.1 christos VEX_W_0F3817_P_2,
1871 1.1.1.1.8.1 tls VEX_W_0F3818_P_2,
1872 1.1.1.1.8.1 tls VEX_W_0F3819_P_2,
1873 1.1 christos VEX_W_0F381A_P_2_M_0,
1874 1.1 christos VEX_W_0F381C_P_2,
1875 1.1 christos VEX_W_0F381D_P_2,
1876 1.1 christos VEX_W_0F381E_P_2,
1877 1.1 christos VEX_W_0F3820_P_2,
1878 1.1 christos VEX_W_0F3821_P_2,
1879 1.1 christos VEX_W_0F3822_P_2,
1880 1.1 christos VEX_W_0F3823_P_2,
1881 1.1 christos VEX_W_0F3824_P_2,
1882 1.1 christos VEX_W_0F3825_P_2,
1883 1.1 christos VEX_W_0F3828_P_2,
1884 1.1 christos VEX_W_0F3829_P_2,
1885 1.1 christos VEX_W_0F382A_P_2_M_0,
1886 1.1 christos VEX_W_0F382B_P_2,
1887 1.1 christos VEX_W_0F382C_P_2_M_0,
1888 1.1 christos VEX_W_0F382D_P_2_M_0,
1889 1.1 christos VEX_W_0F382E_P_2_M_0,
1890 1.1 christos VEX_W_0F382F_P_2_M_0,
1891 1.1 christos VEX_W_0F3830_P_2,
1892 1.1 christos VEX_W_0F3831_P_2,
1893 1.1 christos VEX_W_0F3832_P_2,
1894 1.1 christos VEX_W_0F3833_P_2,
1895 1.1 christos VEX_W_0F3834_P_2,
1896 1.1 christos VEX_W_0F3835_P_2,
1897 1.1.1.1.8.1 tls VEX_W_0F3836_P_2,
1898 1.1 christos VEX_W_0F3837_P_2,
1899 1.1 christos VEX_W_0F3838_P_2,
1900 1.1 christos VEX_W_0F3839_P_2,
1901 1.1 christos VEX_W_0F383A_P_2,
1902 1.1 christos VEX_W_0F383B_P_2,
1903 1.1 christos VEX_W_0F383C_P_2,
1904 1.1 christos VEX_W_0F383D_P_2,
1905 1.1 christos VEX_W_0F383E_P_2,
1906 1.1 christos VEX_W_0F383F_P_2,
1907 1.1 christos VEX_W_0F3840_P_2,
1908 1.1 christos VEX_W_0F3841_P_2,
1909 1.1.1.1.8.1 tls VEX_W_0F3846_P_2,
1910 1.1.1.1.8.1 tls VEX_W_0F3858_P_2,
1911 1.1.1.1.8.1 tls VEX_W_0F3859_P_2,
1912 1.1.1.1.8.1 tls VEX_W_0F385A_P_2_M_0,
1913 1.1.1.1.8.1 tls VEX_W_0F3878_P_2,
1914 1.1.1.1.8.1 tls VEX_W_0F3879_P_2,
1915 1.1 christos VEX_W_0F38DB_P_2,
1916 1.1 christos VEX_W_0F38DC_P_2,
1917 1.1 christos VEX_W_0F38DD_P_2,
1918 1.1 christos VEX_W_0F38DE_P_2,
1919 1.1 christos VEX_W_0F38DF_P_2,
1920 1.1.1.1.8.1 tls VEX_W_0F3A00_P_2,
1921 1.1.1.1.8.1 tls VEX_W_0F3A01_P_2,
1922 1.1.1.1.8.1 tls VEX_W_0F3A02_P_2,
1923 1.1 christos VEX_W_0F3A04_P_2,
1924 1.1 christos VEX_W_0F3A05_P_2,
1925 1.1 christos VEX_W_0F3A06_P_2,
1926 1.1 christos VEX_W_0F3A08_P_2,
1927 1.1 christos VEX_W_0F3A09_P_2,
1928 1.1 christos VEX_W_0F3A0A_P_2,
1929 1.1 christos VEX_W_0F3A0B_P_2,
1930 1.1 christos VEX_W_0F3A0C_P_2,
1931 1.1 christos VEX_W_0F3A0D_P_2,
1932 1.1 christos VEX_W_0F3A0E_P_2,
1933 1.1 christos VEX_W_0F3A0F_P_2,
1934 1.1 christos VEX_W_0F3A14_P_2,
1935 1.1 christos VEX_W_0F3A15_P_2,
1936 1.1 christos VEX_W_0F3A18_P_2,
1937 1.1 christos VEX_W_0F3A19_P_2,
1938 1.1 christos VEX_W_0F3A20_P_2,
1939 1.1 christos VEX_W_0F3A21_P_2,
1940 1.1.1.1.8.1 tls VEX_W_0F3A30_P_2_LEN_0,
1941 1.1.1.1.8.1 tls VEX_W_0F3A32_P_2_LEN_0,
1942 1.1.1.1.8.1 tls VEX_W_0F3A38_P_2,
1943 1.1.1.1.8.1 tls VEX_W_0F3A39_P_2,
1944 1.1 christos VEX_W_0F3A40_P_2,
1945 1.1 christos VEX_W_0F3A41_P_2,
1946 1.1 christos VEX_W_0F3A42_P_2,
1947 1.1 christos VEX_W_0F3A44_P_2,
1948 1.1.1.1.8.1 tls VEX_W_0F3A46_P_2,
1949 1.1 christos VEX_W_0F3A48_P_2,
1950 1.1 christos VEX_W_0F3A49_P_2,
1951 1.1 christos VEX_W_0F3A4A_P_2,
1952 1.1 christos VEX_W_0F3A4B_P_2,
1953 1.1 christos VEX_W_0F3A4C_P_2,
1954 1.1 christos VEX_W_0F3A60_P_2,
1955 1.1 christos VEX_W_0F3A61_P_2,
1956 1.1 christos VEX_W_0F3A62_P_2,
1957 1.1 christos VEX_W_0F3A63_P_2,
1958 1.1.1.1.8.1 tls VEX_W_0F3ADF_P_2,
1959 1.1.1.1.8.1 tls
1960 1.1.1.1.8.1 tls EVEX_W_0F10_P_0,
1961 1.1.1.1.8.1 tls EVEX_W_0F10_P_1_M_0,
1962 1.1.1.1.8.1 tls EVEX_W_0F10_P_1_M_1,
1963 1.1.1.1.8.1 tls EVEX_W_0F10_P_2,
1964 1.1.1.1.8.1 tls EVEX_W_0F10_P_3_M_0,
1965 1.1.1.1.8.1 tls EVEX_W_0F10_P_3_M_1,
1966 1.1.1.1.8.1 tls EVEX_W_0F11_P_0,
1967 1.1.1.1.8.1 tls EVEX_W_0F11_P_1_M_0,
1968 1.1.1.1.8.1 tls EVEX_W_0F11_P_1_M_1,
1969 1.1.1.1.8.1 tls EVEX_W_0F11_P_2,
1970 1.1.1.1.8.1 tls EVEX_W_0F11_P_3_M_0,
1971 1.1.1.1.8.1 tls EVEX_W_0F11_P_3_M_1,
1972 1.1.1.1.8.1 tls EVEX_W_0F12_P_0_M_0,
1973 1.1.1.1.8.1 tls EVEX_W_0F12_P_0_M_1,
1974 1.1.1.1.8.1 tls EVEX_W_0F12_P_1,
1975 1.1.1.1.8.1 tls EVEX_W_0F12_P_2,
1976 1.1.1.1.8.1 tls EVEX_W_0F12_P_3,
1977 1.1.1.1.8.1 tls EVEX_W_0F13_P_0,
1978 1.1.1.1.8.1 tls EVEX_W_0F13_P_2,
1979 1.1.1.1.8.1 tls EVEX_W_0F14_P_0,
1980 1.1.1.1.8.1 tls EVEX_W_0F14_P_2,
1981 1.1.1.1.8.1 tls EVEX_W_0F15_P_0,
1982 1.1.1.1.8.1 tls EVEX_W_0F15_P_2,
1983 1.1.1.1.8.1 tls EVEX_W_0F16_P_0_M_0,
1984 1.1.1.1.8.1 tls EVEX_W_0F16_P_0_M_1,
1985 1.1.1.1.8.1 tls EVEX_W_0F16_P_1,
1986 1.1.1.1.8.1 tls EVEX_W_0F16_P_2,
1987 1.1.1.1.8.1 tls EVEX_W_0F17_P_0,
1988 1.1.1.1.8.1 tls EVEX_W_0F17_P_2,
1989 1.1.1.1.8.1 tls EVEX_W_0F28_P_0,
1990 1.1.1.1.8.1 tls EVEX_W_0F28_P_2,
1991 1.1.1.1.8.1 tls EVEX_W_0F29_P_0,
1992 1.1.1.1.8.1 tls EVEX_W_0F29_P_2,
1993 1.1.1.1.8.1 tls EVEX_W_0F2A_P_1,
1994 1.1.1.1.8.1 tls EVEX_W_0F2A_P_3,
1995 1.1.1.1.8.1 tls EVEX_W_0F2B_P_0,
1996 1.1.1.1.8.1 tls EVEX_W_0F2B_P_2,
1997 1.1.1.1.8.1 tls EVEX_W_0F2E_P_0,
1998 1.1.1.1.8.1 tls EVEX_W_0F2E_P_2,
1999 1.1.1.1.8.1 tls EVEX_W_0F2F_P_0,
2000 1.1.1.1.8.1 tls EVEX_W_0F2F_P_2,
2001 1.1.1.1.8.1 tls EVEX_W_0F51_P_0,
2002 1.1.1.1.8.1 tls EVEX_W_0F51_P_1,
2003 1.1.1.1.8.1 tls EVEX_W_0F51_P_2,
2004 1.1.1.1.8.1 tls EVEX_W_0F51_P_3,
2005 1.1.1.1.8.1 tls EVEX_W_0F58_P_0,
2006 1.1.1.1.8.1 tls EVEX_W_0F58_P_1,
2007 1.1.1.1.8.1 tls EVEX_W_0F58_P_2,
2008 1.1.1.1.8.1 tls EVEX_W_0F58_P_3,
2009 1.1.1.1.8.1 tls EVEX_W_0F59_P_0,
2010 1.1.1.1.8.1 tls EVEX_W_0F59_P_1,
2011 1.1.1.1.8.1 tls EVEX_W_0F59_P_2,
2012 1.1.1.1.8.1 tls EVEX_W_0F59_P_3,
2013 1.1.1.1.8.1 tls EVEX_W_0F5A_P_0,
2014 1.1.1.1.8.1 tls EVEX_W_0F5A_P_1,
2015 1.1.1.1.8.1 tls EVEX_W_0F5A_P_2,
2016 1.1.1.1.8.1 tls EVEX_W_0F5A_P_3,
2017 1.1.1.1.8.1 tls EVEX_W_0F5B_P_0,
2018 1.1.1.1.8.1 tls EVEX_W_0F5B_P_1,
2019 1.1.1.1.8.1 tls EVEX_W_0F5B_P_2,
2020 1.1.1.1.8.1 tls EVEX_W_0F5C_P_0,
2021 1.1.1.1.8.1 tls EVEX_W_0F5C_P_1,
2022 1.1.1.1.8.1 tls EVEX_W_0F5C_P_2,
2023 1.1.1.1.8.1 tls EVEX_W_0F5C_P_3,
2024 1.1.1.1.8.1 tls EVEX_W_0F5D_P_0,
2025 1.1.1.1.8.1 tls EVEX_W_0F5D_P_1,
2026 1.1.1.1.8.1 tls EVEX_W_0F5D_P_2,
2027 1.1.1.1.8.1 tls EVEX_W_0F5D_P_3,
2028 1.1.1.1.8.1 tls EVEX_W_0F5E_P_0,
2029 1.1.1.1.8.1 tls EVEX_W_0F5E_P_1,
2030 1.1.1.1.8.1 tls EVEX_W_0F5E_P_2,
2031 1.1.1.1.8.1 tls EVEX_W_0F5E_P_3,
2032 1.1.1.1.8.1 tls EVEX_W_0F5F_P_0,
2033 1.1.1.1.8.1 tls EVEX_W_0F5F_P_1,
2034 1.1.1.1.8.1 tls EVEX_W_0F5F_P_2,
2035 1.1.1.1.8.1 tls EVEX_W_0F5F_P_3,
2036 1.1.1.1.8.1 tls EVEX_W_0F62_P_2,
2037 1.1.1.1.8.1 tls EVEX_W_0F66_P_2,
2038 1.1.1.1.8.1 tls EVEX_W_0F6A_P_2,
2039 1.1.1.1.8.1 tls EVEX_W_0F6C_P_2,
2040 1.1.1.1.8.1 tls EVEX_W_0F6D_P_2,
2041 1.1.1.1.8.1 tls EVEX_W_0F6E_P_2,
2042 1.1.1.1.8.1 tls EVEX_W_0F6F_P_1,
2043 1.1.1.1.8.1 tls EVEX_W_0F6F_P_2,
2044 1.1.1.1.8.1 tls EVEX_W_0F70_P_2,
2045 1.1.1.1.8.1 tls EVEX_W_0F72_R_2_P_2,
2046 1.1.1.1.8.1 tls EVEX_W_0F72_R_6_P_2,
2047 1.1.1.1.8.1 tls EVEX_W_0F73_R_2_P_2,
2048 1.1.1.1.8.1 tls EVEX_W_0F73_R_6_P_2,
2049 1.1.1.1.8.1 tls EVEX_W_0F76_P_2,
2050 1.1.1.1.8.1 tls EVEX_W_0F78_P_0,
2051 1.1.1.1.8.1 tls EVEX_W_0F79_P_0,
2052 1.1.1.1.8.1 tls EVEX_W_0F7A_P_1,
2053 1.1.1.1.8.1 tls EVEX_W_0F7A_P_3,
2054 1.1.1.1.8.1 tls EVEX_W_0F7B_P_1,
2055 1.1.1.1.8.1 tls EVEX_W_0F7B_P_3,
2056 1.1.1.1.8.1 tls EVEX_W_0F7E_P_1,
2057 1.1.1.1.8.1 tls EVEX_W_0F7E_P_2,
2058 1.1.1.1.8.1 tls EVEX_W_0F7F_P_1,
2059 1.1.1.1.8.1 tls EVEX_W_0F7F_P_2,
2060 1.1.1.1.8.1 tls EVEX_W_0FC2_P_0,
2061 1.1.1.1.8.1 tls EVEX_W_0FC2_P_1,
2062 1.1.1.1.8.1 tls EVEX_W_0FC2_P_2,
2063 1.1.1.1.8.1 tls EVEX_W_0FC2_P_3,
2064 1.1.1.1.8.1 tls EVEX_W_0FC6_P_0,
2065 1.1.1.1.8.1 tls EVEX_W_0FC6_P_2,
2066 1.1.1.1.8.1 tls EVEX_W_0FD2_P_2,
2067 1.1.1.1.8.1 tls EVEX_W_0FD3_P_2,
2068 1.1.1.1.8.1 tls EVEX_W_0FD4_P_2,
2069 1.1.1.1.8.1 tls EVEX_W_0FD6_P_2,
2070 1.1.1.1.8.1 tls EVEX_W_0FE6_P_1,
2071 1.1.1.1.8.1 tls EVEX_W_0FE6_P_2,
2072 1.1.1.1.8.1 tls EVEX_W_0FE6_P_3,
2073 1.1.1.1.8.1 tls EVEX_W_0FE7_P_2,
2074 1.1.1.1.8.1 tls EVEX_W_0FF2_P_2,
2075 1.1.1.1.8.1 tls EVEX_W_0FF3_P_2,
2076 1.1.1.1.8.1 tls EVEX_W_0FF4_P_2,
2077 1.1.1.1.8.1 tls EVEX_W_0FFA_P_2,
2078 1.1.1.1.8.1 tls EVEX_W_0FFB_P_2,
2079 1.1.1.1.8.1 tls EVEX_W_0FFE_P_2,
2080 1.1.1.1.8.1 tls EVEX_W_0F380C_P_2,
2081 1.1.1.1.8.1 tls EVEX_W_0F380D_P_2,
2082 1.1.1.1.8.1 tls EVEX_W_0F3811_P_1,
2083 1.1.1.1.8.1 tls EVEX_W_0F3812_P_1,
2084 1.1.1.1.8.1 tls EVEX_W_0F3813_P_1,
2085 1.1.1.1.8.1 tls EVEX_W_0F3813_P_2,
2086 1.1.1.1.8.1 tls EVEX_W_0F3814_P_1,
2087 1.1.1.1.8.1 tls EVEX_W_0F3815_P_1,
2088 1.1.1.1.8.1 tls EVEX_W_0F3818_P_2,
2089 1.1.1.1.8.1 tls EVEX_W_0F3819_P_2,
2090 1.1.1.1.8.1 tls EVEX_W_0F381A_P_2,
2091 1.1.1.1.8.1 tls EVEX_W_0F381B_P_2,
2092 1.1.1.1.8.1 tls EVEX_W_0F381E_P_2,
2093 1.1.1.1.8.1 tls EVEX_W_0F381F_P_2,
2094 1.1.1.1.8.1 tls EVEX_W_0F3821_P_1,
2095 1.1.1.1.8.1 tls EVEX_W_0F3822_P_1,
2096 1.1.1.1.8.1 tls EVEX_W_0F3823_P_1,
2097 1.1.1.1.8.1 tls EVEX_W_0F3824_P_1,
2098 1.1.1.1.8.1 tls EVEX_W_0F3825_P_1,
2099 1.1.1.1.8.1 tls EVEX_W_0F3825_P_2,
2100 1.1.1.1.8.1 tls EVEX_W_0F3828_P_2,
2101 1.1.1.1.8.1 tls EVEX_W_0F3829_P_2,
2102 1.1.1.1.8.1 tls EVEX_W_0F382A_P_1,
2103 1.1.1.1.8.1 tls EVEX_W_0F382A_P_2,
2104 1.1.1.1.8.1 tls EVEX_W_0F3831_P_1,
2105 1.1.1.1.8.1 tls EVEX_W_0F3832_P_1,
2106 1.1.1.1.8.1 tls EVEX_W_0F3833_P_1,
2107 1.1.1.1.8.1 tls EVEX_W_0F3834_P_1,
2108 1.1.1.1.8.1 tls EVEX_W_0F3835_P_1,
2109 1.1.1.1.8.1 tls EVEX_W_0F3835_P_2,
2110 1.1.1.1.8.1 tls EVEX_W_0F3837_P_2,
2111 1.1.1.1.8.1 tls EVEX_W_0F383A_P_1,
2112 1.1.1.1.8.1 tls EVEX_W_0F3840_P_2,
2113 1.1.1.1.8.1 tls EVEX_W_0F3858_P_2,
2114 1.1.1.1.8.1 tls EVEX_W_0F3859_P_2,
2115 1.1.1.1.8.1 tls EVEX_W_0F385A_P_2,
2116 1.1.1.1.8.1 tls EVEX_W_0F385B_P_2,
2117 1.1.1.1.8.1 tls EVEX_W_0F3891_P_2,
2118 1.1.1.1.8.1 tls EVEX_W_0F3893_P_2,
2119 1.1.1.1.8.1 tls EVEX_W_0F38A1_P_2,
2120 1.1.1.1.8.1 tls EVEX_W_0F38A3_P_2,
2121 1.1.1.1.8.1 tls EVEX_W_0F38C7_R_1_P_2,
2122 1.1.1.1.8.1 tls EVEX_W_0F38C7_R_2_P_2,
2123 1.1.1.1.8.1 tls EVEX_W_0F38C7_R_5_P_2,
2124 1.1.1.1.8.1 tls EVEX_W_0F38C7_R_6_P_2,
2125 1.1.1.1.8.1 tls
2126 1.1.1.1.8.1 tls EVEX_W_0F3A00_P_2,
2127 1.1.1.1.8.1 tls EVEX_W_0F3A01_P_2,
2128 1.1.1.1.8.1 tls EVEX_W_0F3A04_P_2,
2129 1.1.1.1.8.1 tls EVEX_W_0F3A05_P_2,
2130 1.1.1.1.8.1 tls EVEX_W_0F3A08_P_2,
2131 1.1.1.1.8.1 tls EVEX_W_0F3A09_P_2,
2132 1.1.1.1.8.1 tls EVEX_W_0F3A0A_P_2,
2133 1.1.1.1.8.1 tls EVEX_W_0F3A0B_P_2,
2134 1.1.1.1.8.1 tls EVEX_W_0F3A18_P_2,
2135 1.1.1.1.8.1 tls EVEX_W_0F3A19_P_2,
2136 1.1.1.1.8.1 tls EVEX_W_0F3A1A_P_2,
2137 1.1.1.1.8.1 tls EVEX_W_0F3A1B_P_2,
2138 1.1.1.1.8.1 tls EVEX_W_0F3A1D_P_2,
2139 1.1.1.1.8.1 tls EVEX_W_0F3A21_P_2,
2140 1.1.1.1.8.1 tls EVEX_W_0F3A23_P_2,
2141 1.1.1.1.8.1 tls EVEX_W_0F3A38_P_2,
2142 1.1.1.1.8.1 tls EVEX_W_0F3A39_P_2,
2143 1.1.1.1.8.1 tls EVEX_W_0F3A3A_P_2,
2144 1.1.1.1.8.1 tls EVEX_W_0F3A3B_P_2,
2145 1.1.1.1.8.1 tls EVEX_W_0F3A43_P_2,
2146 1.1 christos };
2147 1.1 christos
2148 1.1 christos typedef void (*op_rtn) (int bytemode, int sizeflag);
2149 1.1 christos
2150 1.1 christos struct dis386 {
2151 1.1 christos const char *name;
2152 1.1 christos struct
2153 1.1 christos {
2154 1.1 christos op_rtn rtn;
2155 1.1 christos int bytemode;
2156 1.1 christos } op[MAX_OPERANDS];
2157 1.1 christos };
2158 1.1 christos
2159 1.1 christos /* Upper case letters in the instruction names here are macros.
2160 1.1 christos 'A' => print 'b' if no register operands or suffix_always is true
2161 1.1 christos 'B' => print 'b' if suffix_always is true
2162 1.1 christos 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
2163 1.1 christos size prefix
2164 1.1 christos 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
2165 1.1 christos suffix_always is true
2166 1.1 christos 'E' => print 'e' if 32-bit form of jcxz
2167 1.1 christos 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
2168 1.1 christos 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
2169 1.1 christos 'H' => print ",pt" or ",pn" branch hint
2170 1.1 christos 'I' => honor following macro letter even in Intel mode (implemented only
2171 1.1 christos for some of the macro letters)
2172 1.1 christos 'J' => print 'l'
2173 1.1 christos 'K' => print 'd' or 'q' if rex prefix is present.
2174 1.1 christos 'L' => print 'l' if suffix_always is true
2175 1.1 christos 'M' => print 'r' if intel_mnemonic is false.
2176 1.1 christos 'N' => print 'n' if instruction has no wait "prefix"
2177 1.1 christos 'O' => print 'd' or 'o' (or 'q' in Intel mode)
2178 1.1 christos 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
2179 1.1 christos or suffix_always is true. print 'q' if rex prefix is present.
2180 1.1 christos 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
2181 1.1 christos is true
2182 1.1 christos 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
2183 1.1 christos 'S' => print 'w', 'l' or 'q' if suffix_always is true
2184 1.1 christos 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
2185 1.1 christos 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
2186 1.1 christos 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
2187 1.1 christos 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
2188 1.1 christos 'X' => print 's', 'd' depending on data16 prefix (for XMM)
2189 1.1 christos 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
2190 1.1 christos suffix_always is true.
2191 1.1 christos 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
2192 1.1 christos '!' => change condition from true to false or from false to true.
2193 1.1 christos '%' => add 1 upper case letter to the macro.
2194 1.1 christos
2195 1.1 christos 2 upper case letter macros:
2196 1.1 christos "XY" => print 'x' or 'y' if no register operands or suffix_always
2197 1.1 christos is true.
2198 1.1 christos "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
2199 1.1 christos "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
2200 1.1 christos or suffix_always is true
2201 1.1 christos "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
2202 1.1 christos "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
2203 1.1 christos "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
2204 1.1.1.1.8.1 tls "LW" => print 'd', 'q' depending on the VEX.W bit
2205 1.1 christos
2206 1.1 christos Many of the above letters print nothing in Intel mode. See "putop"
2207 1.1 christos for the details.
2208 1.1 christos
2209 1.1 christos Braces '{' and '}', and vertical bars '|', indicate alternative
2210 1.1 christos mnemonic strings for AT&T and Intel. */
2211 1.1 christos
2212 1.1 christos static const struct dis386 dis386[] = {
2213 1.1 christos /* 00 */
2214 1.1.1.1.8.1 tls { "addB", { Ebh1, Gb } },
2215 1.1.1.1.8.1 tls { "addS", { Evh1, Gv } },
2216 1.1 christos { "addB", { Gb, EbS } },
2217 1.1 christos { "addS", { Gv, EvS } },
2218 1.1 christos { "addB", { AL, Ib } },
2219 1.1 christos { "addS", { eAX, Iv } },
2220 1.1 christos { X86_64_TABLE (X86_64_06) },
2221 1.1 christos { X86_64_TABLE (X86_64_07) },
2222 1.1 christos /* 08 */
2223 1.1.1.1.8.1 tls { "orB", { Ebh1, Gb } },
2224 1.1.1.1.8.1 tls { "orS", { Evh1, Gv } },
2225 1.1 christos { "orB", { Gb, EbS } },
2226 1.1 christos { "orS", { Gv, EvS } },
2227 1.1 christos { "orB", { AL, Ib } },
2228 1.1 christos { "orS", { eAX, Iv } },
2229 1.1 christos { X86_64_TABLE (X86_64_0D) },
2230 1.1 christos { Bad_Opcode }, /* 0x0f extended opcode escape */
2231 1.1 christos /* 10 */
2232 1.1.1.1.8.1 tls { "adcB", { Ebh1, Gb } },
2233 1.1.1.1.8.1 tls { "adcS", { Evh1, Gv } },
2234 1.1 christos { "adcB", { Gb, EbS } },
2235 1.1 christos { "adcS", { Gv, EvS } },
2236 1.1 christos { "adcB", { AL, Ib } },
2237 1.1 christos { "adcS", { eAX, Iv } },
2238 1.1 christos { X86_64_TABLE (X86_64_16) },
2239 1.1 christos { X86_64_TABLE (X86_64_17) },
2240 1.1 christos /* 18 */
2241 1.1.1.1.8.1 tls { "sbbB", { Ebh1, Gb } },
2242 1.1.1.1.8.1 tls { "sbbS", { Evh1, Gv } },
2243 1.1 christos { "sbbB", { Gb, EbS } },
2244 1.1 christos { "sbbS", { Gv, EvS } },
2245 1.1 christos { "sbbB", { AL, Ib } },
2246 1.1 christos { "sbbS", { eAX, Iv } },
2247 1.1 christos { X86_64_TABLE (X86_64_1E) },
2248 1.1 christos { X86_64_TABLE (X86_64_1F) },
2249 1.1 christos /* 20 */
2250 1.1.1.1.8.1 tls { "andB", { Ebh1, Gb } },
2251 1.1.1.1.8.1 tls { "andS", { Evh1, Gv } },
2252 1.1 christos { "andB", { Gb, EbS } },
2253 1.1 christos { "andS", { Gv, EvS } },
2254 1.1 christos { "andB", { AL, Ib } },
2255 1.1 christos { "andS", { eAX, Iv } },
2256 1.1 christos { Bad_Opcode }, /* SEG ES prefix */
2257 1.1 christos { X86_64_TABLE (X86_64_27) },
2258 1.1 christos /* 28 */
2259 1.1.1.1.8.1 tls { "subB", { Ebh1, Gb } },
2260 1.1.1.1.8.1 tls { "subS", { Evh1, Gv } },
2261 1.1 christos { "subB", { Gb, EbS } },
2262 1.1 christos { "subS", { Gv, EvS } },
2263 1.1 christos { "subB", { AL, Ib } },
2264 1.1 christos { "subS", { eAX, Iv } },
2265 1.1 christos { Bad_Opcode }, /* SEG CS prefix */
2266 1.1 christos { X86_64_TABLE (X86_64_2F) },
2267 1.1 christos /* 30 */
2268 1.1.1.1.8.1 tls { "xorB", { Ebh1, Gb } },
2269 1.1.1.1.8.1 tls { "xorS", { Evh1, Gv } },
2270 1.1 christos { "xorB", { Gb, EbS } },
2271 1.1 christos { "xorS", { Gv, EvS } },
2272 1.1 christos { "xorB", { AL, Ib } },
2273 1.1 christos { "xorS", { eAX, Iv } },
2274 1.1 christos { Bad_Opcode }, /* SEG SS prefix */
2275 1.1 christos { X86_64_TABLE (X86_64_37) },
2276 1.1 christos /* 38 */
2277 1.1 christos { "cmpB", { Eb, Gb } },
2278 1.1 christos { "cmpS", { Ev, Gv } },
2279 1.1 christos { "cmpB", { Gb, EbS } },
2280 1.1 christos { "cmpS", { Gv, EvS } },
2281 1.1 christos { "cmpB", { AL, Ib } },
2282 1.1 christos { "cmpS", { eAX, Iv } },
2283 1.1 christos { Bad_Opcode }, /* SEG DS prefix */
2284 1.1 christos { X86_64_TABLE (X86_64_3F) },
2285 1.1 christos /* 40 */
2286 1.1 christos { "inc{S|}", { RMeAX } },
2287 1.1 christos { "inc{S|}", { RMeCX } },
2288 1.1 christos { "inc{S|}", { RMeDX } },
2289 1.1 christos { "inc{S|}", { RMeBX } },
2290 1.1 christos { "inc{S|}", { RMeSP } },
2291 1.1 christos { "inc{S|}", { RMeBP } },
2292 1.1 christos { "inc{S|}", { RMeSI } },
2293 1.1 christos { "inc{S|}", { RMeDI } },
2294 1.1 christos /* 48 */
2295 1.1 christos { "dec{S|}", { RMeAX } },
2296 1.1 christos { "dec{S|}", { RMeCX } },
2297 1.1 christos { "dec{S|}", { RMeDX } },
2298 1.1 christos { "dec{S|}", { RMeBX } },
2299 1.1 christos { "dec{S|}", { RMeSP } },
2300 1.1 christos { "dec{S|}", { RMeBP } },
2301 1.1 christos { "dec{S|}", { RMeSI } },
2302 1.1 christos { "dec{S|}", { RMeDI } },
2303 1.1 christos /* 50 */
2304 1.1 christos { "pushV", { RMrAX } },
2305 1.1 christos { "pushV", { RMrCX } },
2306 1.1 christos { "pushV", { RMrDX } },
2307 1.1 christos { "pushV", { RMrBX } },
2308 1.1 christos { "pushV", { RMrSP } },
2309 1.1 christos { "pushV", { RMrBP } },
2310 1.1 christos { "pushV", { RMrSI } },
2311 1.1 christos { "pushV", { RMrDI } },
2312 1.1 christos /* 58 */
2313 1.1 christos { "popV", { RMrAX } },
2314 1.1 christos { "popV", { RMrCX } },
2315 1.1 christos { "popV", { RMrDX } },
2316 1.1 christos { "popV", { RMrBX } },
2317 1.1 christos { "popV", { RMrSP } },
2318 1.1 christos { "popV", { RMrBP } },
2319 1.1 christos { "popV", { RMrSI } },
2320 1.1 christos { "popV", { RMrDI } },
2321 1.1 christos /* 60 */
2322 1.1 christos { X86_64_TABLE (X86_64_60) },
2323 1.1 christos { X86_64_TABLE (X86_64_61) },
2324 1.1 christos { X86_64_TABLE (X86_64_62) },
2325 1.1 christos { X86_64_TABLE (X86_64_63) },
2326 1.1 christos { Bad_Opcode }, /* seg fs */
2327 1.1 christos { Bad_Opcode }, /* seg gs */
2328 1.1 christos { Bad_Opcode }, /* op size prefix */
2329 1.1 christos { Bad_Opcode }, /* adr size prefix */
2330 1.1 christos /* 68 */
2331 1.1 christos { "pushT", { sIv } },
2332 1.1 christos { "imulS", { Gv, Ev, Iv } },
2333 1.1 christos { "pushT", { sIbT } },
2334 1.1 christos { "imulS", { Gv, Ev, sIb } },
2335 1.1 christos { "ins{b|}", { Ybr, indirDX } },
2336 1.1 christos { X86_64_TABLE (X86_64_6D) },
2337 1.1 christos { "outs{b|}", { indirDXr, Xb } },
2338 1.1 christos { X86_64_TABLE (X86_64_6F) },
2339 1.1 christos /* 70 */
2340 1.1.1.1.8.1 tls { "joH", { Jb, BND, cond_jump_flag } },
2341 1.1.1.1.8.1 tls { "jnoH", { Jb, BND, cond_jump_flag } },
2342 1.1.1.1.8.1 tls { "jbH", { Jb, BND, cond_jump_flag } },
2343 1.1.1.1.8.1 tls { "jaeH", { Jb, BND, cond_jump_flag } },
2344 1.1.1.1.8.1 tls { "jeH", { Jb, BND, cond_jump_flag } },
2345 1.1.1.1.8.1 tls { "jneH", { Jb, BND, cond_jump_flag } },
2346 1.1.1.1.8.1 tls { "jbeH", { Jb, BND, cond_jump_flag } },
2347 1.1.1.1.8.1 tls { "jaH", { Jb, BND, cond_jump_flag } },
2348 1.1 christos /* 78 */
2349 1.1.1.1.8.1 tls { "jsH", { Jb, BND, cond_jump_flag } },
2350 1.1.1.1.8.1 tls { "jnsH", { Jb, BND, cond_jump_flag } },
2351 1.1.1.1.8.1 tls { "jpH", { Jb, BND, cond_jump_flag } },
2352 1.1.1.1.8.1 tls { "jnpH", { Jb, BND, cond_jump_flag } },
2353 1.1.1.1.8.1 tls { "jlH", { Jb, BND, cond_jump_flag } },
2354 1.1.1.1.8.1 tls { "jgeH", { Jb, BND, cond_jump_flag } },
2355 1.1.1.1.8.1 tls { "jleH", { Jb, BND, cond_jump_flag } },
2356 1.1.1.1.8.1 tls { "jgH", { Jb, BND, cond_jump_flag } },
2357 1.1 christos /* 80 */
2358 1.1 christos { REG_TABLE (REG_80) },
2359 1.1 christos { REG_TABLE (REG_81) },
2360 1.1 christos { Bad_Opcode },
2361 1.1 christos { REG_TABLE (REG_82) },
2362 1.1 christos { "testB", { Eb, Gb } },
2363 1.1 christos { "testS", { Ev, Gv } },
2364 1.1.1.1.8.1 tls { "xchgB", { Ebh2, Gb } },
2365 1.1.1.1.8.1 tls { "xchgS", { Evh2, Gv } },
2366 1.1 christos /* 88 */
2367 1.1.1.1.8.1 tls { "movB", { Ebh3, Gb } },
2368 1.1.1.1.8.1 tls { "movS", { Evh3, Gv } },
2369 1.1 christos { "movB", { Gb, EbS } },
2370 1.1 christos { "movS", { Gv, EvS } },
2371 1.1 christos { "movD", { Sv, Sw } },
2372 1.1 christos { MOD_TABLE (MOD_8D) },
2373 1.1 christos { "movD", { Sw, Sv } },
2374 1.1 christos { REG_TABLE (REG_8F) },
2375 1.1 christos /* 90 */
2376 1.1 christos { PREFIX_TABLE (PREFIX_90) },
2377 1.1 christos { "xchgS", { RMeCX, eAX } },
2378 1.1 christos { "xchgS", { RMeDX, eAX } },
2379 1.1 christos { "xchgS", { RMeBX, eAX } },
2380 1.1 christos { "xchgS", { RMeSP, eAX } },
2381 1.1 christos { "xchgS", { RMeBP, eAX } },
2382 1.1 christos { "xchgS", { RMeSI, eAX } },
2383 1.1 christos { "xchgS", { RMeDI, eAX } },
2384 1.1 christos /* 98 */
2385 1.1 christos { "cW{t|}R", { XX } },
2386 1.1 christos { "cR{t|}O", { XX } },
2387 1.1 christos { X86_64_TABLE (X86_64_9A) },
2388 1.1 christos { Bad_Opcode }, /* fwait */
2389 1.1 christos { "pushfT", { XX } },
2390 1.1 christos { "popfT", { XX } },
2391 1.1 christos { "sahf", { XX } },
2392 1.1 christos { "lahf", { XX } },
2393 1.1 christos /* a0 */
2394 1.1 christos { "mov%LB", { AL, Ob } },
2395 1.1 christos { "mov%LS", { eAX, Ov } },
2396 1.1 christos { "mov%LB", { Ob, AL } },
2397 1.1 christos { "mov%LS", { Ov, eAX } },
2398 1.1 christos { "movs{b|}", { Ybr, Xb } },
2399 1.1 christos { "movs{R|}", { Yvr, Xv } },
2400 1.1 christos { "cmps{b|}", { Xb, Yb } },
2401 1.1 christos { "cmps{R|}", { Xv, Yv } },
2402 1.1 christos /* a8 */
2403 1.1 christos { "testB", { AL, Ib } },
2404 1.1 christos { "testS", { eAX, Iv } },
2405 1.1 christos { "stosB", { Ybr, AL } },
2406 1.1 christos { "stosS", { Yvr, eAX } },
2407 1.1 christos { "lodsB", { ALr, Xb } },
2408 1.1 christos { "lodsS", { eAXr, Xv } },
2409 1.1 christos { "scasB", { AL, Yb } },
2410 1.1 christos { "scasS", { eAX, Yv } },
2411 1.1 christos /* b0 */
2412 1.1 christos { "movB", { RMAL, Ib } },
2413 1.1 christos { "movB", { RMCL, Ib } },
2414 1.1 christos { "movB", { RMDL, Ib } },
2415 1.1 christos { "movB", { RMBL, Ib } },
2416 1.1 christos { "movB", { RMAH, Ib } },
2417 1.1 christos { "movB", { RMCH, Ib } },
2418 1.1 christos { "movB", { RMDH, Ib } },
2419 1.1 christos { "movB", { RMBH, Ib } },
2420 1.1 christos /* b8 */
2421 1.1 christos { "mov%LV", { RMeAX, Iv64 } },
2422 1.1 christos { "mov%LV", { RMeCX, Iv64 } },
2423 1.1 christos { "mov%LV", { RMeDX, Iv64 } },
2424 1.1 christos { "mov%LV", { RMeBX, Iv64 } },
2425 1.1 christos { "mov%LV", { RMeSP, Iv64 } },
2426 1.1 christos { "mov%LV", { RMeBP, Iv64 } },
2427 1.1 christos { "mov%LV", { RMeSI, Iv64 } },
2428 1.1 christos { "mov%LV", { RMeDI, Iv64 } },
2429 1.1 christos /* c0 */
2430 1.1 christos { REG_TABLE (REG_C0) },
2431 1.1 christos { REG_TABLE (REG_C1) },
2432 1.1.1.1.8.1 tls { "retT", { Iw, BND } },
2433 1.1.1.1.8.1 tls { "retT", { BND } },
2434 1.1 christos { X86_64_TABLE (X86_64_C4) },
2435 1.1 christos { X86_64_TABLE (X86_64_C5) },
2436 1.1 christos { REG_TABLE (REG_C6) },
2437 1.1 christos { REG_TABLE (REG_C7) },
2438 1.1 christos /* c8 */
2439 1.1 christos { "enterT", { Iw, Ib } },
2440 1.1 christos { "leaveT", { XX } },
2441 1.1 christos { "Jret{|f}P", { Iw } },
2442 1.1 christos { "Jret{|f}P", { XX } },
2443 1.1 christos { "int3", { XX } },
2444 1.1 christos { "int", { Ib } },
2445 1.1 christos { X86_64_TABLE (X86_64_CE) },
2446 1.1 christos { "iretP", { XX } },
2447 1.1 christos /* d0 */
2448 1.1 christos { REG_TABLE (REG_D0) },
2449 1.1 christos { REG_TABLE (REG_D1) },
2450 1.1 christos { REG_TABLE (REG_D2) },
2451 1.1 christos { REG_TABLE (REG_D3) },
2452 1.1 christos { X86_64_TABLE (X86_64_D4) },
2453 1.1 christos { X86_64_TABLE (X86_64_D5) },
2454 1.1 christos { Bad_Opcode },
2455 1.1 christos { "xlat", { DSBX } },
2456 1.1 christos /* d8 */
2457 1.1 christos { FLOAT },
2458 1.1 christos { FLOAT },
2459 1.1 christos { FLOAT },
2460 1.1 christos { FLOAT },
2461 1.1 christos { FLOAT },
2462 1.1 christos { FLOAT },
2463 1.1 christos { FLOAT },
2464 1.1 christos { FLOAT },
2465 1.1 christos /* e0 */
2466 1.1 christos { "loopneFH", { Jb, XX, loop_jcxz_flag } },
2467 1.1 christos { "loopeFH", { Jb, XX, loop_jcxz_flag } },
2468 1.1 christos { "loopFH", { Jb, XX, loop_jcxz_flag } },
2469 1.1 christos { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
2470 1.1 christos { "inB", { AL, Ib } },
2471 1.1 christos { "inG", { zAX, Ib } },
2472 1.1 christos { "outB", { Ib, AL } },
2473 1.1 christos { "outG", { Ib, zAX } },
2474 1.1 christos /* e8 */
2475 1.1.1.1.8.1 tls { "callT", { Jv, BND } },
2476 1.1.1.1.8.1 tls { "jmpT", { Jv, BND } },
2477 1.1 christos { X86_64_TABLE (X86_64_EA) },
2478 1.1.1.1.8.1 tls { "jmp", { Jb, BND } },
2479 1.1 christos { "inB", { AL, indirDX } },
2480 1.1 christos { "inG", { zAX, indirDX } },
2481 1.1 christos { "outB", { indirDX, AL } },
2482 1.1 christos { "outG", { indirDX, zAX } },
2483 1.1 christos /* f0 */
2484 1.1 christos { Bad_Opcode }, /* lock prefix */
2485 1.1 christos { "icebp", { XX } },
2486 1.1 christos { Bad_Opcode }, /* repne */
2487 1.1 christos { Bad_Opcode }, /* repz */
2488 1.1 christos { "hlt", { XX } },
2489 1.1 christos { "cmc", { XX } },
2490 1.1 christos { REG_TABLE (REG_F6) },
2491 1.1 christos { REG_TABLE (REG_F7) },
2492 1.1 christos /* f8 */
2493 1.1 christos { "clc", { XX } },
2494 1.1 christos { "stc", { XX } },
2495 1.1 christos { "cli", { XX } },
2496 1.1 christos { "sti", { XX } },
2497 1.1 christos { "cld", { XX } },
2498 1.1 christos { "std", { XX } },
2499 1.1 christos { REG_TABLE (REG_FE) },
2500 1.1 christos { REG_TABLE (REG_FF) },
2501 1.1 christos };
2502 1.1 christos
2503 1.1 christos static const struct dis386 dis386_twobyte[] = {
2504 1.1 christos /* 00 */
2505 1.1 christos { REG_TABLE (REG_0F00 ) },
2506 1.1 christos { REG_TABLE (REG_0F01 ) },
2507 1.1 christos { "larS", { Gv, Ew } },
2508 1.1 christos { "lslS", { Gv, Ew } },
2509 1.1 christos { Bad_Opcode },
2510 1.1 christos { "syscall", { XX } },
2511 1.1 christos { "clts", { XX } },
2512 1.1 christos { "sysretP", { XX } },
2513 1.1 christos /* 08 */
2514 1.1 christos { "invd", { XX } },
2515 1.1 christos { "wbinvd", { XX } },
2516 1.1 christos { Bad_Opcode },
2517 1.1 christos { "ud2", { XX } },
2518 1.1 christos { Bad_Opcode },
2519 1.1 christos { REG_TABLE (REG_0F0D) },
2520 1.1 christos { "femms", { XX } },
2521 1.1 christos { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
2522 1.1 christos /* 10 */
2523 1.1 christos { PREFIX_TABLE (PREFIX_0F10) },
2524 1.1 christos { PREFIX_TABLE (PREFIX_0F11) },
2525 1.1 christos { PREFIX_TABLE (PREFIX_0F12) },
2526 1.1 christos { MOD_TABLE (MOD_0F13) },
2527 1.1 christos { "unpcklpX", { XM, EXx } },
2528 1.1 christos { "unpckhpX", { XM, EXx } },
2529 1.1 christos { PREFIX_TABLE (PREFIX_0F16) },
2530 1.1 christos { MOD_TABLE (MOD_0F17) },
2531 1.1 christos /* 18 */
2532 1.1 christos { REG_TABLE (REG_0F18) },
2533 1.1 christos { "nopQ", { Ev } },
2534 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_0F1A) },
2535 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_0F1B) },
2536 1.1 christos { "nopQ", { Ev } },
2537 1.1 christos { "nopQ", { Ev } },
2538 1.1 christos { "nopQ", { Ev } },
2539 1.1 christos { "nopQ", { Ev } },
2540 1.1 christos /* 20 */
2541 1.1 christos { MOD_TABLE (MOD_0F20) },
2542 1.1 christos { MOD_TABLE (MOD_0F21) },
2543 1.1 christos { MOD_TABLE (MOD_0F22) },
2544 1.1 christos { MOD_TABLE (MOD_0F23) },
2545 1.1 christos { MOD_TABLE (MOD_0F24) },
2546 1.1 christos { Bad_Opcode },
2547 1.1 christos { MOD_TABLE (MOD_0F26) },
2548 1.1 christos { Bad_Opcode },
2549 1.1 christos /* 28 */
2550 1.1 christos { "movapX", { XM, EXx } },
2551 1.1 christos { "movapX", { EXxS, XM } },
2552 1.1 christos { PREFIX_TABLE (PREFIX_0F2A) },
2553 1.1 christos { PREFIX_TABLE (PREFIX_0F2B) },
2554 1.1 christos { PREFIX_TABLE (PREFIX_0F2C) },
2555 1.1 christos { PREFIX_TABLE (PREFIX_0F2D) },
2556 1.1 christos { PREFIX_TABLE (PREFIX_0F2E) },
2557 1.1 christos { PREFIX_TABLE (PREFIX_0F2F) },
2558 1.1 christos /* 30 */
2559 1.1 christos { "wrmsr", { XX } },
2560 1.1 christos { "rdtsc", { XX } },
2561 1.1 christos { "rdmsr", { XX } },
2562 1.1 christos { "rdpmc", { XX } },
2563 1.1 christos { "sysenter", { XX } },
2564 1.1 christos { "sysexit", { XX } },
2565 1.1 christos { Bad_Opcode },
2566 1.1 christos { "getsec", { XX } },
2567 1.1 christos /* 38 */
2568 1.1 christos { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
2569 1.1 christos { Bad_Opcode },
2570 1.1 christos { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
2571 1.1 christos { Bad_Opcode },
2572 1.1 christos { Bad_Opcode },
2573 1.1 christos { Bad_Opcode },
2574 1.1 christos { Bad_Opcode },
2575 1.1 christos { Bad_Opcode },
2576 1.1 christos /* 40 */
2577 1.1 christos { "cmovoS", { Gv, Ev } },
2578 1.1 christos { "cmovnoS", { Gv, Ev } },
2579 1.1 christos { "cmovbS", { Gv, Ev } },
2580 1.1 christos { "cmovaeS", { Gv, Ev } },
2581 1.1 christos { "cmoveS", { Gv, Ev } },
2582 1.1 christos { "cmovneS", { Gv, Ev } },
2583 1.1 christos { "cmovbeS", { Gv, Ev } },
2584 1.1 christos { "cmovaS", { Gv, Ev } },
2585 1.1 christos /* 48 */
2586 1.1 christos { "cmovsS", { Gv, Ev } },
2587 1.1 christos { "cmovnsS", { Gv, Ev } },
2588 1.1 christos { "cmovpS", { Gv, Ev } },
2589 1.1 christos { "cmovnpS", { Gv, Ev } },
2590 1.1 christos { "cmovlS", { Gv, Ev } },
2591 1.1 christos { "cmovgeS", { Gv, Ev } },
2592 1.1 christos { "cmovleS", { Gv, Ev } },
2593 1.1 christos { "cmovgS", { Gv, Ev } },
2594 1.1 christos /* 50 */
2595 1.1 christos { MOD_TABLE (MOD_0F51) },
2596 1.1 christos { PREFIX_TABLE (PREFIX_0F51) },
2597 1.1 christos { PREFIX_TABLE (PREFIX_0F52) },
2598 1.1 christos { PREFIX_TABLE (PREFIX_0F53) },
2599 1.1 christos { "andpX", { XM, EXx } },
2600 1.1 christos { "andnpX", { XM, EXx } },
2601 1.1 christos { "orpX", { XM, EXx } },
2602 1.1 christos { "xorpX", { XM, EXx } },
2603 1.1 christos /* 58 */
2604 1.1 christos { PREFIX_TABLE (PREFIX_0F58) },
2605 1.1 christos { PREFIX_TABLE (PREFIX_0F59) },
2606 1.1 christos { PREFIX_TABLE (PREFIX_0F5A) },
2607 1.1 christos { PREFIX_TABLE (PREFIX_0F5B) },
2608 1.1 christos { PREFIX_TABLE (PREFIX_0F5C) },
2609 1.1 christos { PREFIX_TABLE (PREFIX_0F5D) },
2610 1.1 christos { PREFIX_TABLE (PREFIX_0F5E) },
2611 1.1 christos { PREFIX_TABLE (PREFIX_0F5F) },
2612 1.1 christos /* 60 */
2613 1.1 christos { PREFIX_TABLE (PREFIX_0F60) },
2614 1.1 christos { PREFIX_TABLE (PREFIX_0F61) },
2615 1.1 christos { PREFIX_TABLE (PREFIX_0F62) },
2616 1.1 christos { "packsswb", { MX, EM } },
2617 1.1 christos { "pcmpgtb", { MX, EM } },
2618 1.1 christos { "pcmpgtw", { MX, EM } },
2619 1.1 christos { "pcmpgtd", { MX, EM } },
2620 1.1 christos { "packuswb", { MX, EM } },
2621 1.1 christos /* 68 */
2622 1.1 christos { "punpckhbw", { MX, EM } },
2623 1.1 christos { "punpckhwd", { MX, EM } },
2624 1.1 christos { "punpckhdq", { MX, EM } },
2625 1.1 christos { "packssdw", { MX, EM } },
2626 1.1 christos { PREFIX_TABLE (PREFIX_0F6C) },
2627 1.1 christos { PREFIX_TABLE (PREFIX_0F6D) },
2628 1.1 christos { "movK", { MX, Edq } },
2629 1.1 christos { PREFIX_TABLE (PREFIX_0F6F) },
2630 1.1 christos /* 70 */
2631 1.1 christos { PREFIX_TABLE (PREFIX_0F70) },
2632 1.1 christos { REG_TABLE (REG_0F71) },
2633 1.1 christos { REG_TABLE (REG_0F72) },
2634 1.1 christos { REG_TABLE (REG_0F73) },
2635 1.1 christos { "pcmpeqb", { MX, EM } },
2636 1.1 christos { "pcmpeqw", { MX, EM } },
2637 1.1 christos { "pcmpeqd", { MX, EM } },
2638 1.1 christos { "emms", { XX } },
2639 1.1 christos /* 78 */
2640 1.1 christos { PREFIX_TABLE (PREFIX_0F78) },
2641 1.1 christos { PREFIX_TABLE (PREFIX_0F79) },
2642 1.1 christos { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
2643 1.1 christos { Bad_Opcode },
2644 1.1 christos { PREFIX_TABLE (PREFIX_0F7C) },
2645 1.1 christos { PREFIX_TABLE (PREFIX_0F7D) },
2646 1.1 christos { PREFIX_TABLE (PREFIX_0F7E) },
2647 1.1 christos { PREFIX_TABLE (PREFIX_0F7F) },
2648 1.1 christos /* 80 */
2649 1.1.1.1.8.1 tls { "joH", { Jv, BND, cond_jump_flag } },
2650 1.1.1.1.8.1 tls { "jnoH", { Jv, BND, cond_jump_flag } },
2651 1.1.1.1.8.1 tls { "jbH", { Jv, BND, cond_jump_flag } },
2652 1.1.1.1.8.1 tls { "jaeH", { Jv, BND, cond_jump_flag } },
2653 1.1.1.1.8.1 tls { "jeH", { Jv, BND, cond_jump_flag } },
2654 1.1.1.1.8.1 tls { "jneH", { Jv, BND, cond_jump_flag } },
2655 1.1.1.1.8.1 tls { "jbeH", { Jv, BND, cond_jump_flag } },
2656 1.1.1.1.8.1 tls { "jaH", { Jv, BND, cond_jump_flag } },
2657 1.1 christos /* 88 */
2658 1.1.1.1.8.1 tls { "jsH", { Jv, BND, cond_jump_flag } },
2659 1.1.1.1.8.1 tls { "jnsH", { Jv, BND, cond_jump_flag } },
2660 1.1.1.1.8.1 tls { "jpH", { Jv, BND, cond_jump_flag } },
2661 1.1.1.1.8.1 tls { "jnpH", { Jv, BND, cond_jump_flag } },
2662 1.1.1.1.8.1 tls { "jlH", { Jv, BND, cond_jump_flag } },
2663 1.1.1.1.8.1 tls { "jgeH", { Jv, BND, cond_jump_flag } },
2664 1.1.1.1.8.1 tls { "jleH", { Jv, BND, cond_jump_flag } },
2665 1.1.1.1.8.1 tls { "jgH", { Jv, BND, cond_jump_flag } },
2666 1.1 christos /* 90 */
2667 1.1 christos { "seto", { Eb } },
2668 1.1 christos { "setno", { Eb } },
2669 1.1 christos { "setb", { Eb } },
2670 1.1 christos { "setae", { Eb } },
2671 1.1 christos { "sete", { Eb } },
2672 1.1 christos { "setne", { Eb } },
2673 1.1 christos { "setbe", { Eb } },
2674 1.1 christos { "seta", { Eb } },
2675 1.1 christos /* 98 */
2676 1.1 christos { "sets", { Eb } },
2677 1.1 christos { "setns", { Eb } },
2678 1.1 christos { "setp", { Eb } },
2679 1.1 christos { "setnp", { Eb } },
2680 1.1 christos { "setl", { Eb } },
2681 1.1 christos { "setge", { Eb } },
2682 1.1 christos { "setle", { Eb } },
2683 1.1 christos { "setg", { Eb } },
2684 1.1 christos /* a0 */
2685 1.1 christos { "pushT", { fs } },
2686 1.1 christos { "popT", { fs } },
2687 1.1 christos { "cpuid", { XX } },
2688 1.1 christos { "btS", { Ev, Gv } },
2689 1.1 christos { "shldS", { Ev, Gv, Ib } },
2690 1.1 christos { "shldS", { Ev, Gv, CL } },
2691 1.1 christos { REG_TABLE (REG_0FA6) },
2692 1.1 christos { REG_TABLE (REG_0FA7) },
2693 1.1 christos /* a8 */
2694 1.1 christos { "pushT", { gs } },
2695 1.1 christos { "popT", { gs } },
2696 1.1 christos { "rsm", { XX } },
2697 1.1.1.1.8.1 tls { "btsS", { Evh1, Gv } },
2698 1.1 christos { "shrdS", { Ev, Gv, Ib } },
2699 1.1 christos { "shrdS", { Ev, Gv, CL } },
2700 1.1 christos { REG_TABLE (REG_0FAE) },
2701 1.1 christos { "imulS", { Gv, Ev } },
2702 1.1 christos /* b0 */
2703 1.1.1.1.8.1 tls { "cmpxchgB", { Ebh1, Gb } },
2704 1.1.1.1.8.1 tls { "cmpxchgS", { Evh1, Gv } },
2705 1.1 christos { MOD_TABLE (MOD_0FB2) },
2706 1.1.1.1.8.1 tls { "btrS", { Evh1, Gv } },
2707 1.1 christos { MOD_TABLE (MOD_0FB4) },
2708 1.1 christos { MOD_TABLE (MOD_0FB5) },
2709 1.1 christos { "movz{bR|x}", { Gv, Eb } },
2710 1.1 christos { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
2711 1.1 christos /* b8 */
2712 1.1 christos { PREFIX_TABLE (PREFIX_0FB8) },
2713 1.1 christos { "ud1", { XX } },
2714 1.1 christos { REG_TABLE (REG_0FBA) },
2715 1.1.1.1.8.1 tls { "btcS", { Evh1, Gv } },
2716 1.1 christos { PREFIX_TABLE (PREFIX_0FBC) },
2717 1.1 christos { PREFIX_TABLE (PREFIX_0FBD) },
2718 1.1 christos { "movs{bR|x}", { Gv, Eb } },
2719 1.1 christos { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
2720 1.1 christos /* c0 */
2721 1.1.1.1.8.1 tls { "xaddB", { Ebh1, Gb } },
2722 1.1.1.1.8.1 tls { "xaddS", { Evh1, Gv } },
2723 1.1 christos { PREFIX_TABLE (PREFIX_0FC2) },
2724 1.1 christos { PREFIX_TABLE (PREFIX_0FC3) },
2725 1.1 christos { "pinsrw", { MX, Edqw, Ib } },
2726 1.1 christos { "pextrw", { Gdq, MS, Ib } },
2727 1.1 christos { "shufpX", { XM, EXx, Ib } },
2728 1.1 christos { REG_TABLE (REG_0FC7) },
2729 1.1 christos /* c8 */
2730 1.1 christos { "bswap", { RMeAX } },
2731 1.1 christos { "bswap", { RMeCX } },
2732 1.1 christos { "bswap", { RMeDX } },
2733 1.1 christos { "bswap", { RMeBX } },
2734 1.1 christos { "bswap", { RMeSP } },
2735 1.1 christos { "bswap", { RMeBP } },
2736 1.1 christos { "bswap", { RMeSI } },
2737 1.1 christos { "bswap", { RMeDI } },
2738 1.1 christos /* d0 */
2739 1.1 christos { PREFIX_TABLE (PREFIX_0FD0) },
2740 1.1 christos { "psrlw", { MX, EM } },
2741 1.1 christos { "psrld", { MX, EM } },
2742 1.1 christos { "psrlq", { MX, EM } },
2743 1.1 christos { "paddq", { MX, EM } },
2744 1.1 christos { "pmullw", { MX, EM } },
2745 1.1 christos { PREFIX_TABLE (PREFIX_0FD6) },
2746 1.1 christos { MOD_TABLE (MOD_0FD7) },
2747 1.1 christos /* d8 */
2748 1.1 christos { "psubusb", { MX, EM } },
2749 1.1 christos { "psubusw", { MX, EM } },
2750 1.1 christos { "pminub", { MX, EM } },
2751 1.1 christos { "pand", { MX, EM } },
2752 1.1 christos { "paddusb", { MX, EM } },
2753 1.1 christos { "paddusw", { MX, EM } },
2754 1.1 christos { "pmaxub", { MX, EM } },
2755 1.1 christos { "pandn", { MX, EM } },
2756 1.1 christos /* e0 */
2757 1.1 christos { "pavgb", { MX, EM } },
2758 1.1 christos { "psraw", { MX, EM } },
2759 1.1 christos { "psrad", { MX, EM } },
2760 1.1 christos { "pavgw", { MX, EM } },
2761 1.1 christos { "pmulhuw", { MX, EM } },
2762 1.1 christos { "pmulhw", { MX, EM } },
2763 1.1 christos { PREFIX_TABLE (PREFIX_0FE6) },
2764 1.1 christos { PREFIX_TABLE (PREFIX_0FE7) },
2765 1.1 christos /* e8 */
2766 1.1 christos { "psubsb", { MX, EM } },
2767 1.1 christos { "psubsw", { MX, EM } },
2768 1.1 christos { "pminsw", { MX, EM } },
2769 1.1 christos { "por", { MX, EM } },
2770 1.1 christos { "paddsb", { MX, EM } },
2771 1.1 christos { "paddsw", { MX, EM } },
2772 1.1 christos { "pmaxsw", { MX, EM } },
2773 1.1 christos { "pxor", { MX, EM } },
2774 1.1 christos /* f0 */
2775 1.1 christos { PREFIX_TABLE (PREFIX_0FF0) },
2776 1.1 christos { "psllw", { MX, EM } },
2777 1.1 christos { "pslld", { MX, EM } },
2778 1.1 christos { "psllq", { MX, EM } },
2779 1.1 christos { "pmuludq", { MX, EM } },
2780 1.1 christos { "pmaddwd", { MX, EM } },
2781 1.1 christos { "psadbw", { MX, EM } },
2782 1.1 christos { PREFIX_TABLE (PREFIX_0FF7) },
2783 1.1 christos /* f8 */
2784 1.1 christos { "psubb", { MX, EM } },
2785 1.1 christos { "psubw", { MX, EM } },
2786 1.1 christos { "psubd", { MX, EM } },
2787 1.1 christos { "psubq", { MX, EM } },
2788 1.1 christos { "paddb", { MX, EM } },
2789 1.1 christos { "paddw", { MX, EM } },
2790 1.1 christos { "paddd", { MX, EM } },
2791 1.1 christos { Bad_Opcode },
2792 1.1 christos };
2793 1.1 christos
2794 1.1 christos static const unsigned char onebyte_has_modrm[256] = {
2795 1.1 christos /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2796 1.1 christos /* ------------------------------- */
2797 1.1 christos /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2798 1.1 christos /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2799 1.1 christos /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2800 1.1 christos /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2801 1.1 christos /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2802 1.1 christos /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2803 1.1 christos /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2804 1.1 christos /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2805 1.1 christos /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2806 1.1 christos /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2807 1.1 christos /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2808 1.1 christos /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2809 1.1 christos /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2810 1.1 christos /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2811 1.1 christos /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2812 1.1 christos /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2813 1.1 christos /* ------------------------------- */
2814 1.1 christos /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2815 1.1 christos };
2816 1.1 christos
2817 1.1 christos static const unsigned char twobyte_has_modrm[256] = {
2818 1.1 christos /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2819 1.1 christos /* ------------------------------- */
2820 1.1 christos /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
2821 1.1 christos /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
2822 1.1 christos /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
2823 1.1 christos /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
2824 1.1 christos /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
2825 1.1 christos /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2826 1.1 christos /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
2827 1.1 christos /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
2828 1.1 christos /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2829 1.1 christos /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
2830 1.1 christos /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
2831 1.1 christos /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
2832 1.1 christos /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
2833 1.1 christos /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
2834 1.1 christos /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
2835 1.1 christos /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
2836 1.1 christos /* ------------------------------- */
2837 1.1 christos /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2838 1.1 christos };
2839 1.1 christos
2840 1.1 christos static char obuf[100];
2841 1.1 christos static char *obufp;
2842 1.1 christos static char *mnemonicendp;
2843 1.1 christos static char scratchbuf[100];
2844 1.1 christos static unsigned char *start_codep;
2845 1.1 christos static unsigned char *insn_codep;
2846 1.1 christos static unsigned char *codep;
2847 1.1 christos static int last_lock_prefix;
2848 1.1 christos static int last_repz_prefix;
2849 1.1 christos static int last_repnz_prefix;
2850 1.1 christos static int last_data_prefix;
2851 1.1 christos static int last_addr_prefix;
2852 1.1 christos static int last_rex_prefix;
2853 1.1 christos static int last_seg_prefix;
2854 1.1 christos #define MAX_CODE_LENGTH 15
2855 1.1 christos /* We can up to 14 prefixes since the maximum instruction length is
2856 1.1 christos 15bytes. */
2857 1.1 christos static int all_prefixes[MAX_CODE_LENGTH - 1];
2858 1.1 christos static disassemble_info *the_info;
2859 1.1 christos static struct
2860 1.1 christos {
2861 1.1 christos int mod;
2862 1.1 christos int reg;
2863 1.1 christos int rm;
2864 1.1 christos }
2865 1.1 christos modrm;
2866 1.1 christos static unsigned char need_modrm;
2867 1.1 christos static struct
2868 1.1 christos {
2869 1.1 christos int scale;
2870 1.1 christos int index;
2871 1.1 christos int base;
2872 1.1 christos }
2873 1.1 christos sib;
2874 1.1 christos static struct
2875 1.1 christos {
2876 1.1 christos int register_specifier;
2877 1.1 christos int length;
2878 1.1 christos int prefix;
2879 1.1 christos int w;
2880 1.1.1.1.8.1 tls int evex;
2881 1.1.1.1.8.1 tls int r;
2882 1.1.1.1.8.1 tls int v;
2883 1.1.1.1.8.1 tls int mask_register_specifier;
2884 1.1.1.1.8.1 tls int zeroing;
2885 1.1.1.1.8.1 tls int ll;
2886 1.1.1.1.8.1 tls int b;
2887 1.1 christos }
2888 1.1 christos vex;
2889 1.1 christos static unsigned char need_vex;
2890 1.1 christos static unsigned char need_vex_reg;
2891 1.1 christos static unsigned char vex_w_done;
2892 1.1 christos
2893 1.1 christos struct op
2894 1.1 christos {
2895 1.1 christos const char *name;
2896 1.1 christos unsigned int len;
2897 1.1 christos };
2898 1.1 christos
2899 1.1 christos /* If we are accessing mod/rm/reg without need_modrm set, then the
2900 1.1 christos values are stale. Hitting this abort likely indicates that you
2901 1.1 christos need to update onebyte_has_modrm or twobyte_has_modrm. */
2902 1.1 christos #define MODRM_CHECK if (!need_modrm) abort ()
2903 1.1 christos
2904 1.1 christos static const char **names64;
2905 1.1 christos static const char **names32;
2906 1.1 christos static const char **names16;
2907 1.1 christos static const char **names8;
2908 1.1 christos static const char **names8rex;
2909 1.1 christos static const char **names_seg;
2910 1.1 christos static const char *index64;
2911 1.1 christos static const char *index32;
2912 1.1 christos static const char **index16;
2913 1.1.1.1.8.1 tls static const char **names_bnd;
2914 1.1 christos
2915 1.1 christos static const char *intel_names64[] = {
2916 1.1 christos "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2917 1.1 christos "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2918 1.1 christos };
2919 1.1 christos static const char *intel_names32[] = {
2920 1.1 christos "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2921 1.1 christos "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2922 1.1 christos };
2923 1.1 christos static const char *intel_names16[] = {
2924 1.1 christos "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2925 1.1 christos "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2926 1.1 christos };
2927 1.1 christos static const char *intel_names8[] = {
2928 1.1 christos "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2929 1.1 christos };
2930 1.1 christos static const char *intel_names8rex[] = {
2931 1.1 christos "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2932 1.1 christos "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2933 1.1 christos };
2934 1.1 christos static const char *intel_names_seg[] = {
2935 1.1 christos "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2936 1.1 christos };
2937 1.1 christos static const char *intel_index64 = "riz";
2938 1.1 christos static const char *intel_index32 = "eiz";
2939 1.1 christos static const char *intel_index16[] = {
2940 1.1 christos "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2941 1.1 christos };
2942 1.1 christos
2943 1.1 christos static const char *att_names64[] = {
2944 1.1 christos "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
2945 1.1 christos "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2946 1.1 christos };
2947 1.1 christos static const char *att_names32[] = {
2948 1.1 christos "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
2949 1.1 christos "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
2950 1.1 christos };
2951 1.1 christos static const char *att_names16[] = {
2952 1.1 christos "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
2953 1.1 christos "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
2954 1.1 christos };
2955 1.1 christos static const char *att_names8[] = {
2956 1.1 christos "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
2957 1.1 christos };
2958 1.1 christos static const char *att_names8rex[] = {
2959 1.1 christos "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
2960 1.1 christos "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2961 1.1 christos };
2962 1.1 christos static const char *att_names_seg[] = {
2963 1.1 christos "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
2964 1.1 christos };
2965 1.1 christos static const char *att_index64 = "%riz";
2966 1.1 christos static const char *att_index32 = "%eiz";
2967 1.1 christos static const char *att_index16[] = {
2968 1.1 christos "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
2969 1.1 christos };
2970 1.1 christos
2971 1.1 christos static const char **names_mm;
2972 1.1 christos static const char *intel_names_mm[] = {
2973 1.1 christos "mm0", "mm1", "mm2", "mm3",
2974 1.1 christos "mm4", "mm5", "mm6", "mm7"
2975 1.1 christos };
2976 1.1 christos static const char *att_names_mm[] = {
2977 1.1 christos "%mm0", "%mm1", "%mm2", "%mm3",
2978 1.1 christos "%mm4", "%mm5", "%mm6", "%mm7"
2979 1.1 christos };
2980 1.1 christos
2981 1.1.1.1.8.1 tls static const char *intel_names_bnd[] = {
2982 1.1.1.1.8.1 tls "bnd0", "bnd1", "bnd2", "bnd3"
2983 1.1.1.1.8.1 tls };
2984 1.1.1.1.8.1 tls
2985 1.1.1.1.8.1 tls static const char *att_names_bnd[] = {
2986 1.1.1.1.8.1 tls "%bnd0", "%bnd1", "%bnd2", "%bnd3"
2987 1.1.1.1.8.1 tls };
2988 1.1.1.1.8.1 tls
2989 1.1 christos static const char **names_xmm;
2990 1.1 christos static const char *intel_names_xmm[] = {
2991 1.1 christos "xmm0", "xmm1", "xmm2", "xmm3",
2992 1.1 christos "xmm4", "xmm5", "xmm6", "xmm7",
2993 1.1 christos "xmm8", "xmm9", "xmm10", "xmm11",
2994 1.1.1.1.8.1 tls "xmm12", "xmm13", "xmm14", "xmm15",
2995 1.1.1.1.8.1 tls "xmm16", "xmm17", "xmm18", "xmm19",
2996 1.1.1.1.8.1 tls "xmm20", "xmm21", "xmm22", "xmm23",
2997 1.1.1.1.8.1 tls "xmm24", "xmm25", "xmm26", "xmm27",
2998 1.1.1.1.8.1 tls "xmm28", "xmm29", "xmm30", "xmm31"
2999 1.1 christos };
3000 1.1 christos static const char *att_names_xmm[] = {
3001 1.1 christos "%xmm0", "%xmm1", "%xmm2", "%xmm3",
3002 1.1 christos "%xmm4", "%xmm5", "%xmm6", "%xmm7",
3003 1.1 christos "%xmm8", "%xmm9", "%xmm10", "%xmm11",
3004 1.1.1.1.8.1 tls "%xmm12", "%xmm13", "%xmm14", "%xmm15",
3005 1.1.1.1.8.1 tls "%xmm16", "%xmm17", "%xmm18", "%xmm19",
3006 1.1.1.1.8.1 tls "%xmm20", "%xmm21", "%xmm22", "%xmm23",
3007 1.1.1.1.8.1 tls "%xmm24", "%xmm25", "%xmm26", "%xmm27",
3008 1.1.1.1.8.1 tls "%xmm28", "%xmm29", "%xmm30", "%xmm31"
3009 1.1 christos };
3010 1.1 christos
3011 1.1 christos static const char **names_ymm;
3012 1.1 christos static const char *intel_names_ymm[] = {
3013 1.1 christos "ymm0", "ymm1", "ymm2", "ymm3",
3014 1.1 christos "ymm4", "ymm5", "ymm6", "ymm7",
3015 1.1 christos "ymm8", "ymm9", "ymm10", "ymm11",
3016 1.1.1.1.8.1 tls "ymm12", "ymm13", "ymm14", "ymm15",
3017 1.1.1.1.8.1 tls "ymm16", "ymm17", "ymm18", "ymm19",
3018 1.1.1.1.8.1 tls "ymm20", "ymm21", "ymm22", "ymm23",
3019 1.1.1.1.8.1 tls "ymm24", "ymm25", "ymm26", "ymm27",
3020 1.1.1.1.8.1 tls "ymm28", "ymm29", "ymm30", "ymm31"
3021 1.1 christos };
3022 1.1 christos static const char *att_names_ymm[] = {
3023 1.1 christos "%ymm0", "%ymm1", "%ymm2", "%ymm3",
3024 1.1 christos "%ymm4", "%ymm5", "%ymm6", "%ymm7",
3025 1.1 christos "%ymm8", "%ymm9", "%ymm10", "%ymm11",
3026 1.1.1.1.8.1 tls "%ymm12", "%ymm13", "%ymm14", "%ymm15",
3027 1.1.1.1.8.1 tls "%ymm16", "%ymm17", "%ymm18", "%ymm19",
3028 1.1.1.1.8.1 tls "%ymm20", "%ymm21", "%ymm22", "%ymm23",
3029 1.1.1.1.8.1 tls "%ymm24", "%ymm25", "%ymm26", "%ymm27",
3030 1.1.1.1.8.1 tls "%ymm28", "%ymm29", "%ymm30", "%ymm31"
3031 1.1.1.1.8.1 tls };
3032 1.1.1.1.8.1 tls
3033 1.1.1.1.8.1 tls static const char **names_zmm;
3034 1.1.1.1.8.1 tls static const char *intel_names_zmm[] = {
3035 1.1.1.1.8.1 tls "zmm0", "zmm1", "zmm2", "zmm3",
3036 1.1.1.1.8.1 tls "zmm4", "zmm5", "zmm6", "zmm7",
3037 1.1.1.1.8.1 tls "zmm8", "zmm9", "zmm10", "zmm11",
3038 1.1.1.1.8.1 tls "zmm12", "zmm13", "zmm14", "zmm15",
3039 1.1.1.1.8.1 tls "zmm16", "zmm17", "zmm18", "zmm19",
3040 1.1.1.1.8.1 tls "zmm20", "zmm21", "zmm22", "zmm23",
3041 1.1.1.1.8.1 tls "zmm24", "zmm25", "zmm26", "zmm27",
3042 1.1.1.1.8.1 tls "zmm28", "zmm29", "zmm30", "zmm31"
3043 1.1.1.1.8.1 tls };
3044 1.1.1.1.8.1 tls static const char *att_names_zmm[] = {
3045 1.1.1.1.8.1 tls "%zmm0", "%zmm1", "%zmm2", "%zmm3",
3046 1.1.1.1.8.1 tls "%zmm4", "%zmm5", "%zmm6", "%zmm7",
3047 1.1.1.1.8.1 tls "%zmm8", "%zmm9", "%zmm10", "%zmm11",
3048 1.1.1.1.8.1 tls "%zmm12", "%zmm13", "%zmm14", "%zmm15",
3049 1.1.1.1.8.1 tls "%zmm16", "%zmm17", "%zmm18", "%zmm19",
3050 1.1.1.1.8.1 tls "%zmm20", "%zmm21", "%zmm22", "%zmm23",
3051 1.1.1.1.8.1 tls "%zmm24", "%zmm25", "%zmm26", "%zmm27",
3052 1.1.1.1.8.1 tls "%zmm28", "%zmm29", "%zmm30", "%zmm31"
3053 1.1.1.1.8.1 tls };
3054 1.1.1.1.8.1 tls
3055 1.1.1.1.8.1 tls static const char **names_mask;
3056 1.1.1.1.8.1 tls static const char *intel_names_mask[] = {
3057 1.1.1.1.8.1 tls "k0", "k1", "k2", "k3", "k4", "k5", "k6", "k7"
3058 1.1.1.1.8.1 tls };
3059 1.1.1.1.8.1 tls static const char *att_names_mask[] = {
3060 1.1.1.1.8.1 tls "%k0", "%k1", "%k2", "%k3", "%k4", "%k5", "%k6", "%k7"
3061 1.1.1.1.8.1 tls };
3062 1.1.1.1.8.1 tls
3063 1.1.1.1.8.1 tls static const char *names_rounding[] =
3064 1.1.1.1.8.1 tls {
3065 1.1.1.1.8.1 tls "{rn-sae}",
3066 1.1.1.1.8.1 tls "{rd-sae}",
3067 1.1.1.1.8.1 tls "{ru-sae}",
3068 1.1.1.1.8.1 tls "{rz-sae}"
3069 1.1 christos };
3070 1.1 christos
3071 1.1 christos static const struct dis386 reg_table[][8] = {
3072 1.1 christos /* REG_80 */
3073 1.1 christos {
3074 1.1.1.1.8.1 tls { "addA", { Ebh1, Ib } },
3075 1.1.1.1.8.1 tls { "orA", { Ebh1, Ib } },
3076 1.1.1.1.8.1 tls { "adcA", { Ebh1, Ib } },
3077 1.1.1.1.8.1 tls { "sbbA", { Ebh1, Ib } },
3078 1.1.1.1.8.1 tls { "andA", { Ebh1, Ib } },
3079 1.1.1.1.8.1 tls { "subA", { Ebh1, Ib } },
3080 1.1.1.1.8.1 tls { "xorA", { Ebh1, Ib } },
3081 1.1 christos { "cmpA", { Eb, Ib } },
3082 1.1 christos },
3083 1.1 christos /* REG_81 */
3084 1.1 christos {
3085 1.1.1.1.8.1 tls { "addQ", { Evh1, Iv } },
3086 1.1.1.1.8.1 tls { "orQ", { Evh1, Iv } },
3087 1.1.1.1.8.1 tls { "adcQ", { Evh1, Iv } },
3088 1.1.1.1.8.1 tls { "sbbQ", { Evh1, Iv } },
3089 1.1.1.1.8.1 tls { "andQ", { Evh1, Iv } },
3090 1.1.1.1.8.1 tls { "subQ", { Evh1, Iv } },
3091 1.1.1.1.8.1 tls { "xorQ", { Evh1, Iv } },
3092 1.1 christos { "cmpQ", { Ev, Iv } },
3093 1.1 christos },
3094 1.1 christos /* REG_82 */
3095 1.1 christos {
3096 1.1.1.1.8.1 tls { "addQ", { Evh1, sIb } },
3097 1.1.1.1.8.1 tls { "orQ", { Evh1, sIb } },
3098 1.1.1.1.8.1 tls { "adcQ", { Evh1, sIb } },
3099 1.1.1.1.8.1 tls { "sbbQ", { Evh1, sIb } },
3100 1.1.1.1.8.1 tls { "andQ", { Evh1, sIb } },
3101 1.1.1.1.8.1 tls { "subQ", { Evh1, sIb } },
3102 1.1.1.1.8.1 tls { "xorQ", { Evh1, sIb } },
3103 1.1 christos { "cmpQ", { Ev, sIb } },
3104 1.1 christos },
3105 1.1 christos /* REG_8F */
3106 1.1 christos {
3107 1.1 christos { "popU", { stackEv } },
3108 1.1 christos { XOP_8F_TABLE (XOP_09) },
3109 1.1 christos { Bad_Opcode },
3110 1.1 christos { Bad_Opcode },
3111 1.1 christos { Bad_Opcode },
3112 1.1 christos { XOP_8F_TABLE (XOP_09) },
3113 1.1 christos },
3114 1.1 christos /* REG_C0 */
3115 1.1 christos {
3116 1.1 christos { "rolA", { Eb, Ib } },
3117 1.1 christos { "rorA", { Eb, Ib } },
3118 1.1 christos { "rclA", { Eb, Ib } },
3119 1.1 christos { "rcrA", { Eb, Ib } },
3120 1.1 christos { "shlA", { Eb, Ib } },
3121 1.1 christos { "shrA", { Eb, Ib } },
3122 1.1 christos { Bad_Opcode },
3123 1.1 christos { "sarA", { Eb, Ib } },
3124 1.1 christos },
3125 1.1 christos /* REG_C1 */
3126 1.1 christos {
3127 1.1 christos { "rolQ", { Ev, Ib } },
3128 1.1 christos { "rorQ", { Ev, Ib } },
3129 1.1 christos { "rclQ", { Ev, Ib } },
3130 1.1 christos { "rcrQ", { Ev, Ib } },
3131 1.1 christos { "shlQ", { Ev, Ib } },
3132 1.1 christos { "shrQ", { Ev, Ib } },
3133 1.1 christos { Bad_Opcode },
3134 1.1 christos { "sarQ", { Ev, Ib } },
3135 1.1 christos },
3136 1.1 christos /* REG_C6 */
3137 1.1 christos {
3138 1.1.1.1.8.1 tls { "movA", { Ebh3, Ib } },
3139 1.1.1.1.8.1 tls { Bad_Opcode },
3140 1.1.1.1.8.1 tls { Bad_Opcode },
3141 1.1.1.1.8.1 tls { Bad_Opcode },
3142 1.1.1.1.8.1 tls { Bad_Opcode },
3143 1.1.1.1.8.1 tls { Bad_Opcode },
3144 1.1.1.1.8.1 tls { Bad_Opcode },
3145 1.1.1.1.8.1 tls { MOD_TABLE (MOD_C6_REG_7) },
3146 1.1 christos },
3147 1.1 christos /* REG_C7 */
3148 1.1 christos {
3149 1.1.1.1.8.1 tls { "movQ", { Evh3, Iv } },
3150 1.1.1.1.8.1 tls { Bad_Opcode },
3151 1.1.1.1.8.1 tls { Bad_Opcode },
3152 1.1.1.1.8.1 tls { Bad_Opcode },
3153 1.1.1.1.8.1 tls { Bad_Opcode },
3154 1.1.1.1.8.1 tls { Bad_Opcode },
3155 1.1.1.1.8.1 tls { Bad_Opcode },
3156 1.1.1.1.8.1 tls { MOD_TABLE (MOD_C7_REG_7) },
3157 1.1 christos },
3158 1.1 christos /* REG_D0 */
3159 1.1 christos {
3160 1.1 christos { "rolA", { Eb, I1 } },
3161 1.1 christos { "rorA", { Eb, I1 } },
3162 1.1 christos { "rclA", { Eb, I1 } },
3163 1.1 christos { "rcrA", { Eb, I1 } },
3164 1.1 christos { "shlA", { Eb, I1 } },
3165 1.1 christos { "shrA", { Eb, I1 } },
3166 1.1 christos { Bad_Opcode },
3167 1.1 christos { "sarA", { Eb, I1 } },
3168 1.1 christos },
3169 1.1 christos /* REG_D1 */
3170 1.1 christos {
3171 1.1 christos { "rolQ", { Ev, I1 } },
3172 1.1 christos { "rorQ", { Ev, I1 } },
3173 1.1 christos { "rclQ", { Ev, I1 } },
3174 1.1 christos { "rcrQ", { Ev, I1 } },
3175 1.1 christos { "shlQ", { Ev, I1 } },
3176 1.1 christos { "shrQ", { Ev, I1 } },
3177 1.1 christos { Bad_Opcode },
3178 1.1 christos { "sarQ", { Ev, I1 } },
3179 1.1 christos },
3180 1.1 christos /* REG_D2 */
3181 1.1 christos {
3182 1.1 christos { "rolA", { Eb, CL } },
3183 1.1 christos { "rorA", { Eb, CL } },
3184 1.1 christos { "rclA", { Eb, CL } },
3185 1.1 christos { "rcrA", { Eb, CL } },
3186 1.1 christos { "shlA", { Eb, CL } },
3187 1.1 christos { "shrA", { Eb, CL } },
3188 1.1 christos { Bad_Opcode },
3189 1.1 christos { "sarA", { Eb, CL } },
3190 1.1 christos },
3191 1.1 christos /* REG_D3 */
3192 1.1 christos {
3193 1.1 christos { "rolQ", { Ev, CL } },
3194 1.1 christos { "rorQ", { Ev, CL } },
3195 1.1 christos { "rclQ", { Ev, CL } },
3196 1.1 christos { "rcrQ", { Ev, CL } },
3197 1.1 christos { "shlQ", { Ev, CL } },
3198 1.1 christos { "shrQ", { Ev, CL } },
3199 1.1 christos { Bad_Opcode },
3200 1.1 christos { "sarQ", { Ev, CL } },
3201 1.1 christos },
3202 1.1 christos /* REG_F6 */
3203 1.1 christos {
3204 1.1 christos { "testA", { Eb, Ib } },
3205 1.1 christos { Bad_Opcode },
3206 1.1.1.1.8.1 tls { "notA", { Ebh1 } },
3207 1.1.1.1.8.1 tls { "negA", { Ebh1 } },
3208 1.1 christos { "mulA", { Eb } }, /* Don't print the implicit %al register, */
3209 1.1 christos { "imulA", { Eb } }, /* to distinguish these opcodes from other */
3210 1.1 christos { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
3211 1.1 christos { "idivA", { Eb } }, /* and idiv for consistency. */
3212 1.1 christos },
3213 1.1 christos /* REG_F7 */
3214 1.1 christos {
3215 1.1 christos { "testQ", { Ev, Iv } },
3216 1.1 christos { Bad_Opcode },
3217 1.1.1.1.8.1 tls { "notQ", { Evh1 } },
3218 1.1.1.1.8.1 tls { "negQ", { Evh1 } },
3219 1.1 christos { "mulQ", { Ev } }, /* Don't print the implicit register. */
3220 1.1 christos { "imulQ", { Ev } },
3221 1.1 christos { "divQ", { Ev } },
3222 1.1 christos { "idivQ", { Ev } },
3223 1.1 christos },
3224 1.1 christos /* REG_FE */
3225 1.1 christos {
3226 1.1.1.1.8.1 tls { "incA", { Ebh1 } },
3227 1.1.1.1.8.1 tls { "decA", { Ebh1 } },
3228 1.1 christos },
3229 1.1 christos /* REG_FF */
3230 1.1 christos {
3231 1.1.1.1.8.1 tls { "incQ", { Evh1 } },
3232 1.1.1.1.8.1 tls { "decQ", { Evh1 } },
3233 1.1.1.1.8.1 tls { "call{T|}", { indirEv, BND } },
3234 1.1.1.1.8.1 tls { MOD_TABLE (MOD_FF_REG_3) },
3235 1.1.1.1.8.1 tls { "jmp{T|}", { indirEv, BND } },
3236 1.1.1.1.8.1 tls { MOD_TABLE (MOD_FF_REG_5) },
3237 1.1 christos { "pushU", { stackEv } },
3238 1.1 christos { Bad_Opcode },
3239 1.1 christos },
3240 1.1 christos /* REG_0F00 */
3241 1.1 christos {
3242 1.1 christos { "sldtD", { Sv } },
3243 1.1 christos { "strD", { Sv } },
3244 1.1 christos { "lldt", { Ew } },
3245 1.1 christos { "ltr", { Ew } },
3246 1.1 christos { "verr", { Ew } },
3247 1.1 christos { "verw", { Ew } },
3248 1.1 christos { Bad_Opcode },
3249 1.1 christos { Bad_Opcode },
3250 1.1 christos },
3251 1.1 christos /* REG_0F01 */
3252 1.1 christos {
3253 1.1 christos { MOD_TABLE (MOD_0F01_REG_0) },
3254 1.1 christos { MOD_TABLE (MOD_0F01_REG_1) },
3255 1.1 christos { MOD_TABLE (MOD_0F01_REG_2) },
3256 1.1 christos { MOD_TABLE (MOD_0F01_REG_3) },
3257 1.1 christos { "smswD", { Sv } },
3258 1.1 christos { Bad_Opcode },
3259 1.1 christos { "lmsw", { Ew } },
3260 1.1 christos { MOD_TABLE (MOD_0F01_REG_7) },
3261 1.1 christos },
3262 1.1 christos /* REG_0F0D */
3263 1.1 christos {
3264 1.1 christos { "prefetch", { Mb } },
3265 1.1 christos { "prefetchw", { Mb } },
3266 1.1.1.1.8.1 tls { "prefetchwt1", { Mb } },
3267 1.1.1.1.8.1 tls { "prefetch", { Mb } },
3268 1.1.1.1.8.1 tls { "prefetch", { Mb } },
3269 1.1.1.1.8.1 tls { "prefetch", { Mb } },
3270 1.1.1.1.8.1 tls { "prefetch", { Mb } },
3271 1.1.1.1.8.1 tls { "prefetch", { Mb } },
3272 1.1 christos },
3273 1.1 christos /* REG_0F18 */
3274 1.1 christos {
3275 1.1 christos { MOD_TABLE (MOD_0F18_REG_0) },
3276 1.1 christos { MOD_TABLE (MOD_0F18_REG_1) },
3277 1.1 christos { MOD_TABLE (MOD_0F18_REG_2) },
3278 1.1 christos { MOD_TABLE (MOD_0F18_REG_3) },
3279 1.1.1.1.8.1 tls { MOD_TABLE (MOD_0F18_REG_4) },
3280 1.1.1.1.8.1 tls { MOD_TABLE (MOD_0F18_REG_5) },
3281 1.1.1.1.8.1 tls { MOD_TABLE (MOD_0F18_REG_6) },
3282 1.1.1.1.8.1 tls { MOD_TABLE (MOD_0F18_REG_7) },
3283 1.1 christos },
3284 1.1 christos /* REG_0F71 */
3285 1.1 christos {
3286 1.1 christos { Bad_Opcode },
3287 1.1 christos { Bad_Opcode },
3288 1.1 christos { MOD_TABLE (MOD_0F71_REG_2) },
3289 1.1 christos { Bad_Opcode },
3290 1.1 christos { MOD_TABLE (MOD_0F71_REG_4) },
3291 1.1 christos { Bad_Opcode },
3292 1.1 christos { MOD_TABLE (MOD_0F71_REG_6) },
3293 1.1 christos },
3294 1.1 christos /* REG_0F72 */
3295 1.1 christos {
3296 1.1 christos { Bad_Opcode },
3297 1.1 christos { Bad_Opcode },
3298 1.1 christos { MOD_TABLE (MOD_0F72_REG_2) },
3299 1.1 christos { Bad_Opcode },
3300 1.1 christos { MOD_TABLE (MOD_0F72_REG_4) },
3301 1.1 christos { Bad_Opcode },
3302 1.1 christos { MOD_TABLE (MOD_0F72_REG_6) },
3303 1.1 christos },
3304 1.1 christos /* REG_0F73 */
3305 1.1 christos {
3306 1.1 christos { Bad_Opcode },
3307 1.1 christos { Bad_Opcode },
3308 1.1 christos { MOD_TABLE (MOD_0F73_REG_2) },
3309 1.1 christos { MOD_TABLE (MOD_0F73_REG_3) },
3310 1.1 christos { Bad_Opcode },
3311 1.1 christos { Bad_Opcode },
3312 1.1 christos { MOD_TABLE (MOD_0F73_REG_6) },
3313 1.1 christos { MOD_TABLE (MOD_0F73_REG_7) },
3314 1.1 christos },
3315 1.1 christos /* REG_0FA6 */
3316 1.1 christos {
3317 1.1 christos { "montmul", { { OP_0f07, 0 } } },
3318 1.1 christos { "xsha1", { { OP_0f07, 0 } } },
3319 1.1 christos { "xsha256", { { OP_0f07, 0 } } },
3320 1.1 christos },
3321 1.1 christos /* REG_0FA7 */
3322 1.1 christos {
3323 1.1 christos { "xstore-rng", { { OP_0f07, 0 } } },
3324 1.1 christos { "xcrypt-ecb", { { OP_0f07, 0 } } },
3325 1.1 christos { "xcrypt-cbc", { { OP_0f07, 0 } } },
3326 1.1 christos { "xcrypt-ctr", { { OP_0f07, 0 } } },
3327 1.1 christos { "xcrypt-cfb", { { OP_0f07, 0 } } },
3328 1.1 christos { "xcrypt-ofb", { { OP_0f07, 0 } } },
3329 1.1 christos },
3330 1.1 christos /* REG_0FAE */
3331 1.1 christos {
3332 1.1 christos { MOD_TABLE (MOD_0FAE_REG_0) },
3333 1.1 christos { MOD_TABLE (MOD_0FAE_REG_1) },
3334 1.1 christos { MOD_TABLE (MOD_0FAE_REG_2) },
3335 1.1 christos { MOD_TABLE (MOD_0FAE_REG_3) },
3336 1.1 christos { MOD_TABLE (MOD_0FAE_REG_4) },
3337 1.1 christos { MOD_TABLE (MOD_0FAE_REG_5) },
3338 1.1 christos { MOD_TABLE (MOD_0FAE_REG_6) },
3339 1.1 christos { MOD_TABLE (MOD_0FAE_REG_7) },
3340 1.1 christos },
3341 1.1 christos /* REG_0FBA */
3342 1.1 christos {
3343 1.1 christos { Bad_Opcode },
3344 1.1 christos { Bad_Opcode },
3345 1.1 christos { Bad_Opcode },
3346 1.1 christos { Bad_Opcode },
3347 1.1 christos { "btQ", { Ev, Ib } },
3348 1.1.1.1.8.1 tls { "btsQ", { Evh1, Ib } },
3349 1.1.1.1.8.1 tls { "btrQ", { Evh1, Ib } },
3350 1.1.1.1.8.1 tls { "btcQ", { Evh1, Ib } },
3351 1.1 christos },
3352 1.1 christos /* REG_0FC7 */
3353 1.1 christos {
3354 1.1 christos { Bad_Opcode },
3355 1.1 christos { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
3356 1.1 christos { Bad_Opcode },
3357 1.1 christos { Bad_Opcode },
3358 1.1 christos { Bad_Opcode },
3359 1.1 christos { Bad_Opcode },
3360 1.1 christos { MOD_TABLE (MOD_0FC7_REG_6) },
3361 1.1 christos { MOD_TABLE (MOD_0FC7_REG_7) },
3362 1.1 christos },
3363 1.1 christos /* REG_VEX_0F71 */
3364 1.1 christos {
3365 1.1 christos { Bad_Opcode },
3366 1.1 christos { Bad_Opcode },
3367 1.1 christos { MOD_TABLE (MOD_VEX_0F71_REG_2) },
3368 1.1 christos { Bad_Opcode },
3369 1.1 christos { MOD_TABLE (MOD_VEX_0F71_REG_4) },
3370 1.1 christos { Bad_Opcode },
3371 1.1 christos { MOD_TABLE (MOD_VEX_0F71_REG_6) },
3372 1.1 christos },
3373 1.1 christos /* REG_VEX_0F72 */
3374 1.1 christos {
3375 1.1 christos { Bad_Opcode },
3376 1.1 christos { Bad_Opcode },
3377 1.1 christos { MOD_TABLE (MOD_VEX_0F72_REG_2) },
3378 1.1 christos { Bad_Opcode },
3379 1.1 christos { MOD_TABLE (MOD_VEX_0F72_REG_4) },
3380 1.1 christos { Bad_Opcode },
3381 1.1 christos { MOD_TABLE (MOD_VEX_0F72_REG_6) },
3382 1.1 christos },
3383 1.1 christos /* REG_VEX_0F73 */
3384 1.1 christos {
3385 1.1 christos { Bad_Opcode },
3386 1.1 christos { Bad_Opcode },
3387 1.1 christos { MOD_TABLE (MOD_VEX_0F73_REG_2) },
3388 1.1 christos { MOD_TABLE (MOD_VEX_0F73_REG_3) },
3389 1.1 christos { Bad_Opcode },
3390 1.1 christos { Bad_Opcode },
3391 1.1 christos { MOD_TABLE (MOD_VEX_0F73_REG_6) },
3392 1.1 christos { MOD_TABLE (MOD_VEX_0F73_REG_7) },
3393 1.1 christos },
3394 1.1 christos /* REG_VEX_0FAE */
3395 1.1 christos {
3396 1.1 christos { Bad_Opcode },
3397 1.1 christos { Bad_Opcode },
3398 1.1 christos { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
3399 1.1 christos { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
3400 1.1 christos },
3401 1.1 christos /* REG_VEX_0F38F3 */
3402 1.1 christos {
3403 1.1 christos { Bad_Opcode },
3404 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
3405 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
3406 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
3407 1.1 christos },
3408 1.1 christos /* REG_XOP_LWPCB */
3409 1.1 christos {
3410 1.1 christos { "llwpcb", { { OP_LWPCB_E, 0 } } },
3411 1.1 christos { "slwpcb", { { OP_LWPCB_E, 0 } } },
3412 1.1 christos },
3413 1.1 christos /* REG_XOP_LWP */
3414 1.1 christos {
3415 1.1 christos { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
3416 1.1 christos { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } },
3417 1.1 christos },
3418 1.1 christos /* REG_XOP_TBM_01 */
3419 1.1 christos {
3420 1.1 christos { Bad_Opcode },
3421 1.1 christos { "blcfill", { { OP_LWP_E, 0 }, Ev } },
3422 1.1 christos { "blsfill", { { OP_LWP_E, 0 }, Ev } },
3423 1.1 christos { "blcs", { { OP_LWP_E, 0 }, Ev } },
3424 1.1 christos { "tzmsk", { { OP_LWP_E, 0 }, Ev } },
3425 1.1 christos { "blcic", { { OP_LWP_E, 0 }, Ev } },
3426 1.1 christos { "blsic", { { OP_LWP_E, 0 }, Ev } },
3427 1.1 christos { "t1mskc", { { OP_LWP_E, 0 }, Ev } },
3428 1.1 christos },
3429 1.1 christos /* REG_XOP_TBM_02 */
3430 1.1 christos {
3431 1.1 christos { Bad_Opcode },
3432 1.1 christos { "blcmsk", { { OP_LWP_E, 0 }, Ev } },
3433 1.1 christos { Bad_Opcode },
3434 1.1 christos { Bad_Opcode },
3435 1.1 christos { Bad_Opcode },
3436 1.1 christos { Bad_Opcode },
3437 1.1 christos { "blci", { { OP_LWP_E, 0 }, Ev } },
3438 1.1 christos },
3439 1.1.1.1.8.1 tls #define NEED_REG_TABLE
3440 1.1.1.1.8.1 tls #include "i386-dis-evex.h"
3441 1.1.1.1.8.1 tls #undef NEED_REG_TABLE
3442 1.1 christos };
3443 1.1 christos
3444 1.1 christos static const struct dis386 prefix_table[][4] = {
3445 1.1 christos /* PREFIX_90 */
3446 1.1 christos {
3447 1.1 christos { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
3448 1.1 christos { "pause", { XX } },
3449 1.1 christos { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
3450 1.1 christos },
3451 1.1 christos
3452 1.1 christos /* PREFIX_0F10 */
3453 1.1 christos {
3454 1.1 christos { "movups", { XM, EXx } },
3455 1.1 christos { "movss", { XM, EXd } },
3456 1.1 christos { "movupd", { XM, EXx } },
3457 1.1 christos { "movsd", { XM, EXq } },
3458 1.1 christos },
3459 1.1 christos
3460 1.1 christos /* PREFIX_0F11 */
3461 1.1 christos {
3462 1.1 christos { "movups", { EXxS, XM } },
3463 1.1 christos { "movss", { EXdS, XM } },
3464 1.1 christos { "movupd", { EXxS, XM } },
3465 1.1 christos { "movsd", { EXqS, XM } },
3466 1.1 christos },
3467 1.1 christos
3468 1.1 christos /* PREFIX_0F12 */
3469 1.1 christos {
3470 1.1 christos { MOD_TABLE (MOD_0F12_PREFIX_0) },
3471 1.1 christos { "movsldup", { XM, EXx } },
3472 1.1 christos { "movlpd", { XM, EXq } },
3473 1.1 christos { "movddup", { XM, EXq } },
3474 1.1 christos },
3475 1.1 christos
3476 1.1 christos /* PREFIX_0F16 */
3477 1.1 christos {
3478 1.1 christos { MOD_TABLE (MOD_0F16_PREFIX_0) },
3479 1.1 christos { "movshdup", { XM, EXx } },
3480 1.1 christos { "movhpd", { XM, EXq } },
3481 1.1 christos },
3482 1.1 christos
3483 1.1.1.1.8.1 tls /* PREFIX_0F1A */
3484 1.1.1.1.8.1 tls {
3485 1.1.1.1.8.1 tls { MOD_TABLE (MOD_0F1A_PREFIX_0) },
3486 1.1.1.1.8.1 tls { "bndcl", { Gbnd, Ev_bnd } },
3487 1.1.1.1.8.1 tls { "bndmov", { Gbnd, Ebnd } },
3488 1.1.1.1.8.1 tls { "bndcu", { Gbnd, Ev_bnd } },
3489 1.1.1.1.8.1 tls },
3490 1.1.1.1.8.1 tls
3491 1.1.1.1.8.1 tls /* PREFIX_0F1B */
3492 1.1.1.1.8.1 tls {
3493 1.1.1.1.8.1 tls { MOD_TABLE (MOD_0F1B_PREFIX_0) },
3494 1.1.1.1.8.1 tls { MOD_TABLE (MOD_0F1B_PREFIX_1) },
3495 1.1.1.1.8.1 tls { "bndmov", { Ebnd, Gbnd } },
3496 1.1.1.1.8.1 tls { "bndcn", { Gbnd, Ev_bnd } },
3497 1.1.1.1.8.1 tls },
3498 1.1.1.1.8.1 tls
3499 1.1 christos /* PREFIX_0F2A */
3500 1.1 christos {
3501 1.1 christos { "cvtpi2ps", { XM, EMCq } },
3502 1.1 christos { "cvtsi2ss%LQ", { XM, Ev } },
3503 1.1 christos { "cvtpi2pd", { XM, EMCq } },
3504 1.1 christos { "cvtsi2sd%LQ", { XM, Ev } },
3505 1.1 christos },
3506 1.1 christos
3507 1.1 christos /* PREFIX_0F2B */
3508 1.1 christos {
3509 1.1 christos { MOD_TABLE (MOD_0F2B_PREFIX_0) },
3510 1.1 christos { MOD_TABLE (MOD_0F2B_PREFIX_1) },
3511 1.1 christos { MOD_TABLE (MOD_0F2B_PREFIX_2) },
3512 1.1 christos { MOD_TABLE (MOD_0F2B_PREFIX_3) },
3513 1.1 christos },
3514 1.1 christos
3515 1.1 christos /* PREFIX_0F2C */
3516 1.1 christos {
3517 1.1 christos { "cvttps2pi", { MXC, EXq } },
3518 1.1 christos { "cvttss2siY", { Gv, EXd } },
3519 1.1 christos { "cvttpd2pi", { MXC, EXx } },
3520 1.1 christos { "cvttsd2siY", { Gv, EXq } },
3521 1.1 christos },
3522 1.1 christos
3523 1.1 christos /* PREFIX_0F2D */
3524 1.1 christos {
3525 1.1 christos { "cvtps2pi", { MXC, EXq } },
3526 1.1 christos { "cvtss2siY", { Gv, EXd } },
3527 1.1 christos { "cvtpd2pi", { MXC, EXx } },
3528 1.1 christos { "cvtsd2siY", { Gv, EXq } },
3529 1.1 christos },
3530 1.1 christos
3531 1.1 christos /* PREFIX_0F2E */
3532 1.1 christos {
3533 1.1.1.1.8.1 tls { "ucomiss",{ XM, EXd } },
3534 1.1 christos { Bad_Opcode },
3535 1.1.1.1.8.1 tls { "ucomisd",{ XM, EXq } },
3536 1.1 christos },
3537 1.1 christos
3538 1.1 christos /* PREFIX_0F2F */
3539 1.1 christos {
3540 1.1 christos { "comiss", { XM, EXd } },
3541 1.1 christos { Bad_Opcode },
3542 1.1 christos { "comisd", { XM, EXq } },
3543 1.1 christos },
3544 1.1 christos
3545 1.1 christos /* PREFIX_0F51 */
3546 1.1 christos {
3547 1.1 christos { "sqrtps", { XM, EXx } },
3548 1.1 christos { "sqrtss", { XM, EXd } },
3549 1.1 christos { "sqrtpd", { XM, EXx } },
3550 1.1 christos { "sqrtsd", { XM, EXq } },
3551 1.1 christos },
3552 1.1 christos
3553 1.1 christos /* PREFIX_0F52 */
3554 1.1 christos {
3555 1.1 christos { "rsqrtps",{ XM, EXx } },
3556 1.1 christos { "rsqrtss",{ XM, EXd } },
3557 1.1 christos },
3558 1.1 christos
3559 1.1 christos /* PREFIX_0F53 */
3560 1.1 christos {
3561 1.1 christos { "rcpps", { XM, EXx } },
3562 1.1 christos { "rcpss", { XM, EXd } },
3563 1.1 christos },
3564 1.1 christos
3565 1.1 christos /* PREFIX_0F58 */
3566 1.1 christos {
3567 1.1 christos { "addps", { XM, EXx } },
3568 1.1 christos { "addss", { XM, EXd } },
3569 1.1 christos { "addpd", { XM, EXx } },
3570 1.1 christos { "addsd", { XM, EXq } },
3571 1.1 christos },
3572 1.1 christos
3573 1.1 christos /* PREFIX_0F59 */
3574 1.1 christos {
3575 1.1 christos { "mulps", { XM, EXx } },
3576 1.1 christos { "mulss", { XM, EXd } },
3577 1.1 christos { "mulpd", { XM, EXx } },
3578 1.1 christos { "mulsd", { XM, EXq } },
3579 1.1 christos },
3580 1.1 christos
3581 1.1 christos /* PREFIX_0F5A */
3582 1.1 christos {
3583 1.1 christos { "cvtps2pd", { XM, EXq } },
3584 1.1 christos { "cvtss2sd", { XM, EXd } },
3585 1.1 christos { "cvtpd2ps", { XM, EXx } },
3586 1.1 christos { "cvtsd2ss", { XM, EXq } },
3587 1.1 christos },
3588 1.1 christos
3589 1.1 christos /* PREFIX_0F5B */
3590 1.1 christos {
3591 1.1 christos { "cvtdq2ps", { XM, EXx } },
3592 1.1 christos { "cvttps2dq", { XM, EXx } },
3593 1.1 christos { "cvtps2dq", { XM, EXx } },
3594 1.1 christos },
3595 1.1 christos
3596 1.1 christos /* PREFIX_0F5C */
3597 1.1 christos {
3598 1.1 christos { "subps", { XM, EXx } },
3599 1.1 christos { "subss", { XM, EXd } },
3600 1.1 christos { "subpd", { XM, EXx } },
3601 1.1 christos { "subsd", { XM, EXq } },
3602 1.1 christos },
3603 1.1 christos
3604 1.1 christos /* PREFIX_0F5D */
3605 1.1 christos {
3606 1.1 christos { "minps", { XM, EXx } },
3607 1.1 christos { "minss", { XM, EXd } },
3608 1.1 christos { "minpd", { XM, EXx } },
3609 1.1 christos { "minsd", { XM, EXq } },
3610 1.1 christos },
3611 1.1 christos
3612 1.1 christos /* PREFIX_0F5E */
3613 1.1 christos {
3614 1.1 christos { "divps", { XM, EXx } },
3615 1.1 christos { "divss", { XM, EXd } },
3616 1.1 christos { "divpd", { XM, EXx } },
3617 1.1 christos { "divsd", { XM, EXq } },
3618 1.1 christos },
3619 1.1 christos
3620 1.1 christos /* PREFIX_0F5F */
3621 1.1 christos {
3622 1.1 christos { "maxps", { XM, EXx } },
3623 1.1 christos { "maxss", { XM, EXd } },
3624 1.1 christos { "maxpd", { XM, EXx } },
3625 1.1 christos { "maxsd", { XM, EXq } },
3626 1.1 christos },
3627 1.1 christos
3628 1.1 christos /* PREFIX_0F60 */
3629 1.1 christos {
3630 1.1 christos { "punpcklbw",{ MX, EMd } },
3631 1.1 christos { Bad_Opcode },
3632 1.1 christos { "punpcklbw",{ MX, EMx } },
3633 1.1 christos },
3634 1.1 christos
3635 1.1 christos /* PREFIX_0F61 */
3636 1.1 christos {
3637 1.1 christos { "punpcklwd",{ MX, EMd } },
3638 1.1 christos { Bad_Opcode },
3639 1.1 christos { "punpcklwd",{ MX, EMx } },
3640 1.1 christos },
3641 1.1 christos
3642 1.1 christos /* PREFIX_0F62 */
3643 1.1 christos {
3644 1.1 christos { "punpckldq",{ MX, EMd } },
3645 1.1 christos { Bad_Opcode },
3646 1.1 christos { "punpckldq",{ MX, EMx } },
3647 1.1 christos },
3648 1.1 christos
3649 1.1 christos /* PREFIX_0F6C */
3650 1.1 christos {
3651 1.1 christos { Bad_Opcode },
3652 1.1 christos { Bad_Opcode },
3653 1.1 christos { "punpcklqdq", { XM, EXx } },
3654 1.1 christos },
3655 1.1 christos
3656 1.1 christos /* PREFIX_0F6D */
3657 1.1 christos {
3658 1.1 christos { Bad_Opcode },
3659 1.1 christos { Bad_Opcode },
3660 1.1 christos { "punpckhqdq", { XM, EXx } },
3661 1.1 christos },
3662 1.1 christos
3663 1.1 christos /* PREFIX_0F6F */
3664 1.1 christos {
3665 1.1 christos { "movq", { MX, EM } },
3666 1.1 christos { "movdqu", { XM, EXx } },
3667 1.1 christos { "movdqa", { XM, EXx } },
3668 1.1 christos },
3669 1.1 christos
3670 1.1 christos /* PREFIX_0F70 */
3671 1.1 christos {
3672 1.1 christos { "pshufw", { MX, EM, Ib } },
3673 1.1 christos { "pshufhw",{ XM, EXx, Ib } },
3674 1.1 christos { "pshufd", { XM, EXx, Ib } },
3675 1.1 christos { "pshuflw",{ XM, EXx, Ib } },
3676 1.1 christos },
3677 1.1 christos
3678 1.1 christos /* PREFIX_0F73_REG_3 */
3679 1.1 christos {
3680 1.1 christos { Bad_Opcode },
3681 1.1 christos { Bad_Opcode },
3682 1.1 christos { "psrldq", { XS, Ib } },
3683 1.1 christos },
3684 1.1 christos
3685 1.1 christos /* PREFIX_0F73_REG_7 */
3686 1.1 christos {
3687 1.1 christos { Bad_Opcode },
3688 1.1 christos { Bad_Opcode },
3689 1.1 christos { "pslldq", { XS, Ib } },
3690 1.1 christos },
3691 1.1 christos
3692 1.1 christos /* PREFIX_0F78 */
3693 1.1 christos {
3694 1.1 christos {"vmread", { Em, Gm } },
3695 1.1 christos { Bad_Opcode },
3696 1.1 christos {"extrq", { XS, Ib, Ib } },
3697 1.1 christos {"insertq", { XM, XS, Ib, Ib } },
3698 1.1 christos },
3699 1.1 christos
3700 1.1 christos /* PREFIX_0F79 */
3701 1.1 christos {
3702 1.1 christos {"vmwrite", { Gm, Em } },
3703 1.1 christos { Bad_Opcode },
3704 1.1 christos {"extrq", { XM, XS } },
3705 1.1 christos {"insertq", { XM, XS } },
3706 1.1 christos },
3707 1.1 christos
3708 1.1 christos /* PREFIX_0F7C */
3709 1.1 christos {
3710 1.1 christos { Bad_Opcode },
3711 1.1 christos { Bad_Opcode },
3712 1.1 christos { "haddpd", { XM, EXx } },
3713 1.1 christos { "haddps", { XM, EXx } },
3714 1.1 christos },
3715 1.1 christos
3716 1.1 christos /* PREFIX_0F7D */
3717 1.1 christos {
3718 1.1 christos { Bad_Opcode },
3719 1.1 christos { Bad_Opcode },
3720 1.1 christos { "hsubpd", { XM, EXx } },
3721 1.1 christos { "hsubps", { XM, EXx } },
3722 1.1 christos },
3723 1.1 christos
3724 1.1 christos /* PREFIX_0F7E */
3725 1.1 christos {
3726 1.1 christos { "movK", { Edq, MX } },
3727 1.1 christos { "movq", { XM, EXq } },
3728 1.1 christos { "movK", { Edq, XM } },
3729 1.1 christos },
3730 1.1 christos
3731 1.1 christos /* PREFIX_0F7F */
3732 1.1 christos {
3733 1.1 christos { "movq", { EMS, MX } },
3734 1.1 christos { "movdqu", { EXxS, XM } },
3735 1.1 christos { "movdqa", { EXxS, XM } },
3736 1.1 christos },
3737 1.1 christos
3738 1.1 christos /* PREFIX_0FAE_REG_0 */
3739 1.1 christos {
3740 1.1 christos { Bad_Opcode },
3741 1.1 christos { "rdfsbase", { Ev } },
3742 1.1 christos },
3743 1.1 christos
3744 1.1 christos /* PREFIX_0FAE_REG_1 */
3745 1.1 christos {
3746 1.1 christos { Bad_Opcode },
3747 1.1 christos { "rdgsbase", { Ev } },
3748 1.1 christos },
3749 1.1 christos
3750 1.1 christos /* PREFIX_0FAE_REG_2 */
3751 1.1 christos {
3752 1.1 christos { Bad_Opcode },
3753 1.1 christos { "wrfsbase", { Ev } },
3754 1.1 christos },
3755 1.1 christos
3756 1.1 christos /* PREFIX_0FAE_REG_3 */
3757 1.1 christos {
3758 1.1 christos { Bad_Opcode },
3759 1.1 christos { "wrgsbase", { Ev } },
3760 1.1 christos },
3761 1.1 christos
3762 1.1 christos /* PREFIX_0FB8 */
3763 1.1 christos {
3764 1.1 christos { Bad_Opcode },
3765 1.1 christos { "popcntS", { Gv, Ev } },
3766 1.1 christos },
3767 1.1 christos
3768 1.1 christos /* PREFIX_0FBC */
3769 1.1 christos {
3770 1.1 christos { "bsfS", { Gv, Ev } },
3771 1.1 christos { "tzcntS", { Gv, Ev } },
3772 1.1 christos { "bsfS", { Gv, Ev } },
3773 1.1 christos },
3774 1.1 christos
3775 1.1 christos /* PREFIX_0FBD */
3776 1.1 christos {
3777 1.1 christos { "bsrS", { Gv, Ev } },
3778 1.1 christos { "lzcntS", { Gv, Ev } },
3779 1.1 christos { "bsrS", { Gv, Ev } },
3780 1.1 christos },
3781 1.1 christos
3782 1.1 christos /* PREFIX_0FC2 */
3783 1.1 christos {
3784 1.1 christos { "cmpps", { XM, EXx, CMP } },
3785 1.1 christos { "cmpss", { XM, EXd, CMP } },
3786 1.1 christos { "cmppd", { XM, EXx, CMP } },
3787 1.1 christos { "cmpsd", { XM, EXq, CMP } },
3788 1.1 christos },
3789 1.1 christos
3790 1.1 christos /* PREFIX_0FC3 */
3791 1.1 christos {
3792 1.1 christos { "movntiS", { Ma, Gv } },
3793 1.1 christos },
3794 1.1 christos
3795 1.1 christos /* PREFIX_0FC7_REG_6 */
3796 1.1 christos {
3797 1.1 christos { "vmptrld",{ Mq } },
3798 1.1 christos { "vmxon", { Mq } },
3799 1.1 christos { "vmclear",{ Mq } },
3800 1.1 christos },
3801 1.1 christos
3802 1.1 christos /* PREFIX_0FD0 */
3803 1.1 christos {
3804 1.1 christos { Bad_Opcode },
3805 1.1 christos { Bad_Opcode },
3806 1.1 christos { "addsubpd", { XM, EXx } },
3807 1.1 christos { "addsubps", { XM, EXx } },
3808 1.1 christos },
3809 1.1 christos
3810 1.1 christos /* PREFIX_0FD6 */
3811 1.1 christos {
3812 1.1 christos { Bad_Opcode },
3813 1.1 christos { "movq2dq",{ XM, MS } },
3814 1.1 christos { "movq", { EXqS, XM } },
3815 1.1 christos { "movdq2q",{ MX, XS } },
3816 1.1 christos },
3817 1.1 christos
3818 1.1 christos /* PREFIX_0FE6 */
3819 1.1 christos {
3820 1.1 christos { Bad_Opcode },
3821 1.1 christos { "cvtdq2pd", { XM, EXq } },
3822 1.1 christos { "cvttpd2dq", { XM, EXx } },
3823 1.1 christos { "cvtpd2dq", { XM, EXx } },
3824 1.1 christos },
3825 1.1 christos
3826 1.1 christos /* PREFIX_0FE7 */
3827 1.1 christos {
3828 1.1 christos { "movntq", { Mq, MX } },
3829 1.1 christos { Bad_Opcode },
3830 1.1 christos { MOD_TABLE (MOD_0FE7_PREFIX_2) },
3831 1.1 christos },
3832 1.1 christos
3833 1.1 christos /* PREFIX_0FF0 */
3834 1.1 christos {
3835 1.1 christos { Bad_Opcode },
3836 1.1 christos { Bad_Opcode },
3837 1.1 christos { Bad_Opcode },
3838 1.1 christos { MOD_TABLE (MOD_0FF0_PREFIX_3) },
3839 1.1 christos },
3840 1.1 christos
3841 1.1 christos /* PREFIX_0FF7 */
3842 1.1 christos {
3843 1.1 christos { "maskmovq", { MX, MS } },
3844 1.1 christos { Bad_Opcode },
3845 1.1 christos { "maskmovdqu", { XM, XS } },
3846 1.1 christos },
3847 1.1 christos
3848 1.1 christos /* PREFIX_0F3810 */
3849 1.1 christos {
3850 1.1 christos { Bad_Opcode },
3851 1.1 christos { Bad_Opcode },
3852 1.1 christos { "pblendvb", { XM, EXx, XMM0 } },
3853 1.1 christos },
3854 1.1 christos
3855 1.1 christos /* PREFIX_0F3814 */
3856 1.1 christos {
3857 1.1 christos { Bad_Opcode },
3858 1.1 christos { Bad_Opcode },
3859 1.1 christos { "blendvps", { XM, EXx, XMM0 } },
3860 1.1 christos },
3861 1.1 christos
3862 1.1 christos /* PREFIX_0F3815 */
3863 1.1 christos {
3864 1.1 christos { Bad_Opcode },
3865 1.1 christos { Bad_Opcode },
3866 1.1 christos { "blendvpd", { XM, EXx, XMM0 } },
3867 1.1 christos },
3868 1.1 christos
3869 1.1 christos /* PREFIX_0F3817 */
3870 1.1 christos {
3871 1.1 christos { Bad_Opcode },
3872 1.1 christos { Bad_Opcode },
3873 1.1 christos { "ptest", { XM, EXx } },
3874 1.1 christos },
3875 1.1 christos
3876 1.1 christos /* PREFIX_0F3820 */
3877 1.1 christos {
3878 1.1 christos { Bad_Opcode },
3879 1.1 christos { Bad_Opcode },
3880 1.1 christos { "pmovsxbw", { XM, EXq } },
3881 1.1 christos },
3882 1.1 christos
3883 1.1 christos /* PREFIX_0F3821 */
3884 1.1 christos {
3885 1.1 christos { Bad_Opcode },
3886 1.1 christos { Bad_Opcode },
3887 1.1 christos { "pmovsxbd", { XM, EXd } },
3888 1.1 christos },
3889 1.1 christos
3890 1.1 christos /* PREFIX_0F3822 */
3891 1.1 christos {
3892 1.1 christos { Bad_Opcode },
3893 1.1 christos { Bad_Opcode },
3894 1.1 christos { "pmovsxbq", { XM, EXw } },
3895 1.1 christos },
3896 1.1 christos
3897 1.1 christos /* PREFIX_0F3823 */
3898 1.1 christos {
3899 1.1 christos { Bad_Opcode },
3900 1.1 christos { Bad_Opcode },
3901 1.1 christos { "pmovsxwd", { XM, EXq } },
3902 1.1 christos },
3903 1.1 christos
3904 1.1 christos /* PREFIX_0F3824 */
3905 1.1 christos {
3906 1.1 christos { Bad_Opcode },
3907 1.1 christos { Bad_Opcode },
3908 1.1 christos { "pmovsxwq", { XM, EXd } },
3909 1.1 christos },
3910 1.1 christos
3911 1.1 christos /* PREFIX_0F3825 */
3912 1.1 christos {
3913 1.1 christos { Bad_Opcode },
3914 1.1 christos { Bad_Opcode },
3915 1.1 christos { "pmovsxdq", { XM, EXq } },
3916 1.1 christos },
3917 1.1 christos
3918 1.1 christos /* PREFIX_0F3828 */
3919 1.1 christos {
3920 1.1 christos { Bad_Opcode },
3921 1.1 christos { Bad_Opcode },
3922 1.1 christos { "pmuldq", { XM, EXx } },
3923 1.1 christos },
3924 1.1 christos
3925 1.1 christos /* PREFIX_0F3829 */
3926 1.1 christos {
3927 1.1 christos { Bad_Opcode },
3928 1.1 christos { Bad_Opcode },
3929 1.1 christos { "pcmpeqq", { XM, EXx } },
3930 1.1 christos },
3931 1.1 christos
3932 1.1 christos /* PREFIX_0F382A */
3933 1.1 christos {
3934 1.1 christos { Bad_Opcode },
3935 1.1 christos { Bad_Opcode },
3936 1.1 christos { MOD_TABLE (MOD_0F382A_PREFIX_2) },
3937 1.1 christos },
3938 1.1 christos
3939 1.1 christos /* PREFIX_0F382B */
3940 1.1 christos {
3941 1.1 christos { Bad_Opcode },
3942 1.1 christos { Bad_Opcode },
3943 1.1 christos { "packusdw", { XM, EXx } },
3944 1.1 christos },
3945 1.1 christos
3946 1.1 christos /* PREFIX_0F3830 */
3947 1.1 christos {
3948 1.1 christos { Bad_Opcode },
3949 1.1 christos { Bad_Opcode },
3950 1.1 christos { "pmovzxbw", { XM, EXq } },
3951 1.1 christos },
3952 1.1 christos
3953 1.1 christos /* PREFIX_0F3831 */
3954 1.1 christos {
3955 1.1 christos { Bad_Opcode },
3956 1.1 christos { Bad_Opcode },
3957 1.1 christos { "pmovzxbd", { XM, EXd } },
3958 1.1 christos },
3959 1.1 christos
3960 1.1 christos /* PREFIX_0F3832 */
3961 1.1 christos {
3962 1.1 christos { Bad_Opcode },
3963 1.1 christos { Bad_Opcode },
3964 1.1 christos { "pmovzxbq", { XM, EXw } },
3965 1.1 christos },
3966 1.1 christos
3967 1.1 christos /* PREFIX_0F3833 */
3968 1.1 christos {
3969 1.1 christos { Bad_Opcode },
3970 1.1 christos { Bad_Opcode },
3971 1.1 christos { "pmovzxwd", { XM, EXq } },
3972 1.1 christos },
3973 1.1 christos
3974 1.1 christos /* PREFIX_0F3834 */
3975 1.1 christos {
3976 1.1 christos { Bad_Opcode },
3977 1.1 christos { Bad_Opcode },
3978 1.1 christos { "pmovzxwq", { XM, EXd } },
3979 1.1 christos },
3980 1.1 christos
3981 1.1 christos /* PREFIX_0F3835 */
3982 1.1 christos {
3983 1.1 christos { Bad_Opcode },
3984 1.1 christos { Bad_Opcode },
3985 1.1 christos { "pmovzxdq", { XM, EXq } },
3986 1.1 christos },
3987 1.1 christos
3988 1.1 christos /* PREFIX_0F3837 */
3989 1.1 christos {
3990 1.1 christos { Bad_Opcode },
3991 1.1 christos { Bad_Opcode },
3992 1.1 christos { "pcmpgtq", { XM, EXx } },
3993 1.1 christos },
3994 1.1 christos
3995 1.1 christos /* PREFIX_0F3838 */
3996 1.1 christos {
3997 1.1 christos { Bad_Opcode },
3998 1.1 christos { Bad_Opcode },
3999 1.1 christos { "pminsb", { XM, EXx } },
4000 1.1 christos },
4001 1.1 christos
4002 1.1 christos /* PREFIX_0F3839 */
4003 1.1 christos {
4004 1.1 christos { Bad_Opcode },
4005 1.1 christos { Bad_Opcode },
4006 1.1 christos { "pminsd", { XM, EXx } },
4007 1.1 christos },
4008 1.1 christos
4009 1.1 christos /* PREFIX_0F383A */
4010 1.1 christos {
4011 1.1 christos { Bad_Opcode },
4012 1.1 christos { Bad_Opcode },
4013 1.1 christos { "pminuw", { XM, EXx } },
4014 1.1 christos },
4015 1.1 christos
4016 1.1 christos /* PREFIX_0F383B */
4017 1.1 christos {
4018 1.1 christos { Bad_Opcode },
4019 1.1 christos { Bad_Opcode },
4020 1.1 christos { "pminud", { XM, EXx } },
4021 1.1 christos },
4022 1.1 christos
4023 1.1 christos /* PREFIX_0F383C */
4024 1.1 christos {
4025 1.1 christos { Bad_Opcode },
4026 1.1 christos { Bad_Opcode },
4027 1.1 christos { "pmaxsb", { XM, EXx } },
4028 1.1 christos },
4029 1.1 christos
4030 1.1 christos /* PREFIX_0F383D */
4031 1.1 christos {
4032 1.1 christos { Bad_Opcode },
4033 1.1 christos { Bad_Opcode },
4034 1.1 christos { "pmaxsd", { XM, EXx } },
4035 1.1 christos },
4036 1.1 christos
4037 1.1 christos /* PREFIX_0F383E */
4038 1.1 christos {
4039 1.1 christos { Bad_Opcode },
4040 1.1 christos { Bad_Opcode },
4041 1.1 christos { "pmaxuw", { XM, EXx } },
4042 1.1 christos },
4043 1.1 christos
4044 1.1 christos /* PREFIX_0F383F */
4045 1.1 christos {
4046 1.1 christos { Bad_Opcode },
4047 1.1 christos { Bad_Opcode },
4048 1.1 christos { "pmaxud", { XM, EXx } },
4049 1.1 christos },
4050 1.1 christos
4051 1.1 christos /* PREFIX_0F3840 */
4052 1.1 christos {
4053 1.1 christos { Bad_Opcode },
4054 1.1 christos { Bad_Opcode },
4055 1.1 christos { "pmulld", { XM, EXx } },
4056 1.1 christos },
4057 1.1 christos
4058 1.1 christos /* PREFIX_0F3841 */
4059 1.1 christos {
4060 1.1 christos { Bad_Opcode },
4061 1.1 christos { Bad_Opcode },
4062 1.1 christos { "phminposuw", { XM, EXx } },
4063 1.1 christos },
4064 1.1 christos
4065 1.1 christos /* PREFIX_0F3880 */
4066 1.1 christos {
4067 1.1 christos { Bad_Opcode },
4068 1.1 christos { Bad_Opcode },
4069 1.1 christos { "invept", { Gm, Mo } },
4070 1.1 christos },
4071 1.1 christos
4072 1.1 christos /* PREFIX_0F3881 */
4073 1.1 christos {
4074 1.1 christos { Bad_Opcode },
4075 1.1 christos { Bad_Opcode },
4076 1.1 christos { "invvpid", { Gm, Mo } },
4077 1.1 christos },
4078 1.1 christos
4079 1.1.1.1.8.1 tls /* PREFIX_0F3882 */
4080 1.1.1.1.8.1 tls {
4081 1.1.1.1.8.1 tls { Bad_Opcode },
4082 1.1.1.1.8.1 tls { Bad_Opcode },
4083 1.1.1.1.8.1 tls { "invpcid", { Gm, M } },
4084 1.1.1.1.8.1 tls },
4085 1.1.1.1.8.1 tls
4086 1.1.1.1.8.1 tls /* PREFIX_0F38C8 */
4087 1.1.1.1.8.1 tls {
4088 1.1.1.1.8.1 tls { "sha1nexte", { XM, EXxmm } },
4089 1.1.1.1.8.1 tls },
4090 1.1.1.1.8.1 tls
4091 1.1.1.1.8.1 tls /* PREFIX_0F38C9 */
4092 1.1.1.1.8.1 tls {
4093 1.1.1.1.8.1 tls { "sha1msg1", { XM, EXxmm } },
4094 1.1.1.1.8.1 tls },
4095 1.1.1.1.8.1 tls
4096 1.1.1.1.8.1 tls /* PREFIX_0F38CA */
4097 1.1.1.1.8.1 tls {
4098 1.1.1.1.8.1 tls { "sha1msg2", { XM, EXxmm } },
4099 1.1.1.1.8.1 tls },
4100 1.1.1.1.8.1 tls
4101 1.1.1.1.8.1 tls /* PREFIX_0F38CB */
4102 1.1.1.1.8.1 tls {
4103 1.1.1.1.8.1 tls { "sha256rnds2", { XM, EXxmm, XMM0 } },
4104 1.1.1.1.8.1 tls },
4105 1.1.1.1.8.1 tls
4106 1.1.1.1.8.1 tls /* PREFIX_0F38CC */
4107 1.1.1.1.8.1 tls {
4108 1.1.1.1.8.1 tls { "sha256msg1", { XM, EXxmm } },
4109 1.1.1.1.8.1 tls },
4110 1.1.1.1.8.1 tls
4111 1.1.1.1.8.1 tls /* PREFIX_0F38CD */
4112 1.1.1.1.8.1 tls {
4113 1.1.1.1.8.1 tls { "sha256msg2", { XM, EXxmm } },
4114 1.1.1.1.8.1 tls },
4115 1.1.1.1.8.1 tls
4116 1.1 christos /* PREFIX_0F38DB */
4117 1.1 christos {
4118 1.1 christos { Bad_Opcode },
4119 1.1 christos { Bad_Opcode },
4120 1.1 christos { "aesimc", { XM, EXx } },
4121 1.1 christos },
4122 1.1 christos
4123 1.1 christos /* PREFIX_0F38DC */
4124 1.1 christos {
4125 1.1 christos { Bad_Opcode },
4126 1.1 christos { Bad_Opcode },
4127 1.1 christos { "aesenc", { XM, EXx } },
4128 1.1 christos },
4129 1.1 christos
4130 1.1 christos /* PREFIX_0F38DD */
4131 1.1 christos {
4132 1.1 christos { Bad_Opcode },
4133 1.1 christos { Bad_Opcode },
4134 1.1 christos { "aesenclast", { XM, EXx } },
4135 1.1 christos },
4136 1.1 christos
4137 1.1 christos /* PREFIX_0F38DE */
4138 1.1 christos {
4139 1.1 christos { Bad_Opcode },
4140 1.1 christos { Bad_Opcode },
4141 1.1 christos { "aesdec", { XM, EXx } },
4142 1.1 christos },
4143 1.1 christos
4144 1.1 christos /* PREFIX_0F38DF */
4145 1.1 christos {
4146 1.1 christos { Bad_Opcode },
4147 1.1 christos { Bad_Opcode },
4148 1.1 christos { "aesdeclast", { XM, EXx } },
4149 1.1 christos },
4150 1.1 christos
4151 1.1 christos /* PREFIX_0F38F0 */
4152 1.1 christos {
4153 1.1 christos { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4154 1.1 christos { Bad_Opcode },
4155 1.1 christos { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
4156 1.1.1.1.8.1 tls { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
4157 1.1 christos },
4158 1.1 christos
4159 1.1 christos /* PREFIX_0F38F1 */
4160 1.1 christos {
4161 1.1 christos { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4162 1.1 christos { Bad_Opcode },
4163 1.1 christos { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
4164 1.1.1.1.8.1 tls { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
4165 1.1.1.1.8.1 tls },
4166 1.1.1.1.8.1 tls
4167 1.1.1.1.8.1 tls /* PREFIX_0F38F6 */
4168 1.1.1.1.8.1 tls {
4169 1.1.1.1.8.1 tls { Bad_Opcode },
4170 1.1.1.1.8.1 tls { "adoxS", { Gdq, Edq} },
4171 1.1.1.1.8.1 tls { "adcxS", { Gdq, Edq} },
4172 1.1.1.1.8.1 tls { Bad_Opcode },
4173 1.1 christos },
4174 1.1 christos
4175 1.1 christos /* PREFIX_0F3A08 */
4176 1.1 christos {
4177 1.1 christos { Bad_Opcode },
4178 1.1 christos { Bad_Opcode },
4179 1.1 christos { "roundps", { XM, EXx, Ib } },
4180 1.1 christos },
4181 1.1 christos
4182 1.1 christos /* PREFIX_0F3A09 */
4183 1.1 christos {
4184 1.1 christos { Bad_Opcode },
4185 1.1 christos { Bad_Opcode },
4186 1.1 christos { "roundpd", { XM, EXx, Ib } },
4187 1.1 christos },
4188 1.1 christos
4189 1.1 christos /* PREFIX_0F3A0A */
4190 1.1 christos {
4191 1.1 christos { Bad_Opcode },
4192 1.1 christos { Bad_Opcode },
4193 1.1 christos { "roundss", { XM, EXd, Ib } },
4194 1.1 christos },
4195 1.1 christos
4196 1.1 christos /* PREFIX_0F3A0B */
4197 1.1 christos {
4198 1.1 christos { Bad_Opcode },
4199 1.1 christos { Bad_Opcode },
4200 1.1 christos { "roundsd", { XM, EXq, Ib } },
4201 1.1 christos },
4202 1.1 christos
4203 1.1 christos /* PREFIX_0F3A0C */
4204 1.1 christos {
4205 1.1 christos { Bad_Opcode },
4206 1.1 christos { Bad_Opcode },
4207 1.1 christos { "blendps", { XM, EXx, Ib } },
4208 1.1 christos },
4209 1.1 christos
4210 1.1 christos /* PREFIX_0F3A0D */
4211 1.1 christos {
4212 1.1 christos { Bad_Opcode },
4213 1.1 christos { Bad_Opcode },
4214 1.1 christos { "blendpd", { XM, EXx, Ib } },
4215 1.1 christos },
4216 1.1 christos
4217 1.1 christos /* PREFIX_0F3A0E */
4218 1.1 christos {
4219 1.1 christos { Bad_Opcode },
4220 1.1 christos { Bad_Opcode },
4221 1.1 christos { "pblendw", { XM, EXx, Ib } },
4222 1.1 christos },
4223 1.1 christos
4224 1.1 christos /* PREFIX_0F3A14 */
4225 1.1 christos {
4226 1.1 christos { Bad_Opcode },
4227 1.1 christos { Bad_Opcode },
4228 1.1 christos { "pextrb", { Edqb, XM, Ib } },
4229 1.1 christos },
4230 1.1 christos
4231 1.1 christos /* PREFIX_0F3A15 */
4232 1.1 christos {
4233 1.1 christos { Bad_Opcode },
4234 1.1 christos { Bad_Opcode },
4235 1.1 christos { "pextrw", { Edqw, XM, Ib } },
4236 1.1 christos },
4237 1.1 christos
4238 1.1 christos /* PREFIX_0F3A16 */
4239 1.1 christos {
4240 1.1 christos { Bad_Opcode },
4241 1.1 christos { Bad_Opcode },
4242 1.1 christos { "pextrK", { Edq, XM, Ib } },
4243 1.1 christos },
4244 1.1 christos
4245 1.1 christos /* PREFIX_0F3A17 */
4246 1.1 christos {
4247 1.1 christos { Bad_Opcode },
4248 1.1 christos { Bad_Opcode },
4249 1.1 christos { "extractps", { Edqd, XM, Ib } },
4250 1.1 christos },
4251 1.1 christos
4252 1.1 christos /* PREFIX_0F3A20 */
4253 1.1 christos {
4254 1.1 christos { Bad_Opcode },
4255 1.1 christos { Bad_Opcode },
4256 1.1 christos { "pinsrb", { XM, Edqb, Ib } },
4257 1.1 christos },
4258 1.1 christos
4259 1.1 christos /* PREFIX_0F3A21 */
4260 1.1 christos {
4261 1.1 christos { Bad_Opcode },
4262 1.1 christos { Bad_Opcode },
4263 1.1 christos { "insertps", { XM, EXd, Ib } },
4264 1.1 christos },
4265 1.1 christos
4266 1.1 christos /* PREFIX_0F3A22 */
4267 1.1 christos {
4268 1.1 christos { Bad_Opcode },
4269 1.1 christos { Bad_Opcode },
4270 1.1 christos { "pinsrK", { XM, Edq, Ib } },
4271 1.1 christos },
4272 1.1 christos
4273 1.1 christos /* PREFIX_0F3A40 */
4274 1.1 christos {
4275 1.1 christos { Bad_Opcode },
4276 1.1 christos { Bad_Opcode },
4277 1.1 christos { "dpps", { XM, EXx, Ib } },
4278 1.1 christos },
4279 1.1 christos
4280 1.1 christos /* PREFIX_0F3A41 */
4281 1.1 christos {
4282 1.1 christos { Bad_Opcode },
4283 1.1 christos { Bad_Opcode },
4284 1.1 christos { "dppd", { XM, EXx, Ib } },
4285 1.1 christos },
4286 1.1 christos
4287 1.1 christos /* PREFIX_0F3A42 */
4288 1.1 christos {
4289 1.1 christos { Bad_Opcode },
4290 1.1 christos { Bad_Opcode },
4291 1.1 christos { "mpsadbw", { XM, EXx, Ib } },
4292 1.1 christos },
4293 1.1 christos
4294 1.1 christos /* PREFIX_0F3A44 */
4295 1.1 christos {
4296 1.1 christos { Bad_Opcode },
4297 1.1 christos { Bad_Opcode },
4298 1.1 christos { "pclmulqdq", { XM, EXx, PCLMUL } },
4299 1.1 christos },
4300 1.1 christos
4301 1.1 christos /* PREFIX_0F3A60 */
4302 1.1 christos {
4303 1.1 christos { Bad_Opcode },
4304 1.1 christos { Bad_Opcode },
4305 1.1 christos { "pcmpestrm", { XM, EXx, Ib } },
4306 1.1 christos },
4307 1.1 christos
4308 1.1 christos /* PREFIX_0F3A61 */
4309 1.1 christos {
4310 1.1 christos { Bad_Opcode },
4311 1.1 christos { Bad_Opcode },
4312 1.1 christos { "pcmpestri", { XM, EXx, Ib } },
4313 1.1 christos },
4314 1.1 christos
4315 1.1 christos /* PREFIX_0F3A62 */
4316 1.1 christos {
4317 1.1 christos { Bad_Opcode },
4318 1.1 christos { Bad_Opcode },
4319 1.1 christos { "pcmpistrm", { XM, EXx, Ib } },
4320 1.1 christos },
4321 1.1 christos
4322 1.1 christos /* PREFIX_0F3A63 */
4323 1.1 christos {
4324 1.1 christos { Bad_Opcode },
4325 1.1 christos { Bad_Opcode },
4326 1.1 christos { "pcmpistri", { XM, EXx, Ib } },
4327 1.1 christos },
4328 1.1 christos
4329 1.1.1.1.8.1 tls /* PREFIX_0F3ACC */
4330 1.1.1.1.8.1 tls {
4331 1.1.1.1.8.1 tls { "sha1rnds4", { XM, EXxmm, Ib } },
4332 1.1.1.1.8.1 tls },
4333 1.1.1.1.8.1 tls
4334 1.1 christos /* PREFIX_0F3ADF */
4335 1.1 christos {
4336 1.1 christos { Bad_Opcode },
4337 1.1 christos { Bad_Opcode },
4338 1.1 christos { "aeskeygenassist", { XM, EXx, Ib } },
4339 1.1 christos },
4340 1.1 christos
4341 1.1 christos /* PREFIX_VEX_0F10 */
4342 1.1 christos {
4343 1.1 christos { VEX_W_TABLE (VEX_W_0F10_P_0) },
4344 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
4345 1.1 christos { VEX_W_TABLE (VEX_W_0F10_P_2) },
4346 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
4347 1.1 christos },
4348 1.1 christos
4349 1.1 christos /* PREFIX_VEX_0F11 */
4350 1.1 christos {
4351 1.1 christos { VEX_W_TABLE (VEX_W_0F11_P_0) },
4352 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
4353 1.1 christos { VEX_W_TABLE (VEX_W_0F11_P_2) },
4354 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
4355 1.1 christos },
4356 1.1 christos
4357 1.1 christos /* PREFIX_VEX_0F12 */
4358 1.1 christos {
4359 1.1 christos { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
4360 1.1 christos { VEX_W_TABLE (VEX_W_0F12_P_1) },
4361 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
4362 1.1 christos { VEX_W_TABLE (VEX_W_0F12_P_3) },
4363 1.1 christos },
4364 1.1 christos
4365 1.1 christos /* PREFIX_VEX_0F16 */
4366 1.1 christos {
4367 1.1 christos { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
4368 1.1 christos { VEX_W_TABLE (VEX_W_0F16_P_1) },
4369 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
4370 1.1 christos },
4371 1.1 christos
4372 1.1 christos /* PREFIX_VEX_0F2A */
4373 1.1 christos {
4374 1.1 christos { Bad_Opcode },
4375 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
4376 1.1 christos { Bad_Opcode },
4377 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
4378 1.1 christos },
4379 1.1 christos
4380 1.1 christos /* PREFIX_VEX_0F2C */
4381 1.1 christos {
4382 1.1 christos { Bad_Opcode },
4383 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
4384 1.1 christos { Bad_Opcode },
4385 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
4386 1.1 christos },
4387 1.1 christos
4388 1.1 christos /* PREFIX_VEX_0F2D */
4389 1.1 christos {
4390 1.1 christos { Bad_Opcode },
4391 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
4392 1.1 christos { Bad_Opcode },
4393 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
4394 1.1 christos },
4395 1.1 christos
4396 1.1 christos /* PREFIX_VEX_0F2E */
4397 1.1 christos {
4398 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
4399 1.1 christos { Bad_Opcode },
4400 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
4401 1.1 christos },
4402 1.1 christos
4403 1.1 christos /* PREFIX_VEX_0F2F */
4404 1.1 christos {
4405 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
4406 1.1 christos { Bad_Opcode },
4407 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
4408 1.1 christos },
4409 1.1 christos
4410 1.1.1.1.8.1 tls /* PREFIX_VEX_0F41 */
4411 1.1.1.1.8.1 tls {
4412 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F41_P_0) },
4413 1.1.1.1.8.1 tls },
4414 1.1.1.1.8.1 tls
4415 1.1.1.1.8.1 tls /* PREFIX_VEX_0F42 */
4416 1.1.1.1.8.1 tls {
4417 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F42_P_0) },
4418 1.1.1.1.8.1 tls },
4419 1.1.1.1.8.1 tls
4420 1.1.1.1.8.1 tls /* PREFIX_VEX_0F44 */
4421 1.1.1.1.8.1 tls {
4422 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F44_P_0) },
4423 1.1.1.1.8.1 tls },
4424 1.1.1.1.8.1 tls
4425 1.1.1.1.8.1 tls /* PREFIX_VEX_0F45 */
4426 1.1.1.1.8.1 tls {
4427 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F45_P_0) },
4428 1.1.1.1.8.1 tls },
4429 1.1.1.1.8.1 tls
4430 1.1.1.1.8.1 tls /* PREFIX_VEX_0F46 */
4431 1.1.1.1.8.1 tls {
4432 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F46_P_0) },
4433 1.1.1.1.8.1 tls },
4434 1.1.1.1.8.1 tls
4435 1.1.1.1.8.1 tls /* PREFIX_VEX_0F47 */
4436 1.1.1.1.8.1 tls {
4437 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F47_P_0) },
4438 1.1.1.1.8.1 tls },
4439 1.1.1.1.8.1 tls
4440 1.1.1.1.8.1 tls /* PREFIX_VEX_0F4B */
4441 1.1.1.1.8.1 tls {
4442 1.1.1.1.8.1 tls { Bad_Opcode },
4443 1.1.1.1.8.1 tls { Bad_Opcode },
4444 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F4B_P_2) },
4445 1.1.1.1.8.1 tls },
4446 1.1.1.1.8.1 tls
4447 1.1 christos /* PREFIX_VEX_0F51 */
4448 1.1 christos {
4449 1.1 christos { VEX_W_TABLE (VEX_W_0F51_P_0) },
4450 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
4451 1.1 christos { VEX_W_TABLE (VEX_W_0F51_P_2) },
4452 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
4453 1.1 christos },
4454 1.1 christos
4455 1.1 christos /* PREFIX_VEX_0F52 */
4456 1.1 christos {
4457 1.1 christos { VEX_W_TABLE (VEX_W_0F52_P_0) },
4458 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
4459 1.1 christos },
4460 1.1 christos
4461 1.1 christos /* PREFIX_VEX_0F53 */
4462 1.1 christos {
4463 1.1 christos { VEX_W_TABLE (VEX_W_0F53_P_0) },
4464 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
4465 1.1 christos },
4466 1.1 christos
4467 1.1 christos /* PREFIX_VEX_0F58 */
4468 1.1 christos {
4469 1.1 christos { VEX_W_TABLE (VEX_W_0F58_P_0) },
4470 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
4471 1.1 christos { VEX_W_TABLE (VEX_W_0F58_P_2) },
4472 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
4473 1.1 christos },
4474 1.1 christos
4475 1.1 christos /* PREFIX_VEX_0F59 */
4476 1.1 christos {
4477 1.1 christos { VEX_W_TABLE (VEX_W_0F59_P_0) },
4478 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
4479 1.1 christos { VEX_W_TABLE (VEX_W_0F59_P_2) },
4480 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
4481 1.1 christos },
4482 1.1 christos
4483 1.1 christos /* PREFIX_VEX_0F5A */
4484 1.1 christos {
4485 1.1 christos { VEX_W_TABLE (VEX_W_0F5A_P_0) },
4486 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
4487 1.1 christos { "vcvtpd2ps%XY", { XMM, EXx } },
4488 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
4489 1.1 christos },
4490 1.1 christos
4491 1.1 christos /* PREFIX_VEX_0F5B */
4492 1.1 christos {
4493 1.1 christos { VEX_W_TABLE (VEX_W_0F5B_P_0) },
4494 1.1 christos { VEX_W_TABLE (VEX_W_0F5B_P_1) },
4495 1.1 christos { VEX_W_TABLE (VEX_W_0F5B_P_2) },
4496 1.1 christos },
4497 1.1 christos
4498 1.1 christos /* PREFIX_VEX_0F5C */
4499 1.1 christos {
4500 1.1 christos { VEX_W_TABLE (VEX_W_0F5C_P_0) },
4501 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
4502 1.1 christos { VEX_W_TABLE (VEX_W_0F5C_P_2) },
4503 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
4504 1.1 christos },
4505 1.1 christos
4506 1.1 christos /* PREFIX_VEX_0F5D */
4507 1.1 christos {
4508 1.1 christos { VEX_W_TABLE (VEX_W_0F5D_P_0) },
4509 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
4510 1.1 christos { VEX_W_TABLE (VEX_W_0F5D_P_2) },
4511 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
4512 1.1 christos },
4513 1.1 christos
4514 1.1 christos /* PREFIX_VEX_0F5E */
4515 1.1 christos {
4516 1.1 christos { VEX_W_TABLE (VEX_W_0F5E_P_0) },
4517 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
4518 1.1 christos { VEX_W_TABLE (VEX_W_0F5E_P_2) },
4519 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
4520 1.1 christos },
4521 1.1 christos
4522 1.1 christos /* PREFIX_VEX_0F5F */
4523 1.1 christos {
4524 1.1 christos { VEX_W_TABLE (VEX_W_0F5F_P_0) },
4525 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
4526 1.1 christos { VEX_W_TABLE (VEX_W_0F5F_P_2) },
4527 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
4528 1.1 christos },
4529 1.1 christos
4530 1.1 christos /* PREFIX_VEX_0F60 */
4531 1.1 christos {
4532 1.1 christos { Bad_Opcode },
4533 1.1 christos { Bad_Opcode },
4534 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F60_P_2) },
4535 1.1 christos },
4536 1.1 christos
4537 1.1 christos /* PREFIX_VEX_0F61 */
4538 1.1 christos {
4539 1.1 christos { Bad_Opcode },
4540 1.1 christos { Bad_Opcode },
4541 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F61_P_2) },
4542 1.1 christos },
4543 1.1 christos
4544 1.1 christos /* PREFIX_VEX_0F62 */
4545 1.1 christos {
4546 1.1 christos { Bad_Opcode },
4547 1.1 christos { Bad_Opcode },
4548 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F62_P_2) },
4549 1.1 christos },
4550 1.1 christos
4551 1.1 christos /* PREFIX_VEX_0F63 */
4552 1.1 christos {
4553 1.1 christos { Bad_Opcode },
4554 1.1 christos { Bad_Opcode },
4555 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F63_P_2) },
4556 1.1 christos },
4557 1.1 christos
4558 1.1 christos /* PREFIX_VEX_0F64 */
4559 1.1 christos {
4560 1.1 christos { Bad_Opcode },
4561 1.1 christos { Bad_Opcode },
4562 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F64_P_2) },
4563 1.1 christos },
4564 1.1 christos
4565 1.1 christos /* PREFIX_VEX_0F65 */
4566 1.1 christos {
4567 1.1 christos { Bad_Opcode },
4568 1.1 christos { Bad_Opcode },
4569 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F65_P_2) },
4570 1.1 christos },
4571 1.1 christos
4572 1.1 christos /* PREFIX_VEX_0F66 */
4573 1.1 christos {
4574 1.1 christos { Bad_Opcode },
4575 1.1 christos { Bad_Opcode },
4576 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F66_P_2) },
4577 1.1 christos },
4578 1.1 christos
4579 1.1 christos /* PREFIX_VEX_0F67 */
4580 1.1 christos {
4581 1.1 christos { Bad_Opcode },
4582 1.1 christos { Bad_Opcode },
4583 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F67_P_2) },
4584 1.1 christos },
4585 1.1 christos
4586 1.1 christos /* PREFIX_VEX_0F68 */
4587 1.1 christos {
4588 1.1 christos { Bad_Opcode },
4589 1.1 christos { Bad_Opcode },
4590 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F68_P_2) },
4591 1.1 christos },
4592 1.1 christos
4593 1.1 christos /* PREFIX_VEX_0F69 */
4594 1.1 christos {
4595 1.1 christos { Bad_Opcode },
4596 1.1 christos { Bad_Opcode },
4597 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F69_P_2) },
4598 1.1 christos },
4599 1.1 christos
4600 1.1 christos /* PREFIX_VEX_0F6A */
4601 1.1 christos {
4602 1.1 christos { Bad_Opcode },
4603 1.1 christos { Bad_Opcode },
4604 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F6A_P_2) },
4605 1.1 christos },
4606 1.1 christos
4607 1.1 christos /* PREFIX_VEX_0F6B */
4608 1.1 christos {
4609 1.1 christos { Bad_Opcode },
4610 1.1 christos { Bad_Opcode },
4611 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F6B_P_2) },
4612 1.1 christos },
4613 1.1 christos
4614 1.1 christos /* PREFIX_VEX_0F6C */
4615 1.1 christos {
4616 1.1 christos { Bad_Opcode },
4617 1.1 christos { Bad_Opcode },
4618 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F6C_P_2) },
4619 1.1 christos },
4620 1.1 christos
4621 1.1 christos /* PREFIX_VEX_0F6D */
4622 1.1 christos {
4623 1.1 christos { Bad_Opcode },
4624 1.1 christos { Bad_Opcode },
4625 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F6D_P_2) },
4626 1.1 christos },
4627 1.1 christos
4628 1.1 christos /* PREFIX_VEX_0F6E */
4629 1.1 christos {
4630 1.1 christos { Bad_Opcode },
4631 1.1 christos { Bad_Opcode },
4632 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
4633 1.1 christos },
4634 1.1 christos
4635 1.1 christos /* PREFIX_VEX_0F6F */
4636 1.1 christos {
4637 1.1 christos { Bad_Opcode },
4638 1.1 christos { VEX_W_TABLE (VEX_W_0F6F_P_1) },
4639 1.1 christos { VEX_W_TABLE (VEX_W_0F6F_P_2) },
4640 1.1 christos },
4641 1.1 christos
4642 1.1 christos /* PREFIX_VEX_0F70 */
4643 1.1 christos {
4644 1.1 christos { Bad_Opcode },
4645 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F70_P_1) },
4646 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F70_P_2) },
4647 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F70_P_3) },
4648 1.1 christos },
4649 1.1 christos
4650 1.1 christos /* PREFIX_VEX_0F71_REG_2 */
4651 1.1 christos {
4652 1.1 christos { Bad_Opcode },
4653 1.1 christos { Bad_Opcode },
4654 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
4655 1.1 christos },
4656 1.1 christos
4657 1.1 christos /* PREFIX_VEX_0F71_REG_4 */
4658 1.1 christos {
4659 1.1 christos { Bad_Opcode },
4660 1.1 christos { Bad_Opcode },
4661 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
4662 1.1 christos },
4663 1.1 christos
4664 1.1 christos /* PREFIX_VEX_0F71_REG_6 */
4665 1.1 christos {
4666 1.1 christos { Bad_Opcode },
4667 1.1 christos { Bad_Opcode },
4668 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
4669 1.1 christos },
4670 1.1 christos
4671 1.1 christos /* PREFIX_VEX_0F72_REG_2 */
4672 1.1 christos {
4673 1.1 christos { Bad_Opcode },
4674 1.1 christos { Bad_Opcode },
4675 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
4676 1.1 christos },
4677 1.1 christos
4678 1.1 christos /* PREFIX_VEX_0F72_REG_4 */
4679 1.1 christos {
4680 1.1 christos { Bad_Opcode },
4681 1.1 christos { Bad_Opcode },
4682 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
4683 1.1 christos },
4684 1.1 christos
4685 1.1 christos /* PREFIX_VEX_0F72_REG_6 */
4686 1.1 christos {
4687 1.1 christos { Bad_Opcode },
4688 1.1 christos { Bad_Opcode },
4689 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
4690 1.1 christos },
4691 1.1 christos
4692 1.1 christos /* PREFIX_VEX_0F73_REG_2 */
4693 1.1 christos {
4694 1.1 christos { Bad_Opcode },
4695 1.1 christos { Bad_Opcode },
4696 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
4697 1.1 christos },
4698 1.1 christos
4699 1.1 christos /* PREFIX_VEX_0F73_REG_3 */
4700 1.1 christos {
4701 1.1 christos { Bad_Opcode },
4702 1.1 christos { Bad_Opcode },
4703 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
4704 1.1 christos },
4705 1.1 christos
4706 1.1 christos /* PREFIX_VEX_0F73_REG_6 */
4707 1.1 christos {
4708 1.1 christos { Bad_Opcode },
4709 1.1 christos { Bad_Opcode },
4710 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
4711 1.1 christos },
4712 1.1 christos
4713 1.1 christos /* PREFIX_VEX_0F73_REG_7 */
4714 1.1 christos {
4715 1.1 christos { Bad_Opcode },
4716 1.1 christos { Bad_Opcode },
4717 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
4718 1.1 christos },
4719 1.1 christos
4720 1.1 christos /* PREFIX_VEX_0F74 */
4721 1.1 christos {
4722 1.1 christos { Bad_Opcode },
4723 1.1 christos { Bad_Opcode },
4724 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F74_P_2) },
4725 1.1 christos },
4726 1.1 christos
4727 1.1 christos /* PREFIX_VEX_0F75 */
4728 1.1 christos {
4729 1.1 christos { Bad_Opcode },
4730 1.1 christos { Bad_Opcode },
4731 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F75_P_2) },
4732 1.1 christos },
4733 1.1 christos
4734 1.1 christos /* PREFIX_VEX_0F76 */
4735 1.1 christos {
4736 1.1 christos { Bad_Opcode },
4737 1.1 christos { Bad_Opcode },
4738 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F76_P_2) },
4739 1.1 christos },
4740 1.1 christos
4741 1.1 christos /* PREFIX_VEX_0F77 */
4742 1.1 christos {
4743 1.1 christos { VEX_W_TABLE (VEX_W_0F77_P_0) },
4744 1.1 christos },
4745 1.1 christos
4746 1.1 christos /* PREFIX_VEX_0F7C */
4747 1.1 christos {
4748 1.1 christos { Bad_Opcode },
4749 1.1 christos { Bad_Opcode },
4750 1.1 christos { VEX_W_TABLE (VEX_W_0F7C_P_2) },
4751 1.1 christos { VEX_W_TABLE (VEX_W_0F7C_P_3) },
4752 1.1 christos },
4753 1.1 christos
4754 1.1 christos /* PREFIX_VEX_0F7D */
4755 1.1 christos {
4756 1.1 christos { Bad_Opcode },
4757 1.1 christos { Bad_Opcode },
4758 1.1 christos { VEX_W_TABLE (VEX_W_0F7D_P_2) },
4759 1.1 christos { VEX_W_TABLE (VEX_W_0F7D_P_3) },
4760 1.1 christos },
4761 1.1 christos
4762 1.1 christos /* PREFIX_VEX_0F7E */
4763 1.1 christos {
4764 1.1 christos { Bad_Opcode },
4765 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
4766 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
4767 1.1 christos },
4768 1.1 christos
4769 1.1 christos /* PREFIX_VEX_0F7F */
4770 1.1 christos {
4771 1.1 christos { Bad_Opcode },
4772 1.1 christos { VEX_W_TABLE (VEX_W_0F7F_P_1) },
4773 1.1 christos { VEX_W_TABLE (VEX_W_0F7F_P_2) },
4774 1.1 christos },
4775 1.1 christos
4776 1.1.1.1.8.1 tls /* PREFIX_VEX_0F90 */
4777 1.1.1.1.8.1 tls {
4778 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F90_P_0) },
4779 1.1.1.1.8.1 tls },
4780 1.1.1.1.8.1 tls
4781 1.1.1.1.8.1 tls /* PREFIX_VEX_0F91 */
4782 1.1.1.1.8.1 tls {
4783 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F91_P_0) },
4784 1.1.1.1.8.1 tls },
4785 1.1.1.1.8.1 tls
4786 1.1.1.1.8.1 tls /* PREFIX_VEX_0F92 */
4787 1.1.1.1.8.1 tls {
4788 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F92_P_0) },
4789 1.1.1.1.8.1 tls },
4790 1.1.1.1.8.1 tls
4791 1.1.1.1.8.1 tls /* PREFIX_VEX_0F93 */
4792 1.1.1.1.8.1 tls {
4793 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F93_P_0) },
4794 1.1.1.1.8.1 tls },
4795 1.1.1.1.8.1 tls
4796 1.1.1.1.8.1 tls /* PREFIX_VEX_0F98 */
4797 1.1.1.1.8.1 tls {
4798 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F98_P_0) },
4799 1.1.1.1.8.1 tls },
4800 1.1.1.1.8.1 tls
4801 1.1 christos /* PREFIX_VEX_0FC2 */
4802 1.1 christos {
4803 1.1 christos { VEX_W_TABLE (VEX_W_0FC2_P_0) },
4804 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
4805 1.1 christos { VEX_W_TABLE (VEX_W_0FC2_P_2) },
4806 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
4807 1.1 christos },
4808 1.1 christos
4809 1.1 christos /* PREFIX_VEX_0FC4 */
4810 1.1 christos {
4811 1.1 christos { Bad_Opcode },
4812 1.1 christos { Bad_Opcode },
4813 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
4814 1.1 christos },
4815 1.1 christos
4816 1.1 christos /* PREFIX_VEX_0FC5 */
4817 1.1 christos {
4818 1.1 christos { Bad_Opcode },
4819 1.1 christos { Bad_Opcode },
4820 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
4821 1.1 christos },
4822 1.1 christos
4823 1.1 christos /* PREFIX_VEX_0FD0 */
4824 1.1 christos {
4825 1.1 christos { Bad_Opcode },
4826 1.1 christos { Bad_Opcode },
4827 1.1 christos { VEX_W_TABLE (VEX_W_0FD0_P_2) },
4828 1.1 christos { VEX_W_TABLE (VEX_W_0FD0_P_3) },
4829 1.1 christos },
4830 1.1 christos
4831 1.1 christos /* PREFIX_VEX_0FD1 */
4832 1.1 christos {
4833 1.1 christos { Bad_Opcode },
4834 1.1 christos { Bad_Opcode },
4835 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FD1_P_2) },
4836 1.1 christos },
4837 1.1 christos
4838 1.1 christos /* PREFIX_VEX_0FD2 */
4839 1.1 christos {
4840 1.1 christos { Bad_Opcode },
4841 1.1 christos { Bad_Opcode },
4842 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FD2_P_2) },
4843 1.1 christos },
4844 1.1 christos
4845 1.1 christos /* PREFIX_VEX_0FD3 */
4846 1.1 christos {
4847 1.1 christos { Bad_Opcode },
4848 1.1 christos { Bad_Opcode },
4849 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FD3_P_2) },
4850 1.1 christos },
4851 1.1 christos
4852 1.1 christos /* PREFIX_VEX_0FD4 */
4853 1.1 christos {
4854 1.1 christos { Bad_Opcode },
4855 1.1 christos { Bad_Opcode },
4856 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FD4_P_2) },
4857 1.1 christos },
4858 1.1 christos
4859 1.1 christos /* PREFIX_VEX_0FD5 */
4860 1.1 christos {
4861 1.1 christos { Bad_Opcode },
4862 1.1 christos { Bad_Opcode },
4863 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FD5_P_2) },
4864 1.1 christos },
4865 1.1 christos
4866 1.1 christos /* PREFIX_VEX_0FD6 */
4867 1.1 christos {
4868 1.1 christos { Bad_Opcode },
4869 1.1 christos { Bad_Opcode },
4870 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
4871 1.1 christos },
4872 1.1 christos
4873 1.1 christos /* PREFIX_VEX_0FD7 */
4874 1.1 christos {
4875 1.1 christos { Bad_Opcode },
4876 1.1 christos { Bad_Opcode },
4877 1.1 christos { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
4878 1.1 christos },
4879 1.1 christos
4880 1.1 christos /* PREFIX_VEX_0FD8 */
4881 1.1 christos {
4882 1.1 christos { Bad_Opcode },
4883 1.1 christos { Bad_Opcode },
4884 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FD8_P_2) },
4885 1.1 christos },
4886 1.1 christos
4887 1.1 christos /* PREFIX_VEX_0FD9 */
4888 1.1 christos {
4889 1.1 christos { Bad_Opcode },
4890 1.1 christos { Bad_Opcode },
4891 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FD9_P_2) },
4892 1.1 christos },
4893 1.1 christos
4894 1.1 christos /* PREFIX_VEX_0FDA */
4895 1.1 christos {
4896 1.1 christos { Bad_Opcode },
4897 1.1 christos { Bad_Opcode },
4898 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FDA_P_2) },
4899 1.1 christos },
4900 1.1 christos
4901 1.1 christos /* PREFIX_VEX_0FDB */
4902 1.1 christos {
4903 1.1 christos { Bad_Opcode },
4904 1.1 christos { Bad_Opcode },
4905 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FDB_P_2) },
4906 1.1 christos },
4907 1.1 christos
4908 1.1 christos /* PREFIX_VEX_0FDC */
4909 1.1 christos {
4910 1.1 christos { Bad_Opcode },
4911 1.1 christos { Bad_Opcode },
4912 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FDC_P_2) },
4913 1.1 christos },
4914 1.1 christos
4915 1.1 christos /* PREFIX_VEX_0FDD */
4916 1.1 christos {
4917 1.1 christos { Bad_Opcode },
4918 1.1 christos { Bad_Opcode },
4919 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FDD_P_2) },
4920 1.1 christos },
4921 1.1 christos
4922 1.1 christos /* PREFIX_VEX_0FDE */
4923 1.1 christos {
4924 1.1 christos { Bad_Opcode },
4925 1.1 christos { Bad_Opcode },
4926 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FDE_P_2) },
4927 1.1 christos },
4928 1.1 christos
4929 1.1 christos /* PREFIX_VEX_0FDF */
4930 1.1 christos {
4931 1.1 christos { Bad_Opcode },
4932 1.1 christos { Bad_Opcode },
4933 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FDF_P_2) },
4934 1.1 christos },
4935 1.1 christos
4936 1.1 christos /* PREFIX_VEX_0FE0 */
4937 1.1 christos {
4938 1.1 christos { Bad_Opcode },
4939 1.1 christos { Bad_Opcode },
4940 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FE0_P_2) },
4941 1.1 christos },
4942 1.1 christos
4943 1.1 christos /* PREFIX_VEX_0FE1 */
4944 1.1 christos {
4945 1.1 christos { Bad_Opcode },
4946 1.1 christos { Bad_Opcode },
4947 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FE1_P_2) },
4948 1.1 christos },
4949 1.1 christos
4950 1.1 christos /* PREFIX_VEX_0FE2 */
4951 1.1 christos {
4952 1.1 christos { Bad_Opcode },
4953 1.1 christos { Bad_Opcode },
4954 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FE2_P_2) },
4955 1.1 christos },
4956 1.1 christos
4957 1.1 christos /* PREFIX_VEX_0FE3 */
4958 1.1 christos {
4959 1.1 christos { Bad_Opcode },
4960 1.1 christos { Bad_Opcode },
4961 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FE3_P_2) },
4962 1.1 christos },
4963 1.1 christos
4964 1.1 christos /* PREFIX_VEX_0FE4 */
4965 1.1 christos {
4966 1.1 christos { Bad_Opcode },
4967 1.1 christos { Bad_Opcode },
4968 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FE4_P_2) },
4969 1.1 christos },
4970 1.1 christos
4971 1.1 christos /* PREFIX_VEX_0FE5 */
4972 1.1 christos {
4973 1.1 christos { Bad_Opcode },
4974 1.1 christos { Bad_Opcode },
4975 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FE5_P_2) },
4976 1.1 christos },
4977 1.1 christos
4978 1.1 christos /* PREFIX_VEX_0FE6 */
4979 1.1 christos {
4980 1.1 christos { Bad_Opcode },
4981 1.1 christos { VEX_W_TABLE (VEX_W_0FE6_P_1) },
4982 1.1 christos { VEX_W_TABLE (VEX_W_0FE6_P_2) },
4983 1.1 christos { VEX_W_TABLE (VEX_W_0FE6_P_3) },
4984 1.1 christos },
4985 1.1 christos
4986 1.1 christos /* PREFIX_VEX_0FE7 */
4987 1.1 christos {
4988 1.1 christos { Bad_Opcode },
4989 1.1 christos { Bad_Opcode },
4990 1.1 christos { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
4991 1.1 christos },
4992 1.1 christos
4993 1.1 christos /* PREFIX_VEX_0FE8 */
4994 1.1 christos {
4995 1.1 christos { Bad_Opcode },
4996 1.1 christos { Bad_Opcode },
4997 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FE8_P_2) },
4998 1.1 christos },
4999 1.1 christos
5000 1.1 christos /* PREFIX_VEX_0FE9 */
5001 1.1 christos {
5002 1.1 christos { Bad_Opcode },
5003 1.1 christos { Bad_Opcode },
5004 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FE9_P_2) },
5005 1.1 christos },
5006 1.1 christos
5007 1.1 christos /* PREFIX_VEX_0FEA */
5008 1.1 christos {
5009 1.1 christos { Bad_Opcode },
5010 1.1 christos { Bad_Opcode },
5011 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FEA_P_2) },
5012 1.1 christos },
5013 1.1 christos
5014 1.1 christos /* PREFIX_VEX_0FEB */
5015 1.1 christos {
5016 1.1 christos { Bad_Opcode },
5017 1.1 christos { Bad_Opcode },
5018 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FEB_P_2) },
5019 1.1 christos },
5020 1.1 christos
5021 1.1 christos /* PREFIX_VEX_0FEC */
5022 1.1 christos {
5023 1.1 christos { Bad_Opcode },
5024 1.1 christos { Bad_Opcode },
5025 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FEC_P_2) },
5026 1.1 christos },
5027 1.1 christos
5028 1.1 christos /* PREFIX_VEX_0FED */
5029 1.1 christos {
5030 1.1 christos { Bad_Opcode },
5031 1.1 christos { Bad_Opcode },
5032 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FED_P_2) },
5033 1.1 christos },
5034 1.1 christos
5035 1.1 christos /* PREFIX_VEX_0FEE */
5036 1.1 christos {
5037 1.1 christos { Bad_Opcode },
5038 1.1 christos { Bad_Opcode },
5039 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FEE_P_2) },
5040 1.1 christos },
5041 1.1 christos
5042 1.1 christos /* PREFIX_VEX_0FEF */
5043 1.1 christos {
5044 1.1 christos { Bad_Opcode },
5045 1.1 christos { Bad_Opcode },
5046 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FEF_P_2) },
5047 1.1 christos },
5048 1.1 christos
5049 1.1 christos /* PREFIX_VEX_0FF0 */
5050 1.1 christos {
5051 1.1 christos { Bad_Opcode },
5052 1.1 christos { Bad_Opcode },
5053 1.1 christos { Bad_Opcode },
5054 1.1 christos { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
5055 1.1 christos },
5056 1.1 christos
5057 1.1 christos /* PREFIX_VEX_0FF1 */
5058 1.1 christos {
5059 1.1 christos { Bad_Opcode },
5060 1.1 christos { Bad_Opcode },
5061 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FF1_P_2) },
5062 1.1 christos },
5063 1.1 christos
5064 1.1 christos /* PREFIX_VEX_0FF2 */
5065 1.1 christos {
5066 1.1 christos { Bad_Opcode },
5067 1.1 christos { Bad_Opcode },
5068 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FF2_P_2) },
5069 1.1 christos },
5070 1.1 christos
5071 1.1 christos /* PREFIX_VEX_0FF3 */
5072 1.1 christos {
5073 1.1 christos { Bad_Opcode },
5074 1.1 christos { Bad_Opcode },
5075 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FF3_P_2) },
5076 1.1 christos },
5077 1.1 christos
5078 1.1 christos /* PREFIX_VEX_0FF4 */
5079 1.1 christos {
5080 1.1 christos { Bad_Opcode },
5081 1.1 christos { Bad_Opcode },
5082 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FF4_P_2) },
5083 1.1 christos },
5084 1.1 christos
5085 1.1 christos /* PREFIX_VEX_0FF5 */
5086 1.1 christos {
5087 1.1 christos { Bad_Opcode },
5088 1.1 christos { Bad_Opcode },
5089 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FF5_P_2) },
5090 1.1 christos },
5091 1.1 christos
5092 1.1 christos /* PREFIX_VEX_0FF6 */
5093 1.1 christos {
5094 1.1 christos { Bad_Opcode },
5095 1.1 christos { Bad_Opcode },
5096 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FF6_P_2) },
5097 1.1 christos },
5098 1.1 christos
5099 1.1 christos /* PREFIX_VEX_0FF7 */
5100 1.1 christos {
5101 1.1 christos { Bad_Opcode },
5102 1.1 christos { Bad_Opcode },
5103 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
5104 1.1 christos },
5105 1.1 christos
5106 1.1 christos /* PREFIX_VEX_0FF8 */
5107 1.1 christos {
5108 1.1 christos { Bad_Opcode },
5109 1.1 christos { Bad_Opcode },
5110 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FF8_P_2) },
5111 1.1 christos },
5112 1.1 christos
5113 1.1 christos /* PREFIX_VEX_0FF9 */
5114 1.1 christos {
5115 1.1 christos { Bad_Opcode },
5116 1.1 christos { Bad_Opcode },
5117 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FF9_P_2) },
5118 1.1 christos },
5119 1.1 christos
5120 1.1 christos /* PREFIX_VEX_0FFA */
5121 1.1 christos {
5122 1.1 christos { Bad_Opcode },
5123 1.1 christos { Bad_Opcode },
5124 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FFA_P_2) },
5125 1.1 christos },
5126 1.1 christos
5127 1.1 christos /* PREFIX_VEX_0FFB */
5128 1.1 christos {
5129 1.1 christos { Bad_Opcode },
5130 1.1 christos { Bad_Opcode },
5131 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FFB_P_2) },
5132 1.1 christos },
5133 1.1 christos
5134 1.1 christos /* PREFIX_VEX_0FFC */
5135 1.1 christos {
5136 1.1 christos { Bad_Opcode },
5137 1.1 christos { Bad_Opcode },
5138 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FFC_P_2) },
5139 1.1 christos },
5140 1.1 christos
5141 1.1 christos /* PREFIX_VEX_0FFD */
5142 1.1 christos {
5143 1.1 christos { Bad_Opcode },
5144 1.1 christos { Bad_Opcode },
5145 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FFD_P_2) },
5146 1.1 christos },
5147 1.1 christos
5148 1.1 christos /* PREFIX_VEX_0FFE */
5149 1.1 christos {
5150 1.1 christos { Bad_Opcode },
5151 1.1 christos { Bad_Opcode },
5152 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FFE_P_2) },
5153 1.1 christos },
5154 1.1 christos
5155 1.1 christos /* PREFIX_VEX_0F3800 */
5156 1.1 christos {
5157 1.1 christos { Bad_Opcode },
5158 1.1 christos { Bad_Opcode },
5159 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3800_P_2) },
5160 1.1 christos },
5161 1.1 christos
5162 1.1 christos /* PREFIX_VEX_0F3801 */
5163 1.1 christos {
5164 1.1 christos { Bad_Opcode },
5165 1.1 christos { Bad_Opcode },
5166 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3801_P_2) },
5167 1.1 christos },
5168 1.1 christos
5169 1.1 christos /* PREFIX_VEX_0F3802 */
5170 1.1 christos {
5171 1.1 christos { Bad_Opcode },
5172 1.1 christos { Bad_Opcode },
5173 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3802_P_2) },
5174 1.1 christos },
5175 1.1 christos
5176 1.1 christos /* PREFIX_VEX_0F3803 */
5177 1.1 christos {
5178 1.1 christos { Bad_Opcode },
5179 1.1 christos { Bad_Opcode },
5180 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3803_P_2) },
5181 1.1 christos },
5182 1.1 christos
5183 1.1 christos /* PREFIX_VEX_0F3804 */
5184 1.1 christos {
5185 1.1 christos { Bad_Opcode },
5186 1.1 christos { Bad_Opcode },
5187 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3804_P_2) },
5188 1.1 christos },
5189 1.1 christos
5190 1.1 christos /* PREFIX_VEX_0F3805 */
5191 1.1 christos {
5192 1.1 christos { Bad_Opcode },
5193 1.1 christos { Bad_Opcode },
5194 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3805_P_2) },
5195 1.1 christos },
5196 1.1 christos
5197 1.1 christos /* PREFIX_VEX_0F3806 */
5198 1.1 christos {
5199 1.1 christos { Bad_Opcode },
5200 1.1 christos { Bad_Opcode },
5201 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3806_P_2) },
5202 1.1 christos },
5203 1.1 christos
5204 1.1 christos /* PREFIX_VEX_0F3807 */
5205 1.1 christos {
5206 1.1 christos { Bad_Opcode },
5207 1.1 christos { Bad_Opcode },
5208 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3807_P_2) },
5209 1.1 christos },
5210 1.1 christos
5211 1.1 christos /* PREFIX_VEX_0F3808 */
5212 1.1 christos {
5213 1.1 christos { Bad_Opcode },
5214 1.1 christos { Bad_Opcode },
5215 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3808_P_2) },
5216 1.1 christos },
5217 1.1 christos
5218 1.1 christos /* PREFIX_VEX_0F3809 */
5219 1.1 christos {
5220 1.1 christos { Bad_Opcode },
5221 1.1 christos { Bad_Opcode },
5222 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3809_P_2) },
5223 1.1 christos },
5224 1.1 christos
5225 1.1 christos /* PREFIX_VEX_0F380A */
5226 1.1 christos {
5227 1.1 christos { Bad_Opcode },
5228 1.1 christos { Bad_Opcode },
5229 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F380A_P_2) },
5230 1.1 christos },
5231 1.1 christos
5232 1.1 christos /* PREFIX_VEX_0F380B */
5233 1.1 christos {
5234 1.1 christos { Bad_Opcode },
5235 1.1 christos { Bad_Opcode },
5236 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F380B_P_2) },
5237 1.1 christos },
5238 1.1 christos
5239 1.1 christos /* PREFIX_VEX_0F380C */
5240 1.1 christos {
5241 1.1 christos { Bad_Opcode },
5242 1.1 christos { Bad_Opcode },
5243 1.1 christos { VEX_W_TABLE (VEX_W_0F380C_P_2) },
5244 1.1 christos },
5245 1.1 christos
5246 1.1 christos /* PREFIX_VEX_0F380D */
5247 1.1 christos {
5248 1.1 christos { Bad_Opcode },
5249 1.1 christos { Bad_Opcode },
5250 1.1 christos { VEX_W_TABLE (VEX_W_0F380D_P_2) },
5251 1.1 christos },
5252 1.1 christos
5253 1.1 christos /* PREFIX_VEX_0F380E */
5254 1.1 christos {
5255 1.1 christos { Bad_Opcode },
5256 1.1 christos { Bad_Opcode },
5257 1.1 christos { VEX_W_TABLE (VEX_W_0F380E_P_2) },
5258 1.1 christos },
5259 1.1 christos
5260 1.1 christos /* PREFIX_VEX_0F380F */
5261 1.1 christos {
5262 1.1 christos { Bad_Opcode },
5263 1.1 christos { Bad_Opcode },
5264 1.1 christos { VEX_W_TABLE (VEX_W_0F380F_P_2) },
5265 1.1 christos },
5266 1.1 christos
5267 1.1 christos /* PREFIX_VEX_0F3813 */
5268 1.1 christos {
5269 1.1 christos { Bad_Opcode },
5270 1.1 christos { Bad_Opcode },
5271 1.1 christos { "vcvtph2ps", { XM, EXxmmq } },
5272 1.1 christos },
5273 1.1 christos
5274 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3816 */
5275 1.1.1.1.8.1 tls {
5276 1.1.1.1.8.1 tls { Bad_Opcode },
5277 1.1.1.1.8.1 tls { Bad_Opcode },
5278 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
5279 1.1.1.1.8.1 tls },
5280 1.1.1.1.8.1 tls
5281 1.1 christos /* PREFIX_VEX_0F3817 */
5282 1.1 christos {
5283 1.1 christos { Bad_Opcode },
5284 1.1 christos { Bad_Opcode },
5285 1.1 christos { VEX_W_TABLE (VEX_W_0F3817_P_2) },
5286 1.1 christos },
5287 1.1 christos
5288 1.1 christos /* PREFIX_VEX_0F3818 */
5289 1.1 christos {
5290 1.1 christos { Bad_Opcode },
5291 1.1 christos { Bad_Opcode },
5292 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3818_P_2) },
5293 1.1 christos },
5294 1.1 christos
5295 1.1 christos /* PREFIX_VEX_0F3819 */
5296 1.1 christos {
5297 1.1 christos { Bad_Opcode },
5298 1.1 christos { Bad_Opcode },
5299 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
5300 1.1 christos },
5301 1.1 christos
5302 1.1 christos /* PREFIX_VEX_0F381A */
5303 1.1 christos {
5304 1.1 christos { Bad_Opcode },
5305 1.1 christos { Bad_Opcode },
5306 1.1 christos { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
5307 1.1 christos },
5308 1.1 christos
5309 1.1 christos /* PREFIX_VEX_0F381C */
5310 1.1 christos {
5311 1.1 christos { Bad_Opcode },
5312 1.1 christos { Bad_Opcode },
5313 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F381C_P_2) },
5314 1.1 christos },
5315 1.1 christos
5316 1.1 christos /* PREFIX_VEX_0F381D */
5317 1.1 christos {
5318 1.1 christos { Bad_Opcode },
5319 1.1 christos { Bad_Opcode },
5320 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F381D_P_2) },
5321 1.1 christos },
5322 1.1 christos
5323 1.1 christos /* PREFIX_VEX_0F381E */
5324 1.1 christos {
5325 1.1 christos { Bad_Opcode },
5326 1.1 christos { Bad_Opcode },
5327 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F381E_P_2) },
5328 1.1 christos },
5329 1.1 christos
5330 1.1 christos /* PREFIX_VEX_0F3820 */
5331 1.1 christos {
5332 1.1 christos { Bad_Opcode },
5333 1.1 christos { Bad_Opcode },
5334 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3820_P_2) },
5335 1.1 christos },
5336 1.1 christos
5337 1.1 christos /* PREFIX_VEX_0F3821 */
5338 1.1 christos {
5339 1.1 christos { Bad_Opcode },
5340 1.1 christos { Bad_Opcode },
5341 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3821_P_2) },
5342 1.1 christos },
5343 1.1 christos
5344 1.1 christos /* PREFIX_VEX_0F3822 */
5345 1.1 christos {
5346 1.1 christos { Bad_Opcode },
5347 1.1 christos { Bad_Opcode },
5348 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3822_P_2) },
5349 1.1 christos },
5350 1.1 christos
5351 1.1 christos /* PREFIX_VEX_0F3823 */
5352 1.1 christos {
5353 1.1 christos { Bad_Opcode },
5354 1.1 christos { Bad_Opcode },
5355 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3823_P_2) },
5356 1.1 christos },
5357 1.1 christos
5358 1.1 christos /* PREFIX_VEX_0F3824 */
5359 1.1 christos {
5360 1.1 christos { Bad_Opcode },
5361 1.1 christos { Bad_Opcode },
5362 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3824_P_2) },
5363 1.1 christos },
5364 1.1 christos
5365 1.1 christos /* PREFIX_VEX_0F3825 */
5366 1.1 christos {
5367 1.1 christos { Bad_Opcode },
5368 1.1 christos { Bad_Opcode },
5369 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3825_P_2) },
5370 1.1 christos },
5371 1.1 christos
5372 1.1 christos /* PREFIX_VEX_0F3828 */
5373 1.1 christos {
5374 1.1 christos { Bad_Opcode },
5375 1.1 christos { Bad_Opcode },
5376 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3828_P_2) },
5377 1.1 christos },
5378 1.1 christos
5379 1.1 christos /* PREFIX_VEX_0F3829 */
5380 1.1 christos {
5381 1.1 christos { Bad_Opcode },
5382 1.1 christos { Bad_Opcode },
5383 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3829_P_2) },
5384 1.1 christos },
5385 1.1 christos
5386 1.1 christos /* PREFIX_VEX_0F382A */
5387 1.1 christos {
5388 1.1 christos { Bad_Opcode },
5389 1.1 christos { Bad_Opcode },
5390 1.1 christos { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
5391 1.1 christos },
5392 1.1 christos
5393 1.1 christos /* PREFIX_VEX_0F382B */
5394 1.1 christos {
5395 1.1 christos { Bad_Opcode },
5396 1.1 christos { Bad_Opcode },
5397 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F382B_P_2) },
5398 1.1 christos },
5399 1.1 christos
5400 1.1 christos /* PREFIX_VEX_0F382C */
5401 1.1 christos {
5402 1.1 christos { Bad_Opcode },
5403 1.1 christos { Bad_Opcode },
5404 1.1 christos { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
5405 1.1 christos },
5406 1.1 christos
5407 1.1 christos /* PREFIX_VEX_0F382D */
5408 1.1 christos {
5409 1.1 christos { Bad_Opcode },
5410 1.1 christos { Bad_Opcode },
5411 1.1 christos { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
5412 1.1 christos },
5413 1.1 christos
5414 1.1 christos /* PREFIX_VEX_0F382E */
5415 1.1 christos {
5416 1.1 christos { Bad_Opcode },
5417 1.1 christos { Bad_Opcode },
5418 1.1 christos { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
5419 1.1 christos },
5420 1.1 christos
5421 1.1 christos /* PREFIX_VEX_0F382F */
5422 1.1 christos {
5423 1.1 christos { Bad_Opcode },
5424 1.1 christos { Bad_Opcode },
5425 1.1 christos { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
5426 1.1 christos },
5427 1.1 christos
5428 1.1 christos /* PREFIX_VEX_0F3830 */
5429 1.1 christos {
5430 1.1 christos { Bad_Opcode },
5431 1.1 christos { Bad_Opcode },
5432 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3830_P_2) },
5433 1.1 christos },
5434 1.1 christos
5435 1.1 christos /* PREFIX_VEX_0F3831 */
5436 1.1 christos {
5437 1.1 christos { Bad_Opcode },
5438 1.1 christos { Bad_Opcode },
5439 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3831_P_2) },
5440 1.1 christos },
5441 1.1 christos
5442 1.1 christos /* PREFIX_VEX_0F3832 */
5443 1.1 christos {
5444 1.1 christos { Bad_Opcode },
5445 1.1 christos { Bad_Opcode },
5446 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3832_P_2) },
5447 1.1 christos },
5448 1.1 christos
5449 1.1 christos /* PREFIX_VEX_0F3833 */
5450 1.1 christos {
5451 1.1 christos { Bad_Opcode },
5452 1.1 christos { Bad_Opcode },
5453 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3833_P_2) },
5454 1.1 christos },
5455 1.1 christos
5456 1.1 christos /* PREFIX_VEX_0F3834 */
5457 1.1 christos {
5458 1.1 christos { Bad_Opcode },
5459 1.1 christos { Bad_Opcode },
5460 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3834_P_2) },
5461 1.1 christos },
5462 1.1 christos
5463 1.1 christos /* PREFIX_VEX_0F3835 */
5464 1.1 christos {
5465 1.1 christos { Bad_Opcode },
5466 1.1 christos { Bad_Opcode },
5467 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3835_P_2) },
5468 1.1.1.1.8.1 tls },
5469 1.1.1.1.8.1 tls
5470 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3836 */
5471 1.1.1.1.8.1 tls {
5472 1.1.1.1.8.1 tls { Bad_Opcode },
5473 1.1.1.1.8.1 tls { Bad_Opcode },
5474 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
5475 1.1 christos },
5476 1.1 christos
5477 1.1 christos /* PREFIX_VEX_0F3837 */
5478 1.1 christos {
5479 1.1 christos { Bad_Opcode },
5480 1.1 christos { Bad_Opcode },
5481 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3837_P_2) },
5482 1.1 christos },
5483 1.1 christos
5484 1.1 christos /* PREFIX_VEX_0F3838 */
5485 1.1 christos {
5486 1.1 christos { Bad_Opcode },
5487 1.1 christos { Bad_Opcode },
5488 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3838_P_2) },
5489 1.1 christos },
5490 1.1 christos
5491 1.1 christos /* PREFIX_VEX_0F3839 */
5492 1.1 christos {
5493 1.1 christos { Bad_Opcode },
5494 1.1 christos { Bad_Opcode },
5495 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3839_P_2) },
5496 1.1 christos },
5497 1.1 christos
5498 1.1 christos /* PREFIX_VEX_0F383A */
5499 1.1 christos {
5500 1.1 christos { Bad_Opcode },
5501 1.1 christos { Bad_Opcode },
5502 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F383A_P_2) },
5503 1.1 christos },
5504 1.1 christos
5505 1.1 christos /* PREFIX_VEX_0F383B */
5506 1.1 christos {
5507 1.1 christos { Bad_Opcode },
5508 1.1 christos { Bad_Opcode },
5509 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F383B_P_2) },
5510 1.1 christos },
5511 1.1 christos
5512 1.1 christos /* PREFIX_VEX_0F383C */
5513 1.1 christos {
5514 1.1 christos { Bad_Opcode },
5515 1.1 christos { Bad_Opcode },
5516 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F383C_P_2) },
5517 1.1 christos },
5518 1.1 christos
5519 1.1 christos /* PREFIX_VEX_0F383D */
5520 1.1 christos {
5521 1.1 christos { Bad_Opcode },
5522 1.1 christos { Bad_Opcode },
5523 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F383D_P_2) },
5524 1.1 christos },
5525 1.1 christos
5526 1.1 christos /* PREFIX_VEX_0F383E */
5527 1.1 christos {
5528 1.1 christos { Bad_Opcode },
5529 1.1 christos { Bad_Opcode },
5530 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F383E_P_2) },
5531 1.1 christos },
5532 1.1 christos
5533 1.1 christos /* PREFIX_VEX_0F383F */
5534 1.1 christos {
5535 1.1 christos { Bad_Opcode },
5536 1.1 christos { Bad_Opcode },
5537 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F383F_P_2) },
5538 1.1 christos },
5539 1.1 christos
5540 1.1 christos /* PREFIX_VEX_0F3840 */
5541 1.1 christos {
5542 1.1 christos { Bad_Opcode },
5543 1.1 christos { Bad_Opcode },
5544 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3840_P_2) },
5545 1.1 christos },
5546 1.1 christos
5547 1.1 christos /* PREFIX_VEX_0F3841 */
5548 1.1 christos {
5549 1.1 christos { Bad_Opcode },
5550 1.1 christos { Bad_Opcode },
5551 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
5552 1.1 christos },
5553 1.1 christos
5554 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3845 */
5555 1.1 christos {
5556 1.1 christos { Bad_Opcode },
5557 1.1 christos { Bad_Opcode },
5558 1.1.1.1.8.1 tls { "vpsrlv%LW", { XM, Vex, EXx } },
5559 1.1 christos },
5560 1.1 christos
5561 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3846 */
5562 1.1 christos {
5563 1.1 christos { Bad_Opcode },
5564 1.1 christos { Bad_Opcode },
5565 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3846_P_2) },
5566 1.1 christos },
5567 1.1 christos
5568 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3847 */
5569 1.1 christos {
5570 1.1 christos { Bad_Opcode },
5571 1.1 christos { Bad_Opcode },
5572 1.1.1.1.8.1 tls { "vpsllv%LW", { XM, Vex, EXx } },
5573 1.1 christos },
5574 1.1 christos
5575 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3858 */
5576 1.1 christos {
5577 1.1 christos { Bad_Opcode },
5578 1.1 christos { Bad_Opcode },
5579 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3858_P_2) },
5580 1.1 christos },
5581 1.1 christos
5582 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3859 */
5583 1.1 christos {
5584 1.1 christos { Bad_Opcode },
5585 1.1 christos { Bad_Opcode },
5586 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3859_P_2) },
5587 1.1 christos },
5588 1.1 christos
5589 1.1.1.1.8.1 tls /* PREFIX_VEX_0F385A */
5590 1.1.1.1.8.1 tls {
5591 1.1.1.1.8.1 tls { Bad_Opcode },
5592 1.1.1.1.8.1 tls { Bad_Opcode },
5593 1.1.1.1.8.1 tls { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
5594 1.1.1.1.8.1 tls },
5595 1.1.1.1.8.1 tls
5596 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3878 */
5597 1.1.1.1.8.1 tls {
5598 1.1.1.1.8.1 tls { Bad_Opcode },
5599 1.1.1.1.8.1 tls { Bad_Opcode },
5600 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3878_P_2) },
5601 1.1.1.1.8.1 tls },
5602 1.1.1.1.8.1 tls
5603 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3879 */
5604 1.1.1.1.8.1 tls {
5605 1.1.1.1.8.1 tls { Bad_Opcode },
5606 1.1.1.1.8.1 tls { Bad_Opcode },
5607 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3879_P_2) },
5608 1.1.1.1.8.1 tls },
5609 1.1.1.1.8.1 tls
5610 1.1.1.1.8.1 tls /* PREFIX_VEX_0F388C */
5611 1.1.1.1.8.1 tls {
5612 1.1.1.1.8.1 tls { Bad_Opcode },
5613 1.1.1.1.8.1 tls { Bad_Opcode },
5614 1.1.1.1.8.1 tls { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
5615 1.1.1.1.8.1 tls },
5616 1.1.1.1.8.1 tls
5617 1.1.1.1.8.1 tls /* PREFIX_VEX_0F388E */
5618 1.1.1.1.8.1 tls {
5619 1.1.1.1.8.1 tls { Bad_Opcode },
5620 1.1.1.1.8.1 tls { Bad_Opcode },
5621 1.1.1.1.8.1 tls { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
5622 1.1.1.1.8.1 tls },
5623 1.1.1.1.8.1 tls
5624 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3890 */
5625 1.1.1.1.8.1 tls {
5626 1.1.1.1.8.1 tls { Bad_Opcode },
5627 1.1.1.1.8.1 tls { Bad_Opcode },
5628 1.1.1.1.8.1 tls { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex } },
5629 1.1.1.1.8.1 tls },
5630 1.1.1.1.8.1 tls
5631 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3891 */
5632 1.1.1.1.8.1 tls {
5633 1.1.1.1.8.1 tls { Bad_Opcode },
5634 1.1.1.1.8.1 tls { Bad_Opcode },
5635 1.1.1.1.8.1 tls { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
5636 1.1.1.1.8.1 tls },
5637 1.1.1.1.8.1 tls
5638 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3892 */
5639 1.1.1.1.8.1 tls {
5640 1.1.1.1.8.1 tls { Bad_Opcode },
5641 1.1.1.1.8.1 tls { Bad_Opcode },
5642 1.1.1.1.8.1 tls { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex } },
5643 1.1.1.1.8.1 tls },
5644 1.1.1.1.8.1 tls
5645 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3893 */
5646 1.1.1.1.8.1 tls {
5647 1.1.1.1.8.1 tls { Bad_Opcode },
5648 1.1.1.1.8.1 tls { Bad_Opcode },
5649 1.1.1.1.8.1 tls { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
5650 1.1.1.1.8.1 tls },
5651 1.1.1.1.8.1 tls
5652 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3896 */
5653 1.1.1.1.8.1 tls {
5654 1.1.1.1.8.1 tls { Bad_Opcode },
5655 1.1.1.1.8.1 tls { Bad_Opcode },
5656 1.1.1.1.8.1 tls { "vfmaddsub132p%XW", { XM, Vex, EXx } },
5657 1.1.1.1.8.1 tls },
5658 1.1.1.1.8.1 tls
5659 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3897 */
5660 1.1.1.1.8.1 tls {
5661 1.1.1.1.8.1 tls { Bad_Opcode },
5662 1.1.1.1.8.1 tls { Bad_Opcode },
5663 1.1.1.1.8.1 tls { "vfmsubadd132p%XW", { XM, Vex, EXx } },
5664 1.1.1.1.8.1 tls },
5665 1.1.1.1.8.1 tls
5666 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3898 */
5667 1.1.1.1.8.1 tls {
5668 1.1.1.1.8.1 tls { Bad_Opcode },
5669 1.1.1.1.8.1 tls { Bad_Opcode },
5670 1.1.1.1.8.1 tls { "vfmadd132p%XW", { XM, Vex, EXx } },
5671 1.1.1.1.8.1 tls },
5672 1.1.1.1.8.1 tls
5673 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3899 */
5674 1.1.1.1.8.1 tls {
5675 1.1.1.1.8.1 tls { Bad_Opcode },
5676 1.1.1.1.8.1 tls { Bad_Opcode },
5677 1.1.1.1.8.1 tls { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5678 1.1.1.1.8.1 tls },
5679 1.1.1.1.8.1 tls
5680 1.1.1.1.8.1 tls /* PREFIX_VEX_0F389A */
5681 1.1.1.1.8.1 tls {
5682 1.1.1.1.8.1 tls { Bad_Opcode },
5683 1.1.1.1.8.1 tls { Bad_Opcode },
5684 1.1.1.1.8.1 tls { "vfmsub132p%XW", { XM, Vex, EXx } },
5685 1.1.1.1.8.1 tls },
5686 1.1.1.1.8.1 tls
5687 1.1.1.1.8.1 tls /* PREFIX_VEX_0F389B */
5688 1.1 christos {
5689 1.1 christos { Bad_Opcode },
5690 1.1 christos { Bad_Opcode },
5691 1.1 christos { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5692 1.1 christos },
5693 1.1 christos
5694 1.1 christos /* PREFIX_VEX_0F389C */
5695 1.1 christos {
5696 1.1 christos { Bad_Opcode },
5697 1.1 christos { Bad_Opcode },
5698 1.1 christos { "vfnmadd132p%XW", { XM, Vex, EXx } },
5699 1.1 christos },
5700 1.1 christos
5701 1.1 christos /* PREFIX_VEX_0F389D */
5702 1.1 christos {
5703 1.1 christos { Bad_Opcode },
5704 1.1 christos { Bad_Opcode },
5705 1.1 christos { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5706 1.1 christos },
5707 1.1 christos
5708 1.1 christos /* PREFIX_VEX_0F389E */
5709 1.1 christos {
5710 1.1 christos { Bad_Opcode },
5711 1.1 christos { Bad_Opcode },
5712 1.1 christos { "vfnmsub132p%XW", { XM, Vex, EXx } },
5713 1.1 christos },
5714 1.1 christos
5715 1.1 christos /* PREFIX_VEX_0F389F */
5716 1.1 christos {
5717 1.1 christos { Bad_Opcode },
5718 1.1 christos { Bad_Opcode },
5719 1.1 christos { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5720 1.1 christos },
5721 1.1 christos
5722 1.1 christos /* PREFIX_VEX_0F38A6 */
5723 1.1 christos {
5724 1.1 christos { Bad_Opcode },
5725 1.1 christos { Bad_Opcode },
5726 1.1 christos { "vfmaddsub213p%XW", { XM, Vex, EXx } },
5727 1.1 christos { Bad_Opcode },
5728 1.1 christos },
5729 1.1 christos
5730 1.1 christos /* PREFIX_VEX_0F38A7 */
5731 1.1 christos {
5732 1.1 christos { Bad_Opcode },
5733 1.1 christos { Bad_Opcode },
5734 1.1 christos { "vfmsubadd213p%XW", { XM, Vex, EXx } },
5735 1.1 christos },
5736 1.1 christos
5737 1.1 christos /* PREFIX_VEX_0F38A8 */
5738 1.1 christos {
5739 1.1 christos { Bad_Opcode },
5740 1.1 christos { Bad_Opcode },
5741 1.1 christos { "vfmadd213p%XW", { XM, Vex, EXx } },
5742 1.1 christos },
5743 1.1 christos
5744 1.1 christos /* PREFIX_VEX_0F38A9 */
5745 1.1 christos {
5746 1.1 christos { Bad_Opcode },
5747 1.1 christos { Bad_Opcode },
5748 1.1 christos { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5749 1.1 christos },
5750 1.1 christos
5751 1.1 christos /* PREFIX_VEX_0F38AA */
5752 1.1 christos {
5753 1.1 christos { Bad_Opcode },
5754 1.1 christos { Bad_Opcode },
5755 1.1 christos { "vfmsub213p%XW", { XM, Vex, EXx } },
5756 1.1 christos },
5757 1.1 christos
5758 1.1 christos /* PREFIX_VEX_0F38AB */
5759 1.1 christos {
5760 1.1 christos { Bad_Opcode },
5761 1.1 christos { Bad_Opcode },
5762 1.1 christos { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5763 1.1 christos },
5764 1.1 christos
5765 1.1 christos /* PREFIX_VEX_0F38AC */
5766 1.1 christos {
5767 1.1 christos { Bad_Opcode },
5768 1.1 christos { Bad_Opcode },
5769 1.1 christos { "vfnmadd213p%XW", { XM, Vex, EXx } },
5770 1.1 christos },
5771 1.1 christos
5772 1.1 christos /* PREFIX_VEX_0F38AD */
5773 1.1 christos {
5774 1.1 christos { Bad_Opcode },
5775 1.1 christos { Bad_Opcode },
5776 1.1 christos { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5777 1.1 christos },
5778 1.1 christos
5779 1.1 christos /* PREFIX_VEX_0F38AE */
5780 1.1 christos {
5781 1.1 christos { Bad_Opcode },
5782 1.1 christos { Bad_Opcode },
5783 1.1 christos { "vfnmsub213p%XW", { XM, Vex, EXx } },
5784 1.1 christos },
5785 1.1 christos
5786 1.1 christos /* PREFIX_VEX_0F38AF */
5787 1.1 christos {
5788 1.1 christos { Bad_Opcode },
5789 1.1 christos { Bad_Opcode },
5790 1.1 christos { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5791 1.1 christos },
5792 1.1 christos
5793 1.1 christos /* PREFIX_VEX_0F38B6 */
5794 1.1 christos {
5795 1.1 christos { Bad_Opcode },
5796 1.1 christos { Bad_Opcode },
5797 1.1 christos { "vfmaddsub231p%XW", { XM, Vex, EXx } },
5798 1.1 christos },
5799 1.1 christos
5800 1.1 christos /* PREFIX_VEX_0F38B7 */
5801 1.1 christos {
5802 1.1 christos { Bad_Opcode },
5803 1.1 christos { Bad_Opcode },
5804 1.1 christos { "vfmsubadd231p%XW", { XM, Vex, EXx } },
5805 1.1 christos },
5806 1.1 christos
5807 1.1 christos /* PREFIX_VEX_0F38B8 */
5808 1.1 christos {
5809 1.1 christos { Bad_Opcode },
5810 1.1 christos { Bad_Opcode },
5811 1.1 christos { "vfmadd231p%XW", { XM, Vex, EXx } },
5812 1.1 christos },
5813 1.1 christos
5814 1.1 christos /* PREFIX_VEX_0F38B9 */
5815 1.1 christos {
5816 1.1 christos { Bad_Opcode },
5817 1.1 christos { Bad_Opcode },
5818 1.1 christos { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5819 1.1 christos },
5820 1.1 christos
5821 1.1 christos /* PREFIX_VEX_0F38BA */
5822 1.1 christos {
5823 1.1 christos { Bad_Opcode },
5824 1.1 christos { Bad_Opcode },
5825 1.1 christos { "vfmsub231p%XW", { XM, Vex, EXx } },
5826 1.1 christos },
5827 1.1 christos
5828 1.1 christos /* PREFIX_VEX_0F38BB */
5829 1.1 christos {
5830 1.1 christos { Bad_Opcode },
5831 1.1 christos { Bad_Opcode },
5832 1.1 christos { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5833 1.1 christos },
5834 1.1 christos
5835 1.1 christos /* PREFIX_VEX_0F38BC */
5836 1.1 christos {
5837 1.1 christos { Bad_Opcode },
5838 1.1 christos { Bad_Opcode },
5839 1.1 christos { "vfnmadd231p%XW", { XM, Vex, EXx } },
5840 1.1 christos },
5841 1.1 christos
5842 1.1 christos /* PREFIX_VEX_0F38BD */
5843 1.1 christos {
5844 1.1 christos { Bad_Opcode },
5845 1.1 christos { Bad_Opcode },
5846 1.1 christos { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5847 1.1 christos },
5848 1.1 christos
5849 1.1 christos /* PREFIX_VEX_0F38BE */
5850 1.1 christos {
5851 1.1 christos { Bad_Opcode },
5852 1.1 christos { Bad_Opcode },
5853 1.1 christos { "vfnmsub231p%XW", { XM, Vex, EXx } },
5854 1.1 christos },
5855 1.1 christos
5856 1.1 christos /* PREFIX_VEX_0F38BF */
5857 1.1 christos {
5858 1.1 christos { Bad_Opcode },
5859 1.1 christos { Bad_Opcode },
5860 1.1 christos { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5861 1.1 christos },
5862 1.1 christos
5863 1.1 christos /* PREFIX_VEX_0F38DB */
5864 1.1 christos {
5865 1.1 christos { Bad_Opcode },
5866 1.1 christos { Bad_Opcode },
5867 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
5868 1.1 christos },
5869 1.1 christos
5870 1.1 christos /* PREFIX_VEX_0F38DC */
5871 1.1 christos {
5872 1.1 christos { Bad_Opcode },
5873 1.1 christos { Bad_Opcode },
5874 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
5875 1.1 christos },
5876 1.1 christos
5877 1.1 christos /* PREFIX_VEX_0F38DD */
5878 1.1 christos {
5879 1.1 christos { Bad_Opcode },
5880 1.1 christos { Bad_Opcode },
5881 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
5882 1.1 christos },
5883 1.1 christos
5884 1.1 christos /* PREFIX_VEX_0F38DE */
5885 1.1 christos {
5886 1.1 christos { Bad_Opcode },
5887 1.1 christos { Bad_Opcode },
5888 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
5889 1.1 christos },
5890 1.1 christos
5891 1.1 christos /* PREFIX_VEX_0F38DF */
5892 1.1 christos {
5893 1.1 christos { Bad_Opcode },
5894 1.1 christos { Bad_Opcode },
5895 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
5896 1.1 christos },
5897 1.1 christos
5898 1.1 christos /* PREFIX_VEX_0F38F2 */
5899 1.1 christos {
5900 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
5901 1.1 christos },
5902 1.1 christos
5903 1.1 christos /* PREFIX_VEX_0F38F3_REG_1 */
5904 1.1 christos {
5905 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
5906 1.1 christos },
5907 1.1 christos
5908 1.1 christos /* PREFIX_VEX_0F38F3_REG_2 */
5909 1.1 christos {
5910 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
5911 1.1 christos },
5912 1.1 christos
5913 1.1 christos /* PREFIX_VEX_0F38F3_REG_3 */
5914 1.1 christos {
5915 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
5916 1.1 christos },
5917 1.1 christos
5918 1.1.1.1.8.1 tls /* PREFIX_VEX_0F38F5 */
5919 1.1.1.1.8.1 tls {
5920 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
5921 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
5922 1.1.1.1.8.1 tls { Bad_Opcode },
5923 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
5924 1.1.1.1.8.1 tls },
5925 1.1.1.1.8.1 tls
5926 1.1.1.1.8.1 tls /* PREFIX_VEX_0F38F6 */
5927 1.1.1.1.8.1 tls {
5928 1.1.1.1.8.1 tls { Bad_Opcode },
5929 1.1.1.1.8.1 tls { Bad_Opcode },
5930 1.1.1.1.8.1 tls { Bad_Opcode },
5931 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
5932 1.1.1.1.8.1 tls },
5933 1.1.1.1.8.1 tls
5934 1.1 christos /* PREFIX_VEX_0F38F7 */
5935 1.1 christos {
5936 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
5937 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
5938 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
5939 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
5940 1.1.1.1.8.1 tls },
5941 1.1.1.1.8.1 tls
5942 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3A00 */
5943 1.1.1.1.8.1 tls {
5944 1.1.1.1.8.1 tls { Bad_Opcode },
5945 1.1.1.1.8.1 tls { Bad_Opcode },
5946 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
5947 1.1.1.1.8.1 tls },
5948 1.1.1.1.8.1 tls
5949 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3A01 */
5950 1.1.1.1.8.1 tls {
5951 1.1.1.1.8.1 tls { Bad_Opcode },
5952 1.1.1.1.8.1 tls { Bad_Opcode },
5953 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
5954 1.1.1.1.8.1 tls },
5955 1.1.1.1.8.1 tls
5956 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3A02 */
5957 1.1.1.1.8.1 tls {
5958 1.1.1.1.8.1 tls { Bad_Opcode },
5959 1.1.1.1.8.1 tls { Bad_Opcode },
5960 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
5961 1.1 christos },
5962 1.1 christos
5963 1.1 christos /* PREFIX_VEX_0F3A04 */
5964 1.1 christos {
5965 1.1 christos { Bad_Opcode },
5966 1.1 christos { Bad_Opcode },
5967 1.1 christos { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
5968 1.1 christos },
5969 1.1 christos
5970 1.1 christos /* PREFIX_VEX_0F3A05 */
5971 1.1 christos {
5972 1.1 christos { Bad_Opcode },
5973 1.1 christos { Bad_Opcode },
5974 1.1 christos { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
5975 1.1 christos },
5976 1.1 christos
5977 1.1 christos /* PREFIX_VEX_0F3A06 */
5978 1.1 christos {
5979 1.1 christos { Bad_Opcode },
5980 1.1 christos { Bad_Opcode },
5981 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
5982 1.1 christos },
5983 1.1 christos
5984 1.1 christos /* PREFIX_VEX_0F3A08 */
5985 1.1 christos {
5986 1.1 christos { Bad_Opcode },
5987 1.1 christos { Bad_Opcode },
5988 1.1 christos { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
5989 1.1 christos },
5990 1.1 christos
5991 1.1 christos /* PREFIX_VEX_0F3A09 */
5992 1.1 christos {
5993 1.1 christos { Bad_Opcode },
5994 1.1 christos { Bad_Opcode },
5995 1.1 christos { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
5996 1.1 christos },
5997 1.1 christos
5998 1.1 christos /* PREFIX_VEX_0F3A0A */
5999 1.1 christos {
6000 1.1 christos { Bad_Opcode },
6001 1.1 christos { Bad_Opcode },
6002 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
6003 1.1 christos },
6004 1.1 christos
6005 1.1 christos /* PREFIX_VEX_0F3A0B */
6006 1.1 christos {
6007 1.1 christos { Bad_Opcode },
6008 1.1 christos { Bad_Opcode },
6009 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
6010 1.1 christos },
6011 1.1 christos
6012 1.1 christos /* PREFIX_VEX_0F3A0C */
6013 1.1 christos {
6014 1.1 christos { Bad_Opcode },
6015 1.1 christos { Bad_Opcode },
6016 1.1 christos { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
6017 1.1 christos },
6018 1.1 christos
6019 1.1 christos /* PREFIX_VEX_0F3A0D */
6020 1.1 christos {
6021 1.1 christos { Bad_Opcode },
6022 1.1 christos { Bad_Opcode },
6023 1.1 christos { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
6024 1.1 christos },
6025 1.1 christos
6026 1.1 christos /* PREFIX_VEX_0F3A0E */
6027 1.1 christos {
6028 1.1 christos { Bad_Opcode },
6029 1.1 christos { Bad_Opcode },
6030 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
6031 1.1 christos },
6032 1.1 christos
6033 1.1 christos /* PREFIX_VEX_0F3A0F */
6034 1.1 christos {
6035 1.1 christos { Bad_Opcode },
6036 1.1 christos { Bad_Opcode },
6037 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
6038 1.1 christos },
6039 1.1 christos
6040 1.1 christos /* PREFIX_VEX_0F3A14 */
6041 1.1 christos {
6042 1.1 christos { Bad_Opcode },
6043 1.1 christos { Bad_Opcode },
6044 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
6045 1.1 christos },
6046 1.1 christos
6047 1.1 christos /* PREFIX_VEX_0F3A15 */
6048 1.1 christos {
6049 1.1 christos { Bad_Opcode },
6050 1.1 christos { Bad_Opcode },
6051 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
6052 1.1 christos },
6053 1.1 christos
6054 1.1 christos /* PREFIX_VEX_0F3A16 */
6055 1.1 christos {
6056 1.1 christos { Bad_Opcode },
6057 1.1 christos { Bad_Opcode },
6058 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
6059 1.1 christos },
6060 1.1 christos
6061 1.1 christos /* PREFIX_VEX_0F3A17 */
6062 1.1 christos {
6063 1.1 christos { Bad_Opcode },
6064 1.1 christos { Bad_Opcode },
6065 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
6066 1.1 christos },
6067 1.1 christos
6068 1.1 christos /* PREFIX_VEX_0F3A18 */
6069 1.1 christos {
6070 1.1 christos { Bad_Opcode },
6071 1.1 christos { Bad_Opcode },
6072 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
6073 1.1 christos },
6074 1.1 christos
6075 1.1 christos /* PREFIX_VEX_0F3A19 */
6076 1.1 christos {
6077 1.1 christos { Bad_Opcode },
6078 1.1 christos { Bad_Opcode },
6079 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
6080 1.1 christos },
6081 1.1 christos
6082 1.1 christos /* PREFIX_VEX_0F3A1D */
6083 1.1 christos {
6084 1.1 christos { Bad_Opcode },
6085 1.1 christos { Bad_Opcode },
6086 1.1 christos { "vcvtps2ph", { EXxmmq, XM, Ib } },
6087 1.1 christos },
6088 1.1 christos
6089 1.1 christos /* PREFIX_VEX_0F3A20 */
6090 1.1 christos {
6091 1.1 christos { Bad_Opcode },
6092 1.1 christos { Bad_Opcode },
6093 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
6094 1.1 christos },
6095 1.1 christos
6096 1.1 christos /* PREFIX_VEX_0F3A21 */
6097 1.1 christos {
6098 1.1 christos { Bad_Opcode },
6099 1.1 christos { Bad_Opcode },
6100 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
6101 1.1 christos },
6102 1.1 christos
6103 1.1 christos /* PREFIX_VEX_0F3A22 */
6104 1.1 christos {
6105 1.1 christos { Bad_Opcode },
6106 1.1 christos { Bad_Opcode },
6107 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
6108 1.1 christos },
6109 1.1 christos
6110 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3A30 */
6111 1.1.1.1.8.1 tls {
6112 1.1.1.1.8.1 tls { Bad_Opcode },
6113 1.1.1.1.8.1 tls { Bad_Opcode },
6114 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F3A30_P_2) },
6115 1.1.1.1.8.1 tls },
6116 1.1.1.1.8.1 tls
6117 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3A32 */
6118 1.1.1.1.8.1 tls {
6119 1.1.1.1.8.1 tls { Bad_Opcode },
6120 1.1.1.1.8.1 tls { Bad_Opcode },
6121 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F3A32_P_2) },
6122 1.1.1.1.8.1 tls },
6123 1.1.1.1.8.1 tls
6124 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3A38 */
6125 1.1.1.1.8.1 tls {
6126 1.1.1.1.8.1 tls { Bad_Opcode },
6127 1.1.1.1.8.1 tls { Bad_Opcode },
6128 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
6129 1.1.1.1.8.1 tls },
6130 1.1.1.1.8.1 tls
6131 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3A39 */
6132 1.1.1.1.8.1 tls {
6133 1.1.1.1.8.1 tls { Bad_Opcode },
6134 1.1.1.1.8.1 tls { Bad_Opcode },
6135 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
6136 1.1.1.1.8.1 tls },
6137 1.1.1.1.8.1 tls
6138 1.1 christos /* PREFIX_VEX_0F3A40 */
6139 1.1 christos {
6140 1.1 christos { Bad_Opcode },
6141 1.1 christos { Bad_Opcode },
6142 1.1 christos { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
6143 1.1 christos },
6144 1.1 christos
6145 1.1 christos /* PREFIX_VEX_0F3A41 */
6146 1.1 christos {
6147 1.1 christos { Bad_Opcode },
6148 1.1 christos { Bad_Opcode },
6149 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
6150 1.1 christos },
6151 1.1 christos
6152 1.1 christos /* PREFIX_VEX_0F3A42 */
6153 1.1 christos {
6154 1.1 christos { Bad_Opcode },
6155 1.1 christos { Bad_Opcode },
6156 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
6157 1.1 christos },
6158 1.1 christos
6159 1.1 christos /* PREFIX_VEX_0F3A44 */
6160 1.1 christos {
6161 1.1 christos { Bad_Opcode },
6162 1.1 christos { Bad_Opcode },
6163 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
6164 1.1 christos },
6165 1.1 christos
6166 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3A46 */
6167 1.1.1.1.8.1 tls {
6168 1.1.1.1.8.1 tls { Bad_Opcode },
6169 1.1.1.1.8.1 tls { Bad_Opcode },
6170 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
6171 1.1.1.1.8.1 tls },
6172 1.1.1.1.8.1 tls
6173 1.1 christos /* PREFIX_VEX_0F3A48 */
6174 1.1 christos {
6175 1.1 christos { Bad_Opcode },
6176 1.1 christos { Bad_Opcode },
6177 1.1 christos { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
6178 1.1 christos },
6179 1.1 christos
6180 1.1 christos /* PREFIX_VEX_0F3A49 */
6181 1.1 christos {
6182 1.1 christos { Bad_Opcode },
6183 1.1 christos { Bad_Opcode },
6184 1.1 christos { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
6185 1.1 christos },
6186 1.1 christos
6187 1.1 christos /* PREFIX_VEX_0F3A4A */
6188 1.1 christos {
6189 1.1 christos { Bad_Opcode },
6190 1.1 christos { Bad_Opcode },
6191 1.1 christos { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
6192 1.1 christos },
6193 1.1 christos
6194 1.1 christos /* PREFIX_VEX_0F3A4B */
6195 1.1 christos {
6196 1.1 christos { Bad_Opcode },
6197 1.1 christos { Bad_Opcode },
6198 1.1 christos { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
6199 1.1 christos },
6200 1.1 christos
6201 1.1 christos /* PREFIX_VEX_0F3A4C */
6202 1.1 christos {
6203 1.1 christos { Bad_Opcode },
6204 1.1 christos { Bad_Opcode },
6205 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
6206 1.1 christos },
6207 1.1 christos
6208 1.1 christos /* PREFIX_VEX_0F3A5C */
6209 1.1 christos {
6210 1.1 christos { Bad_Opcode },
6211 1.1 christos { Bad_Opcode },
6212 1.1 christos { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6213 1.1 christos },
6214 1.1 christos
6215 1.1 christos /* PREFIX_VEX_0F3A5D */
6216 1.1 christos {
6217 1.1 christos { Bad_Opcode },
6218 1.1 christos { Bad_Opcode },
6219 1.1 christos { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6220 1.1 christos },
6221 1.1 christos
6222 1.1 christos /* PREFIX_VEX_0F3A5E */
6223 1.1 christos {
6224 1.1 christos { Bad_Opcode },
6225 1.1 christos { Bad_Opcode },
6226 1.1 christos { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6227 1.1 christos },
6228 1.1 christos
6229 1.1 christos /* PREFIX_VEX_0F3A5F */
6230 1.1 christos {
6231 1.1 christos { Bad_Opcode },
6232 1.1 christos { Bad_Opcode },
6233 1.1 christos { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6234 1.1 christos },
6235 1.1 christos
6236 1.1 christos /* PREFIX_VEX_0F3A60 */
6237 1.1 christos {
6238 1.1 christos { Bad_Opcode },
6239 1.1 christos { Bad_Opcode },
6240 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
6241 1.1 christos { Bad_Opcode },
6242 1.1 christos },
6243 1.1 christos
6244 1.1 christos /* PREFIX_VEX_0F3A61 */
6245 1.1 christos {
6246 1.1 christos { Bad_Opcode },
6247 1.1 christos { Bad_Opcode },
6248 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
6249 1.1 christos },
6250 1.1 christos
6251 1.1 christos /* PREFIX_VEX_0F3A62 */
6252 1.1 christos {
6253 1.1 christos { Bad_Opcode },
6254 1.1 christos { Bad_Opcode },
6255 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
6256 1.1 christos },
6257 1.1 christos
6258 1.1 christos /* PREFIX_VEX_0F3A63 */
6259 1.1 christos {
6260 1.1 christos { Bad_Opcode },
6261 1.1 christos { Bad_Opcode },
6262 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
6263 1.1 christos },
6264 1.1 christos
6265 1.1 christos /* PREFIX_VEX_0F3A68 */
6266 1.1 christos {
6267 1.1 christos { Bad_Opcode },
6268 1.1 christos { Bad_Opcode },
6269 1.1 christos { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6270 1.1 christos },
6271 1.1 christos
6272 1.1 christos /* PREFIX_VEX_0F3A69 */
6273 1.1 christos {
6274 1.1 christos { Bad_Opcode },
6275 1.1 christos { Bad_Opcode },
6276 1.1 christos { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6277 1.1 christos },
6278 1.1 christos
6279 1.1 christos /* PREFIX_VEX_0F3A6A */
6280 1.1 christos {
6281 1.1 christos { Bad_Opcode },
6282 1.1 christos { Bad_Opcode },
6283 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
6284 1.1 christos },
6285 1.1 christos
6286 1.1 christos /* PREFIX_VEX_0F3A6B */
6287 1.1 christos {
6288 1.1 christos { Bad_Opcode },
6289 1.1 christos { Bad_Opcode },
6290 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
6291 1.1 christos },
6292 1.1 christos
6293 1.1 christos /* PREFIX_VEX_0F3A6C */
6294 1.1 christos {
6295 1.1 christos { Bad_Opcode },
6296 1.1 christos { Bad_Opcode },
6297 1.1 christos { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6298 1.1 christos },
6299 1.1 christos
6300 1.1 christos /* PREFIX_VEX_0F3A6D */
6301 1.1 christos {
6302 1.1 christos { Bad_Opcode },
6303 1.1 christos { Bad_Opcode },
6304 1.1 christos { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6305 1.1 christos },
6306 1.1 christos
6307 1.1 christos /* PREFIX_VEX_0F3A6E */
6308 1.1 christos {
6309 1.1 christos { Bad_Opcode },
6310 1.1 christos { Bad_Opcode },
6311 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
6312 1.1 christos },
6313 1.1 christos
6314 1.1 christos /* PREFIX_VEX_0F3A6F */
6315 1.1 christos {
6316 1.1 christos { Bad_Opcode },
6317 1.1 christos { Bad_Opcode },
6318 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
6319 1.1 christos },
6320 1.1 christos
6321 1.1 christos /* PREFIX_VEX_0F3A78 */
6322 1.1 christos {
6323 1.1 christos { Bad_Opcode },
6324 1.1 christos { Bad_Opcode },
6325 1.1 christos { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6326 1.1 christos },
6327 1.1 christos
6328 1.1 christos /* PREFIX_VEX_0F3A79 */
6329 1.1 christos {
6330 1.1 christos { Bad_Opcode },
6331 1.1 christos { Bad_Opcode },
6332 1.1 christos { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6333 1.1 christos },
6334 1.1 christos
6335 1.1 christos /* PREFIX_VEX_0F3A7A */
6336 1.1 christos {
6337 1.1 christos { Bad_Opcode },
6338 1.1 christos { Bad_Opcode },
6339 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
6340 1.1 christos },
6341 1.1 christos
6342 1.1 christos /* PREFIX_VEX_0F3A7B */
6343 1.1 christos {
6344 1.1 christos { Bad_Opcode },
6345 1.1 christos { Bad_Opcode },
6346 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
6347 1.1 christos },
6348 1.1 christos
6349 1.1 christos /* PREFIX_VEX_0F3A7C */
6350 1.1 christos {
6351 1.1 christos { Bad_Opcode },
6352 1.1 christos { Bad_Opcode },
6353 1.1 christos { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6354 1.1 christos { Bad_Opcode },
6355 1.1 christos },
6356 1.1 christos
6357 1.1 christos /* PREFIX_VEX_0F3A7D */
6358 1.1 christos {
6359 1.1 christos { Bad_Opcode },
6360 1.1 christos { Bad_Opcode },
6361 1.1 christos { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6362 1.1 christos },
6363 1.1 christos
6364 1.1 christos /* PREFIX_VEX_0F3A7E */
6365 1.1 christos {
6366 1.1 christos { Bad_Opcode },
6367 1.1 christos { Bad_Opcode },
6368 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
6369 1.1 christos },
6370 1.1 christos
6371 1.1 christos /* PREFIX_VEX_0F3A7F */
6372 1.1 christos {
6373 1.1 christos { Bad_Opcode },
6374 1.1 christos { Bad_Opcode },
6375 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
6376 1.1 christos },
6377 1.1 christos
6378 1.1 christos /* PREFIX_VEX_0F3ADF */
6379 1.1 christos {
6380 1.1 christos { Bad_Opcode },
6381 1.1 christos { Bad_Opcode },
6382 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
6383 1.1 christos },
6384 1.1.1.1.8.1 tls
6385 1.1.1.1.8.1 tls /* PREFIX_VEX_0F3AF0 */
6386 1.1.1.1.8.1 tls {
6387 1.1.1.1.8.1 tls { Bad_Opcode },
6388 1.1.1.1.8.1 tls { Bad_Opcode },
6389 1.1.1.1.8.1 tls { Bad_Opcode },
6390 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
6391 1.1.1.1.8.1 tls },
6392 1.1.1.1.8.1 tls
6393 1.1.1.1.8.1 tls #define NEED_PREFIX_TABLE
6394 1.1.1.1.8.1 tls #include "i386-dis-evex.h"
6395 1.1.1.1.8.1 tls #undef NEED_PREFIX_TABLE
6396 1.1 christos };
6397 1.1 christos
6398 1.1 christos static const struct dis386 x86_64_table[][2] = {
6399 1.1 christos /* X86_64_06 */
6400 1.1 christos {
6401 1.1 christos { "pushP", { es } },
6402 1.1 christos },
6403 1.1 christos
6404 1.1 christos /* X86_64_07 */
6405 1.1 christos {
6406 1.1 christos { "popP", { es } },
6407 1.1 christos },
6408 1.1 christos
6409 1.1 christos /* X86_64_0D */
6410 1.1 christos {
6411 1.1 christos { "pushP", { cs } },
6412 1.1 christos },
6413 1.1 christos
6414 1.1 christos /* X86_64_16 */
6415 1.1 christos {
6416 1.1 christos { "pushP", { ss } },
6417 1.1 christos },
6418 1.1 christos
6419 1.1 christos /* X86_64_17 */
6420 1.1 christos {
6421 1.1 christos { "popP", { ss } },
6422 1.1 christos },
6423 1.1 christos
6424 1.1 christos /* X86_64_1E */
6425 1.1 christos {
6426 1.1 christos { "pushP", { ds } },
6427 1.1 christos },
6428 1.1 christos
6429 1.1 christos /* X86_64_1F */
6430 1.1 christos {
6431 1.1 christos { "popP", { ds } },
6432 1.1 christos },
6433 1.1 christos
6434 1.1 christos /* X86_64_27 */
6435 1.1 christos {
6436 1.1 christos { "daa", { XX } },
6437 1.1 christos },
6438 1.1 christos
6439 1.1 christos /* X86_64_2F */
6440 1.1 christos {
6441 1.1 christos { "das", { XX } },
6442 1.1 christos },
6443 1.1 christos
6444 1.1 christos /* X86_64_37 */
6445 1.1 christos {
6446 1.1 christos { "aaa", { XX } },
6447 1.1 christos },
6448 1.1 christos
6449 1.1 christos /* X86_64_3F */
6450 1.1 christos {
6451 1.1 christos { "aas", { XX } },
6452 1.1 christos },
6453 1.1 christos
6454 1.1 christos /* X86_64_60 */
6455 1.1 christos {
6456 1.1 christos { "pushaP", { XX } },
6457 1.1 christos },
6458 1.1 christos
6459 1.1 christos /* X86_64_61 */
6460 1.1 christos {
6461 1.1 christos { "popaP", { XX } },
6462 1.1 christos },
6463 1.1 christos
6464 1.1 christos /* X86_64_62 */
6465 1.1 christos {
6466 1.1 christos { MOD_TABLE (MOD_62_32BIT) },
6467 1.1.1.1.8.1 tls { EVEX_TABLE (EVEX_0F) },
6468 1.1 christos },
6469 1.1 christos
6470 1.1 christos /* X86_64_63 */
6471 1.1 christos {
6472 1.1 christos { "arpl", { Ew, Gw } },
6473 1.1 christos { "movs{lq|xd}", { Gv, Ed } },
6474 1.1 christos },
6475 1.1 christos
6476 1.1 christos /* X86_64_6D */
6477 1.1 christos {
6478 1.1 christos { "ins{R|}", { Yzr, indirDX } },
6479 1.1 christos { "ins{G|}", { Yzr, indirDX } },
6480 1.1 christos },
6481 1.1 christos
6482 1.1 christos /* X86_64_6F */
6483 1.1 christos {
6484 1.1 christos { "outs{R|}", { indirDXr, Xz } },
6485 1.1 christos { "outs{G|}", { indirDXr, Xz } },
6486 1.1 christos },
6487 1.1 christos
6488 1.1 christos /* X86_64_9A */
6489 1.1 christos {
6490 1.1 christos { "Jcall{T|}", { Ap } },
6491 1.1 christos },
6492 1.1 christos
6493 1.1 christos /* X86_64_C4 */
6494 1.1 christos {
6495 1.1 christos { MOD_TABLE (MOD_C4_32BIT) },
6496 1.1 christos { VEX_C4_TABLE (VEX_0F) },
6497 1.1 christos },
6498 1.1 christos
6499 1.1 christos /* X86_64_C5 */
6500 1.1 christos {
6501 1.1 christos { MOD_TABLE (MOD_C5_32BIT) },
6502 1.1 christos { VEX_C5_TABLE (VEX_0F) },
6503 1.1 christos },
6504 1.1 christos
6505 1.1 christos /* X86_64_CE */
6506 1.1 christos {
6507 1.1 christos { "into", { XX } },
6508 1.1 christos },
6509 1.1 christos
6510 1.1 christos /* X86_64_D4 */
6511 1.1 christos {
6512 1.1 christos { "aam", { Ib } },
6513 1.1 christos },
6514 1.1 christos
6515 1.1 christos /* X86_64_D5 */
6516 1.1 christos {
6517 1.1 christos { "aad", { Ib } },
6518 1.1 christos },
6519 1.1 christos
6520 1.1 christos /* X86_64_EA */
6521 1.1 christos {
6522 1.1 christos { "Jjmp{T|}", { Ap } },
6523 1.1 christos },
6524 1.1 christos
6525 1.1 christos /* X86_64_0F01_REG_0 */
6526 1.1 christos {
6527 1.1 christos { "sgdt{Q|IQ}", { M } },
6528 1.1 christos { "sgdt", { M } },
6529 1.1 christos },
6530 1.1 christos
6531 1.1 christos /* X86_64_0F01_REG_1 */
6532 1.1 christos {
6533 1.1 christos { "sidt{Q|IQ}", { M } },
6534 1.1 christos { "sidt", { M } },
6535 1.1 christos },
6536 1.1 christos
6537 1.1 christos /* X86_64_0F01_REG_2 */
6538 1.1 christos {
6539 1.1 christos { "lgdt{Q|Q}", { M } },
6540 1.1 christos { "lgdt", { M } },
6541 1.1 christos },
6542 1.1 christos
6543 1.1 christos /* X86_64_0F01_REG_3 */
6544 1.1 christos {
6545 1.1 christos { "lidt{Q|Q}", { M } },
6546 1.1 christos { "lidt", { M } },
6547 1.1 christos },
6548 1.1 christos };
6549 1.1 christos
6550 1.1 christos static const struct dis386 three_byte_table[][256] = {
6551 1.1 christos
6552 1.1 christos /* THREE_BYTE_0F38 */
6553 1.1 christos {
6554 1.1 christos /* 00 */
6555 1.1 christos { "pshufb", { MX, EM } },
6556 1.1 christos { "phaddw", { MX, EM } },
6557 1.1 christos { "phaddd", { MX, EM } },
6558 1.1 christos { "phaddsw", { MX, EM } },
6559 1.1 christos { "pmaddubsw", { MX, EM } },
6560 1.1 christos { "phsubw", { MX, EM } },
6561 1.1 christos { "phsubd", { MX, EM } },
6562 1.1 christos { "phsubsw", { MX, EM } },
6563 1.1 christos /* 08 */
6564 1.1 christos { "psignb", { MX, EM } },
6565 1.1 christos { "psignw", { MX, EM } },
6566 1.1 christos { "psignd", { MX, EM } },
6567 1.1 christos { "pmulhrsw", { MX, EM } },
6568 1.1 christos { Bad_Opcode },
6569 1.1 christos { Bad_Opcode },
6570 1.1 christos { Bad_Opcode },
6571 1.1 christos { Bad_Opcode },
6572 1.1 christos /* 10 */
6573 1.1 christos { PREFIX_TABLE (PREFIX_0F3810) },
6574 1.1 christos { Bad_Opcode },
6575 1.1 christos { Bad_Opcode },
6576 1.1 christos { Bad_Opcode },
6577 1.1 christos { PREFIX_TABLE (PREFIX_0F3814) },
6578 1.1 christos { PREFIX_TABLE (PREFIX_0F3815) },
6579 1.1 christos { Bad_Opcode },
6580 1.1 christos { PREFIX_TABLE (PREFIX_0F3817) },
6581 1.1 christos /* 18 */
6582 1.1 christos { Bad_Opcode },
6583 1.1 christos { Bad_Opcode },
6584 1.1 christos { Bad_Opcode },
6585 1.1 christos { Bad_Opcode },
6586 1.1 christos { "pabsb", { MX, EM } },
6587 1.1 christos { "pabsw", { MX, EM } },
6588 1.1 christos { "pabsd", { MX, EM } },
6589 1.1 christos { Bad_Opcode },
6590 1.1 christos /* 20 */
6591 1.1 christos { PREFIX_TABLE (PREFIX_0F3820) },
6592 1.1 christos { PREFIX_TABLE (PREFIX_0F3821) },
6593 1.1 christos { PREFIX_TABLE (PREFIX_0F3822) },
6594 1.1 christos { PREFIX_TABLE (PREFIX_0F3823) },
6595 1.1 christos { PREFIX_TABLE (PREFIX_0F3824) },
6596 1.1 christos { PREFIX_TABLE (PREFIX_0F3825) },
6597 1.1 christos { Bad_Opcode },
6598 1.1 christos { Bad_Opcode },
6599 1.1 christos /* 28 */
6600 1.1 christos { PREFIX_TABLE (PREFIX_0F3828) },
6601 1.1 christos { PREFIX_TABLE (PREFIX_0F3829) },
6602 1.1 christos { PREFIX_TABLE (PREFIX_0F382A) },
6603 1.1 christos { PREFIX_TABLE (PREFIX_0F382B) },
6604 1.1 christos { Bad_Opcode },
6605 1.1 christos { Bad_Opcode },
6606 1.1 christos { Bad_Opcode },
6607 1.1 christos { Bad_Opcode },
6608 1.1 christos /* 30 */
6609 1.1 christos { PREFIX_TABLE (PREFIX_0F3830) },
6610 1.1 christos { PREFIX_TABLE (PREFIX_0F3831) },
6611 1.1 christos { PREFIX_TABLE (PREFIX_0F3832) },
6612 1.1 christos { PREFIX_TABLE (PREFIX_0F3833) },
6613 1.1 christos { PREFIX_TABLE (PREFIX_0F3834) },
6614 1.1 christos { PREFIX_TABLE (PREFIX_0F3835) },
6615 1.1 christos { Bad_Opcode },
6616 1.1 christos { PREFIX_TABLE (PREFIX_0F3837) },
6617 1.1 christos /* 38 */
6618 1.1 christos { PREFIX_TABLE (PREFIX_0F3838) },
6619 1.1 christos { PREFIX_TABLE (PREFIX_0F3839) },
6620 1.1 christos { PREFIX_TABLE (PREFIX_0F383A) },
6621 1.1 christos { PREFIX_TABLE (PREFIX_0F383B) },
6622 1.1 christos { PREFIX_TABLE (PREFIX_0F383C) },
6623 1.1 christos { PREFIX_TABLE (PREFIX_0F383D) },
6624 1.1 christos { PREFIX_TABLE (PREFIX_0F383E) },
6625 1.1 christos { PREFIX_TABLE (PREFIX_0F383F) },
6626 1.1 christos /* 40 */
6627 1.1 christos { PREFIX_TABLE (PREFIX_0F3840) },
6628 1.1 christos { PREFIX_TABLE (PREFIX_0F3841) },
6629 1.1 christos { Bad_Opcode },
6630 1.1 christos { Bad_Opcode },
6631 1.1 christos { Bad_Opcode },
6632 1.1 christos { Bad_Opcode },
6633 1.1 christos { Bad_Opcode },
6634 1.1 christos { Bad_Opcode },
6635 1.1 christos /* 48 */
6636 1.1 christos { Bad_Opcode },
6637 1.1 christos { Bad_Opcode },
6638 1.1 christos { Bad_Opcode },
6639 1.1 christos { Bad_Opcode },
6640 1.1 christos { Bad_Opcode },
6641 1.1 christos { Bad_Opcode },
6642 1.1 christos { Bad_Opcode },
6643 1.1 christos { Bad_Opcode },
6644 1.1 christos /* 50 */
6645 1.1 christos { Bad_Opcode },
6646 1.1 christos { Bad_Opcode },
6647 1.1 christos { Bad_Opcode },
6648 1.1 christos { Bad_Opcode },
6649 1.1 christos { Bad_Opcode },
6650 1.1 christos { Bad_Opcode },
6651 1.1 christos { Bad_Opcode },
6652 1.1 christos { Bad_Opcode },
6653 1.1 christos /* 58 */
6654 1.1 christos { Bad_Opcode },
6655 1.1 christos { Bad_Opcode },
6656 1.1 christos { Bad_Opcode },
6657 1.1 christos { Bad_Opcode },
6658 1.1 christos { Bad_Opcode },
6659 1.1 christos { Bad_Opcode },
6660 1.1 christos { Bad_Opcode },
6661 1.1 christos { Bad_Opcode },
6662 1.1 christos /* 60 */
6663 1.1 christos { Bad_Opcode },
6664 1.1 christos { Bad_Opcode },
6665 1.1 christos { Bad_Opcode },
6666 1.1 christos { Bad_Opcode },
6667 1.1 christos { Bad_Opcode },
6668 1.1 christos { Bad_Opcode },
6669 1.1 christos { Bad_Opcode },
6670 1.1 christos { Bad_Opcode },
6671 1.1 christos /* 68 */
6672 1.1 christos { Bad_Opcode },
6673 1.1 christos { Bad_Opcode },
6674 1.1 christos { Bad_Opcode },
6675 1.1 christos { Bad_Opcode },
6676 1.1 christos { Bad_Opcode },
6677 1.1 christos { Bad_Opcode },
6678 1.1 christos { Bad_Opcode },
6679 1.1 christos { Bad_Opcode },
6680 1.1 christos /* 70 */
6681 1.1 christos { Bad_Opcode },
6682 1.1 christos { Bad_Opcode },
6683 1.1 christos { Bad_Opcode },
6684 1.1 christos { Bad_Opcode },
6685 1.1 christos { Bad_Opcode },
6686 1.1 christos { Bad_Opcode },
6687 1.1 christos { Bad_Opcode },
6688 1.1 christos { Bad_Opcode },
6689 1.1 christos /* 78 */
6690 1.1 christos { Bad_Opcode },
6691 1.1 christos { Bad_Opcode },
6692 1.1 christos { Bad_Opcode },
6693 1.1 christos { Bad_Opcode },
6694 1.1 christos { Bad_Opcode },
6695 1.1 christos { Bad_Opcode },
6696 1.1 christos { Bad_Opcode },
6697 1.1 christos { Bad_Opcode },
6698 1.1 christos /* 80 */
6699 1.1 christos { PREFIX_TABLE (PREFIX_0F3880) },
6700 1.1 christos { PREFIX_TABLE (PREFIX_0F3881) },
6701 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_0F3882) },
6702 1.1 christos { Bad_Opcode },
6703 1.1 christos { Bad_Opcode },
6704 1.1 christos { Bad_Opcode },
6705 1.1 christos { Bad_Opcode },
6706 1.1 christos { Bad_Opcode },
6707 1.1 christos /* 88 */
6708 1.1 christos { Bad_Opcode },
6709 1.1 christos { Bad_Opcode },
6710 1.1 christos { Bad_Opcode },
6711 1.1 christos { Bad_Opcode },
6712 1.1 christos { Bad_Opcode },
6713 1.1 christos { Bad_Opcode },
6714 1.1 christos { Bad_Opcode },
6715 1.1 christos { Bad_Opcode },
6716 1.1 christos /* 90 */
6717 1.1 christos { Bad_Opcode },
6718 1.1 christos { Bad_Opcode },
6719 1.1 christos { Bad_Opcode },
6720 1.1 christos { Bad_Opcode },
6721 1.1 christos { Bad_Opcode },
6722 1.1 christos { Bad_Opcode },
6723 1.1 christos { Bad_Opcode },
6724 1.1 christos { Bad_Opcode },
6725 1.1 christos /* 98 */
6726 1.1 christos { Bad_Opcode },
6727 1.1 christos { Bad_Opcode },
6728 1.1 christos { Bad_Opcode },
6729 1.1 christos { Bad_Opcode },
6730 1.1 christos { Bad_Opcode },
6731 1.1 christos { Bad_Opcode },
6732 1.1 christos { Bad_Opcode },
6733 1.1 christos { Bad_Opcode },
6734 1.1 christos /* a0 */
6735 1.1 christos { Bad_Opcode },
6736 1.1 christos { Bad_Opcode },
6737 1.1 christos { Bad_Opcode },
6738 1.1 christos { Bad_Opcode },
6739 1.1 christos { Bad_Opcode },
6740 1.1 christos { Bad_Opcode },
6741 1.1 christos { Bad_Opcode },
6742 1.1 christos { Bad_Opcode },
6743 1.1 christos /* a8 */
6744 1.1 christos { Bad_Opcode },
6745 1.1 christos { Bad_Opcode },
6746 1.1 christos { Bad_Opcode },
6747 1.1 christos { Bad_Opcode },
6748 1.1 christos { Bad_Opcode },
6749 1.1 christos { Bad_Opcode },
6750 1.1 christos { Bad_Opcode },
6751 1.1 christos { Bad_Opcode },
6752 1.1 christos /* b0 */
6753 1.1 christos { Bad_Opcode },
6754 1.1 christos { Bad_Opcode },
6755 1.1 christos { Bad_Opcode },
6756 1.1 christos { Bad_Opcode },
6757 1.1 christos { Bad_Opcode },
6758 1.1 christos { Bad_Opcode },
6759 1.1 christos { Bad_Opcode },
6760 1.1 christos { Bad_Opcode },
6761 1.1 christos /* b8 */
6762 1.1 christos { Bad_Opcode },
6763 1.1 christos { Bad_Opcode },
6764 1.1 christos { Bad_Opcode },
6765 1.1 christos { Bad_Opcode },
6766 1.1 christos { Bad_Opcode },
6767 1.1 christos { Bad_Opcode },
6768 1.1 christos { Bad_Opcode },
6769 1.1 christos { Bad_Opcode },
6770 1.1 christos /* c0 */
6771 1.1 christos { Bad_Opcode },
6772 1.1 christos { Bad_Opcode },
6773 1.1 christos { Bad_Opcode },
6774 1.1 christos { Bad_Opcode },
6775 1.1 christos { Bad_Opcode },
6776 1.1 christos { Bad_Opcode },
6777 1.1 christos { Bad_Opcode },
6778 1.1 christos { Bad_Opcode },
6779 1.1 christos /* c8 */
6780 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_0F38C8) },
6781 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_0F38C9) },
6782 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_0F38CA) },
6783 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_0F38CB) },
6784 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_0F38CC) },
6785 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_0F38CD) },
6786 1.1 christos { Bad_Opcode },
6787 1.1 christos { Bad_Opcode },
6788 1.1 christos /* d0 */
6789 1.1 christos { Bad_Opcode },
6790 1.1 christos { Bad_Opcode },
6791 1.1 christos { Bad_Opcode },
6792 1.1 christos { Bad_Opcode },
6793 1.1 christos { Bad_Opcode },
6794 1.1 christos { Bad_Opcode },
6795 1.1 christos { Bad_Opcode },
6796 1.1 christos { Bad_Opcode },
6797 1.1 christos /* d8 */
6798 1.1 christos { Bad_Opcode },
6799 1.1 christos { Bad_Opcode },
6800 1.1 christos { Bad_Opcode },
6801 1.1 christos { PREFIX_TABLE (PREFIX_0F38DB) },
6802 1.1 christos { PREFIX_TABLE (PREFIX_0F38DC) },
6803 1.1 christos { PREFIX_TABLE (PREFIX_0F38DD) },
6804 1.1 christos { PREFIX_TABLE (PREFIX_0F38DE) },
6805 1.1 christos { PREFIX_TABLE (PREFIX_0F38DF) },
6806 1.1 christos /* e0 */
6807 1.1 christos { Bad_Opcode },
6808 1.1 christos { Bad_Opcode },
6809 1.1 christos { Bad_Opcode },
6810 1.1 christos { Bad_Opcode },
6811 1.1 christos { Bad_Opcode },
6812 1.1 christos { Bad_Opcode },
6813 1.1 christos { Bad_Opcode },
6814 1.1 christos { Bad_Opcode },
6815 1.1 christos /* e8 */
6816 1.1 christos { Bad_Opcode },
6817 1.1 christos { Bad_Opcode },
6818 1.1 christos { Bad_Opcode },
6819 1.1 christos { Bad_Opcode },
6820 1.1 christos { Bad_Opcode },
6821 1.1 christos { Bad_Opcode },
6822 1.1 christos { Bad_Opcode },
6823 1.1 christos { Bad_Opcode },
6824 1.1 christos /* f0 */
6825 1.1 christos { PREFIX_TABLE (PREFIX_0F38F0) },
6826 1.1 christos { PREFIX_TABLE (PREFIX_0F38F1) },
6827 1.1 christos { Bad_Opcode },
6828 1.1 christos { Bad_Opcode },
6829 1.1 christos { Bad_Opcode },
6830 1.1 christos { Bad_Opcode },
6831 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_0F38F6) },
6832 1.1 christos { Bad_Opcode },
6833 1.1 christos /* f8 */
6834 1.1 christos { Bad_Opcode },
6835 1.1 christos { Bad_Opcode },
6836 1.1 christos { Bad_Opcode },
6837 1.1 christos { Bad_Opcode },
6838 1.1 christos { Bad_Opcode },
6839 1.1 christos { Bad_Opcode },
6840 1.1 christos { Bad_Opcode },
6841 1.1 christos { Bad_Opcode },
6842 1.1 christos },
6843 1.1 christos /* THREE_BYTE_0F3A */
6844 1.1 christos {
6845 1.1 christos /* 00 */
6846 1.1 christos { Bad_Opcode },
6847 1.1 christos { Bad_Opcode },
6848 1.1 christos { Bad_Opcode },
6849 1.1 christos { Bad_Opcode },
6850 1.1 christos { Bad_Opcode },
6851 1.1 christos { Bad_Opcode },
6852 1.1 christos { Bad_Opcode },
6853 1.1 christos { Bad_Opcode },
6854 1.1 christos /* 08 */
6855 1.1 christos { PREFIX_TABLE (PREFIX_0F3A08) },
6856 1.1 christos { PREFIX_TABLE (PREFIX_0F3A09) },
6857 1.1 christos { PREFIX_TABLE (PREFIX_0F3A0A) },
6858 1.1 christos { PREFIX_TABLE (PREFIX_0F3A0B) },
6859 1.1 christos { PREFIX_TABLE (PREFIX_0F3A0C) },
6860 1.1 christos { PREFIX_TABLE (PREFIX_0F3A0D) },
6861 1.1 christos { PREFIX_TABLE (PREFIX_0F3A0E) },
6862 1.1 christos { "palignr", { MX, EM, Ib } },
6863 1.1 christos /* 10 */
6864 1.1 christos { Bad_Opcode },
6865 1.1 christos { Bad_Opcode },
6866 1.1 christos { Bad_Opcode },
6867 1.1 christos { Bad_Opcode },
6868 1.1 christos { PREFIX_TABLE (PREFIX_0F3A14) },
6869 1.1 christos { PREFIX_TABLE (PREFIX_0F3A15) },
6870 1.1 christos { PREFIX_TABLE (PREFIX_0F3A16) },
6871 1.1 christos { PREFIX_TABLE (PREFIX_0F3A17) },
6872 1.1 christos /* 18 */
6873 1.1 christos { Bad_Opcode },
6874 1.1 christos { Bad_Opcode },
6875 1.1 christos { Bad_Opcode },
6876 1.1 christos { Bad_Opcode },
6877 1.1 christos { Bad_Opcode },
6878 1.1 christos { Bad_Opcode },
6879 1.1 christos { Bad_Opcode },
6880 1.1 christos { Bad_Opcode },
6881 1.1 christos /* 20 */
6882 1.1 christos { PREFIX_TABLE (PREFIX_0F3A20) },
6883 1.1 christos { PREFIX_TABLE (PREFIX_0F3A21) },
6884 1.1 christos { PREFIX_TABLE (PREFIX_0F3A22) },
6885 1.1 christos { Bad_Opcode },
6886 1.1 christos { Bad_Opcode },
6887 1.1 christos { Bad_Opcode },
6888 1.1 christos { Bad_Opcode },
6889 1.1 christos { Bad_Opcode },
6890 1.1 christos /* 28 */
6891 1.1 christos { Bad_Opcode },
6892 1.1 christos { Bad_Opcode },
6893 1.1 christos { Bad_Opcode },
6894 1.1 christos { Bad_Opcode },
6895 1.1 christos { Bad_Opcode },
6896 1.1 christos { Bad_Opcode },
6897 1.1 christos { Bad_Opcode },
6898 1.1 christos { Bad_Opcode },
6899 1.1 christos /* 30 */
6900 1.1 christos { Bad_Opcode },
6901 1.1 christos { Bad_Opcode },
6902 1.1 christos { Bad_Opcode },
6903 1.1 christos { Bad_Opcode },
6904 1.1 christos { Bad_Opcode },
6905 1.1 christos { Bad_Opcode },
6906 1.1 christos { Bad_Opcode },
6907 1.1 christos { Bad_Opcode },
6908 1.1 christos /* 38 */
6909 1.1 christos { Bad_Opcode },
6910 1.1 christos { Bad_Opcode },
6911 1.1 christos { Bad_Opcode },
6912 1.1 christos { Bad_Opcode },
6913 1.1 christos { Bad_Opcode },
6914 1.1 christos { Bad_Opcode },
6915 1.1 christos { Bad_Opcode },
6916 1.1 christos { Bad_Opcode },
6917 1.1 christos /* 40 */
6918 1.1 christos { PREFIX_TABLE (PREFIX_0F3A40) },
6919 1.1 christos { PREFIX_TABLE (PREFIX_0F3A41) },
6920 1.1 christos { PREFIX_TABLE (PREFIX_0F3A42) },
6921 1.1 christos { Bad_Opcode },
6922 1.1 christos { PREFIX_TABLE (PREFIX_0F3A44) },
6923 1.1 christos { Bad_Opcode },
6924 1.1 christos { Bad_Opcode },
6925 1.1 christos { Bad_Opcode },
6926 1.1 christos /* 48 */
6927 1.1 christos { Bad_Opcode },
6928 1.1 christos { Bad_Opcode },
6929 1.1 christos { Bad_Opcode },
6930 1.1 christos { Bad_Opcode },
6931 1.1 christos { Bad_Opcode },
6932 1.1 christos { Bad_Opcode },
6933 1.1 christos { Bad_Opcode },
6934 1.1 christos { Bad_Opcode },
6935 1.1 christos /* 50 */
6936 1.1 christos { Bad_Opcode },
6937 1.1 christos { Bad_Opcode },
6938 1.1 christos { Bad_Opcode },
6939 1.1 christos { Bad_Opcode },
6940 1.1 christos { Bad_Opcode },
6941 1.1 christos { Bad_Opcode },
6942 1.1 christos { Bad_Opcode },
6943 1.1 christos { Bad_Opcode },
6944 1.1 christos /* 58 */
6945 1.1 christos { Bad_Opcode },
6946 1.1 christos { Bad_Opcode },
6947 1.1 christos { Bad_Opcode },
6948 1.1 christos { Bad_Opcode },
6949 1.1 christos { Bad_Opcode },
6950 1.1 christos { Bad_Opcode },
6951 1.1 christos { Bad_Opcode },
6952 1.1 christos { Bad_Opcode },
6953 1.1 christos /* 60 */
6954 1.1 christos { PREFIX_TABLE (PREFIX_0F3A60) },
6955 1.1 christos { PREFIX_TABLE (PREFIX_0F3A61) },
6956 1.1 christos { PREFIX_TABLE (PREFIX_0F3A62) },
6957 1.1 christos { PREFIX_TABLE (PREFIX_0F3A63) },
6958 1.1 christos { Bad_Opcode },
6959 1.1 christos { Bad_Opcode },
6960 1.1 christos { Bad_Opcode },
6961 1.1 christos { Bad_Opcode },
6962 1.1 christos /* 68 */
6963 1.1 christos { Bad_Opcode },
6964 1.1 christos { Bad_Opcode },
6965 1.1 christos { Bad_Opcode },
6966 1.1 christos { Bad_Opcode },
6967 1.1 christos { Bad_Opcode },
6968 1.1 christos { Bad_Opcode },
6969 1.1 christos { Bad_Opcode },
6970 1.1 christos { Bad_Opcode },
6971 1.1 christos /* 70 */
6972 1.1 christos { Bad_Opcode },
6973 1.1 christos { Bad_Opcode },
6974 1.1 christos { Bad_Opcode },
6975 1.1 christos { Bad_Opcode },
6976 1.1 christos { Bad_Opcode },
6977 1.1 christos { Bad_Opcode },
6978 1.1 christos { Bad_Opcode },
6979 1.1 christos { Bad_Opcode },
6980 1.1 christos /* 78 */
6981 1.1 christos { Bad_Opcode },
6982 1.1 christos { Bad_Opcode },
6983 1.1 christos { Bad_Opcode },
6984 1.1 christos { Bad_Opcode },
6985 1.1 christos { Bad_Opcode },
6986 1.1 christos { Bad_Opcode },
6987 1.1 christos { Bad_Opcode },
6988 1.1 christos { Bad_Opcode },
6989 1.1 christos /* 80 */
6990 1.1 christos { Bad_Opcode },
6991 1.1 christos { Bad_Opcode },
6992 1.1 christos { Bad_Opcode },
6993 1.1 christos { Bad_Opcode },
6994 1.1 christos { Bad_Opcode },
6995 1.1 christos { Bad_Opcode },
6996 1.1 christos { Bad_Opcode },
6997 1.1 christos { Bad_Opcode },
6998 1.1 christos /* 88 */
6999 1.1 christos { Bad_Opcode },
7000 1.1 christos { Bad_Opcode },
7001 1.1 christos { Bad_Opcode },
7002 1.1 christos { Bad_Opcode },
7003 1.1 christos { Bad_Opcode },
7004 1.1 christos { Bad_Opcode },
7005 1.1 christos { Bad_Opcode },
7006 1.1 christos { Bad_Opcode },
7007 1.1 christos /* 90 */
7008 1.1 christos { Bad_Opcode },
7009 1.1 christos { Bad_Opcode },
7010 1.1 christos { Bad_Opcode },
7011 1.1 christos { Bad_Opcode },
7012 1.1 christos { Bad_Opcode },
7013 1.1 christos { Bad_Opcode },
7014 1.1 christos { Bad_Opcode },
7015 1.1 christos { Bad_Opcode },
7016 1.1 christos /* 98 */
7017 1.1 christos { Bad_Opcode },
7018 1.1 christos { Bad_Opcode },
7019 1.1 christos { Bad_Opcode },
7020 1.1 christos { Bad_Opcode },
7021 1.1 christos { Bad_Opcode },
7022 1.1 christos { Bad_Opcode },
7023 1.1 christos { Bad_Opcode },
7024 1.1 christos { Bad_Opcode },
7025 1.1 christos /* a0 */
7026 1.1 christos { Bad_Opcode },
7027 1.1 christos { Bad_Opcode },
7028 1.1 christos { Bad_Opcode },
7029 1.1 christos { Bad_Opcode },
7030 1.1 christos { Bad_Opcode },
7031 1.1 christos { Bad_Opcode },
7032 1.1 christos { Bad_Opcode },
7033 1.1 christos { Bad_Opcode },
7034 1.1 christos /* a8 */
7035 1.1 christos { Bad_Opcode },
7036 1.1 christos { Bad_Opcode },
7037 1.1 christos { Bad_Opcode },
7038 1.1 christos { Bad_Opcode },
7039 1.1 christos { Bad_Opcode },
7040 1.1 christos { Bad_Opcode },
7041 1.1 christos { Bad_Opcode },
7042 1.1 christos { Bad_Opcode },
7043 1.1 christos /* b0 */
7044 1.1 christos { Bad_Opcode },
7045 1.1 christos { Bad_Opcode },
7046 1.1 christos { Bad_Opcode },
7047 1.1 christos { Bad_Opcode },
7048 1.1 christos { Bad_Opcode },
7049 1.1 christos { Bad_Opcode },
7050 1.1 christos { Bad_Opcode },
7051 1.1 christos { Bad_Opcode },
7052 1.1 christos /* b8 */
7053 1.1 christos { Bad_Opcode },
7054 1.1 christos { Bad_Opcode },
7055 1.1 christos { Bad_Opcode },
7056 1.1 christos { Bad_Opcode },
7057 1.1 christos { Bad_Opcode },
7058 1.1 christos { Bad_Opcode },
7059 1.1 christos { Bad_Opcode },
7060 1.1 christos { Bad_Opcode },
7061 1.1 christos /* c0 */
7062 1.1 christos { Bad_Opcode },
7063 1.1 christos { Bad_Opcode },
7064 1.1 christos { Bad_Opcode },
7065 1.1 christos { Bad_Opcode },
7066 1.1 christos { Bad_Opcode },
7067 1.1 christos { Bad_Opcode },
7068 1.1 christos { Bad_Opcode },
7069 1.1 christos { Bad_Opcode },
7070 1.1 christos /* c8 */
7071 1.1 christos { Bad_Opcode },
7072 1.1 christos { Bad_Opcode },
7073 1.1 christos { Bad_Opcode },
7074 1.1 christos { Bad_Opcode },
7075 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_0F3ACC) },
7076 1.1 christos { Bad_Opcode },
7077 1.1 christos { Bad_Opcode },
7078 1.1 christos { Bad_Opcode },
7079 1.1 christos /* d0 */
7080 1.1 christos { Bad_Opcode },
7081 1.1 christos { Bad_Opcode },
7082 1.1 christos { Bad_Opcode },
7083 1.1 christos { Bad_Opcode },
7084 1.1 christos { Bad_Opcode },
7085 1.1 christos { Bad_Opcode },
7086 1.1 christos { Bad_Opcode },
7087 1.1 christos { Bad_Opcode },
7088 1.1 christos /* d8 */
7089 1.1 christos { Bad_Opcode },
7090 1.1 christos { Bad_Opcode },
7091 1.1 christos { Bad_Opcode },
7092 1.1 christos { Bad_Opcode },
7093 1.1 christos { Bad_Opcode },
7094 1.1 christos { Bad_Opcode },
7095 1.1 christos { Bad_Opcode },
7096 1.1 christos { PREFIX_TABLE (PREFIX_0F3ADF) },
7097 1.1 christos /* e0 */
7098 1.1 christos { Bad_Opcode },
7099 1.1 christos { Bad_Opcode },
7100 1.1 christos { Bad_Opcode },
7101 1.1 christos { Bad_Opcode },
7102 1.1 christos { Bad_Opcode },
7103 1.1 christos { Bad_Opcode },
7104 1.1 christos { Bad_Opcode },
7105 1.1 christos { Bad_Opcode },
7106 1.1 christos /* e8 */
7107 1.1 christos { Bad_Opcode },
7108 1.1 christos { Bad_Opcode },
7109 1.1 christos { Bad_Opcode },
7110 1.1 christos { Bad_Opcode },
7111 1.1 christos { Bad_Opcode },
7112 1.1 christos { Bad_Opcode },
7113 1.1 christos { Bad_Opcode },
7114 1.1 christos { Bad_Opcode },
7115 1.1 christos /* f0 */
7116 1.1 christos { Bad_Opcode },
7117 1.1 christos { Bad_Opcode },
7118 1.1 christos { Bad_Opcode },
7119 1.1 christos { Bad_Opcode },
7120 1.1 christos { Bad_Opcode },
7121 1.1 christos { Bad_Opcode },
7122 1.1 christos { Bad_Opcode },
7123 1.1 christos { Bad_Opcode },
7124 1.1 christos /* f8 */
7125 1.1 christos { Bad_Opcode },
7126 1.1 christos { Bad_Opcode },
7127 1.1 christos { Bad_Opcode },
7128 1.1 christos { Bad_Opcode },
7129 1.1 christos { Bad_Opcode },
7130 1.1 christos { Bad_Opcode },
7131 1.1 christos { Bad_Opcode },
7132 1.1 christos { Bad_Opcode },
7133 1.1 christos },
7134 1.1 christos
7135 1.1 christos /* THREE_BYTE_0F7A */
7136 1.1 christos {
7137 1.1 christos /* 00 */
7138 1.1 christos { Bad_Opcode },
7139 1.1 christos { Bad_Opcode },
7140 1.1 christos { Bad_Opcode },
7141 1.1 christos { Bad_Opcode },
7142 1.1 christos { Bad_Opcode },
7143 1.1 christos { Bad_Opcode },
7144 1.1 christos { Bad_Opcode },
7145 1.1 christos { Bad_Opcode },
7146 1.1 christos /* 08 */
7147 1.1 christos { Bad_Opcode },
7148 1.1 christos { Bad_Opcode },
7149 1.1 christos { Bad_Opcode },
7150 1.1 christos { Bad_Opcode },
7151 1.1 christos { Bad_Opcode },
7152 1.1 christos { Bad_Opcode },
7153 1.1 christos { Bad_Opcode },
7154 1.1 christos { Bad_Opcode },
7155 1.1 christos /* 10 */
7156 1.1 christos { Bad_Opcode },
7157 1.1 christos { Bad_Opcode },
7158 1.1 christos { Bad_Opcode },
7159 1.1 christos { Bad_Opcode },
7160 1.1 christos { Bad_Opcode },
7161 1.1 christos { Bad_Opcode },
7162 1.1 christos { Bad_Opcode },
7163 1.1 christos { Bad_Opcode },
7164 1.1 christos /* 18 */
7165 1.1 christos { Bad_Opcode },
7166 1.1 christos { Bad_Opcode },
7167 1.1 christos { Bad_Opcode },
7168 1.1 christos { Bad_Opcode },
7169 1.1 christos { Bad_Opcode },
7170 1.1 christos { Bad_Opcode },
7171 1.1 christos { Bad_Opcode },
7172 1.1 christos { Bad_Opcode },
7173 1.1 christos /* 20 */
7174 1.1 christos { "ptest", { XX } },
7175 1.1 christos { Bad_Opcode },
7176 1.1 christos { Bad_Opcode },
7177 1.1 christos { Bad_Opcode },
7178 1.1 christos { Bad_Opcode },
7179 1.1 christos { Bad_Opcode },
7180 1.1 christos { Bad_Opcode },
7181 1.1 christos { Bad_Opcode },
7182 1.1 christos /* 28 */
7183 1.1 christos { Bad_Opcode },
7184 1.1 christos { Bad_Opcode },
7185 1.1 christos { Bad_Opcode },
7186 1.1 christos { Bad_Opcode },
7187 1.1 christos { Bad_Opcode },
7188 1.1 christos { Bad_Opcode },
7189 1.1 christos { Bad_Opcode },
7190 1.1 christos { Bad_Opcode },
7191 1.1 christos /* 30 */
7192 1.1 christos { Bad_Opcode },
7193 1.1 christos { Bad_Opcode },
7194 1.1 christos { Bad_Opcode },
7195 1.1 christos { Bad_Opcode },
7196 1.1 christos { Bad_Opcode },
7197 1.1 christos { Bad_Opcode },
7198 1.1 christos { Bad_Opcode },
7199 1.1 christos { Bad_Opcode },
7200 1.1 christos /* 38 */
7201 1.1 christos { Bad_Opcode },
7202 1.1 christos { Bad_Opcode },
7203 1.1 christos { Bad_Opcode },
7204 1.1 christos { Bad_Opcode },
7205 1.1 christos { Bad_Opcode },
7206 1.1 christos { Bad_Opcode },
7207 1.1 christos { Bad_Opcode },
7208 1.1 christos { Bad_Opcode },
7209 1.1 christos /* 40 */
7210 1.1 christos { Bad_Opcode },
7211 1.1 christos { "phaddbw", { XM, EXq } },
7212 1.1 christos { "phaddbd", { XM, EXq } },
7213 1.1 christos { "phaddbq", { XM, EXq } },
7214 1.1 christos { Bad_Opcode },
7215 1.1 christos { Bad_Opcode },
7216 1.1 christos { "phaddwd", { XM, EXq } },
7217 1.1 christos { "phaddwq", { XM, EXq } },
7218 1.1 christos /* 48 */
7219 1.1 christos { Bad_Opcode },
7220 1.1 christos { Bad_Opcode },
7221 1.1 christos { Bad_Opcode },
7222 1.1 christos { "phadddq", { XM, EXq } },
7223 1.1 christos { Bad_Opcode },
7224 1.1 christos { Bad_Opcode },
7225 1.1 christos { Bad_Opcode },
7226 1.1 christos { Bad_Opcode },
7227 1.1 christos /* 50 */
7228 1.1 christos { Bad_Opcode },
7229 1.1 christos { "phaddubw", { XM, EXq } },
7230 1.1 christos { "phaddubd", { XM, EXq } },
7231 1.1 christos { "phaddubq", { XM, EXq } },
7232 1.1 christos { Bad_Opcode },
7233 1.1 christos { Bad_Opcode },
7234 1.1 christos { "phadduwd", { XM, EXq } },
7235 1.1 christos { "phadduwq", { XM, EXq } },
7236 1.1 christos /* 58 */
7237 1.1 christos { Bad_Opcode },
7238 1.1 christos { Bad_Opcode },
7239 1.1 christos { Bad_Opcode },
7240 1.1 christos { "phaddudq", { XM, EXq } },
7241 1.1 christos { Bad_Opcode },
7242 1.1 christos { Bad_Opcode },
7243 1.1 christos { Bad_Opcode },
7244 1.1 christos { Bad_Opcode },
7245 1.1 christos /* 60 */
7246 1.1 christos { Bad_Opcode },
7247 1.1 christos { "phsubbw", { XM, EXq } },
7248 1.1 christos { "phsubbd", { XM, EXq } },
7249 1.1 christos { "phsubbq", { XM, EXq } },
7250 1.1 christos { Bad_Opcode },
7251 1.1 christos { Bad_Opcode },
7252 1.1 christos { Bad_Opcode },
7253 1.1 christos { Bad_Opcode },
7254 1.1 christos /* 68 */
7255 1.1 christos { Bad_Opcode },
7256 1.1 christos { Bad_Opcode },
7257 1.1 christos { Bad_Opcode },
7258 1.1 christos { Bad_Opcode },
7259 1.1 christos { Bad_Opcode },
7260 1.1 christos { Bad_Opcode },
7261 1.1 christos { Bad_Opcode },
7262 1.1 christos { Bad_Opcode },
7263 1.1 christos /* 70 */
7264 1.1 christos { Bad_Opcode },
7265 1.1 christos { Bad_Opcode },
7266 1.1 christos { Bad_Opcode },
7267 1.1 christos { Bad_Opcode },
7268 1.1 christos { Bad_Opcode },
7269 1.1 christos { Bad_Opcode },
7270 1.1 christos { Bad_Opcode },
7271 1.1 christos { Bad_Opcode },
7272 1.1 christos /* 78 */
7273 1.1 christos { Bad_Opcode },
7274 1.1 christos { Bad_Opcode },
7275 1.1 christos { Bad_Opcode },
7276 1.1 christos { Bad_Opcode },
7277 1.1 christos { Bad_Opcode },
7278 1.1 christos { Bad_Opcode },
7279 1.1 christos { Bad_Opcode },
7280 1.1 christos { Bad_Opcode },
7281 1.1 christos /* 80 */
7282 1.1 christos { Bad_Opcode },
7283 1.1 christos { Bad_Opcode },
7284 1.1 christos { Bad_Opcode },
7285 1.1 christos { Bad_Opcode },
7286 1.1 christos { Bad_Opcode },
7287 1.1 christos { Bad_Opcode },
7288 1.1 christos { Bad_Opcode },
7289 1.1 christos { Bad_Opcode },
7290 1.1 christos /* 88 */
7291 1.1 christos { Bad_Opcode },
7292 1.1 christos { Bad_Opcode },
7293 1.1 christos { Bad_Opcode },
7294 1.1 christos { Bad_Opcode },
7295 1.1 christos { Bad_Opcode },
7296 1.1 christos { Bad_Opcode },
7297 1.1 christos { Bad_Opcode },
7298 1.1 christos { Bad_Opcode },
7299 1.1 christos /* 90 */
7300 1.1 christos { Bad_Opcode },
7301 1.1 christos { Bad_Opcode },
7302 1.1 christos { Bad_Opcode },
7303 1.1 christos { Bad_Opcode },
7304 1.1 christos { Bad_Opcode },
7305 1.1 christos { Bad_Opcode },
7306 1.1 christos { Bad_Opcode },
7307 1.1 christos { Bad_Opcode },
7308 1.1 christos /* 98 */
7309 1.1 christos { Bad_Opcode },
7310 1.1 christos { Bad_Opcode },
7311 1.1 christos { Bad_Opcode },
7312 1.1 christos { Bad_Opcode },
7313 1.1 christos { Bad_Opcode },
7314 1.1 christos { Bad_Opcode },
7315 1.1 christos { Bad_Opcode },
7316 1.1 christos { Bad_Opcode },
7317 1.1 christos /* a0 */
7318 1.1 christos { Bad_Opcode },
7319 1.1 christos { Bad_Opcode },
7320 1.1 christos { Bad_Opcode },
7321 1.1 christos { Bad_Opcode },
7322 1.1 christos { Bad_Opcode },
7323 1.1 christos { Bad_Opcode },
7324 1.1 christos { Bad_Opcode },
7325 1.1 christos { Bad_Opcode },
7326 1.1 christos /* a8 */
7327 1.1 christos { Bad_Opcode },
7328 1.1 christos { Bad_Opcode },
7329 1.1 christos { Bad_Opcode },
7330 1.1 christos { Bad_Opcode },
7331 1.1 christos { Bad_Opcode },
7332 1.1 christos { Bad_Opcode },
7333 1.1 christos { Bad_Opcode },
7334 1.1 christos { Bad_Opcode },
7335 1.1 christos /* b0 */
7336 1.1 christos { Bad_Opcode },
7337 1.1 christos { Bad_Opcode },
7338 1.1 christos { Bad_Opcode },
7339 1.1 christos { Bad_Opcode },
7340 1.1 christos { Bad_Opcode },
7341 1.1 christos { Bad_Opcode },
7342 1.1 christos { Bad_Opcode },
7343 1.1 christos { Bad_Opcode },
7344 1.1 christos /* b8 */
7345 1.1 christos { Bad_Opcode },
7346 1.1 christos { Bad_Opcode },
7347 1.1 christos { Bad_Opcode },
7348 1.1 christos { Bad_Opcode },
7349 1.1 christos { Bad_Opcode },
7350 1.1 christos { Bad_Opcode },
7351 1.1 christos { Bad_Opcode },
7352 1.1 christos { Bad_Opcode },
7353 1.1 christos /* c0 */
7354 1.1 christos { Bad_Opcode },
7355 1.1 christos { Bad_Opcode },
7356 1.1 christos { Bad_Opcode },
7357 1.1 christos { Bad_Opcode },
7358 1.1 christos { Bad_Opcode },
7359 1.1 christos { Bad_Opcode },
7360 1.1 christos { Bad_Opcode },
7361 1.1 christos { Bad_Opcode },
7362 1.1 christos /* c8 */
7363 1.1 christos { Bad_Opcode },
7364 1.1 christos { Bad_Opcode },
7365 1.1 christos { Bad_Opcode },
7366 1.1 christos { Bad_Opcode },
7367 1.1 christos { Bad_Opcode },
7368 1.1 christos { Bad_Opcode },
7369 1.1 christos { Bad_Opcode },
7370 1.1 christos { Bad_Opcode },
7371 1.1 christos /* d0 */
7372 1.1 christos { Bad_Opcode },
7373 1.1 christos { Bad_Opcode },
7374 1.1 christos { Bad_Opcode },
7375 1.1 christos { Bad_Opcode },
7376 1.1 christos { Bad_Opcode },
7377 1.1 christos { Bad_Opcode },
7378 1.1 christos { Bad_Opcode },
7379 1.1 christos { Bad_Opcode },
7380 1.1 christos /* d8 */
7381 1.1 christos { Bad_Opcode },
7382 1.1 christos { Bad_Opcode },
7383 1.1 christos { Bad_Opcode },
7384 1.1 christos { Bad_Opcode },
7385 1.1 christos { Bad_Opcode },
7386 1.1 christos { Bad_Opcode },
7387 1.1 christos { Bad_Opcode },
7388 1.1 christos { Bad_Opcode },
7389 1.1 christos /* e0 */
7390 1.1 christos { Bad_Opcode },
7391 1.1 christos { Bad_Opcode },
7392 1.1 christos { Bad_Opcode },
7393 1.1 christos { Bad_Opcode },
7394 1.1 christos { Bad_Opcode },
7395 1.1 christos { Bad_Opcode },
7396 1.1 christos { Bad_Opcode },
7397 1.1 christos { Bad_Opcode },
7398 1.1 christos /* e8 */
7399 1.1 christos { Bad_Opcode },
7400 1.1 christos { Bad_Opcode },
7401 1.1 christos { Bad_Opcode },
7402 1.1 christos { Bad_Opcode },
7403 1.1 christos { Bad_Opcode },
7404 1.1 christos { Bad_Opcode },
7405 1.1 christos { Bad_Opcode },
7406 1.1 christos { Bad_Opcode },
7407 1.1 christos /* f0 */
7408 1.1 christos { Bad_Opcode },
7409 1.1 christos { Bad_Opcode },
7410 1.1 christos { Bad_Opcode },
7411 1.1 christos { Bad_Opcode },
7412 1.1 christos { Bad_Opcode },
7413 1.1 christos { Bad_Opcode },
7414 1.1 christos { Bad_Opcode },
7415 1.1 christos { Bad_Opcode },
7416 1.1 christos /* f8 */
7417 1.1 christos { Bad_Opcode },
7418 1.1 christos { Bad_Opcode },
7419 1.1 christos { Bad_Opcode },
7420 1.1 christos { Bad_Opcode },
7421 1.1 christos { Bad_Opcode },
7422 1.1 christos { Bad_Opcode },
7423 1.1 christos { Bad_Opcode },
7424 1.1 christos { Bad_Opcode },
7425 1.1 christos },
7426 1.1 christos };
7427 1.1 christos
7428 1.1 christos static const struct dis386 xop_table[][256] = {
7429 1.1 christos /* XOP_08 */
7430 1.1 christos {
7431 1.1 christos /* 00 */
7432 1.1 christos { Bad_Opcode },
7433 1.1 christos { Bad_Opcode },
7434 1.1 christos { Bad_Opcode },
7435 1.1 christos { Bad_Opcode },
7436 1.1 christos { Bad_Opcode },
7437 1.1 christos { Bad_Opcode },
7438 1.1 christos { Bad_Opcode },
7439 1.1 christos { Bad_Opcode },
7440 1.1 christos /* 08 */
7441 1.1 christos { Bad_Opcode },
7442 1.1 christos { Bad_Opcode },
7443 1.1 christos { Bad_Opcode },
7444 1.1 christos { Bad_Opcode },
7445 1.1 christos { Bad_Opcode },
7446 1.1 christos { Bad_Opcode },
7447 1.1 christos { Bad_Opcode },
7448 1.1 christos { Bad_Opcode },
7449 1.1 christos /* 10 */
7450 1.1.1.1.8.1 tls { Bad_Opcode },
7451 1.1 christos { Bad_Opcode },
7452 1.1 christos { Bad_Opcode },
7453 1.1 christos { Bad_Opcode },
7454 1.1 christos { Bad_Opcode },
7455 1.1 christos { Bad_Opcode },
7456 1.1 christos { Bad_Opcode },
7457 1.1 christos { Bad_Opcode },
7458 1.1 christos /* 18 */
7459 1.1 christos { Bad_Opcode },
7460 1.1 christos { Bad_Opcode },
7461 1.1 christos { Bad_Opcode },
7462 1.1 christos { Bad_Opcode },
7463 1.1 christos { Bad_Opcode },
7464 1.1 christos { Bad_Opcode },
7465 1.1 christos { Bad_Opcode },
7466 1.1 christos { Bad_Opcode },
7467 1.1 christos /* 20 */
7468 1.1 christos { Bad_Opcode },
7469 1.1 christos { Bad_Opcode },
7470 1.1 christos { Bad_Opcode },
7471 1.1 christos { Bad_Opcode },
7472 1.1 christos { Bad_Opcode },
7473 1.1 christos { Bad_Opcode },
7474 1.1 christos { Bad_Opcode },
7475 1.1 christos { Bad_Opcode },
7476 1.1 christos /* 28 */
7477 1.1 christos { Bad_Opcode },
7478 1.1 christos { Bad_Opcode },
7479 1.1 christos { Bad_Opcode },
7480 1.1 christos { Bad_Opcode },
7481 1.1 christos { Bad_Opcode },
7482 1.1 christos { Bad_Opcode },
7483 1.1 christos { Bad_Opcode },
7484 1.1 christos { Bad_Opcode },
7485 1.1 christos /* 30 */
7486 1.1 christos { Bad_Opcode },
7487 1.1 christos { Bad_Opcode },
7488 1.1 christos { Bad_Opcode },
7489 1.1 christos { Bad_Opcode },
7490 1.1 christos { Bad_Opcode },
7491 1.1 christos { Bad_Opcode },
7492 1.1 christos { Bad_Opcode },
7493 1.1 christos { Bad_Opcode },
7494 1.1 christos /* 38 */
7495 1.1 christos { Bad_Opcode },
7496 1.1 christos { Bad_Opcode },
7497 1.1 christos { Bad_Opcode },
7498 1.1 christos { Bad_Opcode },
7499 1.1 christos { Bad_Opcode },
7500 1.1 christos { Bad_Opcode },
7501 1.1 christos { Bad_Opcode },
7502 1.1 christos { Bad_Opcode },
7503 1.1 christos /* 40 */
7504 1.1 christos { Bad_Opcode },
7505 1.1 christos { Bad_Opcode },
7506 1.1 christos { Bad_Opcode },
7507 1.1 christos { Bad_Opcode },
7508 1.1 christos { Bad_Opcode },
7509 1.1 christos { Bad_Opcode },
7510 1.1 christos { Bad_Opcode },
7511 1.1 christos { Bad_Opcode },
7512 1.1 christos /* 48 */
7513 1.1 christos { Bad_Opcode },
7514 1.1 christos { Bad_Opcode },
7515 1.1 christos { Bad_Opcode },
7516 1.1 christos { Bad_Opcode },
7517 1.1 christos { Bad_Opcode },
7518 1.1 christos { Bad_Opcode },
7519 1.1 christos { Bad_Opcode },
7520 1.1 christos { Bad_Opcode },
7521 1.1 christos /* 50 */
7522 1.1 christos { Bad_Opcode },
7523 1.1 christos { Bad_Opcode },
7524 1.1 christos { Bad_Opcode },
7525 1.1 christos { Bad_Opcode },
7526 1.1 christos { Bad_Opcode },
7527 1.1 christos { Bad_Opcode },
7528 1.1 christos { Bad_Opcode },
7529 1.1 christos { Bad_Opcode },
7530 1.1 christos /* 58 */
7531 1.1 christos { Bad_Opcode },
7532 1.1 christos { Bad_Opcode },
7533 1.1 christos { Bad_Opcode },
7534 1.1 christos { Bad_Opcode },
7535 1.1 christos { Bad_Opcode },
7536 1.1 christos { Bad_Opcode },
7537 1.1 christos { Bad_Opcode },
7538 1.1 christos { Bad_Opcode },
7539 1.1 christos /* 60 */
7540 1.1 christos { Bad_Opcode },
7541 1.1 christos { Bad_Opcode },
7542 1.1 christos { Bad_Opcode },
7543 1.1 christos { Bad_Opcode },
7544 1.1 christos { Bad_Opcode },
7545 1.1 christos { Bad_Opcode },
7546 1.1 christos { Bad_Opcode },
7547 1.1 christos { Bad_Opcode },
7548 1.1 christos /* 68 */
7549 1.1 christos { Bad_Opcode },
7550 1.1 christos { Bad_Opcode },
7551 1.1 christos { Bad_Opcode },
7552 1.1 christos { Bad_Opcode },
7553 1.1 christos { Bad_Opcode },
7554 1.1 christos { Bad_Opcode },
7555 1.1 christos { Bad_Opcode },
7556 1.1 christos { Bad_Opcode },
7557 1.1 christos /* 70 */
7558 1.1 christos { Bad_Opcode },
7559 1.1 christos { Bad_Opcode },
7560 1.1 christos { Bad_Opcode },
7561 1.1 christos { Bad_Opcode },
7562 1.1 christos { Bad_Opcode },
7563 1.1 christos { Bad_Opcode },
7564 1.1 christos { Bad_Opcode },
7565 1.1 christos { Bad_Opcode },
7566 1.1 christos /* 78 */
7567 1.1 christos { Bad_Opcode },
7568 1.1 christos { Bad_Opcode },
7569 1.1 christos { Bad_Opcode },
7570 1.1 christos { Bad_Opcode },
7571 1.1 christos { Bad_Opcode },
7572 1.1 christos { Bad_Opcode },
7573 1.1 christos { Bad_Opcode },
7574 1.1 christos { Bad_Opcode },
7575 1.1 christos /* 80 */
7576 1.1 christos { Bad_Opcode },
7577 1.1 christos { Bad_Opcode },
7578 1.1 christos { Bad_Opcode },
7579 1.1 christos { Bad_Opcode },
7580 1.1 christos { Bad_Opcode },
7581 1.1 christos { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7582 1.1 christos { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7583 1.1 christos { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7584 1.1 christos /* 88 */
7585 1.1 christos { Bad_Opcode },
7586 1.1 christos { Bad_Opcode },
7587 1.1 christos { Bad_Opcode },
7588 1.1 christos { Bad_Opcode },
7589 1.1 christos { Bad_Opcode },
7590 1.1 christos { Bad_Opcode },
7591 1.1 christos { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7592 1.1 christos { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7593 1.1 christos /* 90 */
7594 1.1 christos { Bad_Opcode },
7595 1.1 christos { Bad_Opcode },
7596 1.1 christos { Bad_Opcode },
7597 1.1 christos { Bad_Opcode },
7598 1.1 christos { Bad_Opcode },
7599 1.1 christos { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7600 1.1 christos { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7601 1.1 christos { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7602 1.1 christos /* 98 */
7603 1.1 christos { Bad_Opcode },
7604 1.1 christos { Bad_Opcode },
7605 1.1 christos { Bad_Opcode },
7606 1.1 christos { Bad_Opcode },
7607 1.1 christos { Bad_Opcode },
7608 1.1 christos { Bad_Opcode },
7609 1.1 christos { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7610 1.1 christos { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7611 1.1 christos /* a0 */
7612 1.1 christos { Bad_Opcode },
7613 1.1 christos { Bad_Opcode },
7614 1.1 christos { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7615 1.1 christos { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7616 1.1 christos { Bad_Opcode },
7617 1.1 christos { Bad_Opcode },
7618 1.1 christos { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7619 1.1 christos { Bad_Opcode },
7620 1.1 christos /* a8 */
7621 1.1 christos { Bad_Opcode },
7622 1.1 christos { Bad_Opcode },
7623 1.1 christos { Bad_Opcode },
7624 1.1 christos { Bad_Opcode },
7625 1.1 christos { Bad_Opcode },
7626 1.1 christos { Bad_Opcode },
7627 1.1 christos { Bad_Opcode },
7628 1.1 christos { Bad_Opcode },
7629 1.1 christos /* b0 */
7630 1.1 christos { Bad_Opcode },
7631 1.1 christos { Bad_Opcode },
7632 1.1 christos { Bad_Opcode },
7633 1.1 christos { Bad_Opcode },
7634 1.1 christos { Bad_Opcode },
7635 1.1 christos { Bad_Opcode },
7636 1.1 christos { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
7637 1.1 christos { Bad_Opcode },
7638 1.1 christos /* b8 */
7639 1.1 christos { Bad_Opcode },
7640 1.1 christos { Bad_Opcode },
7641 1.1 christos { Bad_Opcode },
7642 1.1 christos { Bad_Opcode },
7643 1.1 christos { Bad_Opcode },
7644 1.1 christos { Bad_Opcode },
7645 1.1 christos { Bad_Opcode },
7646 1.1 christos { Bad_Opcode },
7647 1.1 christos /* c0 */
7648 1.1 christos { "vprotb", { XM, Vex_2src_1, Ib } },
7649 1.1 christos { "vprotw", { XM, Vex_2src_1, Ib } },
7650 1.1 christos { "vprotd", { XM, Vex_2src_1, Ib } },
7651 1.1 christos { "vprotq", { XM, Vex_2src_1, Ib } },
7652 1.1 christos { Bad_Opcode },
7653 1.1 christos { Bad_Opcode },
7654 1.1 christos { Bad_Opcode },
7655 1.1 christos { Bad_Opcode },
7656 1.1 christos /* c8 */
7657 1.1 christos { Bad_Opcode },
7658 1.1 christos { Bad_Opcode },
7659 1.1 christos { Bad_Opcode },
7660 1.1 christos { Bad_Opcode },
7661 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
7662 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
7663 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
7664 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
7665 1.1 christos /* d0 */
7666 1.1 christos { Bad_Opcode },
7667 1.1 christos { Bad_Opcode },
7668 1.1 christos { Bad_Opcode },
7669 1.1 christos { Bad_Opcode },
7670 1.1 christos { Bad_Opcode },
7671 1.1 christos { Bad_Opcode },
7672 1.1 christos { Bad_Opcode },
7673 1.1 christos { Bad_Opcode },
7674 1.1 christos /* d8 */
7675 1.1 christos { Bad_Opcode },
7676 1.1 christos { Bad_Opcode },
7677 1.1 christos { Bad_Opcode },
7678 1.1 christos { Bad_Opcode },
7679 1.1 christos { Bad_Opcode },
7680 1.1 christos { Bad_Opcode },
7681 1.1 christos { Bad_Opcode },
7682 1.1 christos { Bad_Opcode },
7683 1.1 christos /* e0 */
7684 1.1 christos { Bad_Opcode },
7685 1.1 christos { Bad_Opcode },
7686 1.1 christos { Bad_Opcode },
7687 1.1 christos { Bad_Opcode },
7688 1.1 christos { Bad_Opcode },
7689 1.1 christos { Bad_Opcode },
7690 1.1 christos { Bad_Opcode },
7691 1.1 christos { Bad_Opcode },
7692 1.1 christos /* e8 */
7693 1.1 christos { Bad_Opcode },
7694 1.1 christos { Bad_Opcode },
7695 1.1 christos { Bad_Opcode },
7696 1.1 christos { Bad_Opcode },
7697 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
7698 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
7699 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
7700 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
7701 1.1 christos /* f0 */
7702 1.1 christos { Bad_Opcode },
7703 1.1 christos { Bad_Opcode },
7704 1.1 christos { Bad_Opcode },
7705 1.1 christos { Bad_Opcode },
7706 1.1 christos { Bad_Opcode },
7707 1.1 christos { Bad_Opcode },
7708 1.1 christos { Bad_Opcode },
7709 1.1 christos { Bad_Opcode },
7710 1.1 christos /* f8 */
7711 1.1 christos { Bad_Opcode },
7712 1.1 christos { Bad_Opcode },
7713 1.1 christos { Bad_Opcode },
7714 1.1 christos { Bad_Opcode },
7715 1.1 christos { Bad_Opcode },
7716 1.1 christos { Bad_Opcode },
7717 1.1 christos { Bad_Opcode },
7718 1.1 christos { Bad_Opcode },
7719 1.1 christos },
7720 1.1 christos /* XOP_09 */
7721 1.1 christos {
7722 1.1 christos /* 00 */
7723 1.1 christos { Bad_Opcode },
7724 1.1 christos { REG_TABLE (REG_XOP_TBM_01) },
7725 1.1 christos { REG_TABLE (REG_XOP_TBM_02) },
7726 1.1 christos { Bad_Opcode },
7727 1.1 christos { Bad_Opcode },
7728 1.1 christos { Bad_Opcode },
7729 1.1 christos { Bad_Opcode },
7730 1.1 christos { Bad_Opcode },
7731 1.1 christos /* 08 */
7732 1.1 christos { Bad_Opcode },
7733 1.1 christos { Bad_Opcode },
7734 1.1 christos { Bad_Opcode },
7735 1.1 christos { Bad_Opcode },
7736 1.1 christos { Bad_Opcode },
7737 1.1 christos { Bad_Opcode },
7738 1.1 christos { Bad_Opcode },
7739 1.1 christos { Bad_Opcode },
7740 1.1 christos /* 10 */
7741 1.1 christos { Bad_Opcode },
7742 1.1 christos { Bad_Opcode },
7743 1.1 christos { REG_TABLE (REG_XOP_LWPCB) },
7744 1.1 christos { Bad_Opcode },
7745 1.1 christos { Bad_Opcode },
7746 1.1 christos { Bad_Opcode },
7747 1.1 christos { Bad_Opcode },
7748 1.1 christos { Bad_Opcode },
7749 1.1 christos /* 18 */
7750 1.1 christos { Bad_Opcode },
7751 1.1 christos { Bad_Opcode },
7752 1.1 christos { Bad_Opcode },
7753 1.1 christos { Bad_Opcode },
7754 1.1 christos { Bad_Opcode },
7755 1.1 christos { Bad_Opcode },
7756 1.1 christos { Bad_Opcode },
7757 1.1 christos { Bad_Opcode },
7758 1.1 christos /* 20 */
7759 1.1 christos { Bad_Opcode },
7760 1.1 christos { Bad_Opcode },
7761 1.1 christos { Bad_Opcode },
7762 1.1 christos { Bad_Opcode },
7763 1.1 christos { Bad_Opcode },
7764 1.1 christos { Bad_Opcode },
7765 1.1 christos { Bad_Opcode },
7766 1.1 christos { Bad_Opcode },
7767 1.1 christos /* 28 */
7768 1.1 christos { Bad_Opcode },
7769 1.1 christos { Bad_Opcode },
7770 1.1 christos { Bad_Opcode },
7771 1.1 christos { Bad_Opcode },
7772 1.1 christos { Bad_Opcode },
7773 1.1 christos { Bad_Opcode },
7774 1.1 christos { Bad_Opcode },
7775 1.1 christos { Bad_Opcode },
7776 1.1 christos /* 30 */
7777 1.1 christos { Bad_Opcode },
7778 1.1 christos { Bad_Opcode },
7779 1.1 christos { Bad_Opcode },
7780 1.1 christos { Bad_Opcode },
7781 1.1 christos { Bad_Opcode },
7782 1.1 christos { Bad_Opcode },
7783 1.1 christos { Bad_Opcode },
7784 1.1 christos { Bad_Opcode },
7785 1.1 christos /* 38 */
7786 1.1 christos { Bad_Opcode },
7787 1.1 christos { Bad_Opcode },
7788 1.1 christos { Bad_Opcode },
7789 1.1 christos { Bad_Opcode },
7790 1.1 christos { Bad_Opcode },
7791 1.1 christos { Bad_Opcode },
7792 1.1 christos { Bad_Opcode },
7793 1.1 christos { Bad_Opcode },
7794 1.1 christos /* 40 */
7795 1.1 christos { Bad_Opcode },
7796 1.1 christos { Bad_Opcode },
7797 1.1 christos { Bad_Opcode },
7798 1.1 christos { Bad_Opcode },
7799 1.1 christos { Bad_Opcode },
7800 1.1 christos { Bad_Opcode },
7801 1.1 christos { Bad_Opcode },
7802 1.1 christos { Bad_Opcode },
7803 1.1 christos /* 48 */
7804 1.1 christos { Bad_Opcode },
7805 1.1 christos { Bad_Opcode },
7806 1.1 christos { Bad_Opcode },
7807 1.1 christos { Bad_Opcode },
7808 1.1 christos { Bad_Opcode },
7809 1.1 christos { Bad_Opcode },
7810 1.1 christos { Bad_Opcode },
7811 1.1 christos { Bad_Opcode },
7812 1.1 christos /* 50 */
7813 1.1 christos { Bad_Opcode },
7814 1.1 christos { Bad_Opcode },
7815 1.1 christos { Bad_Opcode },
7816 1.1 christos { Bad_Opcode },
7817 1.1 christos { Bad_Opcode },
7818 1.1 christos { Bad_Opcode },
7819 1.1 christos { Bad_Opcode },
7820 1.1 christos { Bad_Opcode },
7821 1.1 christos /* 58 */
7822 1.1 christos { Bad_Opcode },
7823 1.1 christos { Bad_Opcode },
7824 1.1 christos { Bad_Opcode },
7825 1.1 christos { Bad_Opcode },
7826 1.1 christos { Bad_Opcode },
7827 1.1 christos { Bad_Opcode },
7828 1.1 christos { Bad_Opcode },
7829 1.1 christos { Bad_Opcode },
7830 1.1 christos /* 60 */
7831 1.1 christos { Bad_Opcode },
7832 1.1 christos { Bad_Opcode },
7833 1.1 christos { Bad_Opcode },
7834 1.1 christos { Bad_Opcode },
7835 1.1 christos { Bad_Opcode },
7836 1.1 christos { Bad_Opcode },
7837 1.1 christos { Bad_Opcode },
7838 1.1 christos { Bad_Opcode },
7839 1.1 christos /* 68 */
7840 1.1 christos { Bad_Opcode },
7841 1.1 christos { Bad_Opcode },
7842 1.1 christos { Bad_Opcode },
7843 1.1 christos { Bad_Opcode },
7844 1.1 christos { Bad_Opcode },
7845 1.1 christos { Bad_Opcode },
7846 1.1 christos { Bad_Opcode },
7847 1.1 christos { Bad_Opcode },
7848 1.1 christos /* 70 */
7849 1.1 christos { Bad_Opcode },
7850 1.1 christos { Bad_Opcode },
7851 1.1 christos { Bad_Opcode },
7852 1.1 christos { Bad_Opcode },
7853 1.1 christos { Bad_Opcode },
7854 1.1 christos { Bad_Opcode },
7855 1.1 christos { Bad_Opcode },
7856 1.1 christos { Bad_Opcode },
7857 1.1 christos /* 78 */
7858 1.1 christos { Bad_Opcode },
7859 1.1 christos { Bad_Opcode },
7860 1.1 christos { Bad_Opcode },
7861 1.1 christos { Bad_Opcode },
7862 1.1 christos { Bad_Opcode },
7863 1.1 christos { Bad_Opcode },
7864 1.1 christos { Bad_Opcode },
7865 1.1 christos { Bad_Opcode },
7866 1.1 christos /* 80 */
7867 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7868 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
7869 1.1 christos { "vfrczss", { XM, EXd } },
7870 1.1 christos { "vfrczsd", { XM, EXq } },
7871 1.1 christos { Bad_Opcode },
7872 1.1 christos { Bad_Opcode },
7873 1.1 christos { Bad_Opcode },
7874 1.1 christos { Bad_Opcode },
7875 1.1 christos /* 88 */
7876 1.1 christos { Bad_Opcode },
7877 1.1 christos { Bad_Opcode },
7878 1.1 christos { Bad_Opcode },
7879 1.1 christos { Bad_Opcode },
7880 1.1 christos { Bad_Opcode },
7881 1.1 christos { Bad_Opcode },
7882 1.1 christos { Bad_Opcode },
7883 1.1 christos { Bad_Opcode },
7884 1.1 christos /* 90 */
7885 1.1 christos { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
7886 1.1 christos { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
7887 1.1 christos { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
7888 1.1 christos { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
7889 1.1 christos { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
7890 1.1 christos { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
7891 1.1 christos { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
7892 1.1 christos { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
7893 1.1 christos /* 98 */
7894 1.1 christos { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
7895 1.1 christos { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
7896 1.1 christos { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
7897 1.1 christos { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
7898 1.1 christos { Bad_Opcode },
7899 1.1 christos { Bad_Opcode },
7900 1.1 christos { Bad_Opcode },
7901 1.1 christos { Bad_Opcode },
7902 1.1 christos /* a0 */
7903 1.1 christos { Bad_Opcode },
7904 1.1 christos { Bad_Opcode },
7905 1.1 christos { Bad_Opcode },
7906 1.1 christos { Bad_Opcode },
7907 1.1 christos { Bad_Opcode },
7908 1.1 christos { Bad_Opcode },
7909 1.1 christos { Bad_Opcode },
7910 1.1 christos { Bad_Opcode },
7911 1.1 christos /* a8 */
7912 1.1 christos { Bad_Opcode },
7913 1.1 christos { Bad_Opcode },
7914 1.1 christos { Bad_Opcode },
7915 1.1 christos { Bad_Opcode },
7916 1.1 christos { Bad_Opcode },
7917 1.1 christos { Bad_Opcode },
7918 1.1 christos { Bad_Opcode },
7919 1.1 christos { Bad_Opcode },
7920 1.1 christos /* b0 */
7921 1.1 christos { Bad_Opcode },
7922 1.1 christos { Bad_Opcode },
7923 1.1 christos { Bad_Opcode },
7924 1.1 christos { Bad_Opcode },
7925 1.1 christos { Bad_Opcode },
7926 1.1 christos { Bad_Opcode },
7927 1.1 christos { Bad_Opcode },
7928 1.1 christos { Bad_Opcode },
7929 1.1 christos /* b8 */
7930 1.1 christos { Bad_Opcode },
7931 1.1 christos { Bad_Opcode },
7932 1.1 christos { Bad_Opcode },
7933 1.1 christos { Bad_Opcode },
7934 1.1 christos { Bad_Opcode },
7935 1.1 christos { Bad_Opcode },
7936 1.1 christos { Bad_Opcode },
7937 1.1 christos { Bad_Opcode },
7938 1.1 christos /* c0 */
7939 1.1 christos { Bad_Opcode },
7940 1.1 christos { "vphaddbw", { XM, EXxmm } },
7941 1.1 christos { "vphaddbd", { XM, EXxmm } },
7942 1.1 christos { "vphaddbq", { XM, EXxmm } },
7943 1.1 christos { Bad_Opcode },
7944 1.1 christos { Bad_Opcode },
7945 1.1 christos { "vphaddwd", { XM, EXxmm } },
7946 1.1 christos { "vphaddwq", { XM, EXxmm } },
7947 1.1 christos /* c8 */
7948 1.1 christos { Bad_Opcode },
7949 1.1 christos { Bad_Opcode },
7950 1.1 christos { Bad_Opcode },
7951 1.1 christos { "vphadddq", { XM, EXxmm } },
7952 1.1 christos { Bad_Opcode },
7953 1.1 christos { Bad_Opcode },
7954 1.1 christos { Bad_Opcode },
7955 1.1 christos { Bad_Opcode },
7956 1.1 christos /* d0 */
7957 1.1 christos { Bad_Opcode },
7958 1.1 christos { "vphaddubw", { XM, EXxmm } },
7959 1.1 christos { "vphaddubd", { XM, EXxmm } },
7960 1.1 christos { "vphaddubq", { XM, EXxmm } },
7961 1.1 christos { Bad_Opcode },
7962 1.1 christos { Bad_Opcode },
7963 1.1 christos { "vphadduwd", { XM, EXxmm } },
7964 1.1 christos { "vphadduwq", { XM, EXxmm } },
7965 1.1 christos /* d8 */
7966 1.1 christos { Bad_Opcode },
7967 1.1 christos { Bad_Opcode },
7968 1.1 christos { Bad_Opcode },
7969 1.1 christos { "vphaddudq", { XM, EXxmm } },
7970 1.1 christos { Bad_Opcode },
7971 1.1 christos { Bad_Opcode },
7972 1.1 christos { Bad_Opcode },
7973 1.1 christos { Bad_Opcode },
7974 1.1 christos /* e0 */
7975 1.1 christos { Bad_Opcode },
7976 1.1 christos { "vphsubbw", { XM, EXxmm } },
7977 1.1 christos { "vphsubwd", { XM, EXxmm } },
7978 1.1 christos { "vphsubdq", { XM, EXxmm } },
7979 1.1 christos { Bad_Opcode },
7980 1.1 christos { Bad_Opcode },
7981 1.1 christos { Bad_Opcode },
7982 1.1 christos { Bad_Opcode },
7983 1.1 christos /* e8 */
7984 1.1 christos { Bad_Opcode },
7985 1.1 christos { Bad_Opcode },
7986 1.1 christos { Bad_Opcode },
7987 1.1 christos { Bad_Opcode },
7988 1.1 christos { Bad_Opcode },
7989 1.1 christos { Bad_Opcode },
7990 1.1 christos { Bad_Opcode },
7991 1.1 christos { Bad_Opcode },
7992 1.1 christos /* f0 */
7993 1.1 christos { Bad_Opcode },
7994 1.1 christos { Bad_Opcode },
7995 1.1 christos { Bad_Opcode },
7996 1.1 christos { Bad_Opcode },
7997 1.1 christos { Bad_Opcode },
7998 1.1 christos { Bad_Opcode },
7999 1.1 christos { Bad_Opcode },
8000 1.1 christos { Bad_Opcode },
8001 1.1 christos /* f8 */
8002 1.1 christos { Bad_Opcode },
8003 1.1 christos { Bad_Opcode },
8004 1.1 christos { Bad_Opcode },
8005 1.1 christos { Bad_Opcode },
8006 1.1 christos { Bad_Opcode },
8007 1.1 christos { Bad_Opcode },
8008 1.1 christos { Bad_Opcode },
8009 1.1 christos { Bad_Opcode },
8010 1.1 christos },
8011 1.1 christos /* XOP_0A */
8012 1.1 christos {
8013 1.1 christos /* 00 */
8014 1.1 christos { Bad_Opcode },
8015 1.1 christos { Bad_Opcode },
8016 1.1 christos { Bad_Opcode },
8017 1.1 christos { Bad_Opcode },
8018 1.1 christos { Bad_Opcode },
8019 1.1 christos { Bad_Opcode },
8020 1.1 christos { Bad_Opcode },
8021 1.1 christos { Bad_Opcode },
8022 1.1 christos /* 08 */
8023 1.1 christos { Bad_Opcode },
8024 1.1 christos { Bad_Opcode },
8025 1.1 christos { Bad_Opcode },
8026 1.1 christos { Bad_Opcode },
8027 1.1 christos { Bad_Opcode },
8028 1.1 christos { Bad_Opcode },
8029 1.1 christos { Bad_Opcode },
8030 1.1 christos { Bad_Opcode },
8031 1.1 christos /* 10 */
8032 1.1 christos { "bextr", { Gv, Ev, Iq } },
8033 1.1 christos { Bad_Opcode },
8034 1.1 christos { REG_TABLE (REG_XOP_LWP) },
8035 1.1 christos { Bad_Opcode },
8036 1.1 christos { Bad_Opcode },
8037 1.1 christos { Bad_Opcode },
8038 1.1 christos { Bad_Opcode },
8039 1.1 christos { Bad_Opcode },
8040 1.1 christos /* 18 */
8041 1.1 christos { Bad_Opcode },
8042 1.1 christos { Bad_Opcode },
8043 1.1 christos { Bad_Opcode },
8044 1.1 christos { Bad_Opcode },
8045 1.1 christos { Bad_Opcode },
8046 1.1 christos { Bad_Opcode },
8047 1.1 christos { Bad_Opcode },
8048 1.1 christos { Bad_Opcode },
8049 1.1 christos /* 20 */
8050 1.1 christos { Bad_Opcode },
8051 1.1 christos { Bad_Opcode },
8052 1.1 christos { Bad_Opcode },
8053 1.1 christos { Bad_Opcode },
8054 1.1 christos { Bad_Opcode },
8055 1.1 christos { Bad_Opcode },
8056 1.1 christos { Bad_Opcode },
8057 1.1 christos { Bad_Opcode },
8058 1.1 christos /* 28 */
8059 1.1 christos { Bad_Opcode },
8060 1.1 christos { Bad_Opcode },
8061 1.1 christos { Bad_Opcode },
8062 1.1 christos { Bad_Opcode },
8063 1.1 christos { Bad_Opcode },
8064 1.1 christos { Bad_Opcode },
8065 1.1 christos { Bad_Opcode },
8066 1.1 christos { Bad_Opcode },
8067 1.1 christos /* 30 */
8068 1.1 christos { Bad_Opcode },
8069 1.1 christos { Bad_Opcode },
8070 1.1 christos { Bad_Opcode },
8071 1.1 christos { Bad_Opcode },
8072 1.1 christos { Bad_Opcode },
8073 1.1 christos { Bad_Opcode },
8074 1.1 christos { Bad_Opcode },
8075 1.1 christos { Bad_Opcode },
8076 1.1 christos /* 38 */
8077 1.1 christos { Bad_Opcode },
8078 1.1 christos { Bad_Opcode },
8079 1.1 christos { Bad_Opcode },
8080 1.1 christos { Bad_Opcode },
8081 1.1 christos { Bad_Opcode },
8082 1.1 christos { Bad_Opcode },
8083 1.1 christos { Bad_Opcode },
8084 1.1 christos { Bad_Opcode },
8085 1.1 christos /* 40 */
8086 1.1 christos { Bad_Opcode },
8087 1.1 christos { Bad_Opcode },
8088 1.1 christos { Bad_Opcode },
8089 1.1 christos { Bad_Opcode },
8090 1.1 christos { Bad_Opcode },
8091 1.1 christos { Bad_Opcode },
8092 1.1 christos { Bad_Opcode },
8093 1.1 christos { Bad_Opcode },
8094 1.1 christos /* 48 */
8095 1.1 christos { Bad_Opcode },
8096 1.1 christos { Bad_Opcode },
8097 1.1 christos { Bad_Opcode },
8098 1.1 christos { Bad_Opcode },
8099 1.1 christos { Bad_Opcode },
8100 1.1 christos { Bad_Opcode },
8101 1.1 christos { Bad_Opcode },
8102 1.1 christos { Bad_Opcode },
8103 1.1 christos /* 50 */
8104 1.1 christos { Bad_Opcode },
8105 1.1 christos { Bad_Opcode },
8106 1.1 christos { Bad_Opcode },
8107 1.1 christos { Bad_Opcode },
8108 1.1 christos { Bad_Opcode },
8109 1.1 christos { Bad_Opcode },
8110 1.1 christos { Bad_Opcode },
8111 1.1 christos { Bad_Opcode },
8112 1.1 christos /* 58 */
8113 1.1 christos { Bad_Opcode },
8114 1.1 christos { Bad_Opcode },
8115 1.1 christos { Bad_Opcode },
8116 1.1 christos { Bad_Opcode },
8117 1.1 christos { Bad_Opcode },
8118 1.1 christos { Bad_Opcode },
8119 1.1 christos { Bad_Opcode },
8120 1.1 christos { Bad_Opcode },
8121 1.1 christos /* 60 */
8122 1.1 christos { Bad_Opcode },
8123 1.1 christos { Bad_Opcode },
8124 1.1 christos { Bad_Opcode },
8125 1.1 christos { Bad_Opcode },
8126 1.1 christos { Bad_Opcode },
8127 1.1 christos { Bad_Opcode },
8128 1.1 christos { Bad_Opcode },
8129 1.1 christos { Bad_Opcode },
8130 1.1 christos /* 68 */
8131 1.1 christos { Bad_Opcode },
8132 1.1 christos { Bad_Opcode },
8133 1.1 christos { Bad_Opcode },
8134 1.1 christos { Bad_Opcode },
8135 1.1 christos { Bad_Opcode },
8136 1.1 christos { Bad_Opcode },
8137 1.1 christos { Bad_Opcode },
8138 1.1 christos { Bad_Opcode },
8139 1.1 christos /* 70 */
8140 1.1 christos { Bad_Opcode },
8141 1.1 christos { Bad_Opcode },
8142 1.1 christos { Bad_Opcode },
8143 1.1 christos { Bad_Opcode },
8144 1.1 christos { Bad_Opcode },
8145 1.1 christos { Bad_Opcode },
8146 1.1 christos { Bad_Opcode },
8147 1.1 christos { Bad_Opcode },
8148 1.1 christos /* 78 */
8149 1.1 christos { Bad_Opcode },
8150 1.1 christos { Bad_Opcode },
8151 1.1 christos { Bad_Opcode },
8152 1.1 christos { Bad_Opcode },
8153 1.1 christos { Bad_Opcode },
8154 1.1 christos { Bad_Opcode },
8155 1.1 christos { Bad_Opcode },
8156 1.1 christos { Bad_Opcode },
8157 1.1 christos /* 80 */
8158 1.1 christos { Bad_Opcode },
8159 1.1 christos { Bad_Opcode },
8160 1.1 christos { Bad_Opcode },
8161 1.1 christos { Bad_Opcode },
8162 1.1 christos { Bad_Opcode },
8163 1.1 christos { Bad_Opcode },
8164 1.1 christos { Bad_Opcode },
8165 1.1 christos { Bad_Opcode },
8166 1.1 christos /* 88 */
8167 1.1 christos { Bad_Opcode },
8168 1.1 christos { Bad_Opcode },
8169 1.1 christos { Bad_Opcode },
8170 1.1 christos { Bad_Opcode },
8171 1.1 christos { Bad_Opcode },
8172 1.1 christos { Bad_Opcode },
8173 1.1 christos { Bad_Opcode },
8174 1.1 christos { Bad_Opcode },
8175 1.1 christos /* 90 */
8176 1.1 christos { Bad_Opcode },
8177 1.1 christos { Bad_Opcode },
8178 1.1 christos { Bad_Opcode },
8179 1.1 christos { Bad_Opcode },
8180 1.1 christos { Bad_Opcode },
8181 1.1 christos { Bad_Opcode },
8182 1.1 christos { Bad_Opcode },
8183 1.1 christos { Bad_Opcode },
8184 1.1 christos /* 98 */
8185 1.1 christos { Bad_Opcode },
8186 1.1 christos { Bad_Opcode },
8187 1.1 christos { Bad_Opcode },
8188 1.1 christos { Bad_Opcode },
8189 1.1 christos { Bad_Opcode },
8190 1.1 christos { Bad_Opcode },
8191 1.1 christos { Bad_Opcode },
8192 1.1 christos { Bad_Opcode },
8193 1.1 christos /* a0 */
8194 1.1 christos { Bad_Opcode },
8195 1.1 christos { Bad_Opcode },
8196 1.1 christos { Bad_Opcode },
8197 1.1 christos { Bad_Opcode },
8198 1.1 christos { Bad_Opcode },
8199 1.1 christos { Bad_Opcode },
8200 1.1 christos { Bad_Opcode },
8201 1.1 christos { Bad_Opcode },
8202 1.1 christos /* a8 */
8203 1.1 christos { Bad_Opcode },
8204 1.1 christos { Bad_Opcode },
8205 1.1 christos { Bad_Opcode },
8206 1.1 christos { Bad_Opcode },
8207 1.1 christos { Bad_Opcode },
8208 1.1 christos { Bad_Opcode },
8209 1.1 christos { Bad_Opcode },
8210 1.1 christos { Bad_Opcode },
8211 1.1 christos /* b0 */
8212 1.1 christos { Bad_Opcode },
8213 1.1 christos { Bad_Opcode },
8214 1.1 christos { Bad_Opcode },
8215 1.1 christos { Bad_Opcode },
8216 1.1 christos { Bad_Opcode },
8217 1.1 christos { Bad_Opcode },
8218 1.1 christos { Bad_Opcode },
8219 1.1 christos { Bad_Opcode },
8220 1.1 christos /* b8 */
8221 1.1 christos { Bad_Opcode },
8222 1.1 christos { Bad_Opcode },
8223 1.1 christos { Bad_Opcode },
8224 1.1 christos { Bad_Opcode },
8225 1.1 christos { Bad_Opcode },
8226 1.1 christos { Bad_Opcode },
8227 1.1 christos { Bad_Opcode },
8228 1.1 christos { Bad_Opcode },
8229 1.1 christos /* c0 */
8230 1.1 christos { Bad_Opcode },
8231 1.1 christos { Bad_Opcode },
8232 1.1 christos { Bad_Opcode },
8233 1.1 christos { Bad_Opcode },
8234 1.1 christos { Bad_Opcode },
8235 1.1 christos { Bad_Opcode },
8236 1.1 christos { Bad_Opcode },
8237 1.1 christos { Bad_Opcode },
8238 1.1 christos /* c8 */
8239 1.1 christos { Bad_Opcode },
8240 1.1 christos { Bad_Opcode },
8241 1.1 christos { Bad_Opcode },
8242 1.1 christos { Bad_Opcode },
8243 1.1 christos { Bad_Opcode },
8244 1.1 christos { Bad_Opcode },
8245 1.1 christos { Bad_Opcode },
8246 1.1 christos { Bad_Opcode },
8247 1.1 christos /* d0 */
8248 1.1 christos { Bad_Opcode },
8249 1.1 christos { Bad_Opcode },
8250 1.1 christos { Bad_Opcode },
8251 1.1 christos { Bad_Opcode },
8252 1.1 christos { Bad_Opcode },
8253 1.1 christos { Bad_Opcode },
8254 1.1 christos { Bad_Opcode },
8255 1.1 christos { Bad_Opcode },
8256 1.1 christos /* d8 */
8257 1.1 christos { Bad_Opcode },
8258 1.1 christos { Bad_Opcode },
8259 1.1 christos { Bad_Opcode },
8260 1.1 christos { Bad_Opcode },
8261 1.1 christos { Bad_Opcode },
8262 1.1 christos { Bad_Opcode },
8263 1.1 christos { Bad_Opcode },
8264 1.1 christos { Bad_Opcode },
8265 1.1 christos /* e0 */
8266 1.1 christos { Bad_Opcode },
8267 1.1 christos { Bad_Opcode },
8268 1.1 christos { Bad_Opcode },
8269 1.1 christos { Bad_Opcode },
8270 1.1 christos { Bad_Opcode },
8271 1.1 christos { Bad_Opcode },
8272 1.1 christos { Bad_Opcode },
8273 1.1 christos { Bad_Opcode },
8274 1.1 christos /* e8 */
8275 1.1 christos { Bad_Opcode },
8276 1.1 christos { Bad_Opcode },
8277 1.1 christos { Bad_Opcode },
8278 1.1 christos { Bad_Opcode },
8279 1.1 christos { Bad_Opcode },
8280 1.1 christos { Bad_Opcode },
8281 1.1 christos { Bad_Opcode },
8282 1.1 christos { Bad_Opcode },
8283 1.1 christos /* f0 */
8284 1.1 christos { Bad_Opcode },
8285 1.1 christos { Bad_Opcode },
8286 1.1 christos { Bad_Opcode },
8287 1.1 christos { Bad_Opcode },
8288 1.1 christos { Bad_Opcode },
8289 1.1 christos { Bad_Opcode },
8290 1.1 christos { Bad_Opcode },
8291 1.1 christos { Bad_Opcode },
8292 1.1 christos /* f8 */
8293 1.1 christos { Bad_Opcode },
8294 1.1 christos { Bad_Opcode },
8295 1.1 christos { Bad_Opcode },
8296 1.1 christos { Bad_Opcode },
8297 1.1 christos { Bad_Opcode },
8298 1.1 christos { Bad_Opcode },
8299 1.1 christos { Bad_Opcode },
8300 1.1 christos { Bad_Opcode },
8301 1.1 christos },
8302 1.1 christos };
8303 1.1 christos
8304 1.1 christos static const struct dis386 vex_table[][256] = {
8305 1.1 christos /* VEX_0F */
8306 1.1 christos {
8307 1.1 christos /* 00 */
8308 1.1 christos { Bad_Opcode },
8309 1.1 christos { Bad_Opcode },
8310 1.1 christos { Bad_Opcode },
8311 1.1 christos { Bad_Opcode },
8312 1.1 christos { Bad_Opcode },
8313 1.1 christos { Bad_Opcode },
8314 1.1 christos { Bad_Opcode },
8315 1.1 christos { Bad_Opcode },
8316 1.1 christos /* 08 */
8317 1.1 christos { Bad_Opcode },
8318 1.1 christos { Bad_Opcode },
8319 1.1 christos { Bad_Opcode },
8320 1.1 christos { Bad_Opcode },
8321 1.1 christos { Bad_Opcode },
8322 1.1 christos { Bad_Opcode },
8323 1.1 christos { Bad_Opcode },
8324 1.1 christos { Bad_Opcode },
8325 1.1 christos /* 10 */
8326 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F10) },
8327 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F11) },
8328 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F12) },
8329 1.1 christos { MOD_TABLE (MOD_VEX_0F13) },
8330 1.1 christos { VEX_W_TABLE (VEX_W_0F14) },
8331 1.1 christos { VEX_W_TABLE (VEX_W_0F15) },
8332 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F16) },
8333 1.1 christos { MOD_TABLE (MOD_VEX_0F17) },
8334 1.1 christos /* 18 */
8335 1.1 christos { Bad_Opcode },
8336 1.1 christos { Bad_Opcode },
8337 1.1 christos { Bad_Opcode },
8338 1.1 christos { Bad_Opcode },
8339 1.1 christos { Bad_Opcode },
8340 1.1 christos { Bad_Opcode },
8341 1.1 christos { Bad_Opcode },
8342 1.1 christos { Bad_Opcode },
8343 1.1 christos /* 20 */
8344 1.1 christos { Bad_Opcode },
8345 1.1 christos { Bad_Opcode },
8346 1.1 christos { Bad_Opcode },
8347 1.1 christos { Bad_Opcode },
8348 1.1 christos { Bad_Opcode },
8349 1.1 christos { Bad_Opcode },
8350 1.1 christos { Bad_Opcode },
8351 1.1 christos { Bad_Opcode },
8352 1.1 christos /* 28 */
8353 1.1 christos { VEX_W_TABLE (VEX_W_0F28) },
8354 1.1 christos { VEX_W_TABLE (VEX_W_0F29) },
8355 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F2A) },
8356 1.1 christos { MOD_TABLE (MOD_VEX_0F2B) },
8357 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F2C) },
8358 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F2D) },
8359 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F2E) },
8360 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F2F) },
8361 1.1 christos /* 30 */
8362 1.1 christos { Bad_Opcode },
8363 1.1 christos { Bad_Opcode },
8364 1.1 christos { Bad_Opcode },
8365 1.1 christos { Bad_Opcode },
8366 1.1 christos { Bad_Opcode },
8367 1.1 christos { Bad_Opcode },
8368 1.1 christos { Bad_Opcode },
8369 1.1 christos { Bad_Opcode },
8370 1.1 christos /* 38 */
8371 1.1 christos { Bad_Opcode },
8372 1.1 christos { Bad_Opcode },
8373 1.1 christos { Bad_Opcode },
8374 1.1 christos { Bad_Opcode },
8375 1.1 christos { Bad_Opcode },
8376 1.1 christos { Bad_Opcode },
8377 1.1 christos { Bad_Opcode },
8378 1.1 christos { Bad_Opcode },
8379 1.1 christos /* 40 */
8380 1.1 christos { Bad_Opcode },
8381 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F41) },
8382 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F42) },
8383 1.1 christos { Bad_Opcode },
8384 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F44) },
8385 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F45) },
8386 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F46) },
8387 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F47) },
8388 1.1 christos /* 48 */
8389 1.1 christos { Bad_Opcode },
8390 1.1 christos { Bad_Opcode },
8391 1.1 christos { Bad_Opcode },
8392 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F4B) },
8393 1.1 christos { Bad_Opcode },
8394 1.1 christos { Bad_Opcode },
8395 1.1 christos { Bad_Opcode },
8396 1.1 christos { Bad_Opcode },
8397 1.1 christos /* 50 */
8398 1.1 christos { MOD_TABLE (MOD_VEX_0F50) },
8399 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F51) },
8400 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F52) },
8401 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F53) },
8402 1.1 christos { "vandpX", { XM, Vex, EXx } },
8403 1.1 christos { "vandnpX", { XM, Vex, EXx } },
8404 1.1 christos { "vorpX", { XM, Vex, EXx } },
8405 1.1 christos { "vxorpX", { XM, Vex, EXx } },
8406 1.1 christos /* 58 */
8407 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F58) },
8408 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F59) },
8409 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F5A) },
8410 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F5B) },
8411 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F5C) },
8412 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F5D) },
8413 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F5E) },
8414 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F5F) },
8415 1.1 christos /* 60 */
8416 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F60) },
8417 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F61) },
8418 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F62) },
8419 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F63) },
8420 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F64) },
8421 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F65) },
8422 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F66) },
8423 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F67) },
8424 1.1 christos /* 68 */
8425 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F68) },
8426 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F69) },
8427 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F6A) },
8428 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F6B) },
8429 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F6C) },
8430 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F6D) },
8431 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F6E) },
8432 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F6F) },
8433 1.1 christos /* 70 */
8434 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F70) },
8435 1.1 christos { REG_TABLE (REG_VEX_0F71) },
8436 1.1 christos { REG_TABLE (REG_VEX_0F72) },
8437 1.1 christos { REG_TABLE (REG_VEX_0F73) },
8438 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F74) },
8439 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F75) },
8440 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F76) },
8441 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F77) },
8442 1.1 christos /* 78 */
8443 1.1 christos { Bad_Opcode },
8444 1.1 christos { Bad_Opcode },
8445 1.1 christos { Bad_Opcode },
8446 1.1 christos { Bad_Opcode },
8447 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F7C) },
8448 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F7D) },
8449 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F7E) },
8450 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F7F) },
8451 1.1 christos /* 80 */
8452 1.1 christos { Bad_Opcode },
8453 1.1 christos { Bad_Opcode },
8454 1.1 christos { Bad_Opcode },
8455 1.1 christos { Bad_Opcode },
8456 1.1 christos { Bad_Opcode },
8457 1.1 christos { Bad_Opcode },
8458 1.1 christos { Bad_Opcode },
8459 1.1 christos { Bad_Opcode },
8460 1.1 christos /* 88 */
8461 1.1 christos { Bad_Opcode },
8462 1.1 christos { Bad_Opcode },
8463 1.1 christos { Bad_Opcode },
8464 1.1 christos { Bad_Opcode },
8465 1.1 christos { Bad_Opcode },
8466 1.1 christos { Bad_Opcode },
8467 1.1 christos { Bad_Opcode },
8468 1.1 christos { Bad_Opcode },
8469 1.1 christos /* 90 */
8470 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F90) },
8471 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F91) },
8472 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F92) },
8473 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F93) },
8474 1.1 christos { Bad_Opcode },
8475 1.1 christos { Bad_Opcode },
8476 1.1 christos { Bad_Opcode },
8477 1.1 christos { Bad_Opcode },
8478 1.1 christos /* 98 */
8479 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F98) },
8480 1.1 christos { Bad_Opcode },
8481 1.1 christos { Bad_Opcode },
8482 1.1 christos { Bad_Opcode },
8483 1.1 christos { Bad_Opcode },
8484 1.1 christos { Bad_Opcode },
8485 1.1 christos { Bad_Opcode },
8486 1.1 christos { Bad_Opcode },
8487 1.1 christos /* a0 */
8488 1.1 christos { Bad_Opcode },
8489 1.1 christos { Bad_Opcode },
8490 1.1 christos { Bad_Opcode },
8491 1.1 christos { Bad_Opcode },
8492 1.1 christos { Bad_Opcode },
8493 1.1 christos { Bad_Opcode },
8494 1.1 christos { Bad_Opcode },
8495 1.1 christos { Bad_Opcode },
8496 1.1 christos /* a8 */
8497 1.1 christos { Bad_Opcode },
8498 1.1 christos { Bad_Opcode },
8499 1.1 christos { Bad_Opcode },
8500 1.1 christos { Bad_Opcode },
8501 1.1 christos { Bad_Opcode },
8502 1.1 christos { Bad_Opcode },
8503 1.1 christos { REG_TABLE (REG_VEX_0FAE) },
8504 1.1 christos { Bad_Opcode },
8505 1.1 christos /* b0 */
8506 1.1 christos { Bad_Opcode },
8507 1.1 christos { Bad_Opcode },
8508 1.1 christos { Bad_Opcode },
8509 1.1 christos { Bad_Opcode },
8510 1.1 christos { Bad_Opcode },
8511 1.1 christos { Bad_Opcode },
8512 1.1 christos { Bad_Opcode },
8513 1.1 christos { Bad_Opcode },
8514 1.1 christos /* b8 */
8515 1.1 christos { Bad_Opcode },
8516 1.1 christos { Bad_Opcode },
8517 1.1 christos { Bad_Opcode },
8518 1.1 christos { Bad_Opcode },
8519 1.1 christos { Bad_Opcode },
8520 1.1 christos { Bad_Opcode },
8521 1.1 christos { Bad_Opcode },
8522 1.1 christos { Bad_Opcode },
8523 1.1 christos /* c0 */
8524 1.1 christos { Bad_Opcode },
8525 1.1 christos { Bad_Opcode },
8526 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FC2) },
8527 1.1 christos { Bad_Opcode },
8528 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FC4) },
8529 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FC5) },
8530 1.1 christos { "vshufpX", { XM, Vex, EXx, Ib } },
8531 1.1 christos { Bad_Opcode },
8532 1.1 christos /* c8 */
8533 1.1 christos { Bad_Opcode },
8534 1.1 christos { Bad_Opcode },
8535 1.1 christos { Bad_Opcode },
8536 1.1 christos { Bad_Opcode },
8537 1.1 christos { Bad_Opcode },
8538 1.1 christos { Bad_Opcode },
8539 1.1 christos { Bad_Opcode },
8540 1.1 christos { Bad_Opcode },
8541 1.1 christos /* d0 */
8542 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD0) },
8543 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD1) },
8544 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD2) },
8545 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD3) },
8546 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD4) },
8547 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD5) },
8548 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD6) },
8549 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD7) },
8550 1.1 christos /* d8 */
8551 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD8) },
8552 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD9) },
8553 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FDA) },
8554 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FDB) },
8555 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FDC) },
8556 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FDD) },
8557 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FDE) },
8558 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FDF) },
8559 1.1 christos /* e0 */
8560 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE0) },
8561 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE1) },
8562 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE2) },
8563 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE3) },
8564 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE4) },
8565 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE5) },
8566 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE6) },
8567 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE7) },
8568 1.1 christos /* e8 */
8569 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE8) },
8570 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE9) },
8571 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FEA) },
8572 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FEB) },
8573 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FEC) },
8574 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FED) },
8575 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FEE) },
8576 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FEF) },
8577 1.1 christos /* f0 */
8578 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF0) },
8579 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF1) },
8580 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF2) },
8581 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF3) },
8582 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF4) },
8583 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF5) },
8584 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF6) },
8585 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF7) },
8586 1.1 christos /* f8 */
8587 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF8) },
8588 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF9) },
8589 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FFA) },
8590 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FFB) },
8591 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FFC) },
8592 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FFD) },
8593 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FFE) },
8594 1.1 christos { Bad_Opcode },
8595 1.1 christos },
8596 1.1 christos /* VEX_0F38 */
8597 1.1 christos {
8598 1.1 christos /* 00 */
8599 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3800) },
8600 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3801) },
8601 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3802) },
8602 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3803) },
8603 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3804) },
8604 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3805) },
8605 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3806) },
8606 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3807) },
8607 1.1 christos /* 08 */
8608 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3808) },
8609 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3809) },
8610 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F380A) },
8611 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F380B) },
8612 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F380C) },
8613 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F380D) },
8614 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F380E) },
8615 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F380F) },
8616 1.1 christos /* 10 */
8617 1.1 christos { Bad_Opcode },
8618 1.1 christos { Bad_Opcode },
8619 1.1 christos { Bad_Opcode },
8620 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3813) },
8621 1.1 christos { Bad_Opcode },
8622 1.1 christos { Bad_Opcode },
8623 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3816) },
8624 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3817) },
8625 1.1 christos /* 18 */
8626 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3818) },
8627 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3819) },
8628 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F381A) },
8629 1.1 christos { Bad_Opcode },
8630 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F381C) },
8631 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F381D) },
8632 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F381E) },
8633 1.1 christos { Bad_Opcode },
8634 1.1 christos /* 20 */
8635 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3820) },
8636 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3821) },
8637 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3822) },
8638 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3823) },
8639 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3824) },
8640 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3825) },
8641 1.1 christos { Bad_Opcode },
8642 1.1 christos { Bad_Opcode },
8643 1.1 christos /* 28 */
8644 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3828) },
8645 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3829) },
8646 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F382A) },
8647 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F382B) },
8648 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F382C) },
8649 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F382D) },
8650 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F382E) },
8651 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F382F) },
8652 1.1 christos /* 30 */
8653 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3830) },
8654 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3831) },
8655 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3832) },
8656 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3833) },
8657 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3834) },
8658 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3835) },
8659 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3836) },
8660 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3837) },
8661 1.1 christos /* 38 */
8662 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3838) },
8663 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3839) },
8664 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F383A) },
8665 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F383B) },
8666 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F383C) },
8667 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F383D) },
8668 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F383E) },
8669 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F383F) },
8670 1.1 christos /* 40 */
8671 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3840) },
8672 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3841) },
8673 1.1 christos { Bad_Opcode },
8674 1.1 christos { Bad_Opcode },
8675 1.1 christos { Bad_Opcode },
8676 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3845) },
8677 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3846) },
8678 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3847) },
8679 1.1 christos /* 48 */
8680 1.1 christos { Bad_Opcode },
8681 1.1 christos { Bad_Opcode },
8682 1.1 christos { Bad_Opcode },
8683 1.1 christos { Bad_Opcode },
8684 1.1 christos { Bad_Opcode },
8685 1.1 christos { Bad_Opcode },
8686 1.1 christos { Bad_Opcode },
8687 1.1 christos { Bad_Opcode },
8688 1.1 christos /* 50 */
8689 1.1 christos { Bad_Opcode },
8690 1.1 christos { Bad_Opcode },
8691 1.1 christos { Bad_Opcode },
8692 1.1 christos { Bad_Opcode },
8693 1.1 christos { Bad_Opcode },
8694 1.1 christos { Bad_Opcode },
8695 1.1 christos { Bad_Opcode },
8696 1.1 christos { Bad_Opcode },
8697 1.1 christos /* 58 */
8698 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3858) },
8699 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3859) },
8700 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F385A) },
8701 1.1 christos { Bad_Opcode },
8702 1.1 christos { Bad_Opcode },
8703 1.1 christos { Bad_Opcode },
8704 1.1 christos { Bad_Opcode },
8705 1.1 christos { Bad_Opcode },
8706 1.1 christos /* 60 */
8707 1.1 christos { Bad_Opcode },
8708 1.1 christos { Bad_Opcode },
8709 1.1 christos { Bad_Opcode },
8710 1.1 christos { Bad_Opcode },
8711 1.1 christos { Bad_Opcode },
8712 1.1 christos { Bad_Opcode },
8713 1.1 christos { Bad_Opcode },
8714 1.1 christos { Bad_Opcode },
8715 1.1 christos /* 68 */
8716 1.1 christos { Bad_Opcode },
8717 1.1 christos { Bad_Opcode },
8718 1.1 christos { Bad_Opcode },
8719 1.1 christos { Bad_Opcode },
8720 1.1 christos { Bad_Opcode },
8721 1.1 christos { Bad_Opcode },
8722 1.1 christos { Bad_Opcode },
8723 1.1 christos { Bad_Opcode },
8724 1.1 christos /* 70 */
8725 1.1 christos { Bad_Opcode },
8726 1.1 christos { Bad_Opcode },
8727 1.1 christos { Bad_Opcode },
8728 1.1 christos { Bad_Opcode },
8729 1.1 christos { Bad_Opcode },
8730 1.1 christos { Bad_Opcode },
8731 1.1 christos { Bad_Opcode },
8732 1.1 christos { Bad_Opcode },
8733 1.1 christos /* 78 */
8734 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3878) },
8735 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3879) },
8736 1.1 christos { Bad_Opcode },
8737 1.1 christos { Bad_Opcode },
8738 1.1 christos { Bad_Opcode },
8739 1.1 christos { Bad_Opcode },
8740 1.1 christos { Bad_Opcode },
8741 1.1 christos { Bad_Opcode },
8742 1.1 christos /* 80 */
8743 1.1 christos { Bad_Opcode },
8744 1.1 christos { Bad_Opcode },
8745 1.1 christos { Bad_Opcode },
8746 1.1 christos { Bad_Opcode },
8747 1.1 christos { Bad_Opcode },
8748 1.1 christos { Bad_Opcode },
8749 1.1 christos { Bad_Opcode },
8750 1.1 christos { Bad_Opcode },
8751 1.1 christos /* 88 */
8752 1.1 christos { Bad_Opcode },
8753 1.1 christos { Bad_Opcode },
8754 1.1 christos { Bad_Opcode },
8755 1.1 christos { Bad_Opcode },
8756 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F388C) },
8757 1.1 christos { Bad_Opcode },
8758 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F388E) },
8759 1.1 christos { Bad_Opcode },
8760 1.1 christos /* 90 */
8761 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8762 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8763 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8764 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3893) },
8765 1.1 christos { Bad_Opcode },
8766 1.1 christos { Bad_Opcode },
8767 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8768 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3897) },
8769 1.1 christos /* 98 */
8770 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8771 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8772 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8773 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8774 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8775 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8776 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8777 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F389F) },
8778 1.1 christos /* a0 */
8779 1.1 christos { Bad_Opcode },
8780 1.1 christos { Bad_Opcode },
8781 1.1 christos { Bad_Opcode },
8782 1.1 christos { Bad_Opcode },
8783 1.1 christos { Bad_Opcode },
8784 1.1 christos { Bad_Opcode },
8785 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8786 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
8787 1.1 christos /* a8 */
8788 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8789 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8790 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8791 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8792 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8793 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8794 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8795 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
8796 1.1 christos /* b0 */
8797 1.1 christos { Bad_Opcode },
8798 1.1 christos { Bad_Opcode },
8799 1.1 christos { Bad_Opcode },
8800 1.1 christos { Bad_Opcode },
8801 1.1 christos { Bad_Opcode },
8802 1.1 christos { Bad_Opcode },
8803 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8804 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
8805 1.1 christos /* b8 */
8806 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8807 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8808 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8809 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8810 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8811 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8812 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8813 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
8814 1.1 christos /* c0 */
8815 1.1 christos { Bad_Opcode },
8816 1.1 christos { Bad_Opcode },
8817 1.1 christos { Bad_Opcode },
8818 1.1 christos { Bad_Opcode },
8819 1.1 christos { Bad_Opcode },
8820 1.1 christos { Bad_Opcode },
8821 1.1 christos { Bad_Opcode },
8822 1.1 christos { Bad_Opcode },
8823 1.1 christos /* c8 */
8824 1.1 christos { Bad_Opcode },
8825 1.1 christos { Bad_Opcode },
8826 1.1 christos { Bad_Opcode },
8827 1.1 christos { Bad_Opcode },
8828 1.1 christos { Bad_Opcode },
8829 1.1 christos { Bad_Opcode },
8830 1.1 christos { Bad_Opcode },
8831 1.1 christos { Bad_Opcode },
8832 1.1 christos /* d0 */
8833 1.1 christos { Bad_Opcode },
8834 1.1 christos { Bad_Opcode },
8835 1.1 christos { Bad_Opcode },
8836 1.1 christos { Bad_Opcode },
8837 1.1 christos { Bad_Opcode },
8838 1.1 christos { Bad_Opcode },
8839 1.1 christos { Bad_Opcode },
8840 1.1 christos { Bad_Opcode },
8841 1.1 christos /* d8 */
8842 1.1 christos { Bad_Opcode },
8843 1.1 christos { Bad_Opcode },
8844 1.1 christos { Bad_Opcode },
8845 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8846 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8847 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8848 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8849 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
8850 1.1 christos /* e0 */
8851 1.1 christos { Bad_Opcode },
8852 1.1 christos { Bad_Opcode },
8853 1.1 christos { Bad_Opcode },
8854 1.1 christos { Bad_Opcode },
8855 1.1 christos { Bad_Opcode },
8856 1.1 christos { Bad_Opcode },
8857 1.1 christos { Bad_Opcode },
8858 1.1 christos { Bad_Opcode },
8859 1.1 christos /* e8 */
8860 1.1 christos { Bad_Opcode },
8861 1.1 christos { Bad_Opcode },
8862 1.1 christos { Bad_Opcode },
8863 1.1 christos { Bad_Opcode },
8864 1.1 christos { Bad_Opcode },
8865 1.1 christos { Bad_Opcode },
8866 1.1 christos { Bad_Opcode },
8867 1.1 christos { Bad_Opcode },
8868 1.1 christos /* f0 */
8869 1.1 christos { Bad_Opcode },
8870 1.1 christos { Bad_Opcode },
8871 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8872 1.1 christos { REG_TABLE (REG_VEX_0F38F3) },
8873 1.1 christos { Bad_Opcode },
8874 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8875 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
8876 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
8877 1.1 christos /* f8 */
8878 1.1 christos { Bad_Opcode },
8879 1.1 christos { Bad_Opcode },
8880 1.1 christos { Bad_Opcode },
8881 1.1 christos { Bad_Opcode },
8882 1.1 christos { Bad_Opcode },
8883 1.1 christos { Bad_Opcode },
8884 1.1 christos { Bad_Opcode },
8885 1.1 christos { Bad_Opcode },
8886 1.1 christos },
8887 1.1 christos /* VEX_0F3A */
8888 1.1 christos {
8889 1.1 christos /* 00 */
8890 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
8891 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
8892 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
8893 1.1 christos { Bad_Opcode },
8894 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
8895 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
8896 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
8897 1.1 christos { Bad_Opcode },
8898 1.1 christos /* 08 */
8899 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
8900 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
8901 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
8902 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
8903 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
8904 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
8905 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
8906 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
8907 1.1 christos /* 10 */
8908 1.1 christos { Bad_Opcode },
8909 1.1 christos { Bad_Opcode },
8910 1.1 christos { Bad_Opcode },
8911 1.1 christos { Bad_Opcode },
8912 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
8913 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
8914 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
8915 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
8916 1.1 christos /* 18 */
8917 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
8918 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
8919 1.1 christos { Bad_Opcode },
8920 1.1 christos { Bad_Opcode },
8921 1.1 christos { Bad_Opcode },
8922 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
8923 1.1 christos { Bad_Opcode },
8924 1.1 christos { Bad_Opcode },
8925 1.1 christos /* 20 */
8926 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
8927 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
8928 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
8929 1.1 christos { Bad_Opcode },
8930 1.1 christos { Bad_Opcode },
8931 1.1 christos { Bad_Opcode },
8932 1.1 christos { Bad_Opcode },
8933 1.1 christos { Bad_Opcode },
8934 1.1 christos /* 28 */
8935 1.1 christos { Bad_Opcode },
8936 1.1 christos { Bad_Opcode },
8937 1.1 christos { Bad_Opcode },
8938 1.1 christos { Bad_Opcode },
8939 1.1 christos { Bad_Opcode },
8940 1.1 christos { Bad_Opcode },
8941 1.1 christos { Bad_Opcode },
8942 1.1 christos { Bad_Opcode },
8943 1.1 christos /* 30 */
8944 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3A30) },
8945 1.1 christos { Bad_Opcode },
8946 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3A32) },
8947 1.1 christos { Bad_Opcode },
8948 1.1 christos { Bad_Opcode },
8949 1.1 christos { Bad_Opcode },
8950 1.1 christos { Bad_Opcode },
8951 1.1 christos { Bad_Opcode },
8952 1.1 christos /* 38 */
8953 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
8954 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
8955 1.1 christos { Bad_Opcode },
8956 1.1 christos { Bad_Opcode },
8957 1.1 christos { Bad_Opcode },
8958 1.1 christos { Bad_Opcode },
8959 1.1 christos { Bad_Opcode },
8960 1.1 christos { Bad_Opcode },
8961 1.1 christos /* 40 */
8962 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
8963 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
8964 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
8965 1.1 christos { Bad_Opcode },
8966 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
8967 1.1 christos { Bad_Opcode },
8968 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
8969 1.1 christos { Bad_Opcode },
8970 1.1 christos /* 48 */
8971 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
8972 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
8973 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
8974 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
8975 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
8976 1.1 christos { Bad_Opcode },
8977 1.1 christos { Bad_Opcode },
8978 1.1 christos { Bad_Opcode },
8979 1.1 christos /* 50 */
8980 1.1 christos { Bad_Opcode },
8981 1.1 christos { Bad_Opcode },
8982 1.1 christos { Bad_Opcode },
8983 1.1 christos { Bad_Opcode },
8984 1.1 christos { Bad_Opcode },
8985 1.1 christos { Bad_Opcode },
8986 1.1 christos { Bad_Opcode },
8987 1.1 christos { Bad_Opcode },
8988 1.1 christos /* 58 */
8989 1.1 christos { Bad_Opcode },
8990 1.1 christos { Bad_Opcode },
8991 1.1 christos { Bad_Opcode },
8992 1.1 christos { Bad_Opcode },
8993 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
8994 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
8995 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
8996 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
8997 1.1 christos /* 60 */
8998 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
8999 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
9000 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
9001 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
9002 1.1 christos { Bad_Opcode },
9003 1.1 christos { Bad_Opcode },
9004 1.1 christos { Bad_Opcode },
9005 1.1 christos { Bad_Opcode },
9006 1.1 christos /* 68 */
9007 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
9008 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
9009 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
9010 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
9011 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
9012 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
9013 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
9014 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
9015 1.1 christos /* 70 */
9016 1.1 christos { Bad_Opcode },
9017 1.1 christos { Bad_Opcode },
9018 1.1 christos { Bad_Opcode },
9019 1.1 christos { Bad_Opcode },
9020 1.1 christos { Bad_Opcode },
9021 1.1 christos { Bad_Opcode },
9022 1.1 christos { Bad_Opcode },
9023 1.1 christos { Bad_Opcode },
9024 1.1 christos /* 78 */
9025 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
9026 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
9027 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
9028 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
9029 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
9030 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
9031 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
9032 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
9033 1.1 christos /* 80 */
9034 1.1 christos { Bad_Opcode },
9035 1.1 christos { Bad_Opcode },
9036 1.1 christos { Bad_Opcode },
9037 1.1 christos { Bad_Opcode },
9038 1.1 christos { Bad_Opcode },
9039 1.1 christos { Bad_Opcode },
9040 1.1 christos { Bad_Opcode },
9041 1.1 christos { Bad_Opcode },
9042 1.1 christos /* 88 */
9043 1.1 christos { Bad_Opcode },
9044 1.1 christos { Bad_Opcode },
9045 1.1 christos { Bad_Opcode },
9046 1.1 christos { Bad_Opcode },
9047 1.1 christos { Bad_Opcode },
9048 1.1 christos { Bad_Opcode },
9049 1.1 christos { Bad_Opcode },
9050 1.1 christos { Bad_Opcode },
9051 1.1 christos /* 90 */
9052 1.1 christos { Bad_Opcode },
9053 1.1 christos { Bad_Opcode },
9054 1.1 christos { Bad_Opcode },
9055 1.1 christos { Bad_Opcode },
9056 1.1 christos { Bad_Opcode },
9057 1.1 christos { Bad_Opcode },
9058 1.1 christos { Bad_Opcode },
9059 1.1 christos { Bad_Opcode },
9060 1.1 christos /* 98 */
9061 1.1 christos { Bad_Opcode },
9062 1.1 christos { Bad_Opcode },
9063 1.1 christos { Bad_Opcode },
9064 1.1 christos { Bad_Opcode },
9065 1.1 christos { Bad_Opcode },
9066 1.1 christos { Bad_Opcode },
9067 1.1 christos { Bad_Opcode },
9068 1.1 christos { Bad_Opcode },
9069 1.1 christos /* a0 */
9070 1.1 christos { Bad_Opcode },
9071 1.1 christos { Bad_Opcode },
9072 1.1 christos { Bad_Opcode },
9073 1.1 christos { Bad_Opcode },
9074 1.1 christos { Bad_Opcode },
9075 1.1 christos { Bad_Opcode },
9076 1.1 christos { Bad_Opcode },
9077 1.1 christos { Bad_Opcode },
9078 1.1 christos /* a8 */
9079 1.1 christos { Bad_Opcode },
9080 1.1 christos { Bad_Opcode },
9081 1.1 christos { Bad_Opcode },
9082 1.1 christos { Bad_Opcode },
9083 1.1 christos { Bad_Opcode },
9084 1.1 christos { Bad_Opcode },
9085 1.1 christos { Bad_Opcode },
9086 1.1 christos { Bad_Opcode },
9087 1.1 christos /* b0 */
9088 1.1 christos { Bad_Opcode },
9089 1.1 christos { Bad_Opcode },
9090 1.1 christos { Bad_Opcode },
9091 1.1 christos { Bad_Opcode },
9092 1.1 christos { Bad_Opcode },
9093 1.1 christos { Bad_Opcode },
9094 1.1 christos { Bad_Opcode },
9095 1.1 christos { Bad_Opcode },
9096 1.1 christos /* b8 */
9097 1.1 christos { Bad_Opcode },
9098 1.1 christos { Bad_Opcode },
9099 1.1 christos { Bad_Opcode },
9100 1.1 christos { Bad_Opcode },
9101 1.1 christos { Bad_Opcode },
9102 1.1 christos { Bad_Opcode },
9103 1.1 christos { Bad_Opcode },
9104 1.1 christos { Bad_Opcode },
9105 1.1 christos /* c0 */
9106 1.1 christos { Bad_Opcode },
9107 1.1 christos { Bad_Opcode },
9108 1.1 christos { Bad_Opcode },
9109 1.1 christos { Bad_Opcode },
9110 1.1 christos { Bad_Opcode },
9111 1.1 christos { Bad_Opcode },
9112 1.1 christos { Bad_Opcode },
9113 1.1 christos { Bad_Opcode },
9114 1.1 christos /* c8 */
9115 1.1 christos { Bad_Opcode },
9116 1.1 christos { Bad_Opcode },
9117 1.1 christos { Bad_Opcode },
9118 1.1 christos { Bad_Opcode },
9119 1.1 christos { Bad_Opcode },
9120 1.1 christos { Bad_Opcode },
9121 1.1 christos { Bad_Opcode },
9122 1.1 christos { Bad_Opcode },
9123 1.1 christos /* d0 */
9124 1.1 christos { Bad_Opcode },
9125 1.1 christos { Bad_Opcode },
9126 1.1 christos { Bad_Opcode },
9127 1.1 christos { Bad_Opcode },
9128 1.1 christos { Bad_Opcode },
9129 1.1 christos { Bad_Opcode },
9130 1.1 christos { Bad_Opcode },
9131 1.1 christos { Bad_Opcode },
9132 1.1 christos /* d8 */
9133 1.1 christos { Bad_Opcode },
9134 1.1 christos { Bad_Opcode },
9135 1.1 christos { Bad_Opcode },
9136 1.1 christos { Bad_Opcode },
9137 1.1 christos { Bad_Opcode },
9138 1.1 christos { Bad_Opcode },
9139 1.1 christos { Bad_Opcode },
9140 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
9141 1.1 christos /* e0 */
9142 1.1 christos { Bad_Opcode },
9143 1.1 christos { Bad_Opcode },
9144 1.1 christos { Bad_Opcode },
9145 1.1 christos { Bad_Opcode },
9146 1.1 christos { Bad_Opcode },
9147 1.1 christos { Bad_Opcode },
9148 1.1 christos { Bad_Opcode },
9149 1.1 christos { Bad_Opcode },
9150 1.1 christos /* e8 */
9151 1.1 christos { Bad_Opcode },
9152 1.1 christos { Bad_Opcode },
9153 1.1 christos { Bad_Opcode },
9154 1.1 christos { Bad_Opcode },
9155 1.1 christos { Bad_Opcode },
9156 1.1 christos { Bad_Opcode },
9157 1.1 christos { Bad_Opcode },
9158 1.1 christos { Bad_Opcode },
9159 1.1 christos /* f0 */
9160 1.1.1.1.8.1 tls { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
9161 1.1 christos { Bad_Opcode },
9162 1.1 christos { Bad_Opcode },
9163 1.1 christos { Bad_Opcode },
9164 1.1 christos { Bad_Opcode },
9165 1.1 christos { Bad_Opcode },
9166 1.1 christos { Bad_Opcode },
9167 1.1 christos { Bad_Opcode },
9168 1.1 christos /* f8 */
9169 1.1 christos { Bad_Opcode },
9170 1.1 christos { Bad_Opcode },
9171 1.1 christos { Bad_Opcode },
9172 1.1 christos { Bad_Opcode },
9173 1.1 christos { Bad_Opcode },
9174 1.1 christos { Bad_Opcode },
9175 1.1 christos { Bad_Opcode },
9176 1.1 christos { Bad_Opcode },
9177 1.1 christos },
9178 1.1 christos };
9179 1.1 christos
9180 1.1.1.1.8.1 tls #define NEED_OPCODE_TABLE
9181 1.1.1.1.8.1 tls #include "i386-dis-evex.h"
9182 1.1.1.1.8.1 tls #undef NEED_OPCODE_TABLE
9183 1.1 christos static const struct dis386 vex_len_table[][2] = {
9184 1.1 christos /* VEX_LEN_0F10_P_1 */
9185 1.1 christos {
9186 1.1 christos { VEX_W_TABLE (VEX_W_0F10_P_1) },
9187 1.1 christos { VEX_W_TABLE (VEX_W_0F10_P_1) },
9188 1.1 christos },
9189 1.1 christos
9190 1.1 christos /* VEX_LEN_0F10_P_3 */
9191 1.1 christos {
9192 1.1 christos { VEX_W_TABLE (VEX_W_0F10_P_3) },
9193 1.1 christos { VEX_W_TABLE (VEX_W_0F10_P_3) },
9194 1.1 christos },
9195 1.1 christos
9196 1.1 christos /* VEX_LEN_0F11_P_1 */
9197 1.1 christos {
9198 1.1 christos { VEX_W_TABLE (VEX_W_0F11_P_1) },
9199 1.1 christos { VEX_W_TABLE (VEX_W_0F11_P_1) },
9200 1.1 christos },
9201 1.1 christos
9202 1.1 christos /* VEX_LEN_0F11_P_3 */
9203 1.1 christos {
9204 1.1 christos { VEX_W_TABLE (VEX_W_0F11_P_3) },
9205 1.1 christos { VEX_W_TABLE (VEX_W_0F11_P_3) },
9206 1.1 christos },
9207 1.1 christos
9208 1.1 christos /* VEX_LEN_0F12_P_0_M_0 */
9209 1.1 christos {
9210 1.1 christos { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
9211 1.1 christos },
9212 1.1 christos
9213 1.1 christos /* VEX_LEN_0F12_P_0_M_1 */
9214 1.1 christos {
9215 1.1 christos { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
9216 1.1 christos },
9217 1.1 christos
9218 1.1 christos /* VEX_LEN_0F12_P_2 */
9219 1.1 christos {
9220 1.1 christos { VEX_W_TABLE (VEX_W_0F12_P_2) },
9221 1.1 christos },
9222 1.1 christos
9223 1.1 christos /* VEX_LEN_0F13_M_0 */
9224 1.1 christos {
9225 1.1 christos { VEX_W_TABLE (VEX_W_0F13_M_0) },
9226 1.1 christos },
9227 1.1 christos
9228 1.1 christos /* VEX_LEN_0F16_P_0_M_0 */
9229 1.1 christos {
9230 1.1 christos { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
9231 1.1 christos },
9232 1.1 christos
9233 1.1 christos /* VEX_LEN_0F16_P_0_M_1 */
9234 1.1 christos {
9235 1.1 christos { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
9236 1.1 christos },
9237 1.1 christos
9238 1.1 christos /* VEX_LEN_0F16_P_2 */
9239 1.1 christos {
9240 1.1 christos { VEX_W_TABLE (VEX_W_0F16_P_2) },
9241 1.1 christos },
9242 1.1 christos
9243 1.1 christos /* VEX_LEN_0F17_M_0 */
9244 1.1 christos {
9245 1.1 christos { VEX_W_TABLE (VEX_W_0F17_M_0) },
9246 1.1 christos },
9247 1.1 christos
9248 1.1 christos /* VEX_LEN_0F2A_P_1 */
9249 1.1 christos {
9250 1.1 christos { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
9251 1.1 christos { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
9252 1.1 christos },
9253 1.1 christos
9254 1.1 christos /* VEX_LEN_0F2A_P_3 */
9255 1.1 christos {
9256 1.1 christos { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
9257 1.1 christos { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
9258 1.1 christos },
9259 1.1 christos
9260 1.1 christos /* VEX_LEN_0F2C_P_1 */
9261 1.1 christos {
9262 1.1 christos { "vcvttss2siY", { Gv, EXdScalar } },
9263 1.1 christos { "vcvttss2siY", { Gv, EXdScalar } },
9264 1.1 christos },
9265 1.1 christos
9266 1.1 christos /* VEX_LEN_0F2C_P_3 */
9267 1.1 christos {
9268 1.1 christos { "vcvttsd2siY", { Gv, EXqScalar } },
9269 1.1 christos { "vcvttsd2siY", { Gv, EXqScalar } },
9270 1.1 christos },
9271 1.1 christos
9272 1.1 christos /* VEX_LEN_0F2D_P_1 */
9273 1.1 christos {
9274 1.1 christos { "vcvtss2siY", { Gv, EXdScalar } },
9275 1.1 christos { "vcvtss2siY", { Gv, EXdScalar } },
9276 1.1 christos },
9277 1.1 christos
9278 1.1 christos /* VEX_LEN_0F2D_P_3 */
9279 1.1 christos {
9280 1.1 christos { "vcvtsd2siY", { Gv, EXqScalar } },
9281 1.1 christos { "vcvtsd2siY", { Gv, EXqScalar } },
9282 1.1 christos },
9283 1.1 christos
9284 1.1 christos /* VEX_LEN_0F2E_P_0 */
9285 1.1 christos {
9286 1.1 christos { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9287 1.1 christos { VEX_W_TABLE (VEX_W_0F2E_P_0) },
9288 1.1 christos },
9289 1.1 christos
9290 1.1 christos /* VEX_LEN_0F2E_P_2 */
9291 1.1 christos {
9292 1.1 christos { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9293 1.1 christos { VEX_W_TABLE (VEX_W_0F2E_P_2) },
9294 1.1 christos },
9295 1.1 christos
9296 1.1 christos /* VEX_LEN_0F2F_P_0 */
9297 1.1 christos {
9298 1.1 christos { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9299 1.1 christos { VEX_W_TABLE (VEX_W_0F2F_P_0) },
9300 1.1 christos },
9301 1.1 christos
9302 1.1 christos /* VEX_LEN_0F2F_P_2 */
9303 1.1 christos {
9304 1.1 christos { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9305 1.1 christos { VEX_W_TABLE (VEX_W_0F2F_P_2) },
9306 1.1 christos },
9307 1.1 christos
9308 1.1.1.1.8.1 tls /* VEX_LEN_0F41_P_0 */
9309 1.1.1.1.8.1 tls {
9310 1.1.1.1.8.1 tls { Bad_Opcode },
9311 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F41_P_0_LEN_1) },
9312 1.1.1.1.8.1 tls },
9313 1.1.1.1.8.1 tls /* VEX_LEN_0F42_P_0 */
9314 1.1.1.1.8.1 tls {
9315 1.1.1.1.8.1 tls { Bad_Opcode },
9316 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F42_P_0_LEN_1) },
9317 1.1.1.1.8.1 tls },
9318 1.1.1.1.8.1 tls /* VEX_LEN_0F44_P_0 */
9319 1.1.1.1.8.1 tls {
9320 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F44_P_0_LEN_0) },
9321 1.1.1.1.8.1 tls },
9322 1.1.1.1.8.1 tls /* VEX_LEN_0F45_P_0 */
9323 1.1.1.1.8.1 tls {
9324 1.1.1.1.8.1 tls { Bad_Opcode },
9325 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F45_P_0_LEN_1) },
9326 1.1.1.1.8.1 tls },
9327 1.1.1.1.8.1 tls /* VEX_LEN_0F46_P_0 */
9328 1.1.1.1.8.1 tls {
9329 1.1.1.1.8.1 tls { Bad_Opcode },
9330 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F46_P_0_LEN_1) },
9331 1.1.1.1.8.1 tls },
9332 1.1.1.1.8.1 tls /* VEX_LEN_0F47_P_0 */
9333 1.1.1.1.8.1 tls {
9334 1.1.1.1.8.1 tls { Bad_Opcode },
9335 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F47_P_0_LEN_1) },
9336 1.1.1.1.8.1 tls },
9337 1.1.1.1.8.1 tls /* VEX_LEN_0F4B_P_2 */
9338 1.1.1.1.8.1 tls {
9339 1.1.1.1.8.1 tls { Bad_Opcode },
9340 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F4B_P_2_LEN_1) },
9341 1.1.1.1.8.1 tls },
9342 1.1.1.1.8.1 tls
9343 1.1 christos /* VEX_LEN_0F51_P_1 */
9344 1.1 christos {
9345 1.1 christos { VEX_W_TABLE (VEX_W_0F51_P_1) },
9346 1.1 christos { VEX_W_TABLE (VEX_W_0F51_P_1) },
9347 1.1 christos },
9348 1.1 christos
9349 1.1 christos /* VEX_LEN_0F51_P_3 */
9350 1.1 christos {
9351 1.1 christos { VEX_W_TABLE (VEX_W_0F51_P_3) },
9352 1.1 christos { VEX_W_TABLE (VEX_W_0F51_P_3) },
9353 1.1 christos },
9354 1.1 christos
9355 1.1 christos /* VEX_LEN_0F52_P_1 */
9356 1.1 christos {
9357 1.1 christos { VEX_W_TABLE (VEX_W_0F52_P_1) },
9358 1.1 christos { VEX_W_TABLE (VEX_W_0F52_P_1) },
9359 1.1 christos },
9360 1.1 christos
9361 1.1 christos /* VEX_LEN_0F53_P_1 */
9362 1.1 christos {
9363 1.1 christos { VEX_W_TABLE (VEX_W_0F53_P_1) },
9364 1.1 christos { VEX_W_TABLE (VEX_W_0F53_P_1) },
9365 1.1 christos },
9366 1.1 christos
9367 1.1 christos /* VEX_LEN_0F58_P_1 */
9368 1.1 christos {
9369 1.1 christos { VEX_W_TABLE (VEX_W_0F58_P_1) },
9370 1.1 christos { VEX_W_TABLE (VEX_W_0F58_P_1) },
9371 1.1 christos },
9372 1.1 christos
9373 1.1 christos /* VEX_LEN_0F58_P_3 */
9374 1.1 christos {
9375 1.1 christos { VEX_W_TABLE (VEX_W_0F58_P_3) },
9376 1.1 christos { VEX_W_TABLE (VEX_W_0F58_P_3) },
9377 1.1 christos },
9378 1.1 christos
9379 1.1 christos /* VEX_LEN_0F59_P_1 */
9380 1.1 christos {
9381 1.1 christos { VEX_W_TABLE (VEX_W_0F59_P_1) },
9382 1.1 christos { VEX_W_TABLE (VEX_W_0F59_P_1) },
9383 1.1 christos },
9384 1.1 christos
9385 1.1 christos /* VEX_LEN_0F59_P_3 */
9386 1.1 christos {
9387 1.1 christos { VEX_W_TABLE (VEX_W_0F59_P_3) },
9388 1.1 christos { VEX_W_TABLE (VEX_W_0F59_P_3) },
9389 1.1 christos },
9390 1.1 christos
9391 1.1 christos /* VEX_LEN_0F5A_P_1 */
9392 1.1 christos {
9393 1.1 christos { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9394 1.1 christos { VEX_W_TABLE (VEX_W_0F5A_P_1) },
9395 1.1 christos },
9396 1.1 christos
9397 1.1 christos /* VEX_LEN_0F5A_P_3 */
9398 1.1 christos {
9399 1.1 christos { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9400 1.1 christos { VEX_W_TABLE (VEX_W_0F5A_P_3) },
9401 1.1 christos },
9402 1.1 christos
9403 1.1 christos /* VEX_LEN_0F5C_P_1 */
9404 1.1 christos {
9405 1.1 christos { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9406 1.1 christos { VEX_W_TABLE (VEX_W_0F5C_P_1) },
9407 1.1 christos },
9408 1.1 christos
9409 1.1 christos /* VEX_LEN_0F5C_P_3 */
9410 1.1 christos {
9411 1.1 christos { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9412 1.1 christos { VEX_W_TABLE (VEX_W_0F5C_P_3) },
9413 1.1 christos },
9414 1.1 christos
9415 1.1 christos /* VEX_LEN_0F5D_P_1 */
9416 1.1 christos {
9417 1.1 christos { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9418 1.1 christos { VEX_W_TABLE (VEX_W_0F5D_P_1) },
9419 1.1 christos },
9420 1.1 christos
9421 1.1 christos /* VEX_LEN_0F5D_P_3 */
9422 1.1 christos {
9423 1.1 christos { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9424 1.1 christos { VEX_W_TABLE (VEX_W_0F5D_P_3) },
9425 1.1 christos },
9426 1.1 christos
9427 1.1 christos /* VEX_LEN_0F5E_P_1 */
9428 1.1 christos {
9429 1.1 christos { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9430 1.1 christos { VEX_W_TABLE (VEX_W_0F5E_P_1) },
9431 1.1 christos },
9432 1.1 christos
9433 1.1 christos /* VEX_LEN_0F5E_P_3 */
9434 1.1 christos {
9435 1.1 christos { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9436 1.1 christos { VEX_W_TABLE (VEX_W_0F5E_P_3) },
9437 1.1 christos },
9438 1.1 christos
9439 1.1 christos /* VEX_LEN_0F5F_P_1 */
9440 1.1 christos {
9441 1.1 christos { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9442 1.1 christos { VEX_W_TABLE (VEX_W_0F5F_P_1) },
9443 1.1 christos },
9444 1.1 christos
9445 1.1 christos /* VEX_LEN_0F5F_P_3 */
9446 1.1 christos {
9447 1.1 christos { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9448 1.1 christos { VEX_W_TABLE (VEX_W_0F5F_P_3) },
9449 1.1 christos },
9450 1.1 christos
9451 1.1.1.1.8.1 tls /* VEX_LEN_0F6E_P_2 */
9452 1.1 christos {
9453 1.1.1.1.8.1 tls { "vmovK", { XMScalar, Edq } },
9454 1.1.1.1.8.1 tls { "vmovK", { XMScalar, Edq } },
9455 1.1 christos },
9456 1.1 christos
9457 1.1.1.1.8.1 tls /* VEX_LEN_0F7E_P_1 */
9458 1.1 christos {
9459 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9460 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F7E_P_1) },
9461 1.1 christos },
9462 1.1 christos
9463 1.1.1.1.8.1 tls /* VEX_LEN_0F7E_P_2 */
9464 1.1 christos {
9465 1.1.1.1.8.1 tls { "vmovK", { Edq, XMScalar } },
9466 1.1.1.1.8.1 tls { "vmovK", { Edq, XMScalar } },
9467 1.1 christos },
9468 1.1 christos
9469 1.1.1.1.8.1 tls /* VEX_LEN_0F90_P_0 */
9470 1.1 christos {
9471 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F90_P_0_LEN_0) },
9472 1.1 christos },
9473 1.1 christos
9474 1.1.1.1.8.1 tls /* VEX_LEN_0F91_P_0 */
9475 1.1 christos {
9476 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F91_P_0_LEN_0) },
9477 1.1 christos },
9478 1.1 christos
9479 1.1.1.1.8.1 tls /* VEX_LEN_0F92_P_0 */
9480 1.1 christos {
9481 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F92_P_0_LEN_0) },
9482 1.1 christos },
9483 1.1 christos
9484 1.1.1.1.8.1 tls /* VEX_LEN_0F93_P_0 */
9485 1.1 christos {
9486 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F93_P_0_LEN_0) },
9487 1.1 christos },
9488 1.1 christos
9489 1.1.1.1.8.1 tls /* VEX_LEN_0F98_P_0 */
9490 1.1 christos {
9491 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F98_P_0_LEN_0) },
9492 1.1 christos },
9493 1.1 christos
9494 1.1.1.1.8.1 tls /* VEX_LEN_0FAE_R_2_M_0 */
9495 1.1 christos {
9496 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
9497 1.1 christos },
9498 1.1 christos
9499 1.1.1.1.8.1 tls /* VEX_LEN_0FAE_R_3_M_0 */
9500 1.1 christos {
9501 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
9502 1.1 christos },
9503 1.1 christos
9504 1.1.1.1.8.1 tls /* VEX_LEN_0FC2_P_1 */
9505 1.1 christos {
9506 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9507 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FC2_P_1) },
9508 1.1 christos },
9509 1.1 christos
9510 1.1.1.1.8.1 tls /* VEX_LEN_0FC2_P_3 */
9511 1.1 christos {
9512 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9513 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FC2_P_3) },
9514 1.1 christos },
9515 1.1 christos
9516 1.1.1.1.8.1 tls /* VEX_LEN_0FC4_P_2 */
9517 1.1 christos {
9518 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FC4_P_2) },
9519 1.1 christos },
9520 1.1 christos
9521 1.1.1.1.8.1 tls /* VEX_LEN_0FC5_P_2 */
9522 1.1 christos {
9523 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FC5_P_2) },
9524 1.1 christos },
9525 1.1 christos
9526 1.1.1.1.8.1 tls /* VEX_LEN_0FD6_P_2 */
9527 1.1 christos {
9528 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9529 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FD6_P_2) },
9530 1.1 christos },
9531 1.1 christos
9532 1.1.1.1.8.1 tls /* VEX_LEN_0FF7_P_2 */
9533 1.1 christos {
9534 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FF7_P_2) },
9535 1.1 christos },
9536 1.1 christos
9537 1.1.1.1.8.1 tls /* VEX_LEN_0F3816_P_2 */
9538 1.1 christos {
9539 1.1.1.1.8.1 tls { Bad_Opcode },
9540 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3816_P_2) },
9541 1.1 christos },
9542 1.1 christos
9543 1.1.1.1.8.1 tls /* VEX_LEN_0F3819_P_2 */
9544 1.1 christos {
9545 1.1 christos { Bad_Opcode },
9546 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3819_P_2) },
9547 1.1 christos },
9548 1.1 christos
9549 1.1 christos /* VEX_LEN_0F381A_P_2_M_0 */
9550 1.1 christos {
9551 1.1 christos { Bad_Opcode },
9552 1.1 christos { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
9553 1.1 christos },
9554 1.1 christos
9555 1.1.1.1.8.1 tls /* VEX_LEN_0F3836_P_2 */
9556 1.1 christos {
9557 1.1.1.1.8.1 tls { Bad_Opcode },
9558 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3836_P_2) },
9559 1.1 christos },
9560 1.1 christos
9561 1.1.1.1.8.1 tls /* VEX_LEN_0F3841_P_2 */
9562 1.1 christos {
9563 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3841_P_2) },
9564 1.1 christos },
9565 1.1 christos
9566 1.1.1.1.8.1 tls /* VEX_LEN_0F385A_P_2_M_0 */
9567 1.1 christos {
9568 1.1.1.1.8.1 tls { Bad_Opcode },
9569 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
9570 1.1 christos },
9571 1.1 christos
9572 1.1.1.1.8.1 tls /* VEX_LEN_0F38DB_P_2 */
9573 1.1 christos {
9574 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
9575 1.1 christos },
9576 1.1 christos
9577 1.1.1.1.8.1 tls /* VEX_LEN_0F38DC_P_2 */
9578 1.1 christos {
9579 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
9580 1.1 christos },
9581 1.1 christos
9582 1.1.1.1.8.1 tls /* VEX_LEN_0F38DD_P_2 */
9583 1.1 christos {
9584 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
9585 1.1 christos },
9586 1.1 christos
9587 1.1.1.1.8.1 tls /* VEX_LEN_0F38DE_P_2 */
9588 1.1 christos {
9589 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
9590 1.1 christos },
9591 1.1 christos
9592 1.1.1.1.8.1 tls /* VEX_LEN_0F38DF_P_2 */
9593 1.1 christos {
9594 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
9595 1.1 christos },
9596 1.1 christos
9597 1.1.1.1.8.1 tls /* VEX_LEN_0F38F2_P_0 */
9598 1.1 christos {
9599 1.1.1.1.8.1 tls { "andnS", { Gdq, VexGdq, Edq } },
9600 1.1 christos },
9601 1.1 christos
9602 1.1.1.1.8.1 tls /* VEX_LEN_0F38F3_R_1_P_0 */
9603 1.1 christos {
9604 1.1.1.1.8.1 tls { "blsrS", { VexGdq, Edq } },
9605 1.1 christos },
9606 1.1 christos
9607 1.1.1.1.8.1 tls /* VEX_LEN_0F38F3_R_2_P_0 */
9608 1.1 christos {
9609 1.1.1.1.8.1 tls { "blsmskS", { VexGdq, Edq } },
9610 1.1 christos },
9611 1.1 christos
9612 1.1.1.1.8.1 tls /* VEX_LEN_0F38F3_R_3_P_0 */
9613 1.1 christos {
9614 1.1.1.1.8.1 tls { "blsiS", { VexGdq, Edq } },
9615 1.1 christos },
9616 1.1 christos
9617 1.1.1.1.8.1 tls /* VEX_LEN_0F38F5_P_0 */
9618 1.1 christos {
9619 1.1.1.1.8.1 tls { "bzhiS", { Gdq, Edq, VexGdq } },
9620 1.1 christos },
9621 1.1 christos
9622 1.1.1.1.8.1 tls /* VEX_LEN_0F38F5_P_1 */
9623 1.1 christos {
9624 1.1.1.1.8.1 tls { "pextS", { Gdq, VexGdq, Edq } },
9625 1.1 christos },
9626 1.1 christos
9627 1.1.1.1.8.1 tls /* VEX_LEN_0F38F5_P_3 */
9628 1.1 christos {
9629 1.1.1.1.8.1 tls { "pdepS", { Gdq, VexGdq, Edq } },
9630 1.1 christos },
9631 1.1 christos
9632 1.1.1.1.8.1 tls /* VEX_LEN_0F38F6_P_3 */
9633 1.1 christos {
9634 1.1.1.1.8.1 tls { "mulxS", { Gdq, VexGdq, Edq } },
9635 1.1 christos },
9636 1.1 christos
9637 1.1.1.1.8.1 tls /* VEX_LEN_0F38F7_P_0 */
9638 1.1 christos {
9639 1.1.1.1.8.1 tls { "bextrS", { Gdq, Edq, VexGdq } },
9640 1.1 christos },
9641 1.1 christos
9642 1.1.1.1.8.1 tls /* VEX_LEN_0F38F7_P_1 */
9643 1.1 christos {
9644 1.1.1.1.8.1 tls { "sarxS", { Gdq, Edq, VexGdq } },
9645 1.1 christos },
9646 1.1 christos
9647 1.1.1.1.8.1 tls /* VEX_LEN_0F38F7_P_2 */
9648 1.1 christos {
9649 1.1.1.1.8.1 tls { "shlxS", { Gdq, Edq, VexGdq } },
9650 1.1 christos },
9651 1.1 christos
9652 1.1.1.1.8.1 tls /* VEX_LEN_0F38F7_P_3 */
9653 1.1 christos {
9654 1.1.1.1.8.1 tls { "shrxS", { Gdq, Edq, VexGdq } },
9655 1.1 christos },
9656 1.1 christos
9657 1.1.1.1.8.1 tls /* VEX_LEN_0F3A00_P_2 */
9658 1.1 christos {
9659 1.1.1.1.8.1 tls { Bad_Opcode },
9660 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
9661 1.1 christos },
9662 1.1 christos
9663 1.1.1.1.8.1 tls /* VEX_LEN_0F3A01_P_2 */
9664 1.1 christos {
9665 1.1.1.1.8.1 tls { Bad_Opcode },
9666 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
9667 1.1 christos },
9668 1.1 christos
9669 1.1 christos /* VEX_LEN_0F3A06_P_2 */
9670 1.1 christos {
9671 1.1 christos { Bad_Opcode },
9672 1.1 christos { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
9673 1.1 christos },
9674 1.1 christos
9675 1.1 christos /* VEX_LEN_0F3A0A_P_2 */
9676 1.1 christos {
9677 1.1 christos { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
9678 1.1 christos { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
9679 1.1 christos },
9680 1.1 christos
9681 1.1 christos /* VEX_LEN_0F3A0B_P_2 */
9682 1.1 christos {
9683 1.1 christos { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
9684 1.1 christos { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
9685 1.1 christos },
9686 1.1 christos
9687 1.1 christos /* VEX_LEN_0F3A14_P_2 */
9688 1.1 christos {
9689 1.1 christos { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
9690 1.1 christos },
9691 1.1 christos
9692 1.1 christos /* VEX_LEN_0F3A15_P_2 */
9693 1.1 christos {
9694 1.1 christos { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
9695 1.1 christos },
9696 1.1 christos
9697 1.1 christos /* VEX_LEN_0F3A16_P_2 */
9698 1.1 christos {
9699 1.1 christos { "vpextrK", { Edq, XM, Ib } },
9700 1.1 christos },
9701 1.1 christos
9702 1.1 christos /* VEX_LEN_0F3A17_P_2 */
9703 1.1 christos {
9704 1.1 christos { "vextractps", { Edqd, XM, Ib } },
9705 1.1 christos },
9706 1.1 christos
9707 1.1 christos /* VEX_LEN_0F3A18_P_2 */
9708 1.1 christos {
9709 1.1 christos { Bad_Opcode },
9710 1.1 christos { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
9711 1.1 christos },
9712 1.1 christos
9713 1.1 christos /* VEX_LEN_0F3A19_P_2 */
9714 1.1 christos {
9715 1.1 christos { Bad_Opcode },
9716 1.1 christos { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
9717 1.1 christos },
9718 1.1 christos
9719 1.1 christos /* VEX_LEN_0F3A20_P_2 */
9720 1.1 christos {
9721 1.1 christos { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
9722 1.1 christos },
9723 1.1 christos
9724 1.1 christos /* VEX_LEN_0F3A21_P_2 */
9725 1.1 christos {
9726 1.1 christos { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
9727 1.1 christos },
9728 1.1 christos
9729 1.1 christos /* VEX_LEN_0F3A22_P_2 */
9730 1.1 christos {
9731 1.1 christos { "vpinsrK", { XM, Vex128, Edq, Ib } },
9732 1.1 christos },
9733 1.1 christos
9734 1.1.1.1.8.1 tls /* VEX_LEN_0F3A30_P_2 */
9735 1.1 christos {
9736 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3A30_P_2_LEN_0) },
9737 1.1 christos },
9738 1.1 christos
9739 1.1.1.1.8.1 tls /* VEX_LEN_0F3A32_P_2 */
9740 1.1 christos {
9741 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3A32_P_2_LEN_0) },
9742 1.1.1.1.8.1 tls },
9743 1.1.1.1.8.1 tls
9744 1.1.1.1.8.1 tls /* VEX_LEN_0F3A38_P_2 */
9745 1.1.1.1.8.1 tls {
9746 1.1.1.1.8.1 tls { Bad_Opcode },
9747 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
9748 1.1.1.1.8.1 tls },
9749 1.1.1.1.8.1 tls
9750 1.1.1.1.8.1 tls /* VEX_LEN_0F3A39_P_2 */
9751 1.1.1.1.8.1 tls {
9752 1.1.1.1.8.1 tls { Bad_Opcode },
9753 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
9754 1.1.1.1.8.1 tls },
9755 1.1.1.1.8.1 tls
9756 1.1.1.1.8.1 tls /* VEX_LEN_0F3A41_P_2 */
9757 1.1.1.1.8.1 tls {
9758 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
9759 1.1 christos },
9760 1.1 christos
9761 1.1 christos /* VEX_LEN_0F3A44_P_2 */
9762 1.1 christos {
9763 1.1 christos { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
9764 1.1 christos },
9765 1.1 christos
9766 1.1.1.1.8.1 tls /* VEX_LEN_0F3A46_P_2 */
9767 1.1 christos {
9768 1.1.1.1.8.1 tls { Bad_Opcode },
9769 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
9770 1.1 christos },
9771 1.1 christos
9772 1.1 christos /* VEX_LEN_0F3A60_P_2 */
9773 1.1 christos {
9774 1.1 christos { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
9775 1.1 christos },
9776 1.1 christos
9777 1.1 christos /* VEX_LEN_0F3A61_P_2 */
9778 1.1 christos {
9779 1.1 christos { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
9780 1.1 christos },
9781 1.1 christos
9782 1.1 christos /* VEX_LEN_0F3A62_P_2 */
9783 1.1 christos {
9784 1.1 christos { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
9785 1.1 christos },
9786 1.1 christos
9787 1.1 christos /* VEX_LEN_0F3A63_P_2 */
9788 1.1 christos {
9789 1.1 christos { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
9790 1.1 christos },
9791 1.1 christos
9792 1.1 christos /* VEX_LEN_0F3A6A_P_2 */
9793 1.1 christos {
9794 1.1 christos { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
9795 1.1 christos },
9796 1.1 christos
9797 1.1 christos /* VEX_LEN_0F3A6B_P_2 */
9798 1.1 christos {
9799 1.1 christos { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
9800 1.1 christos },
9801 1.1 christos
9802 1.1 christos /* VEX_LEN_0F3A6E_P_2 */
9803 1.1 christos {
9804 1.1 christos { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
9805 1.1 christos },
9806 1.1 christos
9807 1.1 christos /* VEX_LEN_0F3A6F_P_2 */
9808 1.1 christos {
9809 1.1 christos { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
9810 1.1 christos },
9811 1.1 christos
9812 1.1 christos /* VEX_LEN_0F3A7A_P_2 */
9813 1.1 christos {
9814 1.1 christos { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
9815 1.1 christos },
9816 1.1 christos
9817 1.1 christos /* VEX_LEN_0F3A7B_P_2 */
9818 1.1 christos {
9819 1.1 christos { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
9820 1.1 christos },
9821 1.1 christos
9822 1.1 christos /* VEX_LEN_0F3A7E_P_2 */
9823 1.1 christos {
9824 1.1 christos { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
9825 1.1 christos },
9826 1.1 christos
9827 1.1 christos /* VEX_LEN_0F3A7F_P_2 */
9828 1.1 christos {
9829 1.1 christos { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
9830 1.1 christos },
9831 1.1 christos
9832 1.1 christos /* VEX_LEN_0F3ADF_P_2 */
9833 1.1 christos {
9834 1.1 christos { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
9835 1.1 christos },
9836 1.1 christos
9837 1.1.1.1.8.1 tls /* VEX_LEN_0F3AF0_P_3 */
9838 1.1.1.1.8.1 tls {
9839 1.1.1.1.8.1 tls { "rorxS", { Gdq, Edq, Ib } },
9840 1.1.1.1.8.1 tls },
9841 1.1.1.1.8.1 tls
9842 1.1.1.1.8.1 tls /* VEX_LEN_0FXOP_08_CC */
9843 1.1.1.1.8.1 tls {
9844 1.1.1.1.8.1 tls { "vpcomb", { XM, Vex128, EXx, Ib } },
9845 1.1.1.1.8.1 tls },
9846 1.1.1.1.8.1 tls
9847 1.1.1.1.8.1 tls /* VEX_LEN_0FXOP_08_CD */
9848 1.1.1.1.8.1 tls {
9849 1.1.1.1.8.1 tls { "vpcomw", { XM, Vex128, EXx, Ib } },
9850 1.1.1.1.8.1 tls },
9851 1.1.1.1.8.1 tls
9852 1.1.1.1.8.1 tls /* VEX_LEN_0FXOP_08_CE */
9853 1.1.1.1.8.1 tls {
9854 1.1.1.1.8.1 tls { "vpcomd", { XM, Vex128, EXx, Ib } },
9855 1.1.1.1.8.1 tls },
9856 1.1.1.1.8.1 tls
9857 1.1.1.1.8.1 tls /* VEX_LEN_0FXOP_08_CF */
9858 1.1.1.1.8.1 tls {
9859 1.1.1.1.8.1 tls { "vpcomq", { XM, Vex128, EXx, Ib } },
9860 1.1.1.1.8.1 tls },
9861 1.1.1.1.8.1 tls
9862 1.1.1.1.8.1 tls /* VEX_LEN_0FXOP_08_EC */
9863 1.1.1.1.8.1 tls {
9864 1.1.1.1.8.1 tls { "vpcomub", { XM, Vex128, EXx, Ib } },
9865 1.1.1.1.8.1 tls },
9866 1.1.1.1.8.1 tls
9867 1.1.1.1.8.1 tls /* VEX_LEN_0FXOP_08_ED */
9868 1.1.1.1.8.1 tls {
9869 1.1.1.1.8.1 tls { "vpcomuw", { XM, Vex128, EXx, Ib } },
9870 1.1.1.1.8.1 tls },
9871 1.1.1.1.8.1 tls
9872 1.1.1.1.8.1 tls /* VEX_LEN_0FXOP_08_EE */
9873 1.1.1.1.8.1 tls {
9874 1.1.1.1.8.1 tls { "vpcomud", { XM, Vex128, EXx, Ib } },
9875 1.1.1.1.8.1 tls },
9876 1.1.1.1.8.1 tls
9877 1.1.1.1.8.1 tls /* VEX_LEN_0FXOP_08_EF */
9878 1.1.1.1.8.1 tls {
9879 1.1.1.1.8.1 tls { "vpcomuq", { XM, Vex128, EXx, Ib } },
9880 1.1.1.1.8.1 tls },
9881 1.1.1.1.8.1 tls
9882 1.1 christos /* VEX_LEN_0FXOP_09_80 */
9883 1.1 christos {
9884 1.1 christos { "vfrczps", { XM, EXxmm } },
9885 1.1 christos { "vfrczps", { XM, EXymmq } },
9886 1.1 christos },
9887 1.1 christos
9888 1.1 christos /* VEX_LEN_0FXOP_09_81 */
9889 1.1 christos {
9890 1.1 christos { "vfrczpd", { XM, EXxmm } },
9891 1.1 christos { "vfrczpd", { XM, EXymmq } },
9892 1.1 christos },
9893 1.1 christos };
9894 1.1 christos
9895 1.1 christos static const struct dis386 vex_w_table[][2] = {
9896 1.1 christos {
9897 1.1 christos /* VEX_W_0F10_P_0 */
9898 1.1 christos { "vmovups", { XM, EXx } },
9899 1.1 christos },
9900 1.1 christos {
9901 1.1 christos /* VEX_W_0F10_P_1 */
9902 1.1 christos { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
9903 1.1 christos },
9904 1.1 christos {
9905 1.1 christos /* VEX_W_0F10_P_2 */
9906 1.1 christos { "vmovupd", { XM, EXx } },
9907 1.1 christos },
9908 1.1 christos {
9909 1.1 christos /* VEX_W_0F10_P_3 */
9910 1.1 christos { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
9911 1.1 christos },
9912 1.1 christos {
9913 1.1 christos /* VEX_W_0F11_P_0 */
9914 1.1 christos { "vmovups", { EXxS, XM } },
9915 1.1 christos },
9916 1.1 christos {
9917 1.1 christos /* VEX_W_0F11_P_1 */
9918 1.1 christos { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
9919 1.1 christos },
9920 1.1 christos {
9921 1.1 christos /* VEX_W_0F11_P_2 */
9922 1.1 christos { "vmovupd", { EXxS, XM } },
9923 1.1 christos },
9924 1.1 christos {
9925 1.1 christos /* VEX_W_0F11_P_3 */
9926 1.1 christos { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
9927 1.1 christos },
9928 1.1 christos {
9929 1.1 christos /* VEX_W_0F12_P_0_M_0 */
9930 1.1 christos { "vmovlps", { XM, Vex128, EXq } },
9931 1.1 christos },
9932 1.1 christos {
9933 1.1 christos /* VEX_W_0F12_P_0_M_1 */
9934 1.1 christos { "vmovhlps", { XM, Vex128, EXq } },
9935 1.1 christos },
9936 1.1 christos {
9937 1.1 christos /* VEX_W_0F12_P_1 */
9938 1.1 christos { "vmovsldup", { XM, EXx } },
9939 1.1 christos },
9940 1.1 christos {
9941 1.1 christos /* VEX_W_0F12_P_2 */
9942 1.1 christos { "vmovlpd", { XM, Vex128, EXq } },
9943 1.1 christos },
9944 1.1 christos {
9945 1.1 christos /* VEX_W_0F12_P_3 */
9946 1.1 christos { "vmovddup", { XM, EXymmq } },
9947 1.1 christos },
9948 1.1 christos {
9949 1.1 christos /* VEX_W_0F13_M_0 */
9950 1.1 christos { "vmovlpX", { EXq, XM } },
9951 1.1 christos },
9952 1.1 christos {
9953 1.1 christos /* VEX_W_0F14 */
9954 1.1 christos { "vunpcklpX", { XM, Vex, EXx } },
9955 1.1 christos },
9956 1.1 christos {
9957 1.1 christos /* VEX_W_0F15 */
9958 1.1 christos { "vunpckhpX", { XM, Vex, EXx } },
9959 1.1 christos },
9960 1.1 christos {
9961 1.1 christos /* VEX_W_0F16_P_0_M_0 */
9962 1.1 christos { "vmovhps", { XM, Vex128, EXq } },
9963 1.1 christos },
9964 1.1 christos {
9965 1.1 christos /* VEX_W_0F16_P_0_M_1 */
9966 1.1 christos { "vmovlhps", { XM, Vex128, EXq } },
9967 1.1 christos },
9968 1.1 christos {
9969 1.1 christos /* VEX_W_0F16_P_1 */
9970 1.1 christos { "vmovshdup", { XM, EXx } },
9971 1.1 christos },
9972 1.1 christos {
9973 1.1 christos /* VEX_W_0F16_P_2 */
9974 1.1 christos { "vmovhpd", { XM, Vex128, EXq } },
9975 1.1 christos },
9976 1.1 christos {
9977 1.1 christos /* VEX_W_0F17_M_0 */
9978 1.1 christos { "vmovhpX", { EXq, XM } },
9979 1.1 christos },
9980 1.1 christos {
9981 1.1 christos /* VEX_W_0F28 */
9982 1.1 christos { "vmovapX", { XM, EXx } },
9983 1.1 christos },
9984 1.1 christos {
9985 1.1 christos /* VEX_W_0F29 */
9986 1.1 christos { "vmovapX", { EXxS, XM } },
9987 1.1 christos },
9988 1.1 christos {
9989 1.1 christos /* VEX_W_0F2B_M_0 */
9990 1.1 christos { "vmovntpX", { Mx, XM } },
9991 1.1 christos },
9992 1.1 christos {
9993 1.1 christos /* VEX_W_0F2E_P_0 */
9994 1.1.1.1.8.1 tls { "vucomiss", { XMScalar, EXdScalar } },
9995 1.1 christos },
9996 1.1 christos {
9997 1.1 christos /* VEX_W_0F2E_P_2 */
9998 1.1.1.1.8.1 tls { "vucomisd", { XMScalar, EXqScalar } },
9999 1.1 christos },
10000 1.1 christos {
10001 1.1 christos /* VEX_W_0F2F_P_0 */
10002 1.1 christos { "vcomiss", { XMScalar, EXdScalar } },
10003 1.1 christos },
10004 1.1 christos {
10005 1.1 christos /* VEX_W_0F2F_P_2 */
10006 1.1 christos { "vcomisd", { XMScalar, EXqScalar } },
10007 1.1 christos },
10008 1.1 christos {
10009 1.1.1.1.8.1 tls /* VEX_W_0F41_P_0_LEN_1 */
10010 1.1.1.1.8.1 tls { "kandw", { MaskG, MaskVex, MaskR } },
10011 1.1.1.1.8.1 tls },
10012 1.1.1.1.8.1 tls {
10013 1.1.1.1.8.1 tls /* VEX_W_0F42_P_0_LEN_1 */
10014 1.1.1.1.8.1 tls { "kandnw", { MaskG, MaskVex, MaskR } },
10015 1.1.1.1.8.1 tls },
10016 1.1.1.1.8.1 tls {
10017 1.1.1.1.8.1 tls /* VEX_W_0F44_P_0_LEN_0 */
10018 1.1.1.1.8.1 tls { "knotw", { MaskG, MaskR } },
10019 1.1.1.1.8.1 tls },
10020 1.1.1.1.8.1 tls {
10021 1.1.1.1.8.1 tls /* VEX_W_0F45_P_0_LEN_1 */
10022 1.1.1.1.8.1 tls { "korw", { MaskG, MaskVex, MaskR } },
10023 1.1.1.1.8.1 tls },
10024 1.1.1.1.8.1 tls {
10025 1.1.1.1.8.1 tls /* VEX_W_0F46_P_0_LEN_1 */
10026 1.1.1.1.8.1 tls { "kxnorw", { MaskG, MaskVex, MaskR } },
10027 1.1.1.1.8.1 tls },
10028 1.1.1.1.8.1 tls {
10029 1.1.1.1.8.1 tls /* VEX_W_0F47_P_0_LEN_1 */
10030 1.1.1.1.8.1 tls { "kxorw", { MaskG, MaskVex, MaskR } },
10031 1.1.1.1.8.1 tls },
10032 1.1.1.1.8.1 tls {
10033 1.1.1.1.8.1 tls /* VEX_W_0F4B_P_2_LEN_1 */
10034 1.1.1.1.8.1 tls { "kunpckbw", { MaskG, MaskVex, MaskR } },
10035 1.1.1.1.8.1 tls },
10036 1.1.1.1.8.1 tls {
10037 1.1 christos /* VEX_W_0F50_M_0 */
10038 1.1 christos { "vmovmskpX", { Gdq, XS } },
10039 1.1 christos },
10040 1.1 christos {
10041 1.1 christos /* VEX_W_0F51_P_0 */
10042 1.1 christos { "vsqrtps", { XM, EXx } },
10043 1.1 christos },
10044 1.1 christos {
10045 1.1 christos /* VEX_W_0F51_P_1 */
10046 1.1 christos { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
10047 1.1 christos },
10048 1.1 christos {
10049 1.1 christos /* VEX_W_0F51_P_2 */
10050 1.1 christos { "vsqrtpd", { XM, EXx } },
10051 1.1 christos },
10052 1.1 christos {
10053 1.1 christos /* VEX_W_0F51_P_3 */
10054 1.1 christos { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
10055 1.1 christos },
10056 1.1 christos {
10057 1.1 christos /* VEX_W_0F52_P_0 */
10058 1.1 christos { "vrsqrtps", { XM, EXx } },
10059 1.1 christos },
10060 1.1 christos {
10061 1.1 christos /* VEX_W_0F52_P_1 */
10062 1.1 christos { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
10063 1.1 christos },
10064 1.1 christos {
10065 1.1 christos /* VEX_W_0F53_P_0 */
10066 1.1 christos { "vrcpps", { XM, EXx } },
10067 1.1 christos },
10068 1.1 christos {
10069 1.1 christos /* VEX_W_0F53_P_1 */
10070 1.1 christos { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
10071 1.1 christos },
10072 1.1 christos {
10073 1.1 christos /* VEX_W_0F58_P_0 */
10074 1.1 christos { "vaddps", { XM, Vex, EXx } },
10075 1.1 christos },
10076 1.1 christos {
10077 1.1 christos /* VEX_W_0F58_P_1 */
10078 1.1 christos { "vaddss", { XMScalar, VexScalar, EXdScalar } },
10079 1.1 christos },
10080 1.1 christos {
10081 1.1 christos /* VEX_W_0F58_P_2 */
10082 1.1 christos { "vaddpd", { XM, Vex, EXx } },
10083 1.1 christos },
10084 1.1 christos {
10085 1.1 christos /* VEX_W_0F58_P_3 */
10086 1.1 christos { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
10087 1.1 christos },
10088 1.1 christos {
10089 1.1 christos /* VEX_W_0F59_P_0 */
10090 1.1 christos { "vmulps", { XM, Vex, EXx } },
10091 1.1 christos },
10092 1.1 christos {
10093 1.1 christos /* VEX_W_0F59_P_1 */
10094 1.1 christos { "vmulss", { XMScalar, VexScalar, EXdScalar } },
10095 1.1 christos },
10096 1.1 christos {
10097 1.1 christos /* VEX_W_0F59_P_2 */
10098 1.1 christos { "vmulpd", { XM, Vex, EXx } },
10099 1.1 christos },
10100 1.1 christos {
10101 1.1 christos /* VEX_W_0F59_P_3 */
10102 1.1 christos { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
10103 1.1 christos },
10104 1.1 christos {
10105 1.1 christos /* VEX_W_0F5A_P_0 */
10106 1.1 christos { "vcvtps2pd", { XM, EXxmmq } },
10107 1.1 christos },
10108 1.1 christos {
10109 1.1 christos /* VEX_W_0F5A_P_1 */
10110 1.1 christos { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
10111 1.1 christos },
10112 1.1 christos {
10113 1.1 christos /* VEX_W_0F5A_P_3 */
10114 1.1 christos { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
10115 1.1 christos },
10116 1.1 christos {
10117 1.1 christos /* VEX_W_0F5B_P_0 */
10118 1.1 christos { "vcvtdq2ps", { XM, EXx } },
10119 1.1 christos },
10120 1.1 christos {
10121 1.1 christos /* VEX_W_0F5B_P_1 */
10122 1.1 christos { "vcvttps2dq", { XM, EXx } },
10123 1.1 christos },
10124 1.1 christos {
10125 1.1 christos /* VEX_W_0F5B_P_2 */
10126 1.1 christos { "vcvtps2dq", { XM, EXx } },
10127 1.1 christos },
10128 1.1 christos {
10129 1.1 christos /* VEX_W_0F5C_P_0 */
10130 1.1 christos { "vsubps", { XM, Vex, EXx } },
10131 1.1 christos },
10132 1.1 christos {
10133 1.1 christos /* VEX_W_0F5C_P_1 */
10134 1.1 christos { "vsubss", { XMScalar, VexScalar, EXdScalar } },
10135 1.1 christos },
10136 1.1 christos {
10137 1.1 christos /* VEX_W_0F5C_P_2 */
10138 1.1 christos { "vsubpd", { XM, Vex, EXx } },
10139 1.1 christos },
10140 1.1 christos {
10141 1.1 christos /* VEX_W_0F5C_P_3 */
10142 1.1 christos { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
10143 1.1 christos },
10144 1.1 christos {
10145 1.1 christos /* VEX_W_0F5D_P_0 */
10146 1.1 christos { "vminps", { XM, Vex, EXx } },
10147 1.1 christos },
10148 1.1 christos {
10149 1.1 christos /* VEX_W_0F5D_P_1 */
10150 1.1 christos { "vminss", { XMScalar, VexScalar, EXdScalar } },
10151 1.1 christos },
10152 1.1 christos {
10153 1.1 christos /* VEX_W_0F5D_P_2 */
10154 1.1 christos { "vminpd", { XM, Vex, EXx } },
10155 1.1 christos },
10156 1.1 christos {
10157 1.1 christos /* VEX_W_0F5D_P_3 */
10158 1.1 christos { "vminsd", { XMScalar, VexScalar, EXqScalar } },
10159 1.1 christos },
10160 1.1 christos {
10161 1.1 christos /* VEX_W_0F5E_P_0 */
10162 1.1 christos { "vdivps", { XM, Vex, EXx } },
10163 1.1 christos },
10164 1.1 christos {
10165 1.1 christos /* VEX_W_0F5E_P_1 */
10166 1.1 christos { "vdivss", { XMScalar, VexScalar, EXdScalar } },
10167 1.1 christos },
10168 1.1 christos {
10169 1.1 christos /* VEX_W_0F5E_P_2 */
10170 1.1 christos { "vdivpd", { XM, Vex, EXx } },
10171 1.1 christos },
10172 1.1 christos {
10173 1.1 christos /* VEX_W_0F5E_P_3 */
10174 1.1 christos { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
10175 1.1 christos },
10176 1.1 christos {
10177 1.1 christos /* VEX_W_0F5F_P_0 */
10178 1.1 christos { "vmaxps", { XM, Vex, EXx } },
10179 1.1 christos },
10180 1.1 christos {
10181 1.1 christos /* VEX_W_0F5F_P_1 */
10182 1.1 christos { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
10183 1.1 christos },
10184 1.1 christos {
10185 1.1 christos /* VEX_W_0F5F_P_2 */
10186 1.1 christos { "vmaxpd", { XM, Vex, EXx } },
10187 1.1 christos },
10188 1.1 christos {
10189 1.1 christos /* VEX_W_0F5F_P_3 */
10190 1.1 christos { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
10191 1.1 christos },
10192 1.1 christos {
10193 1.1 christos /* VEX_W_0F60_P_2 */
10194 1.1.1.1.8.1 tls { "vpunpcklbw", { XM, Vex, EXx } },
10195 1.1 christos },
10196 1.1 christos {
10197 1.1 christos /* VEX_W_0F61_P_2 */
10198 1.1.1.1.8.1 tls { "vpunpcklwd", { XM, Vex, EXx } },
10199 1.1 christos },
10200 1.1 christos {
10201 1.1 christos /* VEX_W_0F62_P_2 */
10202 1.1.1.1.8.1 tls { "vpunpckldq", { XM, Vex, EXx } },
10203 1.1 christos },
10204 1.1 christos {
10205 1.1 christos /* VEX_W_0F63_P_2 */
10206 1.1.1.1.8.1 tls { "vpacksswb", { XM, Vex, EXx } },
10207 1.1 christos },
10208 1.1 christos {
10209 1.1 christos /* VEX_W_0F64_P_2 */
10210 1.1.1.1.8.1 tls { "vpcmpgtb", { XM, Vex, EXx } },
10211 1.1 christos },
10212 1.1 christos {
10213 1.1 christos /* VEX_W_0F65_P_2 */
10214 1.1.1.1.8.1 tls { "vpcmpgtw", { XM, Vex, EXx } },
10215 1.1 christos },
10216 1.1 christos {
10217 1.1 christos /* VEX_W_0F66_P_2 */
10218 1.1.1.1.8.1 tls { "vpcmpgtd", { XM, Vex, EXx } },
10219 1.1 christos },
10220 1.1 christos {
10221 1.1 christos /* VEX_W_0F67_P_2 */
10222 1.1.1.1.8.1 tls { "vpackuswb", { XM, Vex, EXx } },
10223 1.1 christos },
10224 1.1 christos {
10225 1.1 christos /* VEX_W_0F68_P_2 */
10226 1.1.1.1.8.1 tls { "vpunpckhbw", { XM, Vex, EXx } },
10227 1.1 christos },
10228 1.1 christos {
10229 1.1 christos /* VEX_W_0F69_P_2 */
10230 1.1.1.1.8.1 tls { "vpunpckhwd", { XM, Vex, EXx } },
10231 1.1 christos },
10232 1.1 christos {
10233 1.1 christos /* VEX_W_0F6A_P_2 */
10234 1.1.1.1.8.1 tls { "vpunpckhdq", { XM, Vex, EXx } },
10235 1.1 christos },
10236 1.1 christos {
10237 1.1 christos /* VEX_W_0F6B_P_2 */
10238 1.1.1.1.8.1 tls { "vpackssdw", { XM, Vex, EXx } },
10239 1.1 christos },
10240 1.1 christos {
10241 1.1 christos /* VEX_W_0F6C_P_2 */
10242 1.1.1.1.8.1 tls { "vpunpcklqdq", { XM, Vex, EXx } },
10243 1.1 christos },
10244 1.1 christos {
10245 1.1 christos /* VEX_W_0F6D_P_2 */
10246 1.1.1.1.8.1 tls { "vpunpckhqdq", { XM, Vex, EXx } },
10247 1.1 christos },
10248 1.1 christos {
10249 1.1 christos /* VEX_W_0F6F_P_1 */
10250 1.1 christos { "vmovdqu", { XM, EXx } },
10251 1.1 christos },
10252 1.1 christos {
10253 1.1 christos /* VEX_W_0F6F_P_2 */
10254 1.1 christos { "vmovdqa", { XM, EXx } },
10255 1.1 christos },
10256 1.1 christos {
10257 1.1 christos /* VEX_W_0F70_P_1 */
10258 1.1 christos { "vpshufhw", { XM, EXx, Ib } },
10259 1.1 christos },
10260 1.1 christos {
10261 1.1 christos /* VEX_W_0F70_P_2 */
10262 1.1 christos { "vpshufd", { XM, EXx, Ib } },
10263 1.1 christos },
10264 1.1 christos {
10265 1.1 christos /* VEX_W_0F70_P_3 */
10266 1.1 christos { "vpshuflw", { XM, EXx, Ib } },
10267 1.1 christos },
10268 1.1 christos {
10269 1.1 christos /* VEX_W_0F71_R_2_P_2 */
10270 1.1.1.1.8.1 tls { "vpsrlw", { Vex, XS, Ib } },
10271 1.1 christos },
10272 1.1 christos {
10273 1.1 christos /* VEX_W_0F71_R_4_P_2 */
10274 1.1.1.1.8.1 tls { "vpsraw", { Vex, XS, Ib } },
10275 1.1 christos },
10276 1.1 christos {
10277 1.1 christos /* VEX_W_0F71_R_6_P_2 */
10278 1.1.1.1.8.1 tls { "vpsllw", { Vex, XS, Ib } },
10279 1.1 christos },
10280 1.1 christos {
10281 1.1 christos /* VEX_W_0F72_R_2_P_2 */
10282 1.1.1.1.8.1 tls { "vpsrld", { Vex, XS, Ib } },
10283 1.1 christos },
10284 1.1 christos {
10285 1.1 christos /* VEX_W_0F72_R_4_P_2 */
10286 1.1.1.1.8.1 tls { "vpsrad", { Vex, XS, Ib } },
10287 1.1 christos },
10288 1.1 christos {
10289 1.1 christos /* VEX_W_0F72_R_6_P_2 */
10290 1.1.1.1.8.1 tls { "vpslld", { Vex, XS, Ib } },
10291 1.1 christos },
10292 1.1 christos {
10293 1.1 christos /* VEX_W_0F73_R_2_P_2 */
10294 1.1.1.1.8.1 tls { "vpsrlq", { Vex, XS, Ib } },
10295 1.1 christos },
10296 1.1 christos {
10297 1.1 christos /* VEX_W_0F73_R_3_P_2 */
10298 1.1.1.1.8.1 tls { "vpsrldq", { Vex, XS, Ib } },
10299 1.1 christos },
10300 1.1 christos {
10301 1.1 christos /* VEX_W_0F73_R_6_P_2 */
10302 1.1.1.1.8.1 tls { "vpsllq", { Vex, XS, Ib } },
10303 1.1 christos },
10304 1.1 christos {
10305 1.1 christos /* VEX_W_0F73_R_7_P_2 */
10306 1.1.1.1.8.1 tls { "vpslldq", { Vex, XS, Ib } },
10307 1.1 christos },
10308 1.1 christos {
10309 1.1 christos /* VEX_W_0F74_P_2 */
10310 1.1.1.1.8.1 tls { "vpcmpeqb", { XM, Vex, EXx } },
10311 1.1 christos },
10312 1.1 christos {
10313 1.1 christos /* VEX_W_0F75_P_2 */
10314 1.1.1.1.8.1 tls { "vpcmpeqw", { XM, Vex, EXx } },
10315 1.1 christos },
10316 1.1 christos {
10317 1.1 christos /* VEX_W_0F76_P_2 */
10318 1.1.1.1.8.1 tls { "vpcmpeqd", { XM, Vex, EXx } },
10319 1.1 christos },
10320 1.1 christos {
10321 1.1 christos /* VEX_W_0F77_P_0 */
10322 1.1 christos { "", { VZERO } },
10323 1.1 christos },
10324 1.1 christos {
10325 1.1 christos /* VEX_W_0F7C_P_2 */
10326 1.1 christos { "vhaddpd", { XM, Vex, EXx } },
10327 1.1 christos },
10328 1.1 christos {
10329 1.1 christos /* VEX_W_0F7C_P_3 */
10330 1.1 christos { "vhaddps", { XM, Vex, EXx } },
10331 1.1 christos },
10332 1.1 christos {
10333 1.1 christos /* VEX_W_0F7D_P_2 */
10334 1.1 christos { "vhsubpd", { XM, Vex, EXx } },
10335 1.1 christos },
10336 1.1 christos {
10337 1.1 christos /* VEX_W_0F7D_P_3 */
10338 1.1 christos { "vhsubps", { XM, Vex, EXx } },
10339 1.1 christos },
10340 1.1 christos {
10341 1.1 christos /* VEX_W_0F7E_P_1 */
10342 1.1 christos { "vmovq", { XMScalar, EXqScalar } },
10343 1.1 christos },
10344 1.1 christos {
10345 1.1 christos /* VEX_W_0F7F_P_1 */
10346 1.1 christos { "vmovdqu", { EXxS, XM } },
10347 1.1 christos },
10348 1.1 christos {
10349 1.1 christos /* VEX_W_0F7F_P_2 */
10350 1.1 christos { "vmovdqa", { EXxS, XM } },
10351 1.1 christos },
10352 1.1 christos {
10353 1.1.1.1.8.1 tls /* VEX_W_0F90_P_0_LEN_0 */
10354 1.1.1.1.8.1 tls { "kmovw", { MaskG, MaskE } },
10355 1.1.1.1.8.1 tls },
10356 1.1.1.1.8.1 tls {
10357 1.1.1.1.8.1 tls /* VEX_W_0F91_P_0_LEN_0 */
10358 1.1.1.1.8.1 tls { "kmovw", { Ew, MaskG } },
10359 1.1.1.1.8.1 tls },
10360 1.1.1.1.8.1 tls {
10361 1.1.1.1.8.1 tls /* VEX_W_0F92_P_0_LEN_0 */
10362 1.1.1.1.8.1 tls { "kmovw", { MaskG, Rdq } },
10363 1.1.1.1.8.1 tls },
10364 1.1.1.1.8.1 tls {
10365 1.1.1.1.8.1 tls /* VEX_W_0F93_P_0_LEN_0 */
10366 1.1.1.1.8.1 tls { "kmovw", { Gdq, MaskR } },
10367 1.1.1.1.8.1 tls },
10368 1.1.1.1.8.1 tls {
10369 1.1.1.1.8.1 tls /* VEX_W_0F98_P_0_LEN_0 */
10370 1.1.1.1.8.1 tls { "kortestw", { MaskG, MaskR } },
10371 1.1.1.1.8.1 tls },
10372 1.1.1.1.8.1 tls {
10373 1.1 christos /* VEX_W_0FAE_R_2_M_0 */
10374 1.1 christos { "vldmxcsr", { Md } },
10375 1.1 christos },
10376 1.1 christos {
10377 1.1 christos /* VEX_W_0FAE_R_3_M_0 */
10378 1.1 christos { "vstmxcsr", { Md } },
10379 1.1 christos },
10380 1.1 christos {
10381 1.1 christos /* VEX_W_0FC2_P_0 */
10382 1.1 christos { "vcmpps", { XM, Vex, EXx, VCMP } },
10383 1.1 christos },
10384 1.1 christos {
10385 1.1 christos /* VEX_W_0FC2_P_1 */
10386 1.1 christos { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
10387 1.1 christos },
10388 1.1 christos {
10389 1.1 christos /* VEX_W_0FC2_P_2 */
10390 1.1 christos { "vcmppd", { XM, Vex, EXx, VCMP } },
10391 1.1 christos },
10392 1.1 christos {
10393 1.1 christos /* VEX_W_0FC2_P_3 */
10394 1.1 christos { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
10395 1.1 christos },
10396 1.1 christos {
10397 1.1 christos /* VEX_W_0FC4_P_2 */
10398 1.1 christos { "vpinsrw", { XM, Vex128, Edqw, Ib } },
10399 1.1 christos },
10400 1.1 christos {
10401 1.1 christos /* VEX_W_0FC5_P_2 */
10402 1.1 christos { "vpextrw", { Gdq, XS, Ib } },
10403 1.1 christos },
10404 1.1 christos {
10405 1.1 christos /* VEX_W_0FD0_P_2 */
10406 1.1 christos { "vaddsubpd", { XM, Vex, EXx } },
10407 1.1 christos },
10408 1.1 christos {
10409 1.1 christos /* VEX_W_0FD0_P_3 */
10410 1.1 christos { "vaddsubps", { XM, Vex, EXx } },
10411 1.1 christos },
10412 1.1 christos {
10413 1.1 christos /* VEX_W_0FD1_P_2 */
10414 1.1.1.1.8.1 tls { "vpsrlw", { XM, Vex, EXxmm } },
10415 1.1 christos },
10416 1.1 christos {
10417 1.1 christos /* VEX_W_0FD2_P_2 */
10418 1.1.1.1.8.1 tls { "vpsrld", { XM, Vex, EXxmm } },
10419 1.1 christos },
10420 1.1 christos {
10421 1.1 christos /* VEX_W_0FD3_P_2 */
10422 1.1.1.1.8.1 tls { "vpsrlq", { XM, Vex, EXxmm } },
10423 1.1 christos },
10424 1.1 christos {
10425 1.1 christos /* VEX_W_0FD4_P_2 */
10426 1.1.1.1.8.1 tls { "vpaddq", { XM, Vex, EXx } },
10427 1.1 christos },
10428 1.1 christos {
10429 1.1 christos /* VEX_W_0FD5_P_2 */
10430 1.1.1.1.8.1 tls { "vpmullw", { XM, Vex, EXx } },
10431 1.1 christos },
10432 1.1 christos {
10433 1.1 christos /* VEX_W_0FD6_P_2 */
10434 1.1 christos { "vmovq", { EXqScalarS, XMScalar } },
10435 1.1 christos },
10436 1.1 christos {
10437 1.1 christos /* VEX_W_0FD7_P_2_M_1 */
10438 1.1 christos { "vpmovmskb", { Gdq, XS } },
10439 1.1 christos },
10440 1.1 christos {
10441 1.1 christos /* VEX_W_0FD8_P_2 */
10442 1.1.1.1.8.1 tls { "vpsubusb", { XM, Vex, EXx } },
10443 1.1 christos },
10444 1.1 christos {
10445 1.1 christos /* VEX_W_0FD9_P_2 */
10446 1.1.1.1.8.1 tls { "vpsubusw", { XM, Vex, EXx } },
10447 1.1 christos },
10448 1.1 christos {
10449 1.1 christos /* VEX_W_0FDA_P_2 */
10450 1.1.1.1.8.1 tls { "vpminub", { XM, Vex, EXx } },
10451 1.1 christos },
10452 1.1 christos {
10453 1.1 christos /* VEX_W_0FDB_P_2 */
10454 1.1.1.1.8.1 tls { "vpand", { XM, Vex, EXx } },
10455 1.1 christos },
10456 1.1 christos {
10457 1.1 christos /* VEX_W_0FDC_P_2 */
10458 1.1.1.1.8.1 tls { "vpaddusb", { XM, Vex, EXx } },
10459 1.1 christos },
10460 1.1 christos {
10461 1.1 christos /* VEX_W_0FDD_P_2 */
10462 1.1.1.1.8.1 tls { "vpaddusw", { XM, Vex, EXx } },
10463 1.1 christos },
10464 1.1 christos {
10465 1.1 christos /* VEX_W_0FDE_P_2 */
10466 1.1.1.1.8.1 tls { "vpmaxub", { XM, Vex, EXx } },
10467 1.1 christos },
10468 1.1 christos {
10469 1.1 christos /* VEX_W_0FDF_P_2 */
10470 1.1.1.1.8.1 tls { "vpandn", { XM, Vex, EXx } },
10471 1.1 christos },
10472 1.1 christos {
10473 1.1 christos /* VEX_W_0FE0_P_2 */
10474 1.1.1.1.8.1 tls { "vpavgb", { XM, Vex, EXx } },
10475 1.1 christos },
10476 1.1 christos {
10477 1.1 christos /* VEX_W_0FE1_P_2 */
10478 1.1.1.1.8.1 tls { "vpsraw", { XM, Vex, EXxmm } },
10479 1.1 christos },
10480 1.1 christos {
10481 1.1 christos /* VEX_W_0FE2_P_2 */
10482 1.1.1.1.8.1 tls { "vpsrad", { XM, Vex, EXxmm } },
10483 1.1 christos },
10484 1.1 christos {
10485 1.1 christos /* VEX_W_0FE3_P_2 */
10486 1.1.1.1.8.1 tls { "vpavgw", { XM, Vex, EXx } },
10487 1.1 christos },
10488 1.1 christos {
10489 1.1 christos /* VEX_W_0FE4_P_2 */
10490 1.1.1.1.8.1 tls { "vpmulhuw", { XM, Vex, EXx } },
10491 1.1 christos },
10492 1.1 christos {
10493 1.1 christos /* VEX_W_0FE5_P_2 */
10494 1.1.1.1.8.1 tls { "vpmulhw", { XM, Vex, EXx } },
10495 1.1 christos },
10496 1.1 christos {
10497 1.1 christos /* VEX_W_0FE6_P_1 */
10498 1.1 christos { "vcvtdq2pd", { XM, EXxmmq } },
10499 1.1 christos },
10500 1.1 christos {
10501 1.1 christos /* VEX_W_0FE6_P_2 */
10502 1.1 christos { "vcvttpd2dq%XY", { XMM, EXx } },
10503 1.1 christos },
10504 1.1 christos {
10505 1.1 christos /* VEX_W_0FE6_P_3 */
10506 1.1 christos { "vcvtpd2dq%XY", { XMM, EXx } },
10507 1.1 christos },
10508 1.1 christos {
10509 1.1 christos /* VEX_W_0FE7_P_2_M_0 */
10510 1.1 christos { "vmovntdq", { Mx, XM } },
10511 1.1 christos },
10512 1.1 christos {
10513 1.1 christos /* VEX_W_0FE8_P_2 */
10514 1.1.1.1.8.1 tls { "vpsubsb", { XM, Vex, EXx } },
10515 1.1 christos },
10516 1.1 christos {
10517 1.1 christos /* VEX_W_0FE9_P_2 */
10518 1.1.1.1.8.1 tls { "vpsubsw", { XM, Vex, EXx } },
10519 1.1 christos },
10520 1.1 christos {
10521 1.1 christos /* VEX_W_0FEA_P_2 */
10522 1.1.1.1.8.1 tls { "vpminsw", { XM, Vex, EXx } },
10523 1.1 christos },
10524 1.1 christos {
10525 1.1 christos /* VEX_W_0FEB_P_2 */
10526 1.1.1.1.8.1 tls { "vpor", { XM, Vex, EXx } },
10527 1.1 christos },
10528 1.1 christos {
10529 1.1 christos /* VEX_W_0FEC_P_2 */
10530 1.1.1.1.8.1 tls { "vpaddsb", { XM, Vex, EXx } },
10531 1.1 christos },
10532 1.1 christos {
10533 1.1 christos /* VEX_W_0FED_P_2 */
10534 1.1.1.1.8.1 tls { "vpaddsw", { XM, Vex, EXx } },
10535 1.1 christos },
10536 1.1 christos {
10537 1.1 christos /* VEX_W_0FEE_P_2 */
10538 1.1.1.1.8.1 tls { "vpmaxsw", { XM, Vex, EXx } },
10539 1.1 christos },
10540 1.1 christos {
10541 1.1 christos /* VEX_W_0FEF_P_2 */
10542 1.1.1.1.8.1 tls { "vpxor", { XM, Vex, EXx } },
10543 1.1 christos },
10544 1.1 christos {
10545 1.1 christos /* VEX_W_0FF0_P_3_M_0 */
10546 1.1 christos { "vlddqu", { XM, M } },
10547 1.1 christos },
10548 1.1 christos {
10549 1.1 christos /* VEX_W_0FF1_P_2 */
10550 1.1.1.1.8.1 tls { "vpsllw", { XM, Vex, EXxmm } },
10551 1.1 christos },
10552 1.1 christos {
10553 1.1 christos /* VEX_W_0FF2_P_2 */
10554 1.1.1.1.8.1 tls { "vpslld", { XM, Vex, EXxmm } },
10555 1.1 christos },
10556 1.1 christos {
10557 1.1 christos /* VEX_W_0FF3_P_2 */
10558 1.1.1.1.8.1 tls { "vpsllq", { XM, Vex, EXxmm } },
10559 1.1 christos },
10560 1.1 christos {
10561 1.1 christos /* VEX_W_0FF4_P_2 */
10562 1.1.1.1.8.1 tls { "vpmuludq", { XM, Vex, EXx } },
10563 1.1 christos },
10564 1.1 christos {
10565 1.1 christos /* VEX_W_0FF5_P_2 */
10566 1.1.1.1.8.1 tls { "vpmaddwd", { XM, Vex, EXx } },
10567 1.1 christos },
10568 1.1 christos {
10569 1.1 christos /* VEX_W_0FF6_P_2 */
10570 1.1.1.1.8.1 tls { "vpsadbw", { XM, Vex, EXx } },
10571 1.1 christos },
10572 1.1 christos {
10573 1.1 christos /* VEX_W_0FF7_P_2 */
10574 1.1 christos { "vmaskmovdqu", { XM, XS } },
10575 1.1 christos },
10576 1.1 christos {
10577 1.1 christos /* VEX_W_0FF8_P_2 */
10578 1.1.1.1.8.1 tls { "vpsubb", { XM, Vex, EXx } },
10579 1.1 christos },
10580 1.1 christos {
10581 1.1 christos /* VEX_W_0FF9_P_2 */
10582 1.1.1.1.8.1 tls { "vpsubw", { XM, Vex, EXx } },
10583 1.1 christos },
10584 1.1 christos {
10585 1.1 christos /* VEX_W_0FFA_P_2 */
10586 1.1.1.1.8.1 tls { "vpsubd", { XM, Vex, EXx } },
10587 1.1 christos },
10588 1.1 christos {
10589 1.1 christos /* VEX_W_0FFB_P_2 */
10590 1.1.1.1.8.1 tls { "vpsubq", { XM, Vex, EXx } },
10591 1.1 christos },
10592 1.1 christos {
10593 1.1 christos /* VEX_W_0FFC_P_2 */
10594 1.1.1.1.8.1 tls { "vpaddb", { XM, Vex, EXx } },
10595 1.1 christos },
10596 1.1 christos {
10597 1.1 christos /* VEX_W_0FFD_P_2 */
10598 1.1.1.1.8.1 tls { "vpaddw", { XM, Vex, EXx } },
10599 1.1 christos },
10600 1.1 christos {
10601 1.1 christos /* VEX_W_0FFE_P_2 */
10602 1.1.1.1.8.1 tls { "vpaddd", { XM, Vex, EXx } },
10603 1.1 christos },
10604 1.1 christos {
10605 1.1 christos /* VEX_W_0F3800_P_2 */
10606 1.1.1.1.8.1 tls { "vpshufb", { XM, Vex, EXx } },
10607 1.1 christos },
10608 1.1 christos {
10609 1.1 christos /* VEX_W_0F3801_P_2 */
10610 1.1.1.1.8.1 tls { "vphaddw", { XM, Vex, EXx } },
10611 1.1 christos },
10612 1.1 christos {
10613 1.1 christos /* VEX_W_0F3802_P_2 */
10614 1.1.1.1.8.1 tls { "vphaddd", { XM, Vex, EXx } },
10615 1.1 christos },
10616 1.1 christos {
10617 1.1 christos /* VEX_W_0F3803_P_2 */
10618 1.1.1.1.8.1 tls { "vphaddsw", { XM, Vex, EXx } },
10619 1.1 christos },
10620 1.1 christos {
10621 1.1 christos /* VEX_W_0F3804_P_2 */
10622 1.1.1.1.8.1 tls { "vpmaddubsw", { XM, Vex, EXx } },
10623 1.1 christos },
10624 1.1 christos {
10625 1.1 christos /* VEX_W_0F3805_P_2 */
10626 1.1.1.1.8.1 tls { "vphsubw", { XM, Vex, EXx } },
10627 1.1 christos },
10628 1.1 christos {
10629 1.1 christos /* VEX_W_0F3806_P_2 */
10630 1.1.1.1.8.1 tls { "vphsubd", { XM, Vex, EXx } },
10631 1.1 christos },
10632 1.1 christos {
10633 1.1 christos /* VEX_W_0F3807_P_2 */
10634 1.1.1.1.8.1 tls { "vphsubsw", { XM, Vex, EXx } },
10635 1.1 christos },
10636 1.1 christos {
10637 1.1 christos /* VEX_W_0F3808_P_2 */
10638 1.1.1.1.8.1 tls { "vpsignb", { XM, Vex, EXx } },
10639 1.1 christos },
10640 1.1 christos {
10641 1.1 christos /* VEX_W_0F3809_P_2 */
10642 1.1.1.1.8.1 tls { "vpsignw", { XM, Vex, EXx } },
10643 1.1 christos },
10644 1.1 christos {
10645 1.1 christos /* VEX_W_0F380A_P_2 */
10646 1.1.1.1.8.1 tls { "vpsignd", { XM, Vex, EXx } },
10647 1.1 christos },
10648 1.1 christos {
10649 1.1 christos /* VEX_W_0F380B_P_2 */
10650 1.1.1.1.8.1 tls { "vpmulhrsw", { XM, Vex, EXx } },
10651 1.1 christos },
10652 1.1 christos {
10653 1.1 christos /* VEX_W_0F380C_P_2 */
10654 1.1 christos { "vpermilps", { XM, Vex, EXx } },
10655 1.1 christos },
10656 1.1 christos {
10657 1.1 christos /* VEX_W_0F380D_P_2 */
10658 1.1 christos { "vpermilpd", { XM, Vex, EXx } },
10659 1.1 christos },
10660 1.1 christos {
10661 1.1 christos /* VEX_W_0F380E_P_2 */
10662 1.1 christos { "vtestps", { XM, EXx } },
10663 1.1 christos },
10664 1.1 christos {
10665 1.1 christos /* VEX_W_0F380F_P_2 */
10666 1.1 christos { "vtestpd", { XM, EXx } },
10667 1.1 christos },
10668 1.1 christos {
10669 1.1.1.1.8.1 tls /* VEX_W_0F3816_P_2 */
10670 1.1.1.1.8.1 tls { "vpermps", { XM, Vex, EXx } },
10671 1.1.1.1.8.1 tls },
10672 1.1.1.1.8.1 tls {
10673 1.1 christos /* VEX_W_0F3817_P_2 */
10674 1.1 christos { "vptest", { XM, EXx } },
10675 1.1 christos },
10676 1.1 christos {
10677 1.1.1.1.8.1 tls /* VEX_W_0F3818_P_2 */
10678 1.1.1.1.8.1 tls { "vbroadcastss", { XM, EXxmm_md } },
10679 1.1 christos },
10680 1.1 christos {
10681 1.1.1.1.8.1 tls /* VEX_W_0F3819_P_2 */
10682 1.1.1.1.8.1 tls { "vbroadcastsd", { XM, EXxmm_mq } },
10683 1.1 christos },
10684 1.1 christos {
10685 1.1 christos /* VEX_W_0F381A_P_2_M_0 */
10686 1.1 christos { "vbroadcastf128", { XM, Mxmm } },
10687 1.1 christos },
10688 1.1 christos {
10689 1.1 christos /* VEX_W_0F381C_P_2 */
10690 1.1 christos { "vpabsb", { XM, EXx } },
10691 1.1 christos },
10692 1.1 christos {
10693 1.1 christos /* VEX_W_0F381D_P_2 */
10694 1.1 christos { "vpabsw", { XM, EXx } },
10695 1.1 christos },
10696 1.1 christos {
10697 1.1 christos /* VEX_W_0F381E_P_2 */
10698 1.1 christos { "vpabsd", { XM, EXx } },
10699 1.1 christos },
10700 1.1 christos {
10701 1.1 christos /* VEX_W_0F3820_P_2 */
10702 1.1.1.1.8.1 tls { "vpmovsxbw", { XM, EXxmmq } },
10703 1.1 christos },
10704 1.1 christos {
10705 1.1 christos /* VEX_W_0F3821_P_2 */
10706 1.1.1.1.8.1 tls { "vpmovsxbd", { XM, EXxmmqd } },
10707 1.1 christos },
10708 1.1 christos {
10709 1.1 christos /* VEX_W_0F3822_P_2 */
10710 1.1.1.1.8.1 tls { "vpmovsxbq", { XM, EXxmmdw } },
10711 1.1 christos },
10712 1.1 christos {
10713 1.1 christos /* VEX_W_0F3823_P_2 */
10714 1.1.1.1.8.1 tls { "vpmovsxwd", { XM, EXxmmq } },
10715 1.1 christos },
10716 1.1 christos {
10717 1.1 christos /* VEX_W_0F3824_P_2 */
10718 1.1.1.1.8.1 tls { "vpmovsxwq", { XM, EXxmmqd } },
10719 1.1 christos },
10720 1.1 christos {
10721 1.1 christos /* VEX_W_0F3825_P_2 */
10722 1.1.1.1.8.1 tls { "vpmovsxdq", { XM, EXxmmq } },
10723 1.1 christos },
10724 1.1 christos {
10725 1.1 christos /* VEX_W_0F3828_P_2 */
10726 1.1.1.1.8.1 tls { "vpmuldq", { XM, Vex, EXx } },
10727 1.1 christos },
10728 1.1 christos {
10729 1.1 christos /* VEX_W_0F3829_P_2 */
10730 1.1.1.1.8.1 tls { "vpcmpeqq", { XM, Vex, EXx } },
10731 1.1 christos },
10732 1.1 christos {
10733 1.1 christos /* VEX_W_0F382A_P_2_M_0 */
10734 1.1 christos { "vmovntdqa", { XM, Mx } },
10735 1.1 christos },
10736 1.1 christos {
10737 1.1 christos /* VEX_W_0F382B_P_2 */
10738 1.1.1.1.8.1 tls { "vpackusdw", { XM, Vex, EXx } },
10739 1.1 christos },
10740 1.1 christos {
10741 1.1 christos /* VEX_W_0F382C_P_2_M_0 */
10742 1.1 christos { "vmaskmovps", { XM, Vex, Mx } },
10743 1.1 christos },
10744 1.1 christos {
10745 1.1 christos /* VEX_W_0F382D_P_2_M_0 */
10746 1.1 christos { "vmaskmovpd", { XM, Vex, Mx } },
10747 1.1 christos },
10748 1.1 christos {
10749 1.1 christos /* VEX_W_0F382E_P_2_M_0 */
10750 1.1 christos { "vmaskmovps", { Mx, Vex, XM } },
10751 1.1 christos },
10752 1.1 christos {
10753 1.1 christos /* VEX_W_0F382F_P_2_M_0 */
10754 1.1 christos { "vmaskmovpd", { Mx, Vex, XM } },
10755 1.1 christos },
10756 1.1 christos {
10757 1.1 christos /* VEX_W_0F3830_P_2 */
10758 1.1.1.1.8.1 tls { "vpmovzxbw", { XM, EXxmmq } },
10759 1.1 christos },
10760 1.1 christos {
10761 1.1 christos /* VEX_W_0F3831_P_2 */
10762 1.1.1.1.8.1 tls { "vpmovzxbd", { XM, EXxmmqd } },
10763 1.1 christos },
10764 1.1 christos {
10765 1.1 christos /* VEX_W_0F3832_P_2 */
10766 1.1.1.1.8.1 tls { "vpmovzxbq", { XM, EXxmmdw } },
10767 1.1 christos },
10768 1.1 christos {
10769 1.1 christos /* VEX_W_0F3833_P_2 */
10770 1.1.1.1.8.1 tls { "vpmovzxwd", { XM, EXxmmq } },
10771 1.1 christos },
10772 1.1 christos {
10773 1.1 christos /* VEX_W_0F3834_P_2 */
10774 1.1.1.1.8.1 tls { "vpmovzxwq", { XM, EXxmmqd } },
10775 1.1 christos },
10776 1.1 christos {
10777 1.1 christos /* VEX_W_0F3835_P_2 */
10778 1.1.1.1.8.1 tls { "vpmovzxdq", { XM, EXxmmq } },
10779 1.1.1.1.8.1 tls },
10780 1.1.1.1.8.1 tls {
10781 1.1.1.1.8.1 tls /* VEX_W_0F3836_P_2 */
10782 1.1.1.1.8.1 tls { "vpermd", { XM, Vex, EXx } },
10783 1.1 christos },
10784 1.1 christos {
10785 1.1 christos /* VEX_W_0F3837_P_2 */
10786 1.1.1.1.8.1 tls { "vpcmpgtq", { XM, Vex, EXx } },
10787 1.1 christos },
10788 1.1 christos {
10789 1.1 christos /* VEX_W_0F3838_P_2 */
10790 1.1.1.1.8.1 tls { "vpminsb", { XM, Vex, EXx } },
10791 1.1 christos },
10792 1.1 christos {
10793 1.1 christos /* VEX_W_0F3839_P_2 */
10794 1.1.1.1.8.1 tls { "vpminsd", { XM, Vex, EXx } },
10795 1.1 christos },
10796 1.1 christos {
10797 1.1 christos /* VEX_W_0F383A_P_2 */
10798 1.1.1.1.8.1 tls { "vpminuw", { XM, Vex, EXx } },
10799 1.1 christos },
10800 1.1 christos {
10801 1.1 christos /* VEX_W_0F383B_P_2 */
10802 1.1.1.1.8.1 tls { "vpminud", { XM, Vex, EXx } },
10803 1.1 christos },
10804 1.1 christos {
10805 1.1 christos /* VEX_W_0F383C_P_2 */
10806 1.1.1.1.8.1 tls { "vpmaxsb", { XM, Vex, EXx } },
10807 1.1 christos },
10808 1.1 christos {
10809 1.1 christos /* VEX_W_0F383D_P_2 */
10810 1.1.1.1.8.1 tls { "vpmaxsd", { XM, Vex, EXx } },
10811 1.1 christos },
10812 1.1 christos {
10813 1.1 christos /* VEX_W_0F383E_P_2 */
10814 1.1.1.1.8.1 tls { "vpmaxuw", { XM, Vex, EXx } },
10815 1.1 christos },
10816 1.1 christos {
10817 1.1 christos /* VEX_W_0F383F_P_2 */
10818 1.1.1.1.8.1 tls { "vpmaxud", { XM, Vex, EXx } },
10819 1.1 christos },
10820 1.1 christos {
10821 1.1 christos /* VEX_W_0F3840_P_2 */
10822 1.1.1.1.8.1 tls { "vpmulld", { XM, Vex, EXx } },
10823 1.1 christos },
10824 1.1 christos {
10825 1.1 christos /* VEX_W_0F3841_P_2 */
10826 1.1 christos { "vphminposuw", { XM, EXx } },
10827 1.1 christos },
10828 1.1 christos {
10829 1.1.1.1.8.1 tls /* VEX_W_0F3846_P_2 */
10830 1.1.1.1.8.1 tls { "vpsravd", { XM, Vex, EXx } },
10831 1.1.1.1.8.1 tls },
10832 1.1.1.1.8.1 tls {
10833 1.1.1.1.8.1 tls /* VEX_W_0F3858_P_2 */
10834 1.1.1.1.8.1 tls { "vpbroadcastd", { XM, EXxmm_md } },
10835 1.1.1.1.8.1 tls },
10836 1.1.1.1.8.1 tls {
10837 1.1.1.1.8.1 tls /* VEX_W_0F3859_P_2 */
10838 1.1.1.1.8.1 tls { "vpbroadcastq", { XM, EXxmm_mq } },
10839 1.1.1.1.8.1 tls },
10840 1.1.1.1.8.1 tls {
10841 1.1.1.1.8.1 tls /* VEX_W_0F385A_P_2_M_0 */
10842 1.1.1.1.8.1 tls { "vbroadcasti128", { XM, Mxmm } },
10843 1.1.1.1.8.1 tls },
10844 1.1.1.1.8.1 tls {
10845 1.1.1.1.8.1 tls /* VEX_W_0F3878_P_2 */
10846 1.1.1.1.8.1 tls { "vpbroadcastb", { XM, EXxmm_mb } },
10847 1.1.1.1.8.1 tls },
10848 1.1.1.1.8.1 tls {
10849 1.1.1.1.8.1 tls /* VEX_W_0F3879_P_2 */
10850 1.1.1.1.8.1 tls { "vpbroadcastw", { XM, EXxmm_mw } },
10851 1.1.1.1.8.1 tls },
10852 1.1.1.1.8.1 tls {
10853 1.1 christos /* VEX_W_0F38DB_P_2 */
10854 1.1 christos { "vaesimc", { XM, EXx } },
10855 1.1 christos },
10856 1.1 christos {
10857 1.1 christos /* VEX_W_0F38DC_P_2 */
10858 1.1 christos { "vaesenc", { XM, Vex128, EXx } },
10859 1.1 christos },
10860 1.1 christos {
10861 1.1 christos /* VEX_W_0F38DD_P_2 */
10862 1.1 christos { "vaesenclast", { XM, Vex128, EXx } },
10863 1.1 christos },
10864 1.1 christos {
10865 1.1 christos /* VEX_W_0F38DE_P_2 */
10866 1.1 christos { "vaesdec", { XM, Vex128, EXx } },
10867 1.1 christos },
10868 1.1 christos {
10869 1.1.1.1.8.1 tls /* VEX_W_0F38DF_P_2 */
10870 1.1.1.1.8.1 tls { "vaesdeclast", { XM, Vex128, EXx } },
10871 1.1.1.1.8.1 tls },
10872 1.1.1.1.8.1 tls {
10873 1.1.1.1.8.1 tls /* VEX_W_0F3A00_P_2 */
10874 1.1.1.1.8.1 tls { Bad_Opcode },
10875 1.1.1.1.8.1 tls { "vpermq", { XM, EXx, Ib } },
10876 1.1.1.1.8.1 tls },
10877 1.1.1.1.8.1 tls {
10878 1.1.1.1.8.1 tls /* VEX_W_0F3A01_P_2 */
10879 1.1.1.1.8.1 tls { Bad_Opcode },
10880 1.1.1.1.8.1 tls { "vpermpd", { XM, EXx, Ib } },
10881 1.1.1.1.8.1 tls },
10882 1.1.1.1.8.1 tls {
10883 1.1.1.1.8.1 tls /* VEX_W_0F3A02_P_2 */
10884 1.1.1.1.8.1 tls { "vpblendd", { XM, Vex, EXx, Ib } },
10885 1.1 christos },
10886 1.1 christos {
10887 1.1 christos /* VEX_W_0F3A04_P_2 */
10888 1.1 christos { "vpermilps", { XM, EXx, Ib } },
10889 1.1 christos },
10890 1.1 christos {
10891 1.1 christos /* VEX_W_0F3A05_P_2 */
10892 1.1 christos { "vpermilpd", { XM, EXx, Ib } },
10893 1.1 christos },
10894 1.1 christos {
10895 1.1 christos /* VEX_W_0F3A06_P_2 */
10896 1.1 christos { "vperm2f128", { XM, Vex256, EXx, Ib } },
10897 1.1 christos },
10898 1.1 christos {
10899 1.1 christos /* VEX_W_0F3A08_P_2 */
10900 1.1 christos { "vroundps", { XM, EXx, Ib } },
10901 1.1 christos },
10902 1.1 christos {
10903 1.1 christos /* VEX_W_0F3A09_P_2 */
10904 1.1 christos { "vroundpd", { XM, EXx, Ib } },
10905 1.1 christos },
10906 1.1 christos {
10907 1.1 christos /* VEX_W_0F3A0A_P_2 */
10908 1.1 christos { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
10909 1.1 christos },
10910 1.1 christos {
10911 1.1 christos /* VEX_W_0F3A0B_P_2 */
10912 1.1 christos { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
10913 1.1 christos },
10914 1.1 christos {
10915 1.1 christos /* VEX_W_0F3A0C_P_2 */
10916 1.1 christos { "vblendps", { XM, Vex, EXx, Ib } },
10917 1.1 christos },
10918 1.1 christos {
10919 1.1 christos /* VEX_W_0F3A0D_P_2 */
10920 1.1 christos { "vblendpd", { XM, Vex, EXx, Ib } },
10921 1.1 christos },
10922 1.1 christos {
10923 1.1 christos /* VEX_W_0F3A0E_P_2 */
10924 1.1.1.1.8.1 tls { "vpblendw", { XM, Vex, EXx, Ib } },
10925 1.1 christos },
10926 1.1 christos {
10927 1.1 christos /* VEX_W_0F3A0F_P_2 */
10928 1.1.1.1.8.1 tls { "vpalignr", { XM, Vex, EXx, Ib } },
10929 1.1 christos },
10930 1.1 christos {
10931 1.1 christos /* VEX_W_0F3A14_P_2 */
10932 1.1 christos { "vpextrb", { Edqb, XM, Ib } },
10933 1.1 christos },
10934 1.1 christos {
10935 1.1 christos /* VEX_W_0F3A15_P_2 */
10936 1.1 christos { "vpextrw", { Edqw, XM, Ib } },
10937 1.1 christos },
10938 1.1 christos {
10939 1.1 christos /* VEX_W_0F3A18_P_2 */
10940 1.1 christos { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
10941 1.1 christos },
10942 1.1 christos {
10943 1.1 christos /* VEX_W_0F3A19_P_2 */
10944 1.1 christos { "vextractf128", { EXxmm, XM, Ib } },
10945 1.1 christos },
10946 1.1 christos {
10947 1.1 christos /* VEX_W_0F3A20_P_2 */
10948 1.1 christos { "vpinsrb", { XM, Vex128, Edqb, Ib } },
10949 1.1 christos },
10950 1.1 christos {
10951 1.1 christos /* VEX_W_0F3A21_P_2 */
10952 1.1 christos { "vinsertps", { XM, Vex128, EXd, Ib } },
10953 1.1 christos },
10954 1.1 christos {
10955 1.1.1.1.8.1 tls /* VEX_W_0F3A30_P_2 */
10956 1.1.1.1.8.1 tls { Bad_Opcode },
10957 1.1.1.1.8.1 tls { "kshiftrw", { MaskG, MaskR, Ib } },
10958 1.1.1.1.8.1 tls },
10959 1.1.1.1.8.1 tls {
10960 1.1.1.1.8.1 tls /* VEX_W_0F3A32_P_2 */
10961 1.1.1.1.8.1 tls { Bad_Opcode },
10962 1.1.1.1.8.1 tls { "kshiftlw", { MaskG, MaskR, Ib } },
10963 1.1.1.1.8.1 tls },
10964 1.1.1.1.8.1 tls {
10965 1.1.1.1.8.1 tls /* VEX_W_0F3A38_P_2 */
10966 1.1.1.1.8.1 tls { "vinserti128", { XM, Vex256, EXxmm, Ib } },
10967 1.1.1.1.8.1 tls },
10968 1.1.1.1.8.1 tls {
10969 1.1.1.1.8.1 tls /* VEX_W_0F3A39_P_2 */
10970 1.1.1.1.8.1 tls { "vextracti128", { EXxmm, XM, Ib } },
10971 1.1.1.1.8.1 tls },
10972 1.1.1.1.8.1 tls {
10973 1.1 christos /* VEX_W_0F3A40_P_2 */
10974 1.1 christos { "vdpps", { XM, Vex, EXx, Ib } },
10975 1.1 christos },
10976 1.1 christos {
10977 1.1 christos /* VEX_W_0F3A41_P_2 */
10978 1.1 christos { "vdppd", { XM, Vex128, EXx, Ib } },
10979 1.1 christos },
10980 1.1 christos {
10981 1.1 christos /* VEX_W_0F3A42_P_2 */
10982 1.1.1.1.8.1 tls { "vmpsadbw", { XM, Vex, EXx, Ib } },
10983 1.1 christos },
10984 1.1 christos {
10985 1.1 christos /* VEX_W_0F3A44_P_2 */
10986 1.1 christos { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
10987 1.1 christos },
10988 1.1 christos {
10989 1.1.1.1.8.1 tls /* VEX_W_0F3A46_P_2 */
10990 1.1.1.1.8.1 tls { "vperm2i128", { XM, Vex256, EXx, Ib } },
10991 1.1.1.1.8.1 tls },
10992 1.1.1.1.8.1 tls {
10993 1.1 christos /* VEX_W_0F3A48_P_2 */
10994 1.1 christos { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10995 1.1 christos { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10996 1.1 christos },
10997 1.1 christos {
10998 1.1 christos /* VEX_W_0F3A49_P_2 */
10999 1.1 christos { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11000 1.1 christos { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
11001 1.1 christos },
11002 1.1 christos {
11003 1.1 christos /* VEX_W_0F3A4A_P_2 */
11004 1.1 christos { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
11005 1.1 christos },
11006 1.1 christos {
11007 1.1 christos /* VEX_W_0F3A4B_P_2 */
11008 1.1 christos { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
11009 1.1 christos },
11010 1.1 christos {
11011 1.1 christos /* VEX_W_0F3A4C_P_2 */
11012 1.1.1.1.8.1 tls { "vpblendvb", { XM, Vex, EXx, XMVexI4 } },
11013 1.1 christos },
11014 1.1 christos {
11015 1.1 christos /* VEX_W_0F3A60_P_2 */
11016 1.1 christos { "vpcmpestrm", { XM, EXx, Ib } },
11017 1.1 christos },
11018 1.1 christos {
11019 1.1 christos /* VEX_W_0F3A61_P_2 */
11020 1.1 christos { "vpcmpestri", { XM, EXx, Ib } },
11021 1.1 christos },
11022 1.1 christos {
11023 1.1 christos /* VEX_W_0F3A62_P_2 */
11024 1.1 christos { "vpcmpistrm", { XM, EXx, Ib } },
11025 1.1 christos },
11026 1.1 christos {
11027 1.1 christos /* VEX_W_0F3A63_P_2 */
11028 1.1 christos { "vpcmpistri", { XM, EXx, Ib } },
11029 1.1 christos },
11030 1.1 christos {
11031 1.1 christos /* VEX_W_0F3ADF_P_2 */
11032 1.1 christos { "vaeskeygenassist", { XM, EXx, Ib } },
11033 1.1 christos },
11034 1.1.1.1.8.1 tls #define NEED_VEX_W_TABLE
11035 1.1.1.1.8.1 tls #include "i386-dis-evex.h"
11036 1.1.1.1.8.1 tls #undef NEED_VEX_W_TABLE
11037 1.1 christos };
11038 1.1 christos
11039 1.1 christos static const struct dis386 mod_table[][2] = {
11040 1.1 christos {
11041 1.1 christos /* MOD_8D */
11042 1.1 christos { "leaS", { Gv, M } },
11043 1.1 christos },
11044 1.1 christos {
11045 1.1.1.1.8.1 tls /* MOD_C6_REG_7 */
11046 1.1.1.1.8.1 tls { Bad_Opcode },
11047 1.1.1.1.8.1 tls { RM_TABLE (RM_C6_REG_7) },
11048 1.1.1.1.8.1 tls },
11049 1.1.1.1.8.1 tls {
11050 1.1.1.1.8.1 tls /* MOD_C7_REG_7 */
11051 1.1.1.1.8.1 tls { Bad_Opcode },
11052 1.1.1.1.8.1 tls { RM_TABLE (RM_C7_REG_7) },
11053 1.1.1.1.8.1 tls },
11054 1.1.1.1.8.1 tls {
11055 1.1.1.1.8.1 tls /* MOD_FF_REG_3 */
11056 1.1.1.1.8.1 tls { "Jcall{T|}", { indirEp } },
11057 1.1.1.1.8.1 tls },
11058 1.1.1.1.8.1 tls {
11059 1.1.1.1.8.1 tls /* MOD_FF_REG_5 */
11060 1.1.1.1.8.1 tls { "Jjmp{T|}", { indirEp } },
11061 1.1.1.1.8.1 tls },
11062 1.1.1.1.8.1 tls {
11063 1.1 christos /* MOD_0F01_REG_0 */
11064 1.1 christos { X86_64_TABLE (X86_64_0F01_REG_0) },
11065 1.1 christos { RM_TABLE (RM_0F01_REG_0) },
11066 1.1 christos },
11067 1.1 christos {
11068 1.1 christos /* MOD_0F01_REG_1 */
11069 1.1 christos { X86_64_TABLE (X86_64_0F01_REG_1) },
11070 1.1 christos { RM_TABLE (RM_0F01_REG_1) },
11071 1.1 christos },
11072 1.1 christos {
11073 1.1 christos /* MOD_0F01_REG_2 */
11074 1.1 christos { X86_64_TABLE (X86_64_0F01_REG_2) },
11075 1.1 christos { RM_TABLE (RM_0F01_REG_2) },
11076 1.1 christos },
11077 1.1 christos {
11078 1.1 christos /* MOD_0F01_REG_3 */
11079 1.1 christos { X86_64_TABLE (X86_64_0F01_REG_3) },
11080 1.1 christos { RM_TABLE (RM_0F01_REG_3) },
11081 1.1 christos },
11082 1.1 christos {
11083 1.1 christos /* MOD_0F01_REG_7 */
11084 1.1 christos { "invlpg", { Mb } },
11085 1.1 christos { RM_TABLE (RM_0F01_REG_7) },
11086 1.1 christos },
11087 1.1 christos {
11088 1.1 christos /* MOD_0F12_PREFIX_0 */
11089 1.1 christos { "movlps", { XM, EXq } },
11090 1.1 christos { "movhlps", { XM, EXq } },
11091 1.1 christos },
11092 1.1 christos {
11093 1.1 christos /* MOD_0F13 */
11094 1.1 christos { "movlpX", { EXq, XM } },
11095 1.1 christos },
11096 1.1 christos {
11097 1.1 christos /* MOD_0F16_PREFIX_0 */
11098 1.1 christos { "movhps", { XM, EXq } },
11099 1.1 christos { "movlhps", { XM, EXq } },
11100 1.1 christos },
11101 1.1 christos {
11102 1.1 christos /* MOD_0F17 */
11103 1.1 christos { "movhpX", { EXq, XM } },
11104 1.1 christos },
11105 1.1 christos {
11106 1.1 christos /* MOD_0F18_REG_0 */
11107 1.1 christos { "prefetchnta", { Mb } },
11108 1.1 christos },
11109 1.1 christos {
11110 1.1 christos /* MOD_0F18_REG_1 */
11111 1.1 christos { "prefetcht0", { Mb } },
11112 1.1 christos },
11113 1.1 christos {
11114 1.1 christos /* MOD_0F18_REG_2 */
11115 1.1 christos { "prefetcht1", { Mb } },
11116 1.1 christos },
11117 1.1 christos {
11118 1.1 christos /* MOD_0F18_REG_3 */
11119 1.1 christos { "prefetcht2", { Mb } },
11120 1.1 christos },
11121 1.1 christos {
11122 1.1.1.1.8.1 tls /* MOD_0F18_REG_4 */
11123 1.1.1.1.8.1 tls { "nop/reserved", { Mb } },
11124 1.1.1.1.8.1 tls },
11125 1.1.1.1.8.1 tls {
11126 1.1.1.1.8.1 tls /* MOD_0F18_REG_5 */
11127 1.1.1.1.8.1 tls { "nop/reserved", { Mb } },
11128 1.1.1.1.8.1 tls },
11129 1.1.1.1.8.1 tls {
11130 1.1.1.1.8.1 tls /* MOD_0F18_REG_6 */
11131 1.1.1.1.8.1 tls { "nop/reserved", { Mb } },
11132 1.1.1.1.8.1 tls },
11133 1.1.1.1.8.1 tls {
11134 1.1.1.1.8.1 tls /* MOD_0F18_REG_7 */
11135 1.1.1.1.8.1 tls { "nop/reserved", { Mb } },
11136 1.1.1.1.8.1 tls },
11137 1.1.1.1.8.1 tls {
11138 1.1.1.1.8.1 tls /* MOD_0F1A_PREFIX_0 */
11139 1.1.1.1.8.1 tls { "bndldx", { Gbnd, Ev_bnd } },
11140 1.1.1.1.8.1 tls { "nopQ", { Ev } },
11141 1.1.1.1.8.1 tls },
11142 1.1.1.1.8.1 tls {
11143 1.1.1.1.8.1 tls /* MOD_0F1B_PREFIX_0 */
11144 1.1.1.1.8.1 tls { "bndstx", { Ev_bnd, Gbnd } },
11145 1.1.1.1.8.1 tls { "nopQ", { Ev } },
11146 1.1.1.1.8.1 tls },
11147 1.1.1.1.8.1 tls {
11148 1.1.1.1.8.1 tls /* MOD_0F1B_PREFIX_1 */
11149 1.1.1.1.8.1 tls { "bndmk", { Gbnd, Ev_bnd } },
11150 1.1.1.1.8.1 tls { "nopQ", { Ev } },
11151 1.1.1.1.8.1 tls },
11152 1.1.1.1.8.1 tls {
11153 1.1 christos /* MOD_0F20 */
11154 1.1 christos { Bad_Opcode },
11155 1.1 christos { "movZ", { Rm, Cm } },
11156 1.1 christos },
11157 1.1 christos {
11158 1.1 christos /* MOD_0F21 */
11159 1.1 christos { Bad_Opcode },
11160 1.1 christos { "movZ", { Rm, Dm } },
11161 1.1 christos },
11162 1.1 christos {
11163 1.1 christos /* MOD_0F22 */
11164 1.1 christos { Bad_Opcode },
11165 1.1 christos { "movZ", { Cm, Rm } },
11166 1.1 christos },
11167 1.1 christos {
11168 1.1 christos /* MOD_0F23 */
11169 1.1 christos { Bad_Opcode },
11170 1.1 christos { "movZ", { Dm, Rm } },
11171 1.1 christos },
11172 1.1 christos {
11173 1.1 christos /* MOD_0F24 */
11174 1.1.1.1.8.1 tls { Bad_Opcode },
11175 1.1 christos { "movL", { Rd, Td } },
11176 1.1 christos },
11177 1.1 christos {
11178 1.1 christos /* MOD_0F26 */
11179 1.1 christos { Bad_Opcode },
11180 1.1 christos { "movL", { Td, Rd } },
11181 1.1 christos },
11182 1.1 christos {
11183 1.1 christos /* MOD_0F2B_PREFIX_0 */
11184 1.1 christos {"movntps", { Mx, XM } },
11185 1.1 christos },
11186 1.1 christos {
11187 1.1 christos /* MOD_0F2B_PREFIX_1 */
11188 1.1 christos {"movntss", { Md, XM } },
11189 1.1 christos },
11190 1.1 christos {
11191 1.1 christos /* MOD_0F2B_PREFIX_2 */
11192 1.1 christos {"movntpd", { Mx, XM } },
11193 1.1 christos },
11194 1.1 christos {
11195 1.1 christos /* MOD_0F2B_PREFIX_3 */
11196 1.1 christos {"movntsd", { Mq, XM } },
11197 1.1 christos },
11198 1.1 christos {
11199 1.1 christos /* MOD_0F51 */
11200 1.1 christos { Bad_Opcode },
11201 1.1 christos { "movmskpX", { Gdq, XS } },
11202 1.1 christos },
11203 1.1 christos {
11204 1.1 christos /* MOD_0F71_REG_2 */
11205 1.1 christos { Bad_Opcode },
11206 1.1 christos { "psrlw", { MS, Ib } },
11207 1.1 christos },
11208 1.1 christos {
11209 1.1 christos /* MOD_0F71_REG_4 */
11210 1.1 christos { Bad_Opcode },
11211 1.1 christos { "psraw", { MS, Ib } },
11212 1.1 christos },
11213 1.1 christos {
11214 1.1 christos /* MOD_0F71_REG_6 */
11215 1.1 christos { Bad_Opcode },
11216 1.1 christos { "psllw", { MS, Ib } },
11217 1.1 christos },
11218 1.1 christos {
11219 1.1 christos /* MOD_0F72_REG_2 */
11220 1.1 christos { Bad_Opcode },
11221 1.1 christos { "psrld", { MS, Ib } },
11222 1.1 christos },
11223 1.1 christos {
11224 1.1 christos /* MOD_0F72_REG_4 */
11225 1.1 christos { Bad_Opcode },
11226 1.1 christos { "psrad", { MS, Ib } },
11227 1.1 christos },
11228 1.1 christos {
11229 1.1 christos /* MOD_0F72_REG_6 */
11230 1.1 christos { Bad_Opcode },
11231 1.1 christos { "pslld", { MS, Ib } },
11232 1.1 christos },
11233 1.1 christos {
11234 1.1 christos /* MOD_0F73_REG_2 */
11235 1.1 christos { Bad_Opcode },
11236 1.1 christos { "psrlq", { MS, Ib } },
11237 1.1 christos },
11238 1.1 christos {
11239 1.1 christos /* MOD_0F73_REG_3 */
11240 1.1 christos { Bad_Opcode },
11241 1.1 christos { PREFIX_TABLE (PREFIX_0F73_REG_3) },
11242 1.1 christos },
11243 1.1 christos {
11244 1.1 christos /* MOD_0F73_REG_6 */
11245 1.1 christos { Bad_Opcode },
11246 1.1 christos { "psllq", { MS, Ib } },
11247 1.1 christos },
11248 1.1 christos {
11249 1.1 christos /* MOD_0F73_REG_7 */
11250 1.1 christos { Bad_Opcode },
11251 1.1 christos { PREFIX_TABLE (PREFIX_0F73_REG_7) },
11252 1.1 christos },
11253 1.1 christos {
11254 1.1 christos /* MOD_0FAE_REG_0 */
11255 1.1 christos { "fxsave", { FXSAVE } },
11256 1.1 christos { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
11257 1.1 christos },
11258 1.1 christos {
11259 1.1 christos /* MOD_0FAE_REG_1 */
11260 1.1 christos { "fxrstor", { FXSAVE } },
11261 1.1 christos { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
11262 1.1 christos },
11263 1.1 christos {
11264 1.1 christos /* MOD_0FAE_REG_2 */
11265 1.1 christos { "ldmxcsr", { Md } },
11266 1.1 christos { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
11267 1.1 christos },
11268 1.1 christos {
11269 1.1 christos /* MOD_0FAE_REG_3 */
11270 1.1 christos { "stmxcsr", { Md } },
11271 1.1 christos { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
11272 1.1 christos },
11273 1.1 christos {
11274 1.1 christos /* MOD_0FAE_REG_4 */
11275 1.1 christos { "xsave", { FXSAVE } },
11276 1.1 christos },
11277 1.1 christos {
11278 1.1 christos /* MOD_0FAE_REG_5 */
11279 1.1 christos { "xrstor", { FXSAVE } },
11280 1.1 christos { RM_TABLE (RM_0FAE_REG_5) },
11281 1.1 christos },
11282 1.1 christos {
11283 1.1 christos /* MOD_0FAE_REG_6 */
11284 1.1 christos { "xsaveopt", { FXSAVE } },
11285 1.1 christos { RM_TABLE (RM_0FAE_REG_6) },
11286 1.1 christos },
11287 1.1 christos {
11288 1.1 christos /* MOD_0FAE_REG_7 */
11289 1.1 christos { "clflush", { Mb } },
11290 1.1 christos { RM_TABLE (RM_0FAE_REG_7) },
11291 1.1 christos },
11292 1.1 christos {
11293 1.1 christos /* MOD_0FB2 */
11294 1.1 christos { "lssS", { Gv, Mp } },
11295 1.1 christos },
11296 1.1 christos {
11297 1.1 christos /* MOD_0FB4 */
11298 1.1 christos { "lfsS", { Gv, Mp } },
11299 1.1 christos },
11300 1.1 christos {
11301 1.1 christos /* MOD_0FB5 */
11302 1.1 christos { "lgsS", { Gv, Mp } },
11303 1.1 christos },
11304 1.1 christos {
11305 1.1 christos /* MOD_0FC7_REG_6 */
11306 1.1 christos { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
11307 1.1 christos { "rdrand", { Ev } },
11308 1.1 christos },
11309 1.1 christos {
11310 1.1 christos /* MOD_0FC7_REG_7 */
11311 1.1 christos { "vmptrst", { Mq } },
11312 1.1.1.1.8.1 tls { "rdseed", { Ev } },
11313 1.1 christos },
11314 1.1 christos {
11315 1.1 christos /* MOD_0FD7 */
11316 1.1 christos { Bad_Opcode },
11317 1.1 christos { "pmovmskb", { Gdq, MS } },
11318 1.1 christos },
11319 1.1 christos {
11320 1.1 christos /* MOD_0FE7_PREFIX_2 */
11321 1.1 christos { "movntdq", { Mx, XM } },
11322 1.1 christos },
11323 1.1 christos {
11324 1.1 christos /* MOD_0FF0_PREFIX_3 */
11325 1.1 christos { "lddqu", { XM, M } },
11326 1.1 christos },
11327 1.1 christos {
11328 1.1 christos /* MOD_0F382A_PREFIX_2 */
11329 1.1 christos { "movntdqa", { XM, Mx } },
11330 1.1 christos },
11331 1.1 christos {
11332 1.1 christos /* MOD_62_32BIT */
11333 1.1 christos { "bound{S|}", { Gv, Ma } },
11334 1.1.1.1.8.1 tls { EVEX_TABLE (EVEX_0F) },
11335 1.1 christos },
11336 1.1 christos {
11337 1.1 christos /* MOD_C4_32BIT */
11338 1.1 christos { "lesS", { Gv, Mp } },
11339 1.1 christos { VEX_C4_TABLE (VEX_0F) },
11340 1.1 christos },
11341 1.1 christos {
11342 1.1 christos /* MOD_C5_32BIT */
11343 1.1 christos { "ldsS", { Gv, Mp } },
11344 1.1 christos { VEX_C5_TABLE (VEX_0F) },
11345 1.1 christos },
11346 1.1 christos {
11347 1.1 christos /* MOD_VEX_0F12_PREFIX_0 */
11348 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
11349 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
11350 1.1 christos },
11351 1.1 christos {
11352 1.1 christos /* MOD_VEX_0F13 */
11353 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
11354 1.1 christos },
11355 1.1 christos {
11356 1.1 christos /* MOD_VEX_0F16_PREFIX_0 */
11357 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
11358 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
11359 1.1 christos },
11360 1.1 christos {
11361 1.1 christos /* MOD_VEX_0F17 */
11362 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
11363 1.1 christos },
11364 1.1 christos {
11365 1.1 christos /* MOD_VEX_0F2B */
11366 1.1 christos { VEX_W_TABLE (VEX_W_0F2B_M_0) },
11367 1.1 christos },
11368 1.1 christos {
11369 1.1 christos /* MOD_VEX_0F50 */
11370 1.1 christos { Bad_Opcode },
11371 1.1 christos { VEX_W_TABLE (VEX_W_0F50_M_0) },
11372 1.1 christos },
11373 1.1 christos {
11374 1.1 christos /* MOD_VEX_0F71_REG_2 */
11375 1.1 christos { Bad_Opcode },
11376 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
11377 1.1 christos },
11378 1.1 christos {
11379 1.1 christos /* MOD_VEX_0F71_REG_4 */
11380 1.1 christos { Bad_Opcode },
11381 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
11382 1.1 christos },
11383 1.1 christos {
11384 1.1 christos /* MOD_VEX_0F71_REG_6 */
11385 1.1 christos { Bad_Opcode },
11386 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
11387 1.1 christos },
11388 1.1 christos {
11389 1.1 christos /* MOD_VEX_0F72_REG_2 */
11390 1.1 christos { Bad_Opcode },
11391 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
11392 1.1 christos },
11393 1.1 christos {
11394 1.1 christos /* MOD_VEX_0F72_REG_4 */
11395 1.1 christos { Bad_Opcode },
11396 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
11397 1.1 christos },
11398 1.1 christos {
11399 1.1 christos /* MOD_VEX_0F72_REG_6 */
11400 1.1 christos { Bad_Opcode },
11401 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
11402 1.1 christos },
11403 1.1 christos {
11404 1.1 christos /* MOD_VEX_0F73_REG_2 */
11405 1.1 christos { Bad_Opcode },
11406 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
11407 1.1 christos },
11408 1.1 christos {
11409 1.1 christos /* MOD_VEX_0F73_REG_3 */
11410 1.1 christos { Bad_Opcode },
11411 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
11412 1.1 christos },
11413 1.1 christos {
11414 1.1 christos /* MOD_VEX_0F73_REG_6 */
11415 1.1 christos { Bad_Opcode },
11416 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
11417 1.1 christos },
11418 1.1 christos {
11419 1.1 christos /* MOD_VEX_0F73_REG_7 */
11420 1.1 christos { Bad_Opcode },
11421 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
11422 1.1 christos },
11423 1.1 christos {
11424 1.1 christos /* MOD_VEX_0FAE_REG_2 */
11425 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
11426 1.1 christos },
11427 1.1 christos {
11428 1.1 christos /* MOD_VEX_0FAE_REG_3 */
11429 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
11430 1.1 christos },
11431 1.1 christos {
11432 1.1 christos /* MOD_VEX_0FD7_PREFIX_2 */
11433 1.1 christos { Bad_Opcode },
11434 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
11435 1.1 christos },
11436 1.1 christos {
11437 1.1 christos /* MOD_VEX_0FE7_PREFIX_2 */
11438 1.1 christos { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
11439 1.1 christos },
11440 1.1 christos {
11441 1.1 christos /* MOD_VEX_0FF0_PREFIX_3 */
11442 1.1 christos { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
11443 1.1 christos },
11444 1.1 christos {
11445 1.1 christos /* MOD_VEX_0F381A_PREFIX_2 */
11446 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
11447 1.1 christos },
11448 1.1 christos {
11449 1.1 christos /* MOD_VEX_0F382A_PREFIX_2 */
11450 1.1.1.1.8.1 tls { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
11451 1.1 christos },
11452 1.1 christos {
11453 1.1 christos /* MOD_VEX_0F382C_PREFIX_2 */
11454 1.1 christos { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
11455 1.1 christos },
11456 1.1 christos {
11457 1.1 christos /* MOD_VEX_0F382D_PREFIX_2 */
11458 1.1 christos { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
11459 1.1 christos },
11460 1.1 christos {
11461 1.1 christos /* MOD_VEX_0F382E_PREFIX_2 */
11462 1.1 christos { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
11463 1.1 christos },
11464 1.1 christos {
11465 1.1 christos /* MOD_VEX_0F382F_PREFIX_2 */
11466 1.1 christos { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
11467 1.1 christos },
11468 1.1.1.1.8.1 tls {
11469 1.1.1.1.8.1 tls /* MOD_VEX_0F385A_PREFIX_2 */
11470 1.1.1.1.8.1 tls { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
11471 1.1.1.1.8.1 tls },
11472 1.1.1.1.8.1 tls {
11473 1.1.1.1.8.1 tls /* MOD_VEX_0F388C_PREFIX_2 */
11474 1.1.1.1.8.1 tls { "vpmaskmov%LW", { XM, Vex, Mx } },
11475 1.1.1.1.8.1 tls },
11476 1.1.1.1.8.1 tls {
11477 1.1.1.1.8.1 tls /* MOD_VEX_0F388E_PREFIX_2 */
11478 1.1.1.1.8.1 tls { "vpmaskmov%LW", { Mx, Vex, XM } },
11479 1.1.1.1.8.1 tls },
11480 1.1.1.1.8.1 tls #define NEED_MOD_TABLE
11481 1.1.1.1.8.1 tls #include "i386-dis-evex.h"
11482 1.1.1.1.8.1 tls #undef NEED_MOD_TABLE
11483 1.1 christos };
11484 1.1 christos
11485 1.1 christos static const struct dis386 rm_table[][8] = {
11486 1.1 christos {
11487 1.1.1.1.8.1 tls /* RM_C6_REG_7 */
11488 1.1.1.1.8.1 tls { "xabort", { Skip_MODRM, Ib } },
11489 1.1.1.1.8.1 tls },
11490 1.1.1.1.8.1 tls {
11491 1.1.1.1.8.1 tls /* RM_C7_REG_7 */
11492 1.1.1.1.8.1 tls { "xbeginT", { Skip_MODRM, Jv } },
11493 1.1.1.1.8.1 tls },
11494 1.1.1.1.8.1 tls {
11495 1.1 christos /* RM_0F01_REG_0 */
11496 1.1 christos { Bad_Opcode },
11497 1.1 christos { "vmcall", { Skip_MODRM } },
11498 1.1 christos { "vmlaunch", { Skip_MODRM } },
11499 1.1 christos { "vmresume", { Skip_MODRM } },
11500 1.1 christos { "vmxoff", { Skip_MODRM } },
11501 1.1 christos },
11502 1.1 christos {
11503 1.1 christos /* RM_0F01_REG_1 */
11504 1.1 christos { "monitor", { { OP_Monitor, 0 } } },
11505 1.1 christos { "mwait", { { OP_Mwait, 0 } } },
11506 1.1.1.1.8.1 tls { "clac", { Skip_MODRM } },
11507 1.1.1.1.8.1 tls { "stac", { Skip_MODRM } },
11508 1.1 christos },
11509 1.1 christos {
11510 1.1 christos /* RM_0F01_REG_2 */
11511 1.1 christos { "xgetbv", { Skip_MODRM } },
11512 1.1 christos { "xsetbv", { Skip_MODRM } },
11513 1.1.1.1.8.1 tls { Bad_Opcode },
11514 1.1.1.1.8.1 tls { Bad_Opcode },
11515 1.1.1.1.8.1 tls { "vmfunc", { Skip_MODRM } },
11516 1.1.1.1.8.1 tls { "xend", { Skip_MODRM } },
11517 1.1.1.1.8.1 tls { "xtest", { Skip_MODRM } },
11518 1.1.1.1.8.1 tls { Bad_Opcode },
11519 1.1 christos },
11520 1.1 christos {
11521 1.1 christos /* RM_0F01_REG_3 */
11522 1.1 christos { "vmrun", { Skip_MODRM } },
11523 1.1 christos { "vmmcall", { Skip_MODRM } },
11524 1.1 christos { "vmload", { Skip_MODRM } },
11525 1.1 christos { "vmsave", { Skip_MODRM } },
11526 1.1 christos { "stgi", { Skip_MODRM } },
11527 1.1 christos { "clgi", { Skip_MODRM } },
11528 1.1 christos { "skinit", { Skip_MODRM } },
11529 1.1 christos { "invlpga", { Skip_MODRM } },
11530 1.1 christos },
11531 1.1 christos {
11532 1.1 christos /* RM_0F01_REG_7 */
11533 1.1 christos { "swapgs", { Skip_MODRM } },
11534 1.1 christos { "rdtscp", { Skip_MODRM } },
11535 1.1 christos },
11536 1.1 christos {
11537 1.1 christos /* RM_0FAE_REG_5 */
11538 1.1 christos { "lfence", { Skip_MODRM } },
11539 1.1 christos },
11540 1.1 christos {
11541 1.1 christos /* RM_0FAE_REG_6 */
11542 1.1 christos { "mfence", { Skip_MODRM } },
11543 1.1 christos },
11544 1.1 christos {
11545 1.1 christos /* RM_0FAE_REG_7 */
11546 1.1 christos { "sfence", { Skip_MODRM } },
11547 1.1 christos },
11548 1.1 christos };
11549 1.1 christos
11550 1.1 christos #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
11551 1.1 christos
11552 1.1 christos /* We use the high bit to indicate different name for the same
11553 1.1 christos prefix. */
11554 1.1 christos #define ADDR16_PREFIX (0x67 | 0x100)
11555 1.1 christos #define ADDR32_PREFIX (0x67 | 0x200)
11556 1.1 christos #define DATA16_PREFIX (0x66 | 0x100)
11557 1.1 christos #define DATA32_PREFIX (0x66 | 0x200)
11558 1.1 christos #define REP_PREFIX (0xf3 | 0x100)
11559 1.1.1.1.8.1 tls #define XACQUIRE_PREFIX (0xf2 | 0x200)
11560 1.1.1.1.8.1 tls #define XRELEASE_PREFIX (0xf3 | 0x400)
11561 1.1.1.1.8.1 tls #define BND_PREFIX (0xf2 | 0x400)
11562 1.1 christos
11563 1.1 christos static int
11564 1.1 christos ckprefix (void)
11565 1.1 christos {
11566 1.1 christos int newrex, i, length;
11567 1.1 christos rex = 0;
11568 1.1 christos rex_ignored = 0;
11569 1.1 christos prefixes = 0;
11570 1.1 christos used_prefixes = 0;
11571 1.1 christos rex_used = 0;
11572 1.1 christos last_lock_prefix = -1;
11573 1.1 christos last_repz_prefix = -1;
11574 1.1 christos last_repnz_prefix = -1;
11575 1.1 christos last_data_prefix = -1;
11576 1.1 christos last_addr_prefix = -1;
11577 1.1 christos last_rex_prefix = -1;
11578 1.1 christos last_seg_prefix = -1;
11579 1.1 christos for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11580 1.1 christos all_prefixes[i] = 0;
11581 1.1 christos i = 0;
11582 1.1 christos length = 0;
11583 1.1 christos /* The maximum instruction length is 15bytes. */
11584 1.1 christos while (length < MAX_CODE_LENGTH - 1)
11585 1.1 christos {
11586 1.1 christos FETCH_DATA (the_info, codep + 1);
11587 1.1 christos newrex = 0;
11588 1.1 christos switch (*codep)
11589 1.1 christos {
11590 1.1 christos /* REX prefixes family. */
11591 1.1 christos case 0x40:
11592 1.1 christos case 0x41:
11593 1.1 christos case 0x42:
11594 1.1 christos case 0x43:
11595 1.1 christos case 0x44:
11596 1.1 christos case 0x45:
11597 1.1 christos case 0x46:
11598 1.1 christos case 0x47:
11599 1.1 christos case 0x48:
11600 1.1 christos case 0x49:
11601 1.1 christos case 0x4a:
11602 1.1 christos case 0x4b:
11603 1.1 christos case 0x4c:
11604 1.1 christos case 0x4d:
11605 1.1 christos case 0x4e:
11606 1.1 christos case 0x4f:
11607 1.1 christos if (address_mode == mode_64bit)
11608 1.1 christos newrex = *codep;
11609 1.1 christos else
11610 1.1 christos return 1;
11611 1.1 christos last_rex_prefix = i;
11612 1.1 christos break;
11613 1.1 christos case 0xf3:
11614 1.1 christos prefixes |= PREFIX_REPZ;
11615 1.1 christos last_repz_prefix = i;
11616 1.1 christos break;
11617 1.1 christos case 0xf2:
11618 1.1 christos prefixes |= PREFIX_REPNZ;
11619 1.1 christos last_repnz_prefix = i;
11620 1.1 christos break;
11621 1.1 christos case 0xf0:
11622 1.1 christos prefixes |= PREFIX_LOCK;
11623 1.1 christos last_lock_prefix = i;
11624 1.1 christos break;
11625 1.1 christos case 0x2e:
11626 1.1 christos prefixes |= PREFIX_CS;
11627 1.1 christos last_seg_prefix = i;
11628 1.1 christos break;
11629 1.1 christos case 0x36:
11630 1.1 christos prefixes |= PREFIX_SS;
11631 1.1 christos last_seg_prefix = i;
11632 1.1 christos break;
11633 1.1 christos case 0x3e:
11634 1.1 christos prefixes |= PREFIX_DS;
11635 1.1 christos last_seg_prefix = i;
11636 1.1 christos break;
11637 1.1 christos case 0x26:
11638 1.1 christos prefixes |= PREFIX_ES;
11639 1.1 christos last_seg_prefix = i;
11640 1.1 christos break;
11641 1.1 christos case 0x64:
11642 1.1 christos prefixes |= PREFIX_FS;
11643 1.1 christos last_seg_prefix = i;
11644 1.1 christos break;
11645 1.1 christos case 0x65:
11646 1.1 christos prefixes |= PREFIX_GS;
11647 1.1 christos last_seg_prefix = i;
11648 1.1 christos break;
11649 1.1 christos case 0x66:
11650 1.1 christos prefixes |= PREFIX_DATA;
11651 1.1 christos last_data_prefix = i;
11652 1.1 christos break;
11653 1.1 christos case 0x67:
11654 1.1 christos prefixes |= PREFIX_ADDR;
11655 1.1 christos last_addr_prefix = i;
11656 1.1 christos break;
11657 1.1 christos case FWAIT_OPCODE:
11658 1.1 christos /* fwait is really an instruction. If there are prefixes
11659 1.1 christos before the fwait, they belong to the fwait, *not* to the
11660 1.1 christos following instruction. */
11661 1.1 christos if (prefixes || rex)
11662 1.1 christos {
11663 1.1 christos prefixes |= PREFIX_FWAIT;
11664 1.1 christos codep++;
11665 1.1.1.1.8.1 tls /* This ensures that the previous REX prefixes are noticed
11666 1.1.1.1.8.1 tls as unused prefixes, as in the return case below. */
11667 1.1.1.1.8.1 tls rex_used = rex;
11668 1.1 christos return 1;
11669 1.1 christos }
11670 1.1 christos prefixes = PREFIX_FWAIT;
11671 1.1 christos break;
11672 1.1 christos default:
11673 1.1 christos return 1;
11674 1.1 christos }
11675 1.1 christos /* Rex is ignored when followed by another prefix. */
11676 1.1 christos if (rex)
11677 1.1 christos {
11678 1.1 christos rex_used = rex;
11679 1.1 christos return 1;
11680 1.1 christos }
11681 1.1 christos if (*codep != FWAIT_OPCODE)
11682 1.1 christos all_prefixes[i++] = *codep;
11683 1.1 christos rex = newrex;
11684 1.1 christos codep++;
11685 1.1 christos length++;
11686 1.1 christos }
11687 1.1 christos return 0;
11688 1.1 christos }
11689 1.1 christos
11690 1.1 christos static int
11691 1.1 christos seg_prefix (int pref)
11692 1.1 christos {
11693 1.1 christos switch (pref)
11694 1.1 christos {
11695 1.1 christos case 0x2e:
11696 1.1 christos return PREFIX_CS;
11697 1.1 christos case 0x36:
11698 1.1 christos return PREFIX_SS;
11699 1.1 christos case 0x3e:
11700 1.1 christos return PREFIX_DS;
11701 1.1 christos case 0x26:
11702 1.1 christos return PREFIX_ES;
11703 1.1 christos case 0x64:
11704 1.1 christos return PREFIX_FS;
11705 1.1 christos case 0x65:
11706 1.1 christos return PREFIX_GS;
11707 1.1 christos default:
11708 1.1 christos return 0;
11709 1.1 christos }
11710 1.1 christos }
11711 1.1 christos
11712 1.1 christos /* Return the name of the prefix byte PREF, or NULL if PREF is not a
11713 1.1 christos prefix byte. */
11714 1.1 christos
11715 1.1 christos static const char *
11716 1.1 christos prefix_name (int pref, int sizeflag)
11717 1.1 christos {
11718 1.1 christos static const char *rexes [16] =
11719 1.1 christos {
11720 1.1 christos "rex", /* 0x40 */
11721 1.1 christos "rex.B", /* 0x41 */
11722 1.1 christos "rex.X", /* 0x42 */
11723 1.1 christos "rex.XB", /* 0x43 */
11724 1.1 christos "rex.R", /* 0x44 */
11725 1.1 christos "rex.RB", /* 0x45 */
11726 1.1 christos "rex.RX", /* 0x46 */
11727 1.1 christos "rex.RXB", /* 0x47 */
11728 1.1 christos "rex.W", /* 0x48 */
11729 1.1 christos "rex.WB", /* 0x49 */
11730 1.1 christos "rex.WX", /* 0x4a */
11731 1.1 christos "rex.WXB", /* 0x4b */
11732 1.1 christos "rex.WR", /* 0x4c */
11733 1.1 christos "rex.WRB", /* 0x4d */
11734 1.1 christos "rex.WRX", /* 0x4e */
11735 1.1 christos "rex.WRXB", /* 0x4f */
11736 1.1 christos };
11737 1.1 christos
11738 1.1 christos switch (pref)
11739 1.1 christos {
11740 1.1 christos /* REX prefixes family. */
11741 1.1 christos case 0x40:
11742 1.1 christos case 0x41:
11743 1.1 christos case 0x42:
11744 1.1 christos case 0x43:
11745 1.1 christos case 0x44:
11746 1.1 christos case 0x45:
11747 1.1 christos case 0x46:
11748 1.1 christos case 0x47:
11749 1.1 christos case 0x48:
11750 1.1 christos case 0x49:
11751 1.1 christos case 0x4a:
11752 1.1 christos case 0x4b:
11753 1.1 christos case 0x4c:
11754 1.1 christos case 0x4d:
11755 1.1 christos case 0x4e:
11756 1.1 christos case 0x4f:
11757 1.1 christos return rexes [pref - 0x40];
11758 1.1 christos case 0xf3:
11759 1.1 christos return "repz";
11760 1.1 christos case 0xf2:
11761 1.1 christos return "repnz";
11762 1.1 christos case 0xf0:
11763 1.1 christos return "lock";
11764 1.1 christos case 0x2e:
11765 1.1 christos return "cs";
11766 1.1 christos case 0x36:
11767 1.1 christos return "ss";
11768 1.1 christos case 0x3e:
11769 1.1 christos return "ds";
11770 1.1 christos case 0x26:
11771 1.1 christos return "es";
11772 1.1 christos case 0x64:
11773 1.1 christos return "fs";
11774 1.1 christos case 0x65:
11775 1.1 christos return "gs";
11776 1.1 christos case 0x66:
11777 1.1 christos return (sizeflag & DFLAG) ? "data16" : "data32";
11778 1.1 christos case 0x67:
11779 1.1 christos if (address_mode == mode_64bit)
11780 1.1 christos return (sizeflag & AFLAG) ? "addr32" : "addr64";
11781 1.1 christos else
11782 1.1 christos return (sizeflag & AFLAG) ? "addr16" : "addr32";
11783 1.1 christos case FWAIT_OPCODE:
11784 1.1 christos return "fwait";
11785 1.1 christos case ADDR16_PREFIX:
11786 1.1 christos return "addr16";
11787 1.1 christos case ADDR32_PREFIX:
11788 1.1 christos return "addr32";
11789 1.1 christos case DATA16_PREFIX:
11790 1.1 christos return "data16";
11791 1.1 christos case DATA32_PREFIX:
11792 1.1 christos return "data32";
11793 1.1 christos case REP_PREFIX:
11794 1.1 christos return "rep";
11795 1.1.1.1.8.1 tls case XACQUIRE_PREFIX:
11796 1.1.1.1.8.1 tls return "xacquire";
11797 1.1.1.1.8.1 tls case XRELEASE_PREFIX:
11798 1.1.1.1.8.1 tls return "xrelease";
11799 1.1.1.1.8.1 tls case BND_PREFIX:
11800 1.1.1.1.8.1 tls return "bnd";
11801 1.1 christos default:
11802 1.1 christos return NULL;
11803 1.1 christos }
11804 1.1 christos }
11805 1.1 christos
11806 1.1 christos static char op_out[MAX_OPERANDS][100];
11807 1.1 christos static int op_ad, op_index[MAX_OPERANDS];
11808 1.1 christos static int two_source_ops;
11809 1.1 christos static bfd_vma op_address[MAX_OPERANDS];
11810 1.1 christos static bfd_vma op_riprel[MAX_OPERANDS];
11811 1.1 christos static bfd_vma start_pc;
11812 1.1 christos
11813 1.1 christos /*
11814 1.1 christos * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
11815 1.1 christos * (see topic "Redundant prefixes" in the "Differences from 8086"
11816 1.1 christos * section of the "Virtual 8086 Mode" chapter.)
11817 1.1 christos * 'pc' should be the address of this instruction, it will
11818 1.1 christos * be used to print the target address if this is a relative jump or call
11819 1.1 christos * The function returns the length of this instruction in bytes.
11820 1.1 christos */
11821 1.1 christos
11822 1.1 christos static char intel_syntax;
11823 1.1 christos static char intel_mnemonic = !SYSV386_COMPAT;
11824 1.1 christos static char open_char;
11825 1.1 christos static char close_char;
11826 1.1 christos static char separator_char;
11827 1.1 christos static char scale_char;
11828 1.1 christos
11829 1.1 christos /* Here for backwards compatibility. When gdb stops using
11830 1.1 christos print_insn_i386_att and print_insn_i386_intel these functions can
11831 1.1 christos disappear, and print_insn_i386 be merged into print_insn. */
11832 1.1 christos int
11833 1.1 christos print_insn_i386_att (bfd_vma pc, disassemble_info *info)
11834 1.1 christos {
11835 1.1 christos intel_syntax = 0;
11836 1.1 christos
11837 1.1 christos return print_insn (pc, info);
11838 1.1 christos }
11839 1.1 christos
11840 1.1 christos int
11841 1.1 christos print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
11842 1.1 christos {
11843 1.1 christos intel_syntax = 1;
11844 1.1 christos
11845 1.1 christos return print_insn (pc, info);
11846 1.1 christos }
11847 1.1 christos
11848 1.1 christos int
11849 1.1 christos print_insn_i386 (bfd_vma pc, disassemble_info *info)
11850 1.1 christos {
11851 1.1 christos intel_syntax = -1;
11852 1.1 christos
11853 1.1 christos return print_insn (pc, info);
11854 1.1 christos }
11855 1.1 christos
11856 1.1 christos void
11857 1.1 christos print_i386_disassembler_options (FILE *stream)
11858 1.1 christos {
11859 1.1 christos fprintf (stream, _("\n\
11860 1.1 christos The following i386/x86-64 specific disassembler options are supported for use\n\
11861 1.1 christos with the -M switch (multiple options should be separated by commas):\n"));
11862 1.1 christos
11863 1.1 christos fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
11864 1.1 christos fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
11865 1.1 christos fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
11866 1.1 christos fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
11867 1.1 christos fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
11868 1.1 christos fprintf (stream, _(" att-mnemonic\n"
11869 1.1 christos " Display instruction in AT&T mnemonic\n"));
11870 1.1 christos fprintf (stream, _(" intel-mnemonic\n"
11871 1.1 christos " Display instruction in Intel mnemonic\n"));
11872 1.1 christos fprintf (stream, _(" addr64 Assume 64bit address size\n"));
11873 1.1 christos fprintf (stream, _(" addr32 Assume 32bit address size\n"));
11874 1.1 christos fprintf (stream, _(" addr16 Assume 16bit address size\n"));
11875 1.1 christos fprintf (stream, _(" data32 Assume 32bit data size\n"));
11876 1.1 christos fprintf (stream, _(" data16 Assume 16bit data size\n"));
11877 1.1 christos fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
11878 1.1 christos }
11879 1.1 christos
11880 1.1 christos /* Bad opcode. */
11881 1.1 christos static const struct dis386 bad_opcode = { "(bad)", { XX } };
11882 1.1 christos
11883 1.1 christos /* Get a pointer to struct dis386 with a valid name. */
11884 1.1 christos
11885 1.1 christos static const struct dis386 *
11886 1.1 christos get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
11887 1.1 christos {
11888 1.1 christos int vindex, vex_table_index;
11889 1.1 christos
11890 1.1 christos if (dp->name != NULL)
11891 1.1 christos return dp;
11892 1.1 christos
11893 1.1 christos switch (dp->op[0].bytemode)
11894 1.1 christos {
11895 1.1 christos case USE_REG_TABLE:
11896 1.1 christos dp = ®_table[dp->op[1].bytemode][modrm.reg];
11897 1.1 christos break;
11898 1.1 christos
11899 1.1 christos case USE_MOD_TABLE:
11900 1.1 christos vindex = modrm.mod == 0x3 ? 1 : 0;
11901 1.1 christos dp = &mod_table[dp->op[1].bytemode][vindex];
11902 1.1 christos break;
11903 1.1 christos
11904 1.1 christos case USE_RM_TABLE:
11905 1.1 christos dp = &rm_table[dp->op[1].bytemode][modrm.rm];
11906 1.1 christos break;
11907 1.1 christos
11908 1.1 christos case USE_PREFIX_TABLE:
11909 1.1 christos if (need_vex)
11910 1.1 christos {
11911 1.1 christos /* The prefix in VEX is implicit. */
11912 1.1 christos switch (vex.prefix)
11913 1.1 christos {
11914 1.1 christos case 0:
11915 1.1 christos vindex = 0;
11916 1.1 christos break;
11917 1.1 christos case REPE_PREFIX_OPCODE:
11918 1.1 christos vindex = 1;
11919 1.1 christos break;
11920 1.1 christos case DATA_PREFIX_OPCODE:
11921 1.1 christos vindex = 2;
11922 1.1 christos break;
11923 1.1 christos case REPNE_PREFIX_OPCODE:
11924 1.1 christos vindex = 3;
11925 1.1 christos break;
11926 1.1 christos default:
11927 1.1 christos abort ();
11928 1.1 christos break;
11929 1.1 christos }
11930 1.1 christos }
11931 1.1.1.1.8.1 tls else
11932 1.1 christos {
11933 1.1 christos vindex = 0;
11934 1.1 christos used_prefixes |= (prefixes & PREFIX_REPZ);
11935 1.1 christos if (prefixes & PREFIX_REPZ)
11936 1.1 christos {
11937 1.1 christos vindex = 1;
11938 1.1 christos all_prefixes[last_repz_prefix] = 0;
11939 1.1 christos }
11940 1.1 christos else
11941 1.1 christos {
11942 1.1 christos /* We should check PREFIX_REPNZ and PREFIX_REPZ before
11943 1.1 christos PREFIX_DATA. */
11944 1.1 christos used_prefixes |= (prefixes & PREFIX_REPNZ);
11945 1.1 christos if (prefixes & PREFIX_REPNZ)
11946 1.1 christos {
11947 1.1 christos vindex = 3;
11948 1.1 christos all_prefixes[last_repnz_prefix] = 0;
11949 1.1 christos }
11950 1.1 christos else
11951 1.1 christos {
11952 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
11953 1.1 christos if (prefixes & PREFIX_DATA)
11954 1.1 christos {
11955 1.1 christos vindex = 2;
11956 1.1 christos all_prefixes[last_data_prefix] = 0;
11957 1.1 christos }
11958 1.1 christos }
11959 1.1 christos }
11960 1.1 christos }
11961 1.1 christos dp = &prefix_table[dp->op[1].bytemode][vindex];
11962 1.1 christos break;
11963 1.1 christos
11964 1.1 christos case USE_X86_64_TABLE:
11965 1.1 christos vindex = address_mode == mode_64bit ? 1 : 0;
11966 1.1 christos dp = &x86_64_table[dp->op[1].bytemode][vindex];
11967 1.1 christos break;
11968 1.1 christos
11969 1.1 christos case USE_3BYTE_TABLE:
11970 1.1 christos FETCH_DATA (info, codep + 2);
11971 1.1 christos vindex = *codep++;
11972 1.1 christos dp = &three_byte_table[dp->op[1].bytemode][vindex];
11973 1.1 christos modrm.mod = (*codep >> 6) & 3;
11974 1.1 christos modrm.reg = (*codep >> 3) & 7;
11975 1.1 christos modrm.rm = *codep & 7;
11976 1.1 christos break;
11977 1.1 christos
11978 1.1 christos case USE_VEX_LEN_TABLE:
11979 1.1 christos if (!need_vex)
11980 1.1 christos abort ();
11981 1.1 christos
11982 1.1 christos switch (vex.length)
11983 1.1 christos {
11984 1.1 christos case 128:
11985 1.1 christos vindex = 0;
11986 1.1 christos break;
11987 1.1 christos case 256:
11988 1.1 christos vindex = 1;
11989 1.1 christos break;
11990 1.1 christos default:
11991 1.1 christos abort ();
11992 1.1 christos break;
11993 1.1 christos }
11994 1.1 christos
11995 1.1 christos dp = &vex_len_table[dp->op[1].bytemode][vindex];
11996 1.1 christos break;
11997 1.1 christos
11998 1.1 christos case USE_XOP_8F_TABLE:
11999 1.1 christos FETCH_DATA (info, codep + 3);
12000 1.1 christos /* All bits in the REX prefix are ignored. */
12001 1.1 christos rex_ignored = rex;
12002 1.1 christos rex = ~(*codep >> 5) & 0x7;
12003 1.1 christos
12004 1.1 christos /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
12005 1.1 christos switch ((*codep & 0x1f))
12006 1.1 christos {
12007 1.1 christos default:
12008 1.1 christos dp = &bad_opcode;
12009 1.1 christos return dp;
12010 1.1 christos case 0x8:
12011 1.1 christos vex_table_index = XOP_08;
12012 1.1 christos break;
12013 1.1 christos case 0x9:
12014 1.1 christos vex_table_index = XOP_09;
12015 1.1 christos break;
12016 1.1 christos case 0xa:
12017 1.1 christos vex_table_index = XOP_0A;
12018 1.1 christos break;
12019 1.1 christos }
12020 1.1 christos codep++;
12021 1.1 christos vex.w = *codep & 0x80;
12022 1.1 christos if (vex.w && address_mode == mode_64bit)
12023 1.1 christos rex |= REX_W;
12024 1.1 christos
12025 1.1 christos vex.register_specifier = (~(*codep >> 3)) & 0xf;
12026 1.1 christos if (address_mode != mode_64bit
12027 1.1 christos && vex.register_specifier > 0x7)
12028 1.1 christos {
12029 1.1 christos dp = &bad_opcode;
12030 1.1 christos return dp;
12031 1.1 christos }
12032 1.1 christos
12033 1.1 christos vex.length = (*codep & 0x4) ? 256 : 128;
12034 1.1 christos switch ((*codep & 0x3))
12035 1.1 christos {
12036 1.1 christos case 0:
12037 1.1 christos vex.prefix = 0;
12038 1.1 christos break;
12039 1.1 christos case 1:
12040 1.1 christos vex.prefix = DATA_PREFIX_OPCODE;
12041 1.1 christos break;
12042 1.1 christos case 2:
12043 1.1 christos vex.prefix = REPE_PREFIX_OPCODE;
12044 1.1 christos break;
12045 1.1 christos case 3:
12046 1.1 christos vex.prefix = REPNE_PREFIX_OPCODE;
12047 1.1 christos break;
12048 1.1 christos }
12049 1.1 christos need_vex = 1;
12050 1.1 christos need_vex_reg = 1;
12051 1.1 christos codep++;
12052 1.1 christos vindex = *codep++;
12053 1.1 christos dp = &xop_table[vex_table_index][vindex];
12054 1.1 christos
12055 1.1 christos FETCH_DATA (info, codep + 1);
12056 1.1 christos modrm.mod = (*codep >> 6) & 3;
12057 1.1 christos modrm.reg = (*codep >> 3) & 7;
12058 1.1 christos modrm.rm = *codep & 7;
12059 1.1 christos break;
12060 1.1 christos
12061 1.1 christos case USE_VEX_C4_TABLE:
12062 1.1.1.1.8.1 tls /* VEX prefix. */
12063 1.1 christos FETCH_DATA (info, codep + 3);
12064 1.1 christos /* All bits in the REX prefix are ignored. */
12065 1.1 christos rex_ignored = rex;
12066 1.1 christos rex = ~(*codep >> 5) & 0x7;
12067 1.1 christos switch ((*codep & 0x1f))
12068 1.1 christos {
12069 1.1 christos default:
12070 1.1 christos dp = &bad_opcode;
12071 1.1 christos return dp;
12072 1.1 christos case 0x1:
12073 1.1 christos vex_table_index = VEX_0F;
12074 1.1 christos break;
12075 1.1 christos case 0x2:
12076 1.1 christos vex_table_index = VEX_0F38;
12077 1.1 christos break;
12078 1.1 christos case 0x3:
12079 1.1 christos vex_table_index = VEX_0F3A;
12080 1.1 christos break;
12081 1.1 christos }
12082 1.1 christos codep++;
12083 1.1 christos vex.w = *codep & 0x80;
12084 1.1 christos if (vex.w && address_mode == mode_64bit)
12085 1.1 christos rex |= REX_W;
12086 1.1 christos
12087 1.1 christos vex.register_specifier = (~(*codep >> 3)) & 0xf;
12088 1.1 christos if (address_mode != mode_64bit
12089 1.1 christos && vex.register_specifier > 0x7)
12090 1.1 christos {
12091 1.1 christos dp = &bad_opcode;
12092 1.1 christos return dp;
12093 1.1 christos }
12094 1.1 christos
12095 1.1 christos vex.length = (*codep & 0x4) ? 256 : 128;
12096 1.1 christos switch ((*codep & 0x3))
12097 1.1 christos {
12098 1.1 christos case 0:
12099 1.1 christos vex.prefix = 0;
12100 1.1 christos break;
12101 1.1 christos case 1:
12102 1.1 christos vex.prefix = DATA_PREFIX_OPCODE;
12103 1.1 christos break;
12104 1.1 christos case 2:
12105 1.1 christos vex.prefix = REPE_PREFIX_OPCODE;
12106 1.1 christos break;
12107 1.1 christos case 3:
12108 1.1 christos vex.prefix = REPNE_PREFIX_OPCODE;
12109 1.1 christos break;
12110 1.1 christos }
12111 1.1 christos need_vex = 1;
12112 1.1 christos need_vex_reg = 1;
12113 1.1 christos codep++;
12114 1.1 christos vindex = *codep++;
12115 1.1 christos dp = &vex_table[vex_table_index][vindex];
12116 1.1 christos /* There is no MODRM byte for VEX [82|77]. */
12117 1.1 christos if (vindex != 0x77 && vindex != 0x82)
12118 1.1 christos {
12119 1.1 christos FETCH_DATA (info, codep + 1);
12120 1.1 christos modrm.mod = (*codep >> 6) & 3;
12121 1.1 christos modrm.reg = (*codep >> 3) & 7;
12122 1.1 christos modrm.rm = *codep & 7;
12123 1.1 christos }
12124 1.1 christos break;
12125 1.1 christos
12126 1.1 christos case USE_VEX_C5_TABLE:
12127 1.1.1.1.8.1 tls /* VEX prefix. */
12128 1.1 christos FETCH_DATA (info, codep + 2);
12129 1.1 christos /* All bits in the REX prefix are ignored. */
12130 1.1 christos rex_ignored = rex;
12131 1.1 christos rex = (*codep & 0x80) ? 0 : REX_R;
12132 1.1 christos
12133 1.1 christos vex.register_specifier = (~(*codep >> 3)) & 0xf;
12134 1.1 christos if (address_mode != mode_64bit
12135 1.1 christos && vex.register_specifier > 0x7)
12136 1.1 christos {
12137 1.1 christos dp = &bad_opcode;
12138 1.1 christos return dp;
12139 1.1 christos }
12140 1.1 christos
12141 1.1 christos vex.w = 0;
12142 1.1 christos
12143 1.1 christos vex.length = (*codep & 0x4) ? 256 : 128;
12144 1.1 christos switch ((*codep & 0x3))
12145 1.1 christos {
12146 1.1 christos case 0:
12147 1.1 christos vex.prefix = 0;
12148 1.1 christos break;
12149 1.1 christos case 1:
12150 1.1 christos vex.prefix = DATA_PREFIX_OPCODE;
12151 1.1 christos break;
12152 1.1 christos case 2:
12153 1.1 christos vex.prefix = REPE_PREFIX_OPCODE;
12154 1.1 christos break;
12155 1.1 christos case 3:
12156 1.1 christos vex.prefix = REPNE_PREFIX_OPCODE;
12157 1.1 christos break;
12158 1.1 christos }
12159 1.1 christos need_vex = 1;
12160 1.1 christos need_vex_reg = 1;
12161 1.1 christos codep++;
12162 1.1 christos vindex = *codep++;
12163 1.1 christos dp = &vex_table[dp->op[1].bytemode][vindex];
12164 1.1 christos /* There is no MODRM byte for VEX [82|77]. */
12165 1.1 christos if (vindex != 0x77 && vindex != 0x82)
12166 1.1 christos {
12167 1.1 christos FETCH_DATA (info, codep + 1);
12168 1.1 christos modrm.mod = (*codep >> 6) & 3;
12169 1.1 christos modrm.reg = (*codep >> 3) & 7;
12170 1.1 christos modrm.rm = *codep & 7;
12171 1.1 christos }
12172 1.1 christos break;
12173 1.1 christos
12174 1.1 christos case USE_VEX_W_TABLE:
12175 1.1 christos if (!need_vex)
12176 1.1 christos abort ();
12177 1.1 christos
12178 1.1 christos dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
12179 1.1 christos break;
12180 1.1 christos
12181 1.1.1.1.8.1 tls case USE_EVEX_TABLE:
12182 1.1.1.1.8.1 tls two_source_ops = 0;
12183 1.1.1.1.8.1 tls /* EVEX prefix. */
12184 1.1.1.1.8.1 tls vex.evex = 1;
12185 1.1.1.1.8.1 tls FETCH_DATA (info, codep + 4);
12186 1.1.1.1.8.1 tls /* All bits in the REX prefix are ignored. */
12187 1.1.1.1.8.1 tls rex_ignored = rex;
12188 1.1.1.1.8.1 tls /* The first byte after 0x62. */
12189 1.1.1.1.8.1 tls rex = ~(*codep >> 5) & 0x7;
12190 1.1.1.1.8.1 tls vex.r = *codep & 0x10;
12191 1.1.1.1.8.1 tls switch ((*codep & 0xf))
12192 1.1.1.1.8.1 tls {
12193 1.1.1.1.8.1 tls default:
12194 1.1.1.1.8.1 tls return &bad_opcode;
12195 1.1.1.1.8.1 tls case 0x1:
12196 1.1.1.1.8.1 tls vex_table_index = EVEX_0F;
12197 1.1.1.1.8.1 tls break;
12198 1.1.1.1.8.1 tls case 0x2:
12199 1.1.1.1.8.1 tls vex_table_index = EVEX_0F38;
12200 1.1.1.1.8.1 tls break;
12201 1.1.1.1.8.1 tls case 0x3:
12202 1.1.1.1.8.1 tls vex_table_index = EVEX_0F3A;
12203 1.1.1.1.8.1 tls break;
12204 1.1.1.1.8.1 tls }
12205 1.1.1.1.8.1 tls
12206 1.1.1.1.8.1 tls /* The second byte after 0x62. */
12207 1.1.1.1.8.1 tls codep++;
12208 1.1.1.1.8.1 tls vex.w = *codep & 0x80;
12209 1.1.1.1.8.1 tls if (vex.w && address_mode == mode_64bit)
12210 1.1.1.1.8.1 tls rex |= REX_W;
12211 1.1.1.1.8.1 tls
12212 1.1.1.1.8.1 tls vex.register_specifier = (~(*codep >> 3)) & 0xf;
12213 1.1.1.1.8.1 tls if (address_mode != mode_64bit)
12214 1.1.1.1.8.1 tls {
12215 1.1.1.1.8.1 tls /* In 16/32-bit mode silently ignore following bits. */
12216 1.1.1.1.8.1 tls rex &= ~REX_B;
12217 1.1.1.1.8.1 tls vex.r = 1;
12218 1.1.1.1.8.1 tls vex.v = 1;
12219 1.1.1.1.8.1 tls vex.register_specifier &= 0x7;
12220 1.1.1.1.8.1 tls }
12221 1.1.1.1.8.1 tls
12222 1.1.1.1.8.1 tls /* The U bit. */
12223 1.1.1.1.8.1 tls if (!(*codep & 0x4))
12224 1.1.1.1.8.1 tls return &bad_opcode;
12225 1.1.1.1.8.1 tls
12226 1.1.1.1.8.1 tls switch ((*codep & 0x3))
12227 1.1.1.1.8.1 tls {
12228 1.1.1.1.8.1 tls case 0:
12229 1.1.1.1.8.1 tls vex.prefix = 0;
12230 1.1.1.1.8.1 tls break;
12231 1.1.1.1.8.1 tls case 1:
12232 1.1.1.1.8.1 tls vex.prefix = DATA_PREFIX_OPCODE;
12233 1.1.1.1.8.1 tls break;
12234 1.1.1.1.8.1 tls case 2:
12235 1.1.1.1.8.1 tls vex.prefix = REPE_PREFIX_OPCODE;
12236 1.1.1.1.8.1 tls break;
12237 1.1.1.1.8.1 tls case 3:
12238 1.1.1.1.8.1 tls vex.prefix = REPNE_PREFIX_OPCODE;
12239 1.1.1.1.8.1 tls break;
12240 1.1.1.1.8.1 tls }
12241 1.1.1.1.8.1 tls
12242 1.1.1.1.8.1 tls /* The third byte after 0x62. */
12243 1.1.1.1.8.1 tls codep++;
12244 1.1.1.1.8.1 tls
12245 1.1.1.1.8.1 tls /* Remember the static rounding bits. */
12246 1.1.1.1.8.1 tls vex.ll = (*codep >> 5) & 3;
12247 1.1.1.1.8.1 tls vex.b = (*codep & 0x10) != 0;
12248 1.1.1.1.8.1 tls
12249 1.1.1.1.8.1 tls vex.v = *codep & 0x8;
12250 1.1.1.1.8.1 tls vex.mask_register_specifier = *codep & 0x7;
12251 1.1.1.1.8.1 tls vex.zeroing = *codep & 0x80;
12252 1.1.1.1.8.1 tls
12253 1.1.1.1.8.1 tls need_vex = 1;
12254 1.1.1.1.8.1 tls need_vex_reg = 1;
12255 1.1.1.1.8.1 tls codep++;
12256 1.1.1.1.8.1 tls vindex = *codep++;
12257 1.1.1.1.8.1 tls dp = &evex_table[vex_table_index][vindex];
12258 1.1.1.1.8.1 tls FETCH_DATA (info, codep + 1);
12259 1.1.1.1.8.1 tls modrm.mod = (*codep >> 6) & 3;
12260 1.1.1.1.8.1 tls modrm.reg = (*codep >> 3) & 7;
12261 1.1.1.1.8.1 tls modrm.rm = *codep & 7;
12262 1.1.1.1.8.1 tls
12263 1.1.1.1.8.1 tls /* Set vector length. */
12264 1.1.1.1.8.1 tls if (modrm.mod == 3 && vex.b)
12265 1.1.1.1.8.1 tls vex.length = 512;
12266 1.1.1.1.8.1 tls else
12267 1.1.1.1.8.1 tls {
12268 1.1.1.1.8.1 tls switch (vex.ll)
12269 1.1.1.1.8.1 tls {
12270 1.1.1.1.8.1 tls case 0x0:
12271 1.1.1.1.8.1 tls vex.length = 128;
12272 1.1.1.1.8.1 tls break;
12273 1.1.1.1.8.1 tls case 0x1:
12274 1.1.1.1.8.1 tls vex.length = 256;
12275 1.1.1.1.8.1 tls break;
12276 1.1.1.1.8.1 tls case 0x2:
12277 1.1.1.1.8.1 tls vex.length = 512;
12278 1.1.1.1.8.1 tls break;
12279 1.1.1.1.8.1 tls default:
12280 1.1.1.1.8.1 tls return &bad_opcode;
12281 1.1.1.1.8.1 tls }
12282 1.1.1.1.8.1 tls }
12283 1.1.1.1.8.1 tls break;
12284 1.1.1.1.8.1 tls
12285 1.1 christos case 0:
12286 1.1 christos dp = &bad_opcode;
12287 1.1 christos break;
12288 1.1 christos
12289 1.1 christos default:
12290 1.1 christos abort ();
12291 1.1 christos }
12292 1.1 christos
12293 1.1 christos if (dp->name != NULL)
12294 1.1 christos return dp;
12295 1.1 christos else
12296 1.1 christos return get_valid_dis386 (dp, info);
12297 1.1 christos }
12298 1.1 christos
12299 1.1 christos static void
12300 1.1.1.1.8.1 tls get_sib (disassemble_info *info, int sizeflag)
12301 1.1 christos {
12302 1.1 christos /* If modrm.mod == 3, operand must be register. */
12303 1.1 christos if (need_modrm
12304 1.1.1.1.8.1 tls && ((sizeflag & AFLAG) || address_mode == mode_64bit)
12305 1.1 christos && modrm.mod != 3
12306 1.1 christos && modrm.rm == 4)
12307 1.1 christos {
12308 1.1 christos FETCH_DATA (info, codep + 2);
12309 1.1 christos sib.index = (codep [1] >> 3) & 7;
12310 1.1 christos sib.scale = (codep [1] >> 6) & 3;
12311 1.1 christos sib.base = codep [1] & 7;
12312 1.1 christos }
12313 1.1 christos }
12314 1.1 christos
12315 1.1 christos static int
12316 1.1 christos print_insn (bfd_vma pc, disassemble_info *info)
12317 1.1 christos {
12318 1.1 christos const struct dis386 *dp;
12319 1.1 christos int i;
12320 1.1 christos char *op_txt[MAX_OPERANDS];
12321 1.1 christos int needcomma;
12322 1.1 christos int sizeflag;
12323 1.1 christos const char *p;
12324 1.1 christos struct dis_private priv;
12325 1.1 christos int prefix_length;
12326 1.1 christos int default_prefixes;
12327 1.1 christos
12328 1.1.1.1.8.1 tls priv.orig_sizeflag = AFLAG | DFLAG;
12329 1.1.1.1.8.1 tls if ((info->mach & bfd_mach_i386_i386) != 0)
12330 1.1 christos address_mode = mode_32bit;
12331 1.1 christos else if (info->mach == bfd_mach_i386_i8086)
12332 1.1.1.1.8.1 tls {
12333 1.1.1.1.8.1 tls address_mode = mode_16bit;
12334 1.1.1.1.8.1 tls priv.orig_sizeflag = 0;
12335 1.1.1.1.8.1 tls }
12336 1.1 christos else
12337 1.1.1.1.8.1 tls address_mode = mode_64bit;
12338 1.1.1.1.8.1 tls
12339 1.1.1.1.8.1 tls if (intel_syntax == (char) -1)
12340 1.1.1.1.8.1 tls intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
12341 1.1 christos
12342 1.1 christos for (p = info->disassembler_options; p != NULL; )
12343 1.1 christos {
12344 1.1 christos if (CONST_STRNEQ (p, "x86-64"))
12345 1.1 christos {
12346 1.1 christos address_mode = mode_64bit;
12347 1.1 christos priv.orig_sizeflag = AFLAG | DFLAG;
12348 1.1 christos }
12349 1.1 christos else if (CONST_STRNEQ (p, "i386"))
12350 1.1 christos {
12351 1.1 christos address_mode = mode_32bit;
12352 1.1 christos priv.orig_sizeflag = AFLAG | DFLAG;
12353 1.1 christos }
12354 1.1 christos else if (CONST_STRNEQ (p, "i8086"))
12355 1.1 christos {
12356 1.1 christos address_mode = mode_16bit;
12357 1.1 christos priv.orig_sizeflag = 0;
12358 1.1 christos }
12359 1.1 christos else if (CONST_STRNEQ (p, "intel"))
12360 1.1 christos {
12361 1.1 christos intel_syntax = 1;
12362 1.1 christos if (CONST_STRNEQ (p + 5, "-mnemonic"))
12363 1.1 christos intel_mnemonic = 1;
12364 1.1 christos }
12365 1.1 christos else if (CONST_STRNEQ (p, "att"))
12366 1.1 christos {
12367 1.1 christos intel_syntax = 0;
12368 1.1 christos if (CONST_STRNEQ (p + 3, "-mnemonic"))
12369 1.1 christos intel_mnemonic = 0;
12370 1.1 christos }
12371 1.1 christos else if (CONST_STRNEQ (p, "addr"))
12372 1.1 christos {
12373 1.1 christos if (address_mode == mode_64bit)
12374 1.1 christos {
12375 1.1 christos if (p[4] == '3' && p[5] == '2')
12376 1.1 christos priv.orig_sizeflag &= ~AFLAG;
12377 1.1 christos else if (p[4] == '6' && p[5] == '4')
12378 1.1 christos priv.orig_sizeflag |= AFLAG;
12379 1.1 christos }
12380 1.1 christos else
12381 1.1 christos {
12382 1.1 christos if (p[4] == '1' && p[5] == '6')
12383 1.1 christos priv.orig_sizeflag &= ~AFLAG;
12384 1.1 christos else if (p[4] == '3' && p[5] == '2')
12385 1.1 christos priv.orig_sizeflag |= AFLAG;
12386 1.1 christos }
12387 1.1 christos }
12388 1.1 christos else if (CONST_STRNEQ (p, "data"))
12389 1.1 christos {
12390 1.1 christos if (p[4] == '1' && p[5] == '6')
12391 1.1 christos priv.orig_sizeflag &= ~DFLAG;
12392 1.1 christos else if (p[4] == '3' && p[5] == '2')
12393 1.1 christos priv.orig_sizeflag |= DFLAG;
12394 1.1 christos }
12395 1.1 christos else if (CONST_STRNEQ (p, "suffix"))
12396 1.1 christos priv.orig_sizeflag |= SUFFIX_ALWAYS;
12397 1.1 christos
12398 1.1 christos p = strchr (p, ',');
12399 1.1 christos if (p != NULL)
12400 1.1 christos p++;
12401 1.1 christos }
12402 1.1 christos
12403 1.1 christos if (intel_syntax)
12404 1.1 christos {
12405 1.1 christos names64 = intel_names64;
12406 1.1 christos names32 = intel_names32;
12407 1.1 christos names16 = intel_names16;
12408 1.1 christos names8 = intel_names8;
12409 1.1 christos names8rex = intel_names8rex;
12410 1.1 christos names_seg = intel_names_seg;
12411 1.1 christos names_mm = intel_names_mm;
12412 1.1.1.1.8.1 tls names_bnd = intel_names_bnd;
12413 1.1 christos names_xmm = intel_names_xmm;
12414 1.1 christos names_ymm = intel_names_ymm;
12415 1.1.1.1.8.1 tls names_zmm = intel_names_zmm;
12416 1.1 christos index64 = intel_index64;
12417 1.1 christos index32 = intel_index32;
12418 1.1.1.1.8.1 tls names_mask = intel_names_mask;
12419 1.1 christos index16 = intel_index16;
12420 1.1 christos open_char = '[';
12421 1.1 christos close_char = ']';
12422 1.1 christos separator_char = '+';
12423 1.1 christos scale_char = '*';
12424 1.1 christos }
12425 1.1 christos else
12426 1.1 christos {
12427 1.1 christos names64 = att_names64;
12428 1.1 christos names32 = att_names32;
12429 1.1 christos names16 = att_names16;
12430 1.1 christos names8 = att_names8;
12431 1.1 christos names8rex = att_names8rex;
12432 1.1 christos names_seg = att_names_seg;
12433 1.1 christos names_mm = att_names_mm;
12434 1.1.1.1.8.1 tls names_bnd = att_names_bnd;
12435 1.1 christos names_xmm = att_names_xmm;
12436 1.1 christos names_ymm = att_names_ymm;
12437 1.1.1.1.8.1 tls names_zmm = att_names_zmm;
12438 1.1 christos index64 = att_index64;
12439 1.1 christos index32 = att_index32;
12440 1.1.1.1.8.1 tls names_mask = att_names_mask;
12441 1.1 christos index16 = att_index16;
12442 1.1 christos open_char = '(';
12443 1.1 christos close_char = ')';
12444 1.1 christos separator_char = ',';
12445 1.1 christos scale_char = ',';
12446 1.1 christos }
12447 1.1 christos
12448 1.1 christos /* The output looks better if we put 7 bytes on a line, since that
12449 1.1 christos puts most long word instructions on a single line. Use 8 bytes
12450 1.1 christos for Intel L1OM. */
12451 1.1.1.1.8.1 tls if ((info->mach & bfd_mach_l1om) != 0)
12452 1.1 christos info->bytes_per_line = 8;
12453 1.1 christos else
12454 1.1 christos info->bytes_per_line = 7;
12455 1.1 christos
12456 1.1 christos info->private_data = &priv;
12457 1.1 christos priv.max_fetched = priv.the_buffer;
12458 1.1 christos priv.insn_start = pc;
12459 1.1 christos
12460 1.1 christos obuf[0] = 0;
12461 1.1 christos for (i = 0; i < MAX_OPERANDS; ++i)
12462 1.1 christos {
12463 1.1 christos op_out[i][0] = 0;
12464 1.1 christos op_index[i] = -1;
12465 1.1 christos }
12466 1.1 christos
12467 1.1 christos the_info = info;
12468 1.1 christos start_pc = pc;
12469 1.1 christos start_codep = priv.the_buffer;
12470 1.1 christos codep = priv.the_buffer;
12471 1.1 christos
12472 1.1 christos if (setjmp (priv.bailout) != 0)
12473 1.1 christos {
12474 1.1 christos const char *name;
12475 1.1 christos
12476 1.1 christos /* Getting here means we tried for data but didn't get it. That
12477 1.1 christos means we have an incomplete instruction of some sort. Just
12478 1.1 christos print the first byte as a prefix or a .byte pseudo-op. */
12479 1.1 christos if (codep > priv.the_buffer)
12480 1.1 christos {
12481 1.1 christos name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
12482 1.1 christos if (name != NULL)
12483 1.1 christos (*info->fprintf_func) (info->stream, "%s", name);
12484 1.1 christos else
12485 1.1 christos {
12486 1.1 christos /* Just print the first byte as a .byte instruction. */
12487 1.1 christos (*info->fprintf_func) (info->stream, ".byte 0x%x",
12488 1.1 christos (unsigned int) priv.the_buffer[0]);
12489 1.1 christos }
12490 1.1 christos
12491 1.1 christos return 1;
12492 1.1 christos }
12493 1.1 christos
12494 1.1 christos return -1;
12495 1.1 christos }
12496 1.1 christos
12497 1.1 christos obufp = obuf;
12498 1.1 christos sizeflag = priv.orig_sizeflag;
12499 1.1 christos
12500 1.1 christos if (!ckprefix () || rex_used)
12501 1.1 christos {
12502 1.1 christos /* Too many prefixes or unused REX prefixes. */
12503 1.1 christos for (i = 0;
12504 1.1.1.1.8.1 tls i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
12505 1.1 christos i++)
12506 1.1.1.1.8.1 tls (*info->fprintf_func) (info->stream, "%s%s",
12507 1.1.1.1.8.1 tls i == 0 ? "" : " ",
12508 1.1 christos prefix_name (all_prefixes[i], sizeflag));
12509 1.1.1.1.8.1 tls return i;
12510 1.1 christos }
12511 1.1 christos
12512 1.1 christos insn_codep = codep;
12513 1.1 christos
12514 1.1 christos FETCH_DATA (info, codep + 1);
12515 1.1 christos two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
12516 1.1 christos
12517 1.1 christos if (((prefixes & PREFIX_FWAIT)
12518 1.1 christos && ((*codep < 0xd8) || (*codep > 0xdf))))
12519 1.1 christos {
12520 1.1 christos (*info->fprintf_func) (info->stream, "fwait");
12521 1.1 christos return 1;
12522 1.1 christos }
12523 1.1 christos
12524 1.1 christos if (*codep == 0x0f)
12525 1.1 christos {
12526 1.1 christos unsigned char threebyte;
12527 1.1 christos FETCH_DATA (info, codep + 2);
12528 1.1 christos threebyte = *++codep;
12529 1.1 christos dp = &dis386_twobyte[threebyte];
12530 1.1 christos need_modrm = twobyte_has_modrm[*codep];
12531 1.1 christos codep++;
12532 1.1 christos }
12533 1.1 christos else
12534 1.1 christos {
12535 1.1 christos dp = &dis386[*codep];
12536 1.1 christos need_modrm = onebyte_has_modrm[*codep];
12537 1.1 christos codep++;
12538 1.1 christos }
12539 1.1 christos
12540 1.1 christos if ((prefixes & PREFIX_REPZ))
12541 1.1 christos used_prefixes |= PREFIX_REPZ;
12542 1.1 christos if ((prefixes & PREFIX_REPNZ))
12543 1.1 christos used_prefixes |= PREFIX_REPNZ;
12544 1.1 christos if ((prefixes & PREFIX_LOCK))
12545 1.1 christos used_prefixes |= PREFIX_LOCK;
12546 1.1 christos
12547 1.1 christos default_prefixes = 0;
12548 1.1 christos if (prefixes & PREFIX_ADDR)
12549 1.1 christos {
12550 1.1 christos sizeflag ^= AFLAG;
12551 1.1 christos if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
12552 1.1 christos {
12553 1.1 christos if ((sizeflag & AFLAG) || address_mode == mode_64bit)
12554 1.1 christos all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
12555 1.1 christos else
12556 1.1 christos all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
12557 1.1 christos default_prefixes |= PREFIX_ADDR;
12558 1.1 christos }
12559 1.1 christos }
12560 1.1 christos
12561 1.1 christos if ((prefixes & PREFIX_DATA))
12562 1.1 christos {
12563 1.1 christos sizeflag ^= DFLAG;
12564 1.1 christos if (dp->op[2].bytemode == cond_jump_mode
12565 1.1 christos && dp->op[0].bytemode == v_mode
12566 1.1 christos && !intel_syntax)
12567 1.1 christos {
12568 1.1 christos if (sizeflag & DFLAG)
12569 1.1 christos all_prefixes[last_data_prefix] = DATA32_PREFIX;
12570 1.1 christos else
12571 1.1 christos all_prefixes[last_data_prefix] = DATA16_PREFIX;
12572 1.1 christos default_prefixes |= PREFIX_DATA;
12573 1.1 christos }
12574 1.1 christos else if (rex & REX_W)
12575 1.1 christos {
12576 1.1 christos /* REX_W will override PREFIX_DATA. */
12577 1.1 christos default_prefixes |= PREFIX_DATA;
12578 1.1 christos }
12579 1.1 christos }
12580 1.1 christos
12581 1.1 christos if (need_modrm)
12582 1.1 christos {
12583 1.1 christos FETCH_DATA (info, codep + 1);
12584 1.1 christos modrm.mod = (*codep >> 6) & 3;
12585 1.1 christos modrm.reg = (*codep >> 3) & 7;
12586 1.1 christos modrm.rm = *codep & 7;
12587 1.1 christos }
12588 1.1 christos
12589 1.1 christos need_vex = 0;
12590 1.1 christos need_vex_reg = 0;
12591 1.1 christos vex_w_done = 0;
12592 1.1.1.1.8.1 tls vex.evex = 0;
12593 1.1 christos
12594 1.1 christos if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
12595 1.1 christos {
12596 1.1.1.1.8.1 tls get_sib (info, sizeflag);
12597 1.1 christos dofloat (sizeflag);
12598 1.1 christos }
12599 1.1 christos else
12600 1.1 christos {
12601 1.1 christos dp = get_valid_dis386 (dp, info);
12602 1.1 christos if (dp != NULL && putop (dp->name, sizeflag) == 0)
12603 1.1.1.1.8.1 tls {
12604 1.1.1.1.8.1 tls get_sib (info, sizeflag);
12605 1.1 christos for (i = 0; i < MAX_OPERANDS; ++i)
12606 1.1 christos {
12607 1.1 christos obufp = op_out[i];
12608 1.1 christos op_ad = MAX_OPERANDS - 1 - i;
12609 1.1 christos if (dp->op[i].rtn)
12610 1.1 christos (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
12611 1.1.1.1.8.1 tls /* For EVEX instruction after the last operand masking
12612 1.1.1.1.8.1 tls should be printed. */
12613 1.1.1.1.8.1 tls if (i == 0 && vex.evex)
12614 1.1.1.1.8.1 tls {
12615 1.1.1.1.8.1 tls /* Don't print {%k0}. */
12616 1.1.1.1.8.1 tls if (vex.mask_register_specifier)
12617 1.1.1.1.8.1 tls {
12618 1.1.1.1.8.1 tls oappend ("{");
12619 1.1.1.1.8.1 tls oappend (names_mask[vex.mask_register_specifier]);
12620 1.1.1.1.8.1 tls oappend ("}");
12621 1.1.1.1.8.1 tls }
12622 1.1.1.1.8.1 tls if (vex.zeroing)
12623 1.1.1.1.8.1 tls oappend ("{z}");
12624 1.1.1.1.8.1 tls }
12625 1.1 christos }
12626 1.1 christos }
12627 1.1 christos }
12628 1.1 christos
12629 1.1 christos /* See if any prefixes were not used. If so, print the first one
12630 1.1 christos separately. If we don't do this, we'll wind up printing an
12631 1.1 christos instruction stream which does not precisely correspond to the
12632 1.1 christos bytes we are disassembling. */
12633 1.1 christos if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
12634 1.1 christos {
12635 1.1 christos for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12636 1.1 christos if (all_prefixes[i])
12637 1.1 christos {
12638 1.1 christos const char *name;
12639 1.1 christos name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
12640 1.1 christos if (name == NULL)
12641 1.1 christos name = INTERNAL_DISASSEMBLER_ERROR;
12642 1.1 christos (*info->fprintf_func) (info->stream, "%s", name);
12643 1.1 christos return 1;
12644 1.1 christos }
12645 1.1 christos }
12646 1.1 christos
12647 1.1 christos /* Check if the REX prefix is used. */
12648 1.1.1.1.8.1 tls if (rex_ignored == 0 && (rex ^ rex_used) == 0 && last_rex_prefix >= 0)
12649 1.1 christos all_prefixes[last_rex_prefix] = 0;
12650 1.1 christos
12651 1.1 christos /* Check if the SEG prefix is used. */
12652 1.1 christos if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
12653 1.1 christos | PREFIX_FS | PREFIX_GS)) != 0
12654 1.1 christos && (used_prefixes
12655 1.1 christos & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
12656 1.1 christos all_prefixes[last_seg_prefix] = 0;
12657 1.1 christos
12658 1.1 christos /* Check if the ADDR prefix is used. */
12659 1.1 christos if ((prefixes & PREFIX_ADDR) != 0
12660 1.1 christos && (used_prefixes & PREFIX_ADDR) != 0)
12661 1.1 christos all_prefixes[last_addr_prefix] = 0;
12662 1.1 christos
12663 1.1 christos /* Check if the DATA prefix is used. */
12664 1.1 christos if ((prefixes & PREFIX_DATA) != 0
12665 1.1 christos && (used_prefixes & PREFIX_DATA) != 0)
12666 1.1 christos all_prefixes[last_data_prefix] = 0;
12667 1.1 christos
12668 1.1 christos prefix_length = 0;
12669 1.1 christos for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
12670 1.1 christos if (all_prefixes[i])
12671 1.1 christos {
12672 1.1 christos const char *name;
12673 1.1 christos name = prefix_name (all_prefixes[i], sizeflag);
12674 1.1 christos if (name == NULL)
12675 1.1 christos abort ();
12676 1.1 christos prefix_length += strlen (name) + 1;
12677 1.1 christos (*info->fprintf_func) (info->stream, "%s ", name);
12678 1.1 christos }
12679 1.1 christos
12680 1.1 christos /* Check maximum code length. */
12681 1.1 christos if ((codep - start_codep) > MAX_CODE_LENGTH)
12682 1.1 christos {
12683 1.1 christos (*info->fprintf_func) (info->stream, "(bad)");
12684 1.1 christos return MAX_CODE_LENGTH;
12685 1.1 christos }
12686 1.1 christos
12687 1.1 christos obufp = mnemonicendp;
12688 1.1 christos for (i = strlen (obuf) + prefix_length; i < 6; i++)
12689 1.1 christos oappend (" ");
12690 1.1 christos oappend (" ");
12691 1.1 christos (*info->fprintf_func) (info->stream, "%s", obuf);
12692 1.1 christos
12693 1.1 christos /* The enter and bound instructions are printed with operands in the same
12694 1.1 christos order as the intel book; everything else is printed in reverse order. */
12695 1.1 christos if (intel_syntax || two_source_ops)
12696 1.1 christos {
12697 1.1 christos bfd_vma riprel;
12698 1.1 christos
12699 1.1 christos for (i = 0; i < MAX_OPERANDS; ++i)
12700 1.1.1.1.8.1 tls op_txt[i] = op_out[i];
12701 1.1 christos
12702 1.1 christos for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
12703 1.1 christos {
12704 1.1.1.1.8.1 tls op_ad = op_index[i];
12705 1.1.1.1.8.1 tls op_index[i] = op_index[MAX_OPERANDS - 1 - i];
12706 1.1.1.1.8.1 tls op_index[MAX_OPERANDS - 1 - i] = op_ad;
12707 1.1 christos riprel = op_riprel[i];
12708 1.1 christos op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
12709 1.1 christos op_riprel[MAX_OPERANDS - 1 - i] = riprel;
12710 1.1 christos }
12711 1.1 christos }
12712 1.1 christos else
12713 1.1 christos {
12714 1.1 christos for (i = 0; i < MAX_OPERANDS; ++i)
12715 1.1.1.1.8.1 tls op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
12716 1.1 christos }
12717 1.1 christos
12718 1.1 christos needcomma = 0;
12719 1.1 christos for (i = 0; i < MAX_OPERANDS; ++i)
12720 1.1 christos if (*op_txt[i])
12721 1.1 christos {
12722 1.1 christos if (needcomma)
12723 1.1 christos (*info->fprintf_func) (info->stream, ",");
12724 1.1 christos if (op_index[i] != -1 && !op_riprel[i])
12725 1.1 christos (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
12726 1.1 christos else
12727 1.1 christos (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
12728 1.1 christos needcomma = 1;
12729 1.1 christos }
12730 1.1 christos
12731 1.1 christos for (i = 0; i < MAX_OPERANDS; i++)
12732 1.1 christos if (op_index[i] != -1 && op_riprel[i])
12733 1.1 christos {
12734 1.1 christos (*info->fprintf_func) (info->stream, " # ");
12735 1.1 christos (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
12736 1.1 christos + op_address[op_index[i]]), info);
12737 1.1 christos break;
12738 1.1 christos }
12739 1.1 christos return codep - priv.the_buffer;
12740 1.1 christos }
12741 1.1 christos
12742 1.1 christos static const char *float_mem[] = {
12743 1.1 christos /* d8 */
12744 1.1 christos "fadd{s|}",
12745 1.1 christos "fmul{s|}",
12746 1.1 christos "fcom{s|}",
12747 1.1 christos "fcomp{s|}",
12748 1.1 christos "fsub{s|}",
12749 1.1 christos "fsubr{s|}",
12750 1.1 christos "fdiv{s|}",
12751 1.1 christos "fdivr{s|}",
12752 1.1 christos /* d9 */
12753 1.1 christos "fld{s|}",
12754 1.1 christos "(bad)",
12755 1.1 christos "fst{s|}",
12756 1.1 christos "fstp{s|}",
12757 1.1 christos "fldenvIC",
12758 1.1 christos "fldcw",
12759 1.1 christos "fNstenvIC",
12760 1.1 christos "fNstcw",
12761 1.1 christos /* da */
12762 1.1 christos "fiadd{l|}",
12763 1.1 christos "fimul{l|}",
12764 1.1 christos "ficom{l|}",
12765 1.1 christos "ficomp{l|}",
12766 1.1 christos "fisub{l|}",
12767 1.1 christos "fisubr{l|}",
12768 1.1 christos "fidiv{l|}",
12769 1.1 christos "fidivr{l|}",
12770 1.1 christos /* db */
12771 1.1 christos "fild{l|}",
12772 1.1 christos "fisttp{l|}",
12773 1.1 christos "fist{l|}",
12774 1.1 christos "fistp{l|}",
12775 1.1 christos "(bad)",
12776 1.1 christos "fld{t||t|}",
12777 1.1 christos "(bad)",
12778 1.1 christos "fstp{t||t|}",
12779 1.1 christos /* dc */
12780 1.1 christos "fadd{l|}",
12781 1.1 christos "fmul{l|}",
12782 1.1 christos "fcom{l|}",
12783 1.1 christos "fcomp{l|}",
12784 1.1 christos "fsub{l|}",
12785 1.1 christos "fsubr{l|}",
12786 1.1 christos "fdiv{l|}",
12787 1.1 christos "fdivr{l|}",
12788 1.1 christos /* dd */
12789 1.1 christos "fld{l|}",
12790 1.1 christos "fisttp{ll|}",
12791 1.1 christos "fst{l||}",
12792 1.1 christos "fstp{l|}",
12793 1.1 christos "frstorIC",
12794 1.1 christos "(bad)",
12795 1.1 christos "fNsaveIC",
12796 1.1 christos "fNstsw",
12797 1.1 christos /* de */
12798 1.1 christos "fiadd",
12799 1.1 christos "fimul",
12800 1.1 christos "ficom",
12801 1.1 christos "ficomp",
12802 1.1 christos "fisub",
12803 1.1 christos "fisubr",
12804 1.1 christos "fidiv",
12805 1.1 christos "fidivr",
12806 1.1 christos /* df */
12807 1.1 christos "fild",
12808 1.1 christos "fisttp",
12809 1.1 christos "fist",
12810 1.1 christos "fistp",
12811 1.1 christos "fbld",
12812 1.1 christos "fild{ll|}",
12813 1.1 christos "fbstp",
12814 1.1 christos "fistp{ll|}",
12815 1.1 christos };
12816 1.1 christos
12817 1.1 christos static const unsigned char float_mem_mode[] = {
12818 1.1 christos /* d8 */
12819 1.1 christos d_mode,
12820 1.1 christos d_mode,
12821 1.1 christos d_mode,
12822 1.1 christos d_mode,
12823 1.1 christos d_mode,
12824 1.1 christos d_mode,
12825 1.1 christos d_mode,
12826 1.1 christos d_mode,
12827 1.1 christos /* d9 */
12828 1.1 christos d_mode,
12829 1.1 christos 0,
12830 1.1 christos d_mode,
12831 1.1 christos d_mode,
12832 1.1 christos 0,
12833 1.1 christos w_mode,
12834 1.1 christos 0,
12835 1.1 christos w_mode,
12836 1.1 christos /* da */
12837 1.1 christos d_mode,
12838 1.1 christos d_mode,
12839 1.1 christos d_mode,
12840 1.1 christos d_mode,
12841 1.1 christos d_mode,
12842 1.1 christos d_mode,
12843 1.1 christos d_mode,
12844 1.1 christos d_mode,
12845 1.1 christos /* db */
12846 1.1 christos d_mode,
12847 1.1 christos d_mode,
12848 1.1 christos d_mode,
12849 1.1 christos d_mode,
12850 1.1 christos 0,
12851 1.1 christos t_mode,
12852 1.1 christos 0,
12853 1.1 christos t_mode,
12854 1.1 christos /* dc */
12855 1.1 christos q_mode,
12856 1.1 christos q_mode,
12857 1.1 christos q_mode,
12858 1.1 christos q_mode,
12859 1.1 christos q_mode,
12860 1.1 christos q_mode,
12861 1.1 christos q_mode,
12862 1.1 christos q_mode,
12863 1.1 christos /* dd */
12864 1.1 christos q_mode,
12865 1.1 christos q_mode,
12866 1.1 christos q_mode,
12867 1.1 christos q_mode,
12868 1.1 christos 0,
12869 1.1 christos 0,
12870 1.1 christos 0,
12871 1.1 christos w_mode,
12872 1.1 christos /* de */
12873 1.1 christos w_mode,
12874 1.1 christos w_mode,
12875 1.1 christos w_mode,
12876 1.1 christos w_mode,
12877 1.1 christos w_mode,
12878 1.1 christos w_mode,
12879 1.1 christos w_mode,
12880 1.1 christos w_mode,
12881 1.1 christos /* df */
12882 1.1 christos w_mode,
12883 1.1 christos w_mode,
12884 1.1 christos w_mode,
12885 1.1 christos w_mode,
12886 1.1 christos t_mode,
12887 1.1 christos q_mode,
12888 1.1 christos t_mode,
12889 1.1 christos q_mode
12890 1.1 christos };
12891 1.1 christos
12892 1.1 christos #define ST { OP_ST, 0 }
12893 1.1 christos #define STi { OP_STi, 0 }
12894 1.1 christos
12895 1.1 christos #define FGRPd9_2 NULL, { { NULL, 0 } }
12896 1.1 christos #define FGRPd9_4 NULL, { { NULL, 1 } }
12897 1.1 christos #define FGRPd9_5 NULL, { { NULL, 2 } }
12898 1.1 christos #define FGRPd9_6 NULL, { { NULL, 3 } }
12899 1.1 christos #define FGRPd9_7 NULL, { { NULL, 4 } }
12900 1.1 christos #define FGRPda_5 NULL, { { NULL, 5 } }
12901 1.1 christos #define FGRPdb_4 NULL, { { NULL, 6 } }
12902 1.1 christos #define FGRPde_3 NULL, { { NULL, 7 } }
12903 1.1 christos #define FGRPdf_4 NULL, { { NULL, 8 } }
12904 1.1 christos
12905 1.1 christos static const struct dis386 float_reg[][8] = {
12906 1.1 christos /* d8 */
12907 1.1 christos {
12908 1.1 christos { "fadd", { ST, STi } },
12909 1.1 christos { "fmul", { ST, STi } },
12910 1.1 christos { "fcom", { STi } },
12911 1.1 christos { "fcomp", { STi } },
12912 1.1 christos { "fsub", { ST, STi } },
12913 1.1 christos { "fsubr", { ST, STi } },
12914 1.1 christos { "fdiv", { ST, STi } },
12915 1.1 christos { "fdivr", { ST, STi } },
12916 1.1 christos },
12917 1.1 christos /* d9 */
12918 1.1 christos {
12919 1.1 christos { "fld", { STi } },
12920 1.1 christos { "fxch", { STi } },
12921 1.1 christos { FGRPd9_2 },
12922 1.1 christos { Bad_Opcode },
12923 1.1 christos { FGRPd9_4 },
12924 1.1 christos { FGRPd9_5 },
12925 1.1 christos { FGRPd9_6 },
12926 1.1 christos { FGRPd9_7 },
12927 1.1 christos },
12928 1.1 christos /* da */
12929 1.1 christos {
12930 1.1 christos { "fcmovb", { ST, STi } },
12931 1.1 christos { "fcmove", { ST, STi } },
12932 1.1 christos { "fcmovbe",{ ST, STi } },
12933 1.1 christos { "fcmovu", { ST, STi } },
12934 1.1 christos { Bad_Opcode },
12935 1.1 christos { FGRPda_5 },
12936 1.1 christos { Bad_Opcode },
12937 1.1 christos { Bad_Opcode },
12938 1.1 christos },
12939 1.1 christos /* db */
12940 1.1 christos {
12941 1.1 christos { "fcmovnb",{ ST, STi } },
12942 1.1 christos { "fcmovne",{ ST, STi } },
12943 1.1 christos { "fcmovnbe",{ ST, STi } },
12944 1.1 christos { "fcmovnu",{ ST, STi } },
12945 1.1 christos { FGRPdb_4 },
12946 1.1 christos { "fucomi", { ST, STi } },
12947 1.1 christos { "fcomi", { ST, STi } },
12948 1.1 christos { Bad_Opcode },
12949 1.1 christos },
12950 1.1 christos /* dc */
12951 1.1 christos {
12952 1.1 christos { "fadd", { STi, ST } },
12953 1.1 christos { "fmul", { STi, ST } },
12954 1.1 christos { Bad_Opcode },
12955 1.1 christos { Bad_Opcode },
12956 1.1 christos { "fsub!M", { STi, ST } },
12957 1.1 christos { "fsubM", { STi, ST } },
12958 1.1 christos { "fdiv!M", { STi, ST } },
12959 1.1 christos { "fdivM", { STi, ST } },
12960 1.1 christos },
12961 1.1 christos /* dd */
12962 1.1 christos {
12963 1.1 christos { "ffree", { STi } },
12964 1.1 christos { Bad_Opcode },
12965 1.1 christos { "fst", { STi } },
12966 1.1 christos { "fstp", { STi } },
12967 1.1 christos { "fucom", { STi } },
12968 1.1 christos { "fucomp", { STi } },
12969 1.1 christos { Bad_Opcode },
12970 1.1 christos { Bad_Opcode },
12971 1.1 christos },
12972 1.1 christos /* de */
12973 1.1 christos {
12974 1.1 christos { "faddp", { STi, ST } },
12975 1.1 christos { "fmulp", { STi, ST } },
12976 1.1 christos { Bad_Opcode },
12977 1.1 christos { FGRPde_3 },
12978 1.1 christos { "fsub!Mp", { STi, ST } },
12979 1.1 christos { "fsubMp", { STi, ST } },
12980 1.1 christos { "fdiv!Mp", { STi, ST } },
12981 1.1 christos { "fdivMp", { STi, ST } },
12982 1.1 christos },
12983 1.1 christos /* df */
12984 1.1 christos {
12985 1.1 christos { "ffreep", { STi } },
12986 1.1 christos { Bad_Opcode },
12987 1.1 christos { Bad_Opcode },
12988 1.1 christos { Bad_Opcode },
12989 1.1 christos { FGRPdf_4 },
12990 1.1 christos { "fucomip", { ST, STi } },
12991 1.1 christos { "fcomip", { ST, STi } },
12992 1.1 christos { Bad_Opcode },
12993 1.1 christos },
12994 1.1 christos };
12995 1.1 christos
12996 1.1 christos static char *fgrps[][8] = {
12997 1.1 christos /* d9_2 0 */
12998 1.1 christos {
12999 1.1 christos "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13000 1.1 christos },
13001 1.1 christos
13002 1.1 christos /* d9_4 1 */
13003 1.1 christos {
13004 1.1 christos "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
13005 1.1 christos },
13006 1.1 christos
13007 1.1 christos /* d9_5 2 */
13008 1.1 christos {
13009 1.1 christos "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
13010 1.1 christos },
13011 1.1 christos
13012 1.1 christos /* d9_6 3 */
13013 1.1 christos {
13014 1.1 christos "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
13015 1.1 christos },
13016 1.1 christos
13017 1.1 christos /* d9_7 4 */
13018 1.1 christos {
13019 1.1 christos "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
13020 1.1 christos },
13021 1.1 christos
13022 1.1 christos /* da_5 5 */
13023 1.1 christos {
13024 1.1 christos "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13025 1.1 christos },
13026 1.1 christos
13027 1.1 christos /* db_4 6 */
13028 1.1 christos {
13029 1.1 christos "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
13030 1.1 christos "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
13031 1.1 christos },
13032 1.1 christos
13033 1.1 christos /* de_3 7 */
13034 1.1 christos {
13035 1.1 christos "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13036 1.1 christos },
13037 1.1 christos
13038 1.1 christos /* df_4 8 */
13039 1.1 christos {
13040 1.1 christos "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
13041 1.1 christos },
13042 1.1 christos };
13043 1.1 christos
13044 1.1 christos static void
13045 1.1 christos swap_operand (void)
13046 1.1 christos {
13047 1.1 christos mnemonicendp[0] = '.';
13048 1.1 christos mnemonicendp[1] = 's';
13049 1.1 christos mnemonicendp += 2;
13050 1.1 christos }
13051 1.1 christos
13052 1.1 christos static void
13053 1.1 christos OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
13054 1.1 christos int sizeflag ATTRIBUTE_UNUSED)
13055 1.1 christos {
13056 1.1 christos /* Skip mod/rm byte. */
13057 1.1 christos MODRM_CHECK;
13058 1.1 christos codep++;
13059 1.1 christos }
13060 1.1 christos
13061 1.1 christos static void
13062 1.1 christos dofloat (int sizeflag)
13063 1.1 christos {
13064 1.1 christos const struct dis386 *dp;
13065 1.1 christos unsigned char floatop;
13066 1.1 christos
13067 1.1 christos floatop = codep[-1];
13068 1.1 christos
13069 1.1 christos if (modrm.mod != 3)
13070 1.1 christos {
13071 1.1 christos int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
13072 1.1 christos
13073 1.1 christos putop (float_mem[fp_indx], sizeflag);
13074 1.1 christos obufp = op_out[0];
13075 1.1 christos op_ad = 2;
13076 1.1 christos OP_E (float_mem_mode[fp_indx], sizeflag);
13077 1.1 christos return;
13078 1.1 christos }
13079 1.1 christos /* Skip mod/rm byte. */
13080 1.1 christos MODRM_CHECK;
13081 1.1 christos codep++;
13082 1.1 christos
13083 1.1 christos dp = &float_reg[floatop - 0xd8][modrm.reg];
13084 1.1 christos if (dp->name == NULL)
13085 1.1 christos {
13086 1.1 christos putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
13087 1.1 christos
13088 1.1 christos /* Instruction fnstsw is only one with strange arg. */
13089 1.1 christos if (floatop == 0xdf && codep[-1] == 0xe0)
13090 1.1 christos strcpy (op_out[0], names16[0]);
13091 1.1 christos }
13092 1.1 christos else
13093 1.1 christos {
13094 1.1 christos putop (dp->name, sizeflag);
13095 1.1 christos
13096 1.1 christos obufp = op_out[0];
13097 1.1 christos op_ad = 2;
13098 1.1 christos if (dp->op[0].rtn)
13099 1.1 christos (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
13100 1.1 christos
13101 1.1 christos obufp = op_out[1];
13102 1.1 christos op_ad = 1;
13103 1.1 christos if (dp->op[1].rtn)
13104 1.1 christos (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
13105 1.1 christos }
13106 1.1 christos }
13107 1.1 christos
13108 1.1.1.1.8.1 tls /* Like oappend (below), but S is a string starting with '%'.
13109 1.1.1.1.8.1 tls In Intel syntax, the '%' is elided. */
13110 1.1.1.1.8.1 tls static void
13111 1.1.1.1.8.1 tls oappend_maybe_intel (const char *s)
13112 1.1.1.1.8.1 tls {
13113 1.1.1.1.8.1 tls oappend (s + intel_syntax);
13114 1.1.1.1.8.1 tls }
13115 1.1.1.1.8.1 tls
13116 1.1 christos static void
13117 1.1 christos OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13118 1.1 christos {
13119 1.1.1.1.8.1 tls oappend_maybe_intel ("%st");
13120 1.1 christos }
13121 1.1 christos
13122 1.1 christos static void
13123 1.1 christos OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
13124 1.1 christos {
13125 1.1 christos sprintf (scratchbuf, "%%st(%d)", modrm.rm);
13126 1.1.1.1.8.1 tls oappend_maybe_intel (scratchbuf);
13127 1.1 christos }
13128 1.1 christos
13129 1.1 christos /* Capital letters in template are macros. */
13130 1.1 christos static int
13131 1.1 christos putop (const char *in_template, int sizeflag)
13132 1.1 christos {
13133 1.1 christos const char *p;
13134 1.1 christos int alt = 0;
13135 1.1 christos int cond = 1;
13136 1.1 christos unsigned int l = 0, len = 1;
13137 1.1 christos char last[4];
13138 1.1 christos
13139 1.1 christos #define SAVE_LAST(c) \
13140 1.1 christos if (l < len && l < sizeof (last)) \
13141 1.1 christos last[l++] = c; \
13142 1.1 christos else \
13143 1.1 christos abort ();
13144 1.1 christos
13145 1.1 christos for (p = in_template; *p; p++)
13146 1.1 christos {
13147 1.1 christos switch (*p)
13148 1.1 christos {
13149 1.1 christos default:
13150 1.1 christos *obufp++ = *p;
13151 1.1 christos break;
13152 1.1 christos case '%':
13153 1.1 christos len++;
13154 1.1 christos break;
13155 1.1 christos case '!':
13156 1.1 christos cond = 0;
13157 1.1 christos break;
13158 1.1 christos case '{':
13159 1.1 christos alt = 0;
13160 1.1 christos if (intel_syntax)
13161 1.1 christos {
13162 1.1 christos while (*++p != '|')
13163 1.1 christos if (*p == '}' || *p == '\0')
13164 1.1 christos abort ();
13165 1.1 christos }
13166 1.1 christos /* Fall through. */
13167 1.1 christos case 'I':
13168 1.1 christos alt = 1;
13169 1.1 christos continue;
13170 1.1 christos case '|':
13171 1.1 christos while (*++p != '}')
13172 1.1 christos {
13173 1.1 christos if (*p == '\0')
13174 1.1 christos abort ();
13175 1.1 christos }
13176 1.1 christos break;
13177 1.1 christos case '}':
13178 1.1 christos break;
13179 1.1 christos case 'A':
13180 1.1 christos if (intel_syntax)
13181 1.1 christos break;
13182 1.1 christos if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
13183 1.1 christos *obufp++ = 'b';
13184 1.1 christos break;
13185 1.1 christos case 'B':
13186 1.1 christos if (l == 0 && len == 1)
13187 1.1 christos {
13188 1.1 christos case_B:
13189 1.1 christos if (intel_syntax)
13190 1.1 christos break;
13191 1.1 christos if (sizeflag & SUFFIX_ALWAYS)
13192 1.1 christos *obufp++ = 'b';
13193 1.1 christos }
13194 1.1 christos else
13195 1.1 christos {
13196 1.1 christos if (l != 1
13197 1.1 christos || len != 2
13198 1.1 christos || last[0] != 'L')
13199 1.1 christos {
13200 1.1 christos SAVE_LAST (*p);
13201 1.1 christos break;
13202 1.1 christos }
13203 1.1 christos
13204 1.1 christos if (address_mode == mode_64bit
13205 1.1 christos && !(prefixes & PREFIX_ADDR))
13206 1.1 christos {
13207 1.1 christos *obufp++ = 'a';
13208 1.1 christos *obufp++ = 'b';
13209 1.1 christos *obufp++ = 's';
13210 1.1 christos }
13211 1.1 christos
13212 1.1 christos goto case_B;
13213 1.1 christos }
13214 1.1 christos break;
13215 1.1 christos case 'C':
13216 1.1 christos if (intel_syntax && !alt)
13217 1.1 christos break;
13218 1.1 christos if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
13219 1.1 christos {
13220 1.1 christos if (sizeflag & DFLAG)
13221 1.1 christos *obufp++ = intel_syntax ? 'd' : 'l';
13222 1.1 christos else
13223 1.1 christos *obufp++ = intel_syntax ? 'w' : 's';
13224 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13225 1.1 christos }
13226 1.1 christos break;
13227 1.1 christos case 'D':
13228 1.1 christos if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13229 1.1 christos break;
13230 1.1 christos USED_REX (REX_W);
13231 1.1 christos if (modrm.mod == 3)
13232 1.1 christos {
13233 1.1 christos if (rex & REX_W)
13234 1.1 christos *obufp++ = 'q';
13235 1.1 christos else
13236 1.1 christos {
13237 1.1 christos if (sizeflag & DFLAG)
13238 1.1 christos *obufp++ = intel_syntax ? 'd' : 'l';
13239 1.1 christos else
13240 1.1 christos *obufp++ = 'w';
13241 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13242 1.1 christos }
13243 1.1 christos }
13244 1.1 christos else
13245 1.1 christos *obufp++ = 'w';
13246 1.1 christos break;
13247 1.1 christos case 'E': /* For jcxz/jecxz */
13248 1.1 christos if (address_mode == mode_64bit)
13249 1.1 christos {
13250 1.1 christos if (sizeflag & AFLAG)
13251 1.1 christos *obufp++ = 'r';
13252 1.1 christos else
13253 1.1 christos *obufp++ = 'e';
13254 1.1 christos }
13255 1.1 christos else
13256 1.1 christos if (sizeflag & AFLAG)
13257 1.1 christos *obufp++ = 'e';
13258 1.1 christos used_prefixes |= (prefixes & PREFIX_ADDR);
13259 1.1 christos break;
13260 1.1 christos case 'F':
13261 1.1 christos if (intel_syntax)
13262 1.1 christos break;
13263 1.1 christos if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
13264 1.1 christos {
13265 1.1 christos if (sizeflag & AFLAG)
13266 1.1 christos *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
13267 1.1 christos else
13268 1.1 christos *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
13269 1.1 christos used_prefixes |= (prefixes & PREFIX_ADDR);
13270 1.1 christos }
13271 1.1 christos break;
13272 1.1 christos case 'G':
13273 1.1 christos if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
13274 1.1 christos break;
13275 1.1 christos if ((rex & REX_W) || (sizeflag & DFLAG))
13276 1.1 christos *obufp++ = 'l';
13277 1.1 christos else
13278 1.1 christos *obufp++ = 'w';
13279 1.1 christos if (!(rex & REX_W))
13280 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13281 1.1 christos break;
13282 1.1 christos case 'H':
13283 1.1 christos if (intel_syntax)
13284 1.1 christos break;
13285 1.1 christos if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
13286 1.1 christos || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
13287 1.1 christos {
13288 1.1 christos used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
13289 1.1 christos *obufp++ = ',';
13290 1.1 christos *obufp++ = 'p';
13291 1.1 christos if (prefixes & PREFIX_DS)
13292 1.1 christos *obufp++ = 't';
13293 1.1 christos else
13294 1.1 christos *obufp++ = 'n';
13295 1.1 christos }
13296 1.1 christos break;
13297 1.1 christos case 'J':
13298 1.1 christos if (intel_syntax)
13299 1.1 christos break;
13300 1.1 christos *obufp++ = 'l';
13301 1.1 christos break;
13302 1.1 christos case 'K':
13303 1.1 christos USED_REX (REX_W);
13304 1.1 christos if (rex & REX_W)
13305 1.1 christos *obufp++ = 'q';
13306 1.1 christos else
13307 1.1 christos *obufp++ = 'd';
13308 1.1 christos break;
13309 1.1 christos case 'Z':
13310 1.1 christos if (intel_syntax)
13311 1.1 christos break;
13312 1.1 christos if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
13313 1.1 christos {
13314 1.1 christos *obufp++ = 'q';
13315 1.1 christos break;
13316 1.1 christos }
13317 1.1 christos /* Fall through. */
13318 1.1 christos goto case_L;
13319 1.1 christos case 'L':
13320 1.1 christos if (l != 0 || len != 1)
13321 1.1 christos {
13322 1.1 christos SAVE_LAST (*p);
13323 1.1 christos break;
13324 1.1 christos }
13325 1.1 christos case_L:
13326 1.1 christos if (intel_syntax)
13327 1.1 christos break;
13328 1.1 christos if (sizeflag & SUFFIX_ALWAYS)
13329 1.1 christos *obufp++ = 'l';
13330 1.1 christos break;
13331 1.1 christos case 'M':
13332 1.1 christos if (intel_mnemonic != cond)
13333 1.1 christos *obufp++ = 'r';
13334 1.1 christos break;
13335 1.1 christos case 'N':
13336 1.1 christos if ((prefixes & PREFIX_FWAIT) == 0)
13337 1.1 christos *obufp++ = 'n';
13338 1.1 christos else
13339 1.1 christos used_prefixes |= PREFIX_FWAIT;
13340 1.1 christos break;
13341 1.1 christos case 'O':
13342 1.1 christos USED_REX (REX_W);
13343 1.1 christos if (rex & REX_W)
13344 1.1 christos *obufp++ = 'o';
13345 1.1 christos else if (intel_syntax && (sizeflag & DFLAG))
13346 1.1 christos *obufp++ = 'q';
13347 1.1 christos else
13348 1.1 christos *obufp++ = 'd';
13349 1.1 christos if (!(rex & REX_W))
13350 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13351 1.1 christos break;
13352 1.1 christos case 'T':
13353 1.1 christos if (!intel_syntax
13354 1.1 christos && address_mode == mode_64bit
13355 1.1.1.1.8.1 tls && ((sizeflag & DFLAG) || (rex & REX_W)))
13356 1.1 christos {
13357 1.1 christos *obufp++ = 'q';
13358 1.1 christos break;
13359 1.1 christos }
13360 1.1 christos /* Fall through. */
13361 1.1 christos case 'P':
13362 1.1 christos if (intel_syntax)
13363 1.1 christos {
13364 1.1 christos if ((rex & REX_W) == 0
13365 1.1 christos && (prefixes & PREFIX_DATA))
13366 1.1 christos {
13367 1.1 christos if ((sizeflag & DFLAG) == 0)
13368 1.1 christos *obufp++ = 'w';
13369 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13370 1.1 christos }
13371 1.1 christos break;
13372 1.1 christos }
13373 1.1 christos if ((prefixes & PREFIX_DATA)
13374 1.1 christos || (rex & REX_W)
13375 1.1 christos || (sizeflag & SUFFIX_ALWAYS))
13376 1.1 christos {
13377 1.1 christos USED_REX (REX_W);
13378 1.1 christos if (rex & REX_W)
13379 1.1 christos *obufp++ = 'q';
13380 1.1 christos else
13381 1.1 christos {
13382 1.1 christos if (sizeflag & DFLAG)
13383 1.1 christos *obufp++ = 'l';
13384 1.1 christos else
13385 1.1 christos *obufp++ = 'w';
13386 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13387 1.1 christos }
13388 1.1 christos }
13389 1.1 christos break;
13390 1.1 christos case 'U':
13391 1.1 christos if (intel_syntax)
13392 1.1 christos break;
13393 1.1.1.1.8.1 tls if (address_mode == mode_64bit
13394 1.1.1.1.8.1 tls && ((sizeflag & DFLAG) || (rex & REX_W)))
13395 1.1 christos {
13396 1.1 christos if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
13397 1.1 christos *obufp++ = 'q';
13398 1.1 christos break;
13399 1.1 christos }
13400 1.1 christos /* Fall through. */
13401 1.1 christos goto case_Q;
13402 1.1 christos case 'Q':
13403 1.1 christos if (l == 0 && len == 1)
13404 1.1 christos {
13405 1.1 christos case_Q:
13406 1.1 christos if (intel_syntax && !alt)
13407 1.1 christos break;
13408 1.1 christos USED_REX (REX_W);
13409 1.1 christos if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
13410 1.1 christos {
13411 1.1 christos if (rex & REX_W)
13412 1.1 christos *obufp++ = 'q';
13413 1.1 christos else
13414 1.1 christos {
13415 1.1 christos if (sizeflag & DFLAG)
13416 1.1 christos *obufp++ = intel_syntax ? 'd' : 'l';
13417 1.1 christos else
13418 1.1 christos *obufp++ = 'w';
13419 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13420 1.1 christos }
13421 1.1 christos }
13422 1.1 christos }
13423 1.1 christos else
13424 1.1 christos {
13425 1.1 christos if (l != 1 || len != 2 || last[0] != 'L')
13426 1.1 christos {
13427 1.1 christos SAVE_LAST (*p);
13428 1.1 christos break;
13429 1.1 christos }
13430 1.1 christos if (intel_syntax
13431 1.1 christos || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13432 1.1 christos break;
13433 1.1 christos if ((rex & REX_W))
13434 1.1 christos {
13435 1.1 christos USED_REX (REX_W);
13436 1.1 christos *obufp++ = 'q';
13437 1.1 christos }
13438 1.1 christos else
13439 1.1 christos *obufp++ = 'l';
13440 1.1 christos }
13441 1.1 christos break;
13442 1.1 christos case 'R':
13443 1.1 christos USED_REX (REX_W);
13444 1.1 christos if (rex & REX_W)
13445 1.1 christos *obufp++ = 'q';
13446 1.1 christos else if (sizeflag & DFLAG)
13447 1.1 christos {
13448 1.1 christos if (intel_syntax)
13449 1.1 christos *obufp++ = 'd';
13450 1.1 christos else
13451 1.1 christos *obufp++ = 'l';
13452 1.1 christos }
13453 1.1 christos else
13454 1.1 christos *obufp++ = 'w';
13455 1.1 christos if (intel_syntax && !p[1]
13456 1.1 christos && ((rex & REX_W) || (sizeflag & DFLAG)))
13457 1.1 christos *obufp++ = 'e';
13458 1.1 christos if (!(rex & REX_W))
13459 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13460 1.1 christos break;
13461 1.1 christos case 'V':
13462 1.1 christos if (l == 0 && len == 1)
13463 1.1 christos {
13464 1.1 christos if (intel_syntax)
13465 1.1 christos break;
13466 1.1.1.1.8.1 tls if (address_mode == mode_64bit
13467 1.1.1.1.8.1 tls && ((sizeflag & DFLAG) || (rex & REX_W)))
13468 1.1 christos {
13469 1.1 christos if (sizeflag & SUFFIX_ALWAYS)
13470 1.1 christos *obufp++ = 'q';
13471 1.1 christos break;
13472 1.1 christos }
13473 1.1 christos }
13474 1.1 christos else
13475 1.1 christos {
13476 1.1 christos if (l != 1
13477 1.1 christos || len != 2
13478 1.1 christos || last[0] != 'L')
13479 1.1 christos {
13480 1.1 christos SAVE_LAST (*p);
13481 1.1 christos break;
13482 1.1 christos }
13483 1.1 christos
13484 1.1 christos if (rex & REX_W)
13485 1.1 christos {
13486 1.1 christos *obufp++ = 'a';
13487 1.1 christos *obufp++ = 'b';
13488 1.1 christos *obufp++ = 's';
13489 1.1 christos }
13490 1.1 christos }
13491 1.1 christos /* Fall through. */
13492 1.1 christos goto case_S;
13493 1.1 christos case 'S':
13494 1.1 christos if (l == 0 && len == 1)
13495 1.1 christos {
13496 1.1 christos case_S:
13497 1.1 christos if (intel_syntax)
13498 1.1 christos break;
13499 1.1 christos if (sizeflag & SUFFIX_ALWAYS)
13500 1.1 christos {
13501 1.1 christos if (rex & REX_W)
13502 1.1 christos *obufp++ = 'q';
13503 1.1 christos else
13504 1.1 christos {
13505 1.1 christos if (sizeflag & DFLAG)
13506 1.1 christos *obufp++ = 'l';
13507 1.1 christos else
13508 1.1 christos *obufp++ = 'w';
13509 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13510 1.1 christos }
13511 1.1 christos }
13512 1.1 christos }
13513 1.1 christos else
13514 1.1 christos {
13515 1.1 christos if (l != 1
13516 1.1 christos || len != 2
13517 1.1 christos || last[0] != 'L')
13518 1.1 christos {
13519 1.1 christos SAVE_LAST (*p);
13520 1.1 christos break;
13521 1.1 christos }
13522 1.1 christos
13523 1.1 christos if (address_mode == mode_64bit
13524 1.1 christos && !(prefixes & PREFIX_ADDR))
13525 1.1 christos {
13526 1.1 christos *obufp++ = 'a';
13527 1.1 christos *obufp++ = 'b';
13528 1.1 christos *obufp++ = 's';
13529 1.1 christos }
13530 1.1 christos
13531 1.1 christos goto case_S;
13532 1.1 christos }
13533 1.1 christos break;
13534 1.1 christos case 'X':
13535 1.1 christos if (l != 0 || len != 1)
13536 1.1 christos {
13537 1.1 christos SAVE_LAST (*p);
13538 1.1 christos break;
13539 1.1 christos }
13540 1.1 christos if (need_vex && vex.prefix)
13541 1.1 christos {
13542 1.1 christos if (vex.prefix == DATA_PREFIX_OPCODE)
13543 1.1 christos *obufp++ = 'd';
13544 1.1 christos else
13545 1.1 christos *obufp++ = 's';
13546 1.1 christos }
13547 1.1 christos else
13548 1.1 christos {
13549 1.1 christos if (prefixes & PREFIX_DATA)
13550 1.1 christos *obufp++ = 'd';
13551 1.1 christos else
13552 1.1 christos *obufp++ = 's';
13553 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13554 1.1 christos }
13555 1.1 christos break;
13556 1.1 christos case 'Y':
13557 1.1 christos if (l == 0 && len == 1)
13558 1.1 christos {
13559 1.1 christos if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
13560 1.1 christos break;
13561 1.1 christos if (rex & REX_W)
13562 1.1 christos {
13563 1.1 christos USED_REX (REX_W);
13564 1.1 christos *obufp++ = 'q';
13565 1.1 christos }
13566 1.1 christos break;
13567 1.1 christos }
13568 1.1 christos else
13569 1.1 christos {
13570 1.1 christos if (l != 1 || len != 2 || last[0] != 'X')
13571 1.1 christos {
13572 1.1 christos SAVE_LAST (*p);
13573 1.1 christos break;
13574 1.1 christos }
13575 1.1 christos if (!need_vex)
13576 1.1 christos abort ();
13577 1.1 christos if (intel_syntax
13578 1.1 christos || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
13579 1.1 christos break;
13580 1.1 christos switch (vex.length)
13581 1.1 christos {
13582 1.1 christos case 128:
13583 1.1 christos *obufp++ = 'x';
13584 1.1 christos break;
13585 1.1 christos case 256:
13586 1.1 christos *obufp++ = 'y';
13587 1.1 christos break;
13588 1.1 christos default:
13589 1.1 christos abort ();
13590 1.1 christos }
13591 1.1 christos }
13592 1.1 christos break;
13593 1.1 christos case 'W':
13594 1.1 christos if (l == 0 && len == 1)
13595 1.1 christos {
13596 1.1 christos /* operand size flag for cwtl, cbtw */
13597 1.1 christos USED_REX (REX_W);
13598 1.1 christos if (rex & REX_W)
13599 1.1 christos {
13600 1.1 christos if (intel_syntax)
13601 1.1 christos *obufp++ = 'd';
13602 1.1 christos else
13603 1.1 christos *obufp++ = 'l';
13604 1.1 christos }
13605 1.1 christos else if (sizeflag & DFLAG)
13606 1.1 christos *obufp++ = 'w';
13607 1.1 christos else
13608 1.1 christos *obufp++ = 'b';
13609 1.1 christos if (!(rex & REX_W))
13610 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13611 1.1 christos }
13612 1.1 christos else
13613 1.1 christos {
13614 1.1.1.1.8.1 tls if (l != 1
13615 1.1.1.1.8.1 tls || len != 2
13616 1.1.1.1.8.1 tls || (last[0] != 'X'
13617 1.1.1.1.8.1 tls && last[0] != 'L'))
13618 1.1 christos {
13619 1.1 christos SAVE_LAST (*p);
13620 1.1 christos break;
13621 1.1 christos }
13622 1.1 christos if (!need_vex)
13623 1.1 christos abort ();
13624 1.1.1.1.8.1 tls if (last[0] == 'X')
13625 1.1.1.1.8.1 tls *obufp++ = vex.w ? 'd': 's';
13626 1.1.1.1.8.1 tls else
13627 1.1.1.1.8.1 tls *obufp++ = vex.w ? 'q': 'd';
13628 1.1 christos }
13629 1.1 christos break;
13630 1.1 christos }
13631 1.1 christos alt = 0;
13632 1.1 christos }
13633 1.1 christos *obufp = 0;
13634 1.1 christos mnemonicendp = obufp;
13635 1.1 christos return 0;
13636 1.1 christos }
13637 1.1 christos
13638 1.1 christos static void
13639 1.1 christos oappend (const char *s)
13640 1.1 christos {
13641 1.1 christos obufp = stpcpy (obufp, s);
13642 1.1 christos }
13643 1.1 christos
13644 1.1 christos static void
13645 1.1 christos append_seg (void)
13646 1.1 christos {
13647 1.1 christos if (prefixes & PREFIX_CS)
13648 1.1 christos {
13649 1.1 christos used_prefixes |= PREFIX_CS;
13650 1.1.1.1.8.1 tls oappend_maybe_intel ("%cs:");
13651 1.1 christos }
13652 1.1 christos if (prefixes & PREFIX_DS)
13653 1.1 christos {
13654 1.1 christos used_prefixes |= PREFIX_DS;
13655 1.1.1.1.8.1 tls oappend_maybe_intel ("%ds:");
13656 1.1 christos }
13657 1.1 christos if (prefixes & PREFIX_SS)
13658 1.1 christos {
13659 1.1 christos used_prefixes |= PREFIX_SS;
13660 1.1.1.1.8.1 tls oappend_maybe_intel ("%ss:");
13661 1.1 christos }
13662 1.1 christos if (prefixes & PREFIX_ES)
13663 1.1 christos {
13664 1.1 christos used_prefixes |= PREFIX_ES;
13665 1.1.1.1.8.1 tls oappend_maybe_intel ("%es:");
13666 1.1 christos }
13667 1.1 christos if (prefixes & PREFIX_FS)
13668 1.1 christos {
13669 1.1 christos used_prefixes |= PREFIX_FS;
13670 1.1.1.1.8.1 tls oappend_maybe_intel ("%fs:");
13671 1.1 christos }
13672 1.1 christos if (prefixes & PREFIX_GS)
13673 1.1 christos {
13674 1.1 christos used_prefixes |= PREFIX_GS;
13675 1.1.1.1.8.1 tls oappend_maybe_intel ("%gs:");
13676 1.1 christos }
13677 1.1 christos }
13678 1.1 christos
13679 1.1 christos static void
13680 1.1 christos OP_indirE (int bytemode, int sizeflag)
13681 1.1 christos {
13682 1.1 christos if (!intel_syntax)
13683 1.1 christos oappend ("*");
13684 1.1 christos OP_E (bytemode, sizeflag);
13685 1.1 christos }
13686 1.1 christos
13687 1.1 christos static void
13688 1.1 christos print_operand_value (char *buf, int hex, bfd_vma disp)
13689 1.1 christos {
13690 1.1 christos if (address_mode == mode_64bit)
13691 1.1 christos {
13692 1.1 christos if (hex)
13693 1.1 christos {
13694 1.1 christos char tmp[30];
13695 1.1 christos int i;
13696 1.1 christos buf[0] = '0';
13697 1.1 christos buf[1] = 'x';
13698 1.1 christos sprintf_vma (tmp, disp);
13699 1.1 christos for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
13700 1.1 christos strcpy (buf + 2, tmp + i);
13701 1.1 christos }
13702 1.1 christos else
13703 1.1 christos {
13704 1.1 christos bfd_signed_vma v = disp;
13705 1.1 christos char tmp[30];
13706 1.1 christos int i;
13707 1.1 christos if (v < 0)
13708 1.1 christos {
13709 1.1 christos *(buf++) = '-';
13710 1.1 christos v = -disp;
13711 1.1 christos /* Check for possible overflow on 0x8000000000000000. */
13712 1.1 christos if (v < 0)
13713 1.1 christos {
13714 1.1 christos strcpy (buf, "9223372036854775808");
13715 1.1 christos return;
13716 1.1 christos }
13717 1.1 christos }
13718 1.1 christos if (!v)
13719 1.1 christos {
13720 1.1 christos strcpy (buf, "0");
13721 1.1 christos return;
13722 1.1 christos }
13723 1.1 christos
13724 1.1 christos i = 0;
13725 1.1 christos tmp[29] = 0;
13726 1.1 christos while (v)
13727 1.1 christos {
13728 1.1 christos tmp[28 - i] = (v % 10) + '0';
13729 1.1 christos v /= 10;
13730 1.1 christos i++;
13731 1.1 christos }
13732 1.1 christos strcpy (buf, tmp + 29 - i);
13733 1.1 christos }
13734 1.1 christos }
13735 1.1 christos else
13736 1.1 christos {
13737 1.1 christos if (hex)
13738 1.1 christos sprintf (buf, "0x%x", (unsigned int) disp);
13739 1.1 christos else
13740 1.1 christos sprintf (buf, "%d", (int) disp);
13741 1.1 christos }
13742 1.1 christos }
13743 1.1 christos
13744 1.1 christos /* Put DISP in BUF as signed hex number. */
13745 1.1 christos
13746 1.1 christos static void
13747 1.1 christos print_displacement (char *buf, bfd_vma disp)
13748 1.1 christos {
13749 1.1 christos bfd_signed_vma val = disp;
13750 1.1 christos char tmp[30];
13751 1.1 christos int i, j = 0;
13752 1.1 christos
13753 1.1 christos if (val < 0)
13754 1.1 christos {
13755 1.1 christos buf[j++] = '-';
13756 1.1 christos val = -disp;
13757 1.1 christos
13758 1.1 christos /* Check for possible overflow. */
13759 1.1 christos if (val < 0)
13760 1.1 christos {
13761 1.1 christos switch (address_mode)
13762 1.1 christos {
13763 1.1 christos case mode_64bit:
13764 1.1 christos strcpy (buf + j, "0x8000000000000000");
13765 1.1 christos break;
13766 1.1 christos case mode_32bit:
13767 1.1 christos strcpy (buf + j, "0x80000000");
13768 1.1 christos break;
13769 1.1 christos case mode_16bit:
13770 1.1 christos strcpy (buf + j, "0x8000");
13771 1.1 christos break;
13772 1.1 christos }
13773 1.1 christos return;
13774 1.1 christos }
13775 1.1 christos }
13776 1.1 christos
13777 1.1 christos buf[j++] = '0';
13778 1.1 christos buf[j++] = 'x';
13779 1.1 christos
13780 1.1 christos sprintf_vma (tmp, (bfd_vma) val);
13781 1.1 christos for (i = 0; tmp[i] == '0'; i++)
13782 1.1 christos continue;
13783 1.1 christos if (tmp[i] == '\0')
13784 1.1 christos i--;
13785 1.1 christos strcpy (buf + j, tmp + i);
13786 1.1 christos }
13787 1.1 christos
13788 1.1 christos static void
13789 1.1 christos intel_operand_size (int bytemode, int sizeflag)
13790 1.1 christos {
13791 1.1.1.1.8.1 tls if (vex.evex
13792 1.1.1.1.8.1 tls && vex.b
13793 1.1.1.1.8.1 tls && (bytemode == x_mode
13794 1.1.1.1.8.1 tls || bytemode == evex_half_bcst_xmmq_mode))
13795 1.1.1.1.8.1 tls {
13796 1.1.1.1.8.1 tls if (vex.w)
13797 1.1.1.1.8.1 tls oappend ("QWORD PTR ");
13798 1.1.1.1.8.1 tls else
13799 1.1.1.1.8.1 tls oappend ("DWORD PTR ");
13800 1.1.1.1.8.1 tls return;
13801 1.1.1.1.8.1 tls }
13802 1.1 christos switch (bytemode)
13803 1.1 christos {
13804 1.1 christos case b_mode:
13805 1.1 christos case b_swap_mode:
13806 1.1 christos case dqb_mode:
13807 1.1 christos oappend ("BYTE PTR ");
13808 1.1 christos break;
13809 1.1 christos case w_mode:
13810 1.1 christos case dqw_mode:
13811 1.1 christos oappend ("WORD PTR ");
13812 1.1 christos break;
13813 1.1 christos case stack_v_mode:
13814 1.1.1.1.8.1 tls if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
13815 1.1 christos {
13816 1.1 christos oappend ("QWORD PTR ");
13817 1.1 christos break;
13818 1.1 christos }
13819 1.1 christos /* FALLTHRU */
13820 1.1 christos case v_mode:
13821 1.1 christos case v_swap_mode:
13822 1.1 christos case dq_mode:
13823 1.1 christos USED_REX (REX_W);
13824 1.1 christos if (rex & REX_W)
13825 1.1 christos oappend ("QWORD PTR ");
13826 1.1 christos else
13827 1.1 christos {
13828 1.1 christos if ((sizeflag & DFLAG) || bytemode == dq_mode)
13829 1.1 christos oappend ("DWORD PTR ");
13830 1.1 christos else
13831 1.1 christos oappend ("WORD PTR ");
13832 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13833 1.1 christos }
13834 1.1 christos break;
13835 1.1 christos case z_mode:
13836 1.1 christos if ((rex & REX_W) || (sizeflag & DFLAG))
13837 1.1 christos *obufp++ = 'D';
13838 1.1 christos oappend ("WORD PTR ");
13839 1.1 christos if (!(rex & REX_W))
13840 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13841 1.1 christos break;
13842 1.1 christos case a_mode:
13843 1.1 christos if (sizeflag & DFLAG)
13844 1.1 christos oappend ("QWORD PTR ");
13845 1.1 christos else
13846 1.1 christos oappend ("DWORD PTR ");
13847 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13848 1.1 christos break;
13849 1.1 christos case d_mode:
13850 1.1 christos case d_scalar_mode:
13851 1.1 christos case d_scalar_swap_mode:
13852 1.1 christos case d_swap_mode:
13853 1.1 christos case dqd_mode:
13854 1.1 christos oappend ("DWORD PTR ");
13855 1.1 christos break;
13856 1.1 christos case q_mode:
13857 1.1 christos case q_scalar_mode:
13858 1.1 christos case q_scalar_swap_mode:
13859 1.1 christos case q_swap_mode:
13860 1.1 christos oappend ("QWORD PTR ");
13861 1.1 christos break;
13862 1.1 christos case m_mode:
13863 1.1 christos if (address_mode == mode_64bit)
13864 1.1 christos oappend ("QWORD PTR ");
13865 1.1 christos else
13866 1.1 christos oappend ("DWORD PTR ");
13867 1.1 christos break;
13868 1.1 christos case f_mode:
13869 1.1 christos if (sizeflag & DFLAG)
13870 1.1 christos oappend ("FWORD PTR ");
13871 1.1 christos else
13872 1.1 christos oappend ("DWORD PTR ");
13873 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13874 1.1 christos break;
13875 1.1 christos case t_mode:
13876 1.1 christos oappend ("TBYTE PTR ");
13877 1.1 christos break;
13878 1.1 christos case x_mode:
13879 1.1 christos case x_swap_mode:
13880 1.1.1.1.8.1 tls case evex_x_gscat_mode:
13881 1.1.1.1.8.1 tls case evex_x_nobcst_mode:
13882 1.1 christos if (need_vex)
13883 1.1 christos {
13884 1.1 christos switch (vex.length)
13885 1.1 christos {
13886 1.1 christos case 128:
13887 1.1 christos oappend ("XMMWORD PTR ");
13888 1.1 christos break;
13889 1.1 christos case 256:
13890 1.1 christos oappend ("YMMWORD PTR ");
13891 1.1 christos break;
13892 1.1.1.1.8.1 tls case 512:
13893 1.1.1.1.8.1 tls oappend ("ZMMWORD PTR ");
13894 1.1.1.1.8.1 tls break;
13895 1.1 christos default:
13896 1.1 christos abort ();
13897 1.1 christos }
13898 1.1 christos }
13899 1.1 christos else
13900 1.1 christos oappend ("XMMWORD PTR ");
13901 1.1 christos break;
13902 1.1 christos case xmm_mode:
13903 1.1 christos oappend ("XMMWORD PTR ");
13904 1.1 christos break;
13905 1.1.1.1.8.1 tls case ymm_mode:
13906 1.1.1.1.8.1 tls oappend ("YMMWORD PTR ");
13907 1.1.1.1.8.1 tls break;
13908 1.1.1.1.8.1 tls case xmmq_mode:
13909 1.1.1.1.8.1 tls case evex_half_bcst_xmmq_mode:
13910 1.1.1.1.8.1 tls if (!need_vex)
13911 1.1.1.1.8.1 tls abort ();
13912 1.1.1.1.8.1 tls
13913 1.1.1.1.8.1 tls switch (vex.length)
13914 1.1.1.1.8.1 tls {
13915 1.1.1.1.8.1 tls case 128:
13916 1.1.1.1.8.1 tls oappend ("QWORD PTR ");
13917 1.1.1.1.8.1 tls break;
13918 1.1.1.1.8.1 tls case 256:
13919 1.1.1.1.8.1 tls oappend ("XMMWORD PTR ");
13920 1.1.1.1.8.1 tls break;
13921 1.1.1.1.8.1 tls case 512:
13922 1.1.1.1.8.1 tls oappend ("YMMWORD PTR ");
13923 1.1.1.1.8.1 tls break;
13924 1.1.1.1.8.1 tls default:
13925 1.1.1.1.8.1 tls abort ();
13926 1.1.1.1.8.1 tls }
13927 1.1.1.1.8.1 tls break;
13928 1.1.1.1.8.1 tls case xmm_mb_mode:
13929 1.1.1.1.8.1 tls if (!need_vex)
13930 1.1.1.1.8.1 tls abort ();
13931 1.1.1.1.8.1 tls
13932 1.1.1.1.8.1 tls switch (vex.length)
13933 1.1.1.1.8.1 tls {
13934 1.1.1.1.8.1 tls case 128:
13935 1.1.1.1.8.1 tls case 256:
13936 1.1.1.1.8.1 tls case 512:
13937 1.1.1.1.8.1 tls oappend ("BYTE PTR ");
13938 1.1.1.1.8.1 tls break;
13939 1.1.1.1.8.1 tls default:
13940 1.1.1.1.8.1 tls abort ();
13941 1.1.1.1.8.1 tls }
13942 1.1.1.1.8.1 tls break;
13943 1.1.1.1.8.1 tls case xmm_mw_mode:
13944 1.1.1.1.8.1 tls if (!need_vex)
13945 1.1.1.1.8.1 tls abort ();
13946 1.1.1.1.8.1 tls
13947 1.1.1.1.8.1 tls switch (vex.length)
13948 1.1.1.1.8.1 tls {
13949 1.1.1.1.8.1 tls case 128:
13950 1.1.1.1.8.1 tls case 256:
13951 1.1.1.1.8.1 tls case 512:
13952 1.1.1.1.8.1 tls oappend ("WORD PTR ");
13953 1.1.1.1.8.1 tls break;
13954 1.1.1.1.8.1 tls default:
13955 1.1.1.1.8.1 tls abort ();
13956 1.1.1.1.8.1 tls }
13957 1.1.1.1.8.1 tls break;
13958 1.1.1.1.8.1 tls case xmm_md_mode:
13959 1.1.1.1.8.1 tls if (!need_vex)
13960 1.1.1.1.8.1 tls abort ();
13961 1.1.1.1.8.1 tls
13962 1.1.1.1.8.1 tls switch (vex.length)
13963 1.1.1.1.8.1 tls {
13964 1.1.1.1.8.1 tls case 128:
13965 1.1.1.1.8.1 tls case 256:
13966 1.1.1.1.8.1 tls case 512:
13967 1.1.1.1.8.1 tls oappend ("DWORD PTR ");
13968 1.1.1.1.8.1 tls break;
13969 1.1.1.1.8.1 tls default:
13970 1.1.1.1.8.1 tls abort ();
13971 1.1.1.1.8.1 tls }
13972 1.1.1.1.8.1 tls break;
13973 1.1.1.1.8.1 tls case xmm_mq_mode:
13974 1.1.1.1.8.1 tls if (!need_vex)
13975 1.1.1.1.8.1 tls abort ();
13976 1.1.1.1.8.1 tls
13977 1.1.1.1.8.1 tls switch (vex.length)
13978 1.1.1.1.8.1 tls {
13979 1.1.1.1.8.1 tls case 128:
13980 1.1.1.1.8.1 tls case 256:
13981 1.1.1.1.8.1 tls case 512:
13982 1.1.1.1.8.1 tls oappend ("QWORD PTR ");
13983 1.1.1.1.8.1 tls break;
13984 1.1.1.1.8.1 tls default:
13985 1.1.1.1.8.1 tls abort ();
13986 1.1.1.1.8.1 tls }
13987 1.1.1.1.8.1 tls break;
13988 1.1.1.1.8.1 tls case xmmdw_mode:
13989 1.1.1.1.8.1 tls if (!need_vex)
13990 1.1.1.1.8.1 tls abort ();
13991 1.1.1.1.8.1 tls
13992 1.1.1.1.8.1 tls switch (vex.length)
13993 1.1.1.1.8.1 tls {
13994 1.1.1.1.8.1 tls case 128:
13995 1.1.1.1.8.1 tls oappend ("WORD PTR ");
13996 1.1.1.1.8.1 tls break;
13997 1.1.1.1.8.1 tls case 256:
13998 1.1.1.1.8.1 tls oappend ("DWORD PTR ");
13999 1.1.1.1.8.1 tls break;
14000 1.1.1.1.8.1 tls case 512:
14001 1.1.1.1.8.1 tls oappend ("QWORD PTR ");
14002 1.1.1.1.8.1 tls break;
14003 1.1.1.1.8.1 tls default:
14004 1.1.1.1.8.1 tls abort ();
14005 1.1.1.1.8.1 tls }
14006 1.1.1.1.8.1 tls break;
14007 1.1.1.1.8.1 tls case xmmqd_mode:
14008 1.1.1.1.8.1 tls if (!need_vex)
14009 1.1.1.1.8.1 tls abort ();
14010 1.1.1.1.8.1 tls
14011 1.1.1.1.8.1 tls switch (vex.length)
14012 1.1.1.1.8.1 tls {
14013 1.1.1.1.8.1 tls case 128:
14014 1.1.1.1.8.1 tls oappend ("DWORD PTR ");
14015 1.1.1.1.8.1 tls break;
14016 1.1.1.1.8.1 tls case 256:
14017 1.1.1.1.8.1 tls oappend ("QWORD PTR ");
14018 1.1.1.1.8.1 tls break;
14019 1.1.1.1.8.1 tls case 512:
14020 1.1.1.1.8.1 tls oappend ("XMMWORD PTR ");
14021 1.1.1.1.8.1 tls break;
14022 1.1.1.1.8.1 tls default:
14023 1.1.1.1.8.1 tls abort ();
14024 1.1.1.1.8.1 tls }
14025 1.1.1.1.8.1 tls break;
14026 1.1.1.1.8.1 tls case ymmq_mode:
14027 1.1 christos if (!need_vex)
14028 1.1 christos abort ();
14029 1.1 christos
14030 1.1 christos switch (vex.length)
14031 1.1 christos {
14032 1.1 christos case 128:
14033 1.1 christos oappend ("QWORD PTR ");
14034 1.1 christos break;
14035 1.1 christos case 256:
14036 1.1.1.1.8.1 tls oappend ("YMMWORD PTR ");
14037 1.1.1.1.8.1 tls break;
14038 1.1.1.1.8.1 tls case 512:
14039 1.1.1.1.8.1 tls oappend ("ZMMWORD PTR ");
14040 1.1 christos break;
14041 1.1 christos default:
14042 1.1 christos abort ();
14043 1.1 christos }
14044 1.1 christos break;
14045 1.1.1.1.8.1 tls case ymmxmm_mode:
14046 1.1 christos if (!need_vex)
14047 1.1 christos abort ();
14048 1.1 christos
14049 1.1 christos switch (vex.length)
14050 1.1 christos {
14051 1.1 christos case 128:
14052 1.1 christos case 256:
14053 1.1.1.1.8.1 tls oappend ("XMMWORD PTR ");
14054 1.1 christos break;
14055 1.1 christos default:
14056 1.1 christos abort ();
14057 1.1 christos }
14058 1.1 christos break;
14059 1.1 christos case o_mode:
14060 1.1 christos oappend ("OWORD PTR ");
14061 1.1 christos break;
14062 1.1.1.1.8.1 tls case xmm_mdq_mode:
14063 1.1 christos case vex_w_dq_mode:
14064 1.1 christos case vex_scalar_w_dq_mode:
14065 1.1 christos if (!need_vex)
14066 1.1 christos abort ();
14067 1.1 christos
14068 1.1 christos if (vex.w)
14069 1.1 christos oappend ("QWORD PTR ");
14070 1.1 christos else
14071 1.1 christos oappend ("DWORD PTR ");
14072 1.1 christos break;
14073 1.1.1.1.8.1 tls case vex_vsib_d_w_dq_mode:
14074 1.1.1.1.8.1 tls case vex_vsib_q_w_dq_mode:
14075 1.1.1.1.8.1 tls if (!need_vex)
14076 1.1.1.1.8.1 tls abort ();
14077 1.1.1.1.8.1 tls
14078 1.1.1.1.8.1 tls if (!vex.evex)
14079 1.1.1.1.8.1 tls {
14080 1.1.1.1.8.1 tls if (vex.w)
14081 1.1.1.1.8.1 tls oappend ("QWORD PTR ");
14082 1.1.1.1.8.1 tls else
14083 1.1.1.1.8.1 tls oappend ("DWORD PTR ");
14084 1.1.1.1.8.1 tls }
14085 1.1.1.1.8.1 tls else
14086 1.1.1.1.8.1 tls {
14087 1.1.1.1.8.1 tls if (vex.length != 512)
14088 1.1.1.1.8.1 tls abort ();
14089 1.1.1.1.8.1 tls oappend ("ZMMWORD PTR ");
14090 1.1.1.1.8.1 tls }
14091 1.1.1.1.8.1 tls break;
14092 1.1.1.1.8.1 tls case mask_mode:
14093 1.1.1.1.8.1 tls if (!need_vex)
14094 1.1.1.1.8.1 tls abort ();
14095 1.1.1.1.8.1 tls /* Currently the only instructions, which allows either mask or
14096 1.1.1.1.8.1 tls memory operand, are AVX512's KMOVW instructions. They need
14097 1.1.1.1.8.1 tls Word-sized operand. */
14098 1.1.1.1.8.1 tls if (vex.w || vex.length != 128)
14099 1.1.1.1.8.1 tls abort ();
14100 1.1.1.1.8.1 tls oappend ("WORD PTR ");
14101 1.1.1.1.8.1 tls break;
14102 1.1.1.1.8.1 tls case v_bnd_mode:
14103 1.1 christos default:
14104 1.1 christos break;
14105 1.1 christos }
14106 1.1 christos }
14107 1.1 christos
14108 1.1 christos static void
14109 1.1 christos OP_E_register (int bytemode, int sizeflag)
14110 1.1 christos {
14111 1.1 christos int reg = modrm.rm;
14112 1.1 christos const char **names;
14113 1.1 christos
14114 1.1 christos USED_REX (REX_B);
14115 1.1 christos if ((rex & REX_B))
14116 1.1 christos reg += 8;
14117 1.1 christos
14118 1.1 christos if ((sizeflag & SUFFIX_ALWAYS)
14119 1.1 christos && (bytemode == b_swap_mode || bytemode == v_swap_mode))
14120 1.1 christos swap_operand ();
14121 1.1 christos
14122 1.1 christos switch (bytemode)
14123 1.1 christos {
14124 1.1 christos case b_mode:
14125 1.1 christos case b_swap_mode:
14126 1.1 christos USED_REX (0);
14127 1.1 christos if (rex)
14128 1.1 christos names = names8rex;
14129 1.1 christos else
14130 1.1 christos names = names8;
14131 1.1 christos break;
14132 1.1 christos case w_mode:
14133 1.1 christos names = names16;
14134 1.1 christos break;
14135 1.1 christos case d_mode:
14136 1.1 christos names = names32;
14137 1.1 christos break;
14138 1.1 christos case q_mode:
14139 1.1 christos names = names64;
14140 1.1 christos break;
14141 1.1 christos case m_mode:
14142 1.1.1.1.8.1 tls case v_bnd_mode:
14143 1.1 christos names = address_mode == mode_64bit ? names64 : names32;
14144 1.1 christos break;
14145 1.1.1.1.8.1 tls case bnd_mode:
14146 1.1.1.1.8.1 tls names = names_bnd;
14147 1.1.1.1.8.1 tls break;
14148 1.1 christos case stack_v_mode:
14149 1.1.1.1.8.1 tls if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
14150 1.1 christos {
14151 1.1 christos names = names64;
14152 1.1 christos break;
14153 1.1 christos }
14154 1.1 christos bytemode = v_mode;
14155 1.1 christos /* FALLTHRU */
14156 1.1 christos case v_mode:
14157 1.1 christos case v_swap_mode:
14158 1.1 christos case dq_mode:
14159 1.1 christos case dqb_mode:
14160 1.1 christos case dqd_mode:
14161 1.1 christos case dqw_mode:
14162 1.1 christos USED_REX (REX_W);
14163 1.1 christos if (rex & REX_W)
14164 1.1 christos names = names64;
14165 1.1 christos else
14166 1.1 christos {
14167 1.1.1.1.8.1 tls if ((sizeflag & DFLAG)
14168 1.1 christos || (bytemode != v_mode
14169 1.1 christos && bytemode != v_swap_mode))
14170 1.1 christos names = names32;
14171 1.1 christos else
14172 1.1 christos names = names16;
14173 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14174 1.1 christos }
14175 1.1 christos break;
14176 1.1.1.1.8.1 tls case mask_mode:
14177 1.1.1.1.8.1 tls names = names_mask;
14178 1.1.1.1.8.1 tls break;
14179 1.1 christos case 0:
14180 1.1 christos return;
14181 1.1 christos default:
14182 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
14183 1.1 christos return;
14184 1.1 christos }
14185 1.1 christos oappend (names[reg]);
14186 1.1 christos }
14187 1.1 christos
14188 1.1 christos static void
14189 1.1 christos OP_E_memory (int bytemode, int sizeflag)
14190 1.1 christos {
14191 1.1 christos bfd_vma disp = 0;
14192 1.1 christos int add = (rex & REX_B) ? 8 : 0;
14193 1.1 christos int riprel = 0;
14194 1.1.1.1.8.1 tls int shift;
14195 1.1.1.1.8.1 tls
14196 1.1.1.1.8.1 tls if (vex.evex)
14197 1.1.1.1.8.1 tls {
14198 1.1.1.1.8.1 tls /* In EVEX, if operand doesn't allow broadcast, vex.b should be 0. */
14199 1.1.1.1.8.1 tls if (vex.b
14200 1.1.1.1.8.1 tls && bytemode != x_mode
14201 1.1.1.1.8.1 tls && bytemode != evex_half_bcst_xmmq_mode)
14202 1.1.1.1.8.1 tls {
14203 1.1.1.1.8.1 tls BadOp ();
14204 1.1.1.1.8.1 tls return;
14205 1.1.1.1.8.1 tls }
14206 1.1.1.1.8.1 tls switch (bytemode)
14207 1.1.1.1.8.1 tls {
14208 1.1.1.1.8.1 tls case vex_vsib_d_w_dq_mode:
14209 1.1.1.1.8.1 tls case vex_vsib_q_w_dq_mode:
14210 1.1.1.1.8.1 tls case evex_x_gscat_mode:
14211 1.1.1.1.8.1 tls case xmm_mdq_mode:
14212 1.1.1.1.8.1 tls shift = vex.w ? 3 : 2;
14213 1.1.1.1.8.1 tls break;
14214 1.1.1.1.8.1 tls case x_mode:
14215 1.1.1.1.8.1 tls case evex_half_bcst_xmmq_mode:
14216 1.1.1.1.8.1 tls if (vex.b)
14217 1.1.1.1.8.1 tls {
14218 1.1.1.1.8.1 tls shift = vex.w ? 3 : 2;
14219 1.1.1.1.8.1 tls break;
14220 1.1.1.1.8.1 tls }
14221 1.1.1.1.8.1 tls /* Fall through if vex.b == 0. */
14222 1.1.1.1.8.1 tls case xmmqd_mode:
14223 1.1.1.1.8.1 tls case xmmdw_mode:
14224 1.1.1.1.8.1 tls case xmmq_mode:
14225 1.1.1.1.8.1 tls case ymmq_mode:
14226 1.1.1.1.8.1 tls case evex_x_nobcst_mode:
14227 1.1.1.1.8.1 tls case x_swap_mode:
14228 1.1.1.1.8.1 tls switch (vex.length)
14229 1.1.1.1.8.1 tls {
14230 1.1.1.1.8.1 tls case 128:
14231 1.1.1.1.8.1 tls shift = 4;
14232 1.1.1.1.8.1 tls break;
14233 1.1.1.1.8.1 tls case 256:
14234 1.1.1.1.8.1 tls shift = 5;
14235 1.1.1.1.8.1 tls break;
14236 1.1.1.1.8.1 tls case 512:
14237 1.1.1.1.8.1 tls shift = 6;
14238 1.1.1.1.8.1 tls break;
14239 1.1.1.1.8.1 tls default:
14240 1.1.1.1.8.1 tls abort ();
14241 1.1.1.1.8.1 tls }
14242 1.1.1.1.8.1 tls break;
14243 1.1.1.1.8.1 tls case ymm_mode:
14244 1.1.1.1.8.1 tls shift = 5;
14245 1.1.1.1.8.1 tls break;
14246 1.1.1.1.8.1 tls case xmm_mode:
14247 1.1.1.1.8.1 tls shift = 4;
14248 1.1.1.1.8.1 tls break;
14249 1.1.1.1.8.1 tls case xmm_mq_mode:
14250 1.1.1.1.8.1 tls case q_mode:
14251 1.1.1.1.8.1 tls case q_scalar_mode:
14252 1.1.1.1.8.1 tls case q_swap_mode:
14253 1.1.1.1.8.1 tls case q_scalar_swap_mode:
14254 1.1.1.1.8.1 tls shift = 3;
14255 1.1.1.1.8.1 tls break;
14256 1.1.1.1.8.1 tls case dqd_mode:
14257 1.1.1.1.8.1 tls case xmm_md_mode:
14258 1.1.1.1.8.1 tls case d_mode:
14259 1.1.1.1.8.1 tls case d_scalar_mode:
14260 1.1.1.1.8.1 tls case d_swap_mode:
14261 1.1.1.1.8.1 tls case d_scalar_swap_mode:
14262 1.1.1.1.8.1 tls shift = 2;
14263 1.1.1.1.8.1 tls break;
14264 1.1.1.1.8.1 tls case xmm_mw_mode:
14265 1.1.1.1.8.1 tls shift = 1;
14266 1.1.1.1.8.1 tls break;
14267 1.1.1.1.8.1 tls case xmm_mb_mode:
14268 1.1.1.1.8.1 tls shift = 0;
14269 1.1.1.1.8.1 tls break;
14270 1.1.1.1.8.1 tls default:
14271 1.1.1.1.8.1 tls abort ();
14272 1.1.1.1.8.1 tls }
14273 1.1.1.1.8.1 tls /* Make necessary corrections to shift for modes that need it.
14274 1.1.1.1.8.1 tls For these modes we currently have shift 4, 5 or 6 depending on
14275 1.1.1.1.8.1 tls vex.length (it corresponds to xmmword, ymmword or zmmword
14276 1.1.1.1.8.1 tls operand). We might want to make it 3, 4 or 5 (e.g. for
14277 1.1.1.1.8.1 tls xmmq_mode). In case of broadcast enabled the corrections
14278 1.1.1.1.8.1 tls aren't needed, as element size is always 32 or 64 bits. */
14279 1.1.1.1.8.1 tls if (bytemode == xmmq_mode
14280 1.1.1.1.8.1 tls || (bytemode == evex_half_bcst_xmmq_mode
14281 1.1.1.1.8.1 tls && !vex.b))
14282 1.1.1.1.8.1 tls shift -= 1;
14283 1.1.1.1.8.1 tls else if (bytemode == xmmqd_mode)
14284 1.1.1.1.8.1 tls shift -= 2;
14285 1.1.1.1.8.1 tls else if (bytemode == xmmdw_mode)
14286 1.1.1.1.8.1 tls shift -= 3;
14287 1.1.1.1.8.1 tls }
14288 1.1.1.1.8.1 tls else
14289 1.1.1.1.8.1 tls shift = 0;
14290 1.1 christos
14291 1.1 christos USED_REX (REX_B);
14292 1.1 christos if (intel_syntax)
14293 1.1 christos intel_operand_size (bytemode, sizeflag);
14294 1.1 christos append_seg ();
14295 1.1 christos
14296 1.1 christos if ((sizeflag & AFLAG) || address_mode == mode_64bit)
14297 1.1 christos {
14298 1.1 christos /* 32/64 bit address mode */
14299 1.1 christos int havedisp;
14300 1.1 christos int havesib;
14301 1.1 christos int havebase;
14302 1.1 christos int haveindex;
14303 1.1 christos int needindex;
14304 1.1 christos int base, rbase;
14305 1.1 christos int vindex = 0;
14306 1.1 christos int scale = 0;
14307 1.1.1.1.8.1 tls int addr32flag = !((sizeflag & AFLAG)
14308 1.1.1.1.8.1 tls || bytemode == v_bnd_mode
14309 1.1.1.1.8.1 tls || bytemode == bnd_mode);
14310 1.1.1.1.8.1 tls const char **indexes64 = names64;
14311 1.1.1.1.8.1 tls const char **indexes32 = names32;
14312 1.1 christos
14313 1.1 christos havesib = 0;
14314 1.1 christos havebase = 1;
14315 1.1 christos haveindex = 0;
14316 1.1 christos base = modrm.rm;
14317 1.1 christos
14318 1.1 christos if (base == 4)
14319 1.1 christos {
14320 1.1 christos havesib = 1;
14321 1.1 christos vindex = sib.index;
14322 1.1 christos USED_REX (REX_X);
14323 1.1 christos if (rex & REX_X)
14324 1.1 christos vindex += 8;
14325 1.1.1.1.8.1 tls switch (bytemode)
14326 1.1.1.1.8.1 tls {
14327 1.1.1.1.8.1 tls case vex_vsib_d_w_dq_mode:
14328 1.1.1.1.8.1 tls case vex_vsib_q_w_dq_mode:
14329 1.1.1.1.8.1 tls if (!need_vex)
14330 1.1.1.1.8.1 tls abort ();
14331 1.1.1.1.8.1 tls if (vex.evex)
14332 1.1.1.1.8.1 tls {
14333 1.1.1.1.8.1 tls if (!vex.v)
14334 1.1.1.1.8.1 tls vindex += 16;
14335 1.1.1.1.8.1 tls }
14336 1.1.1.1.8.1 tls
14337 1.1.1.1.8.1 tls haveindex = 1;
14338 1.1.1.1.8.1 tls switch (vex.length)
14339 1.1.1.1.8.1 tls {
14340 1.1.1.1.8.1 tls case 128:
14341 1.1.1.1.8.1 tls indexes64 = indexes32 = names_xmm;
14342 1.1.1.1.8.1 tls break;
14343 1.1.1.1.8.1 tls case 256:
14344 1.1.1.1.8.1 tls if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
14345 1.1.1.1.8.1 tls indexes64 = indexes32 = names_ymm;
14346 1.1.1.1.8.1 tls else
14347 1.1.1.1.8.1 tls indexes64 = indexes32 = names_xmm;
14348 1.1.1.1.8.1 tls break;
14349 1.1.1.1.8.1 tls case 512:
14350 1.1.1.1.8.1 tls if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
14351 1.1.1.1.8.1 tls indexes64 = indexes32 = names_zmm;
14352 1.1.1.1.8.1 tls else
14353 1.1.1.1.8.1 tls indexes64 = indexes32 = names_ymm;
14354 1.1.1.1.8.1 tls break;
14355 1.1.1.1.8.1 tls default:
14356 1.1.1.1.8.1 tls abort ();
14357 1.1.1.1.8.1 tls }
14358 1.1.1.1.8.1 tls break;
14359 1.1.1.1.8.1 tls default:
14360 1.1.1.1.8.1 tls haveindex = vindex != 4;
14361 1.1.1.1.8.1 tls break;
14362 1.1.1.1.8.1 tls }
14363 1.1.1.1.8.1 tls scale = sib.scale;
14364 1.1.1.1.8.1 tls base = sib.base;
14365 1.1 christos codep++;
14366 1.1 christos }
14367 1.1 christos rbase = base + add;
14368 1.1 christos
14369 1.1 christos switch (modrm.mod)
14370 1.1 christos {
14371 1.1 christos case 0:
14372 1.1 christos if (base == 5)
14373 1.1 christos {
14374 1.1 christos havebase = 0;
14375 1.1 christos if (address_mode == mode_64bit && !havesib)
14376 1.1 christos riprel = 1;
14377 1.1 christos disp = get32s ();
14378 1.1 christos }
14379 1.1 christos break;
14380 1.1 christos case 1:
14381 1.1 christos FETCH_DATA (the_info, codep + 1);
14382 1.1 christos disp = *codep++;
14383 1.1 christos if ((disp & 0x80) != 0)
14384 1.1 christos disp -= 0x100;
14385 1.1.1.1.8.1 tls if (vex.evex && shift > 0)
14386 1.1.1.1.8.1 tls disp <<= shift;
14387 1.1 christos break;
14388 1.1 christos case 2:
14389 1.1 christos disp = get32s ();
14390 1.1 christos break;
14391 1.1 christos }
14392 1.1 christos
14393 1.1 christos /* In 32bit mode, we need index register to tell [offset] from
14394 1.1 christos [eiz*1 + offset]. */
14395 1.1 christos needindex = (havesib
14396 1.1 christos && !havebase
14397 1.1 christos && !haveindex
14398 1.1 christos && address_mode == mode_32bit);
14399 1.1 christos havedisp = (havebase
14400 1.1 christos || needindex
14401 1.1 christos || (havesib && (haveindex || scale != 0)));
14402 1.1 christos
14403 1.1 christos if (!intel_syntax)
14404 1.1 christos if (modrm.mod != 0 || base == 5)
14405 1.1 christos {
14406 1.1 christos if (havedisp || riprel)
14407 1.1 christos print_displacement (scratchbuf, disp);
14408 1.1 christos else
14409 1.1 christos print_operand_value (scratchbuf, 1, disp);
14410 1.1 christos oappend (scratchbuf);
14411 1.1 christos if (riprel)
14412 1.1 christos {
14413 1.1 christos set_op (disp, 1);
14414 1.1 christos oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
14415 1.1 christos }
14416 1.1 christos }
14417 1.1 christos
14418 1.1.1.1.8.1 tls if ((havebase || haveindex || riprel)
14419 1.1.1.1.8.1 tls && (bytemode != v_bnd_mode)
14420 1.1.1.1.8.1 tls && (bytemode != bnd_mode))
14421 1.1 christos used_prefixes |= PREFIX_ADDR;
14422 1.1 christos
14423 1.1 christos if (havedisp || (intel_syntax && riprel))
14424 1.1 christos {
14425 1.1 christos *obufp++ = open_char;
14426 1.1 christos if (intel_syntax && riprel)
14427 1.1 christos {
14428 1.1 christos set_op (disp, 1);
14429 1.1 christos oappend (sizeflag & AFLAG ? "rip" : "eip");
14430 1.1 christos }
14431 1.1 christos *obufp = '\0';
14432 1.1 christos if (havebase)
14433 1.1.1.1.8.1 tls oappend (address_mode == mode_64bit && !addr32flag
14434 1.1 christos ? names64[rbase] : names32[rbase]);
14435 1.1 christos if (havesib)
14436 1.1 christos {
14437 1.1 christos /* ESP/RSP won't allow index. If base isn't ESP/RSP,
14438 1.1 christos print index to tell base + index from base. */
14439 1.1 christos if (scale != 0
14440 1.1 christos || needindex
14441 1.1 christos || haveindex
14442 1.1 christos || (havebase && base != ESP_REG_NUM))
14443 1.1 christos {
14444 1.1 christos if (!intel_syntax || havebase)
14445 1.1 christos {
14446 1.1 christos *obufp++ = separator_char;
14447 1.1 christos *obufp = '\0';
14448 1.1 christos }
14449 1.1 christos if (haveindex)
14450 1.1.1.1.8.1 tls oappend (address_mode == mode_64bit && !addr32flag
14451 1.1.1.1.8.1 tls ? indexes64[vindex] : indexes32[vindex]);
14452 1.1 christos else
14453 1.1.1.1.8.1 tls oappend (address_mode == mode_64bit && !addr32flag
14454 1.1 christos ? index64 : index32);
14455 1.1 christos
14456 1.1 christos *obufp++ = scale_char;
14457 1.1 christos *obufp = '\0';
14458 1.1 christos sprintf (scratchbuf, "%d", 1 << scale);
14459 1.1 christos oappend (scratchbuf);
14460 1.1 christos }
14461 1.1 christos }
14462 1.1 christos if (intel_syntax
14463 1.1 christos && (disp || modrm.mod != 0 || base == 5))
14464 1.1 christos {
14465 1.1 christos if (!havedisp || (bfd_signed_vma) disp >= 0)
14466 1.1 christos {
14467 1.1 christos *obufp++ = '+';
14468 1.1 christos *obufp = '\0';
14469 1.1 christos }
14470 1.1 christos else if (modrm.mod != 1 && disp != -disp)
14471 1.1 christos {
14472 1.1 christos *obufp++ = '-';
14473 1.1 christos *obufp = '\0';
14474 1.1 christos disp = - (bfd_signed_vma) disp;
14475 1.1 christos }
14476 1.1 christos
14477 1.1 christos if (havedisp)
14478 1.1 christos print_displacement (scratchbuf, disp);
14479 1.1 christos else
14480 1.1 christos print_operand_value (scratchbuf, 1, disp);
14481 1.1 christos oappend (scratchbuf);
14482 1.1 christos }
14483 1.1 christos
14484 1.1 christos *obufp++ = close_char;
14485 1.1 christos *obufp = '\0';
14486 1.1 christos }
14487 1.1 christos else if (intel_syntax)
14488 1.1 christos {
14489 1.1 christos if (modrm.mod != 0 || base == 5)
14490 1.1 christos {
14491 1.1 christos if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
14492 1.1 christos | PREFIX_ES | PREFIX_FS | PREFIX_GS))
14493 1.1 christos ;
14494 1.1 christos else
14495 1.1 christos {
14496 1.1 christos oappend (names_seg[ds_reg - es_reg]);
14497 1.1 christos oappend (":");
14498 1.1 christos }
14499 1.1 christos print_operand_value (scratchbuf, 1, disp);
14500 1.1 christos oappend (scratchbuf);
14501 1.1 christos }
14502 1.1 christos }
14503 1.1 christos }
14504 1.1 christos else
14505 1.1 christos {
14506 1.1 christos /* 16 bit address mode */
14507 1.1 christos used_prefixes |= prefixes & PREFIX_ADDR;
14508 1.1 christos switch (modrm.mod)
14509 1.1 christos {
14510 1.1 christos case 0:
14511 1.1 christos if (modrm.rm == 6)
14512 1.1 christos {
14513 1.1 christos disp = get16 ();
14514 1.1 christos if ((disp & 0x8000) != 0)
14515 1.1 christos disp -= 0x10000;
14516 1.1 christos }
14517 1.1 christos break;
14518 1.1 christos case 1:
14519 1.1 christos FETCH_DATA (the_info, codep + 1);
14520 1.1 christos disp = *codep++;
14521 1.1 christos if ((disp & 0x80) != 0)
14522 1.1 christos disp -= 0x100;
14523 1.1 christos break;
14524 1.1 christos case 2:
14525 1.1 christos disp = get16 ();
14526 1.1 christos if ((disp & 0x8000) != 0)
14527 1.1 christos disp -= 0x10000;
14528 1.1 christos break;
14529 1.1 christos }
14530 1.1 christos
14531 1.1 christos if (!intel_syntax)
14532 1.1 christos if (modrm.mod != 0 || modrm.rm == 6)
14533 1.1 christos {
14534 1.1 christos print_displacement (scratchbuf, disp);
14535 1.1 christos oappend (scratchbuf);
14536 1.1 christos }
14537 1.1 christos
14538 1.1 christos if (modrm.mod != 0 || modrm.rm != 6)
14539 1.1 christos {
14540 1.1 christos *obufp++ = open_char;
14541 1.1 christos *obufp = '\0';
14542 1.1 christos oappend (index16[modrm.rm]);
14543 1.1 christos if (intel_syntax
14544 1.1 christos && (disp || modrm.mod != 0 || modrm.rm == 6))
14545 1.1 christos {
14546 1.1 christos if ((bfd_signed_vma) disp >= 0)
14547 1.1 christos {
14548 1.1 christos *obufp++ = '+';
14549 1.1 christos *obufp = '\0';
14550 1.1 christos }
14551 1.1 christos else if (modrm.mod != 1)
14552 1.1 christos {
14553 1.1 christos *obufp++ = '-';
14554 1.1 christos *obufp = '\0';
14555 1.1 christos disp = - (bfd_signed_vma) disp;
14556 1.1 christos }
14557 1.1 christos
14558 1.1 christos print_displacement (scratchbuf, disp);
14559 1.1 christos oappend (scratchbuf);
14560 1.1 christos }
14561 1.1 christos
14562 1.1 christos *obufp++ = close_char;
14563 1.1 christos *obufp = '\0';
14564 1.1 christos }
14565 1.1 christos else if (intel_syntax)
14566 1.1 christos {
14567 1.1 christos if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
14568 1.1 christos | PREFIX_ES | PREFIX_FS | PREFIX_GS))
14569 1.1 christos ;
14570 1.1 christos else
14571 1.1 christos {
14572 1.1 christos oappend (names_seg[ds_reg - es_reg]);
14573 1.1 christos oappend (":");
14574 1.1 christos }
14575 1.1 christos print_operand_value (scratchbuf, 1, disp & 0xffff);
14576 1.1 christos oappend (scratchbuf);
14577 1.1 christos }
14578 1.1 christos }
14579 1.1.1.1.8.1 tls if (vex.evex && vex.b
14580 1.1.1.1.8.1 tls && (bytemode == x_mode
14581 1.1.1.1.8.1 tls || bytemode == evex_half_bcst_xmmq_mode))
14582 1.1.1.1.8.1 tls {
14583 1.1.1.1.8.1 tls if (vex.w || bytemode == evex_half_bcst_xmmq_mode)
14584 1.1.1.1.8.1 tls oappend ("{1to8}");
14585 1.1.1.1.8.1 tls else
14586 1.1.1.1.8.1 tls oappend ("{1to16}");
14587 1.1.1.1.8.1 tls }
14588 1.1 christos }
14589 1.1 christos
14590 1.1 christos static void
14591 1.1 christos OP_E (int bytemode, int sizeflag)
14592 1.1 christos {
14593 1.1 christos /* Skip mod/rm byte. */
14594 1.1 christos MODRM_CHECK;
14595 1.1 christos codep++;
14596 1.1 christos
14597 1.1 christos if (modrm.mod == 3)
14598 1.1 christos OP_E_register (bytemode, sizeflag);
14599 1.1 christos else
14600 1.1 christos OP_E_memory (bytemode, sizeflag);
14601 1.1 christos }
14602 1.1 christos
14603 1.1 christos static void
14604 1.1 christos OP_G (int bytemode, int sizeflag)
14605 1.1 christos {
14606 1.1 christos int add = 0;
14607 1.1 christos USED_REX (REX_R);
14608 1.1 christos if (rex & REX_R)
14609 1.1 christos add += 8;
14610 1.1 christos switch (bytemode)
14611 1.1 christos {
14612 1.1 christos case b_mode:
14613 1.1 christos USED_REX (0);
14614 1.1 christos if (rex)
14615 1.1 christos oappend (names8rex[modrm.reg + add]);
14616 1.1 christos else
14617 1.1 christos oappend (names8[modrm.reg + add]);
14618 1.1 christos break;
14619 1.1 christos case w_mode:
14620 1.1 christos oappend (names16[modrm.reg + add]);
14621 1.1 christos break;
14622 1.1 christos case d_mode:
14623 1.1 christos oappend (names32[modrm.reg + add]);
14624 1.1 christos break;
14625 1.1 christos case q_mode:
14626 1.1 christos oappend (names64[modrm.reg + add]);
14627 1.1 christos break;
14628 1.1.1.1.8.1 tls case bnd_mode:
14629 1.1.1.1.8.1 tls oappend (names_bnd[modrm.reg]);
14630 1.1.1.1.8.1 tls break;
14631 1.1 christos case v_mode:
14632 1.1 christos case dq_mode:
14633 1.1 christos case dqb_mode:
14634 1.1 christos case dqd_mode:
14635 1.1 christos case dqw_mode:
14636 1.1 christos USED_REX (REX_W);
14637 1.1 christos if (rex & REX_W)
14638 1.1 christos oappend (names64[modrm.reg + add]);
14639 1.1 christos else
14640 1.1 christos {
14641 1.1 christos if ((sizeflag & DFLAG) || bytemode != v_mode)
14642 1.1 christos oappend (names32[modrm.reg + add]);
14643 1.1 christos else
14644 1.1 christos oappend (names16[modrm.reg + add]);
14645 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14646 1.1 christos }
14647 1.1 christos break;
14648 1.1 christos case m_mode:
14649 1.1 christos if (address_mode == mode_64bit)
14650 1.1 christos oappend (names64[modrm.reg + add]);
14651 1.1 christos else
14652 1.1 christos oappend (names32[modrm.reg + add]);
14653 1.1 christos break;
14654 1.1.1.1.8.1 tls case mask_mode:
14655 1.1.1.1.8.1 tls oappend (names_mask[modrm.reg + add]);
14656 1.1.1.1.8.1 tls break;
14657 1.1 christos default:
14658 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
14659 1.1 christos break;
14660 1.1 christos }
14661 1.1 christos }
14662 1.1 christos
14663 1.1 christos static bfd_vma
14664 1.1 christos get64 (void)
14665 1.1 christos {
14666 1.1 christos bfd_vma x;
14667 1.1 christos #ifdef BFD64
14668 1.1 christos unsigned int a;
14669 1.1 christos unsigned int b;
14670 1.1 christos
14671 1.1 christos FETCH_DATA (the_info, codep + 8);
14672 1.1 christos a = *codep++ & 0xff;
14673 1.1 christos a |= (*codep++ & 0xff) << 8;
14674 1.1 christos a |= (*codep++ & 0xff) << 16;
14675 1.1 christos a |= (*codep++ & 0xff) << 24;
14676 1.1 christos b = *codep++ & 0xff;
14677 1.1 christos b |= (*codep++ & 0xff) << 8;
14678 1.1 christos b |= (*codep++ & 0xff) << 16;
14679 1.1 christos b |= (*codep++ & 0xff) << 24;
14680 1.1 christos x = a + ((bfd_vma) b << 32);
14681 1.1 christos #else
14682 1.1 christos abort ();
14683 1.1 christos x = 0;
14684 1.1 christos #endif
14685 1.1 christos return x;
14686 1.1 christos }
14687 1.1 christos
14688 1.1 christos static bfd_signed_vma
14689 1.1 christos get32 (void)
14690 1.1 christos {
14691 1.1 christos bfd_signed_vma x = 0;
14692 1.1 christos
14693 1.1 christos FETCH_DATA (the_info, codep + 4);
14694 1.1 christos x = *codep++ & (bfd_signed_vma) 0xff;
14695 1.1 christos x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14696 1.1 christos x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14697 1.1 christos x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14698 1.1 christos return x;
14699 1.1 christos }
14700 1.1 christos
14701 1.1 christos static bfd_signed_vma
14702 1.1 christos get32s (void)
14703 1.1 christos {
14704 1.1 christos bfd_signed_vma x = 0;
14705 1.1 christos
14706 1.1 christos FETCH_DATA (the_info, codep + 4);
14707 1.1 christos x = *codep++ & (bfd_signed_vma) 0xff;
14708 1.1 christos x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
14709 1.1 christos x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
14710 1.1 christos x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
14711 1.1 christos
14712 1.1 christos x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
14713 1.1 christos
14714 1.1 christos return x;
14715 1.1 christos }
14716 1.1 christos
14717 1.1 christos static int
14718 1.1 christos get16 (void)
14719 1.1 christos {
14720 1.1 christos int x = 0;
14721 1.1 christos
14722 1.1 christos FETCH_DATA (the_info, codep + 2);
14723 1.1 christos x = *codep++ & 0xff;
14724 1.1 christos x |= (*codep++ & 0xff) << 8;
14725 1.1 christos return x;
14726 1.1 christos }
14727 1.1 christos
14728 1.1 christos static void
14729 1.1 christos set_op (bfd_vma op, int riprel)
14730 1.1 christos {
14731 1.1 christos op_index[op_ad] = op_ad;
14732 1.1 christos if (address_mode == mode_64bit)
14733 1.1 christos {
14734 1.1 christos op_address[op_ad] = op;
14735 1.1 christos op_riprel[op_ad] = riprel;
14736 1.1 christos }
14737 1.1 christos else
14738 1.1 christos {
14739 1.1 christos /* Mask to get a 32-bit address. */
14740 1.1 christos op_address[op_ad] = op & 0xffffffff;
14741 1.1 christos op_riprel[op_ad] = riprel & 0xffffffff;
14742 1.1 christos }
14743 1.1 christos }
14744 1.1 christos
14745 1.1 christos static void
14746 1.1 christos OP_REG (int code, int sizeflag)
14747 1.1 christos {
14748 1.1 christos const char *s;
14749 1.1 christos int add;
14750 1.1.1.1.8.1 tls
14751 1.1.1.1.8.1 tls switch (code)
14752 1.1.1.1.8.1 tls {
14753 1.1.1.1.8.1 tls case es_reg: case ss_reg: case cs_reg:
14754 1.1.1.1.8.1 tls case ds_reg: case fs_reg: case gs_reg:
14755 1.1.1.1.8.1 tls oappend (names_seg[code - es_reg]);
14756 1.1.1.1.8.1 tls return;
14757 1.1.1.1.8.1 tls }
14758 1.1.1.1.8.1 tls
14759 1.1 christos USED_REX (REX_B);
14760 1.1 christos if (rex & REX_B)
14761 1.1 christos add = 8;
14762 1.1 christos else
14763 1.1 christos add = 0;
14764 1.1 christos
14765 1.1 christos switch (code)
14766 1.1 christos {
14767 1.1 christos case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14768 1.1 christos case sp_reg: case bp_reg: case si_reg: case di_reg:
14769 1.1 christos s = names16[code - ax_reg + add];
14770 1.1 christos break;
14771 1.1 christos case al_reg: case ah_reg: case cl_reg: case ch_reg:
14772 1.1 christos case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14773 1.1 christos USED_REX (0);
14774 1.1 christos if (rex)
14775 1.1 christos s = names8rex[code - al_reg + add];
14776 1.1 christos else
14777 1.1 christos s = names8[code - al_reg];
14778 1.1 christos break;
14779 1.1 christos case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
14780 1.1 christos case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
14781 1.1.1.1.8.1 tls if (address_mode == mode_64bit
14782 1.1.1.1.8.1 tls && ((sizeflag & DFLAG) || (rex & REX_W)))
14783 1.1 christos {
14784 1.1 christos s = names64[code - rAX_reg + add];
14785 1.1 christos break;
14786 1.1 christos }
14787 1.1 christos code += eAX_reg - rAX_reg;
14788 1.1 christos /* Fall through. */
14789 1.1 christos case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14790 1.1 christos case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
14791 1.1 christos USED_REX (REX_W);
14792 1.1 christos if (rex & REX_W)
14793 1.1 christos s = names64[code - eAX_reg + add];
14794 1.1 christos else
14795 1.1 christos {
14796 1.1 christos if (sizeflag & DFLAG)
14797 1.1 christos s = names32[code - eAX_reg + add];
14798 1.1 christos else
14799 1.1 christos s = names16[code - eAX_reg + add];
14800 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14801 1.1 christos }
14802 1.1 christos break;
14803 1.1 christos default:
14804 1.1 christos s = INTERNAL_DISASSEMBLER_ERROR;
14805 1.1 christos break;
14806 1.1 christos }
14807 1.1 christos oappend (s);
14808 1.1 christos }
14809 1.1 christos
14810 1.1 christos static void
14811 1.1 christos OP_IMREG (int code, int sizeflag)
14812 1.1 christos {
14813 1.1 christos const char *s;
14814 1.1 christos
14815 1.1 christos switch (code)
14816 1.1 christos {
14817 1.1 christos case indir_dx_reg:
14818 1.1 christos if (intel_syntax)
14819 1.1 christos s = "dx";
14820 1.1 christos else
14821 1.1 christos s = "(%dx)";
14822 1.1 christos break;
14823 1.1 christos case ax_reg: case cx_reg: case dx_reg: case bx_reg:
14824 1.1 christos case sp_reg: case bp_reg: case si_reg: case di_reg:
14825 1.1 christos s = names16[code - ax_reg];
14826 1.1 christos break;
14827 1.1 christos case es_reg: case ss_reg: case cs_reg:
14828 1.1 christos case ds_reg: case fs_reg: case gs_reg:
14829 1.1 christos s = names_seg[code - es_reg];
14830 1.1 christos break;
14831 1.1 christos case al_reg: case ah_reg: case cl_reg: case ch_reg:
14832 1.1 christos case dl_reg: case dh_reg: case bl_reg: case bh_reg:
14833 1.1 christos USED_REX (0);
14834 1.1 christos if (rex)
14835 1.1 christos s = names8rex[code - al_reg];
14836 1.1 christos else
14837 1.1 christos s = names8[code - al_reg];
14838 1.1 christos break;
14839 1.1 christos case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
14840 1.1 christos case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
14841 1.1 christos USED_REX (REX_W);
14842 1.1 christos if (rex & REX_W)
14843 1.1 christos s = names64[code - eAX_reg];
14844 1.1 christos else
14845 1.1 christos {
14846 1.1 christos if (sizeflag & DFLAG)
14847 1.1 christos s = names32[code - eAX_reg];
14848 1.1 christos else
14849 1.1 christos s = names16[code - eAX_reg];
14850 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14851 1.1 christos }
14852 1.1 christos break;
14853 1.1 christos case z_mode_ax_reg:
14854 1.1 christos if ((rex & REX_W) || (sizeflag & DFLAG))
14855 1.1 christos s = *names32;
14856 1.1 christos else
14857 1.1 christos s = *names16;
14858 1.1 christos if (!(rex & REX_W))
14859 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14860 1.1 christos break;
14861 1.1 christos default:
14862 1.1 christos s = INTERNAL_DISASSEMBLER_ERROR;
14863 1.1 christos break;
14864 1.1 christos }
14865 1.1 christos oappend (s);
14866 1.1 christos }
14867 1.1 christos
14868 1.1 christos static void
14869 1.1 christos OP_I (int bytemode, int sizeflag)
14870 1.1 christos {
14871 1.1 christos bfd_signed_vma op;
14872 1.1 christos bfd_signed_vma mask = -1;
14873 1.1 christos
14874 1.1 christos switch (bytemode)
14875 1.1 christos {
14876 1.1 christos case b_mode:
14877 1.1 christos FETCH_DATA (the_info, codep + 1);
14878 1.1 christos op = *codep++;
14879 1.1 christos mask = 0xff;
14880 1.1 christos break;
14881 1.1 christos case q_mode:
14882 1.1 christos if (address_mode == mode_64bit)
14883 1.1 christos {
14884 1.1 christos op = get32s ();
14885 1.1 christos break;
14886 1.1 christos }
14887 1.1 christos /* Fall through. */
14888 1.1 christos case v_mode:
14889 1.1 christos USED_REX (REX_W);
14890 1.1 christos if (rex & REX_W)
14891 1.1 christos op = get32s ();
14892 1.1 christos else
14893 1.1 christos {
14894 1.1 christos if (sizeflag & DFLAG)
14895 1.1 christos {
14896 1.1 christos op = get32 ();
14897 1.1 christos mask = 0xffffffff;
14898 1.1 christos }
14899 1.1 christos else
14900 1.1 christos {
14901 1.1 christos op = get16 ();
14902 1.1 christos mask = 0xfffff;
14903 1.1 christos }
14904 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14905 1.1 christos }
14906 1.1 christos break;
14907 1.1 christos case w_mode:
14908 1.1 christos mask = 0xfffff;
14909 1.1 christos op = get16 ();
14910 1.1 christos break;
14911 1.1 christos case const_1_mode:
14912 1.1 christos if (intel_syntax)
14913 1.1.1.1.8.1 tls oappend ("1");
14914 1.1 christos return;
14915 1.1 christos default:
14916 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
14917 1.1 christos return;
14918 1.1 christos }
14919 1.1 christos
14920 1.1 christos op &= mask;
14921 1.1 christos scratchbuf[0] = '$';
14922 1.1 christos print_operand_value (scratchbuf + 1, 1, op);
14923 1.1.1.1.8.1 tls oappend_maybe_intel (scratchbuf);
14924 1.1 christos scratchbuf[0] = '\0';
14925 1.1 christos }
14926 1.1 christos
14927 1.1 christos static void
14928 1.1 christos OP_I64 (int bytemode, int sizeflag)
14929 1.1 christos {
14930 1.1 christos bfd_signed_vma op;
14931 1.1 christos bfd_signed_vma mask = -1;
14932 1.1 christos
14933 1.1 christos if (address_mode != mode_64bit)
14934 1.1 christos {
14935 1.1 christos OP_I (bytemode, sizeflag);
14936 1.1 christos return;
14937 1.1 christos }
14938 1.1 christos
14939 1.1 christos switch (bytemode)
14940 1.1 christos {
14941 1.1 christos case b_mode:
14942 1.1 christos FETCH_DATA (the_info, codep + 1);
14943 1.1 christos op = *codep++;
14944 1.1 christos mask = 0xff;
14945 1.1 christos break;
14946 1.1 christos case v_mode:
14947 1.1 christos USED_REX (REX_W);
14948 1.1 christos if (rex & REX_W)
14949 1.1 christos op = get64 ();
14950 1.1 christos else
14951 1.1 christos {
14952 1.1 christos if (sizeflag & DFLAG)
14953 1.1 christos {
14954 1.1 christos op = get32 ();
14955 1.1 christos mask = 0xffffffff;
14956 1.1 christos }
14957 1.1 christos else
14958 1.1 christos {
14959 1.1 christos op = get16 ();
14960 1.1 christos mask = 0xfffff;
14961 1.1 christos }
14962 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14963 1.1 christos }
14964 1.1 christos break;
14965 1.1 christos case w_mode:
14966 1.1 christos mask = 0xfffff;
14967 1.1 christos op = get16 ();
14968 1.1 christos break;
14969 1.1 christos default:
14970 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
14971 1.1 christos return;
14972 1.1 christos }
14973 1.1 christos
14974 1.1 christos op &= mask;
14975 1.1 christos scratchbuf[0] = '$';
14976 1.1 christos print_operand_value (scratchbuf + 1, 1, op);
14977 1.1.1.1.8.1 tls oappend_maybe_intel (scratchbuf);
14978 1.1 christos scratchbuf[0] = '\0';
14979 1.1 christos }
14980 1.1 christos
14981 1.1 christos static void
14982 1.1 christos OP_sI (int bytemode, int sizeflag)
14983 1.1 christos {
14984 1.1 christos bfd_signed_vma op;
14985 1.1 christos
14986 1.1 christos switch (bytemode)
14987 1.1 christos {
14988 1.1 christos case b_mode:
14989 1.1 christos case b_T_mode:
14990 1.1 christos FETCH_DATA (the_info, codep + 1);
14991 1.1 christos op = *codep++;
14992 1.1 christos if ((op & 0x80) != 0)
14993 1.1 christos op -= 0x100;
14994 1.1 christos if (bytemode == b_T_mode)
14995 1.1 christos {
14996 1.1 christos if (address_mode != mode_64bit
14997 1.1.1.1.8.1 tls || !((sizeflag & DFLAG) || (rex & REX_W)))
14998 1.1 christos {
14999 1.1.1.1.8.1 tls /* The operand-size prefix is overridden by a REX prefix. */
15000 1.1.1.1.8.1 tls if ((sizeflag & DFLAG) || (rex & REX_W))
15001 1.1 christos op &= 0xffffffff;
15002 1.1 christos else
15003 1.1 christos op &= 0xffff;
15004 1.1 christos }
15005 1.1 christos }
15006 1.1 christos else
15007 1.1 christos {
15008 1.1 christos if (!(rex & REX_W))
15009 1.1 christos {
15010 1.1 christos if (sizeflag & DFLAG)
15011 1.1 christos op &= 0xffffffff;
15012 1.1 christos else
15013 1.1 christos op &= 0xffff;
15014 1.1 christos }
15015 1.1 christos }
15016 1.1 christos break;
15017 1.1 christos case v_mode:
15018 1.1.1.1.8.1 tls /* The operand-size prefix is overridden by a REX prefix. */
15019 1.1.1.1.8.1 tls if ((sizeflag & DFLAG) || (rex & REX_W))
15020 1.1 christos op = get32s ();
15021 1.1 christos else
15022 1.1 christos op = get16 ();
15023 1.1 christos break;
15024 1.1 christos default:
15025 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
15026 1.1 christos return;
15027 1.1 christos }
15028 1.1 christos
15029 1.1 christos scratchbuf[0] = '$';
15030 1.1 christos print_operand_value (scratchbuf + 1, 1, op);
15031 1.1.1.1.8.1 tls oappend_maybe_intel (scratchbuf);
15032 1.1 christos }
15033 1.1 christos
15034 1.1 christos static void
15035 1.1 christos OP_J (int bytemode, int sizeflag)
15036 1.1 christos {
15037 1.1 christos bfd_vma disp;
15038 1.1 christos bfd_vma mask = -1;
15039 1.1 christos bfd_vma segment = 0;
15040 1.1 christos
15041 1.1 christos switch (bytemode)
15042 1.1 christos {
15043 1.1 christos case b_mode:
15044 1.1 christos FETCH_DATA (the_info, codep + 1);
15045 1.1 christos disp = *codep++;
15046 1.1 christos if ((disp & 0x80) != 0)
15047 1.1 christos disp -= 0x100;
15048 1.1 christos break;
15049 1.1 christos case v_mode:
15050 1.1 christos USED_REX (REX_W);
15051 1.1 christos if ((sizeflag & DFLAG) || (rex & REX_W))
15052 1.1 christos disp = get32s ();
15053 1.1 christos else
15054 1.1 christos {
15055 1.1 christos disp = get16 ();
15056 1.1 christos if ((disp & 0x8000) != 0)
15057 1.1 christos disp -= 0x10000;
15058 1.1 christos /* In 16bit mode, address is wrapped around at 64k within
15059 1.1 christos the same segment. Otherwise, a data16 prefix on a jump
15060 1.1 christos instruction means that the pc is masked to 16 bits after
15061 1.1 christos the displacement is added! */
15062 1.1 christos mask = 0xffff;
15063 1.1 christos if ((prefixes & PREFIX_DATA) == 0)
15064 1.1 christos segment = ((start_pc + codep - start_codep)
15065 1.1 christos & ~((bfd_vma) 0xffff));
15066 1.1 christos }
15067 1.1 christos if (!(rex & REX_W))
15068 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
15069 1.1 christos break;
15070 1.1 christos default:
15071 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
15072 1.1 christos return;
15073 1.1 christos }
15074 1.1 christos disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
15075 1.1 christos set_op (disp, 0);
15076 1.1 christos print_operand_value (scratchbuf, 1, disp);
15077 1.1 christos oappend (scratchbuf);
15078 1.1 christos }
15079 1.1 christos
15080 1.1 christos static void
15081 1.1 christos OP_SEG (int bytemode, int sizeflag)
15082 1.1 christos {
15083 1.1 christos if (bytemode == w_mode)
15084 1.1 christos oappend (names_seg[modrm.reg]);
15085 1.1 christos else
15086 1.1 christos OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
15087 1.1 christos }
15088 1.1 christos
15089 1.1 christos static void
15090 1.1 christos OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
15091 1.1 christos {
15092 1.1 christos int seg, offset;
15093 1.1 christos
15094 1.1 christos if (sizeflag & DFLAG)
15095 1.1 christos {
15096 1.1 christos offset = get32 ();
15097 1.1 christos seg = get16 ();
15098 1.1 christos }
15099 1.1 christos else
15100 1.1 christos {
15101 1.1 christos offset = get16 ();
15102 1.1 christos seg = get16 ();
15103 1.1 christos }
15104 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
15105 1.1 christos if (intel_syntax)
15106 1.1 christos sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
15107 1.1 christos else
15108 1.1 christos sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
15109 1.1 christos oappend (scratchbuf);
15110 1.1 christos }
15111 1.1 christos
15112 1.1 christos static void
15113 1.1 christos OP_OFF (int bytemode, int sizeflag)
15114 1.1 christos {
15115 1.1 christos bfd_vma off;
15116 1.1 christos
15117 1.1 christos if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15118 1.1 christos intel_operand_size (bytemode, sizeflag);
15119 1.1 christos append_seg ();
15120 1.1 christos
15121 1.1 christos if ((sizeflag & AFLAG) || address_mode == mode_64bit)
15122 1.1 christos off = get32 ();
15123 1.1 christos else
15124 1.1 christos off = get16 ();
15125 1.1 christos
15126 1.1 christos if (intel_syntax)
15127 1.1 christos {
15128 1.1 christos if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
15129 1.1 christos | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
15130 1.1 christos {
15131 1.1 christos oappend (names_seg[ds_reg - es_reg]);
15132 1.1 christos oappend (":");
15133 1.1 christos }
15134 1.1 christos }
15135 1.1 christos print_operand_value (scratchbuf, 1, off);
15136 1.1 christos oappend (scratchbuf);
15137 1.1 christos }
15138 1.1 christos
15139 1.1 christos static void
15140 1.1 christos OP_OFF64 (int bytemode, int sizeflag)
15141 1.1 christos {
15142 1.1 christos bfd_vma off;
15143 1.1 christos
15144 1.1 christos if (address_mode != mode_64bit
15145 1.1 christos || (prefixes & PREFIX_ADDR))
15146 1.1 christos {
15147 1.1 christos OP_OFF (bytemode, sizeflag);
15148 1.1 christos return;
15149 1.1 christos }
15150 1.1 christos
15151 1.1 christos if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
15152 1.1 christos intel_operand_size (bytemode, sizeflag);
15153 1.1 christos append_seg ();
15154 1.1 christos
15155 1.1 christos off = get64 ();
15156 1.1 christos
15157 1.1 christos if (intel_syntax)
15158 1.1 christos {
15159 1.1 christos if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
15160 1.1 christos | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
15161 1.1 christos {
15162 1.1 christos oappend (names_seg[ds_reg - es_reg]);
15163 1.1 christos oappend (":");
15164 1.1 christos }
15165 1.1 christos }
15166 1.1 christos print_operand_value (scratchbuf, 1, off);
15167 1.1 christos oappend (scratchbuf);
15168 1.1 christos }
15169 1.1 christos
15170 1.1 christos static void
15171 1.1 christos ptr_reg (int code, int sizeflag)
15172 1.1 christos {
15173 1.1 christos const char *s;
15174 1.1 christos
15175 1.1 christos *obufp++ = open_char;
15176 1.1 christos used_prefixes |= (prefixes & PREFIX_ADDR);
15177 1.1 christos if (address_mode == mode_64bit)
15178 1.1 christos {
15179 1.1 christos if (!(sizeflag & AFLAG))
15180 1.1 christos s = names32[code - eAX_reg];
15181 1.1 christos else
15182 1.1 christos s = names64[code - eAX_reg];
15183 1.1 christos }
15184 1.1 christos else if (sizeflag & AFLAG)
15185 1.1 christos s = names32[code - eAX_reg];
15186 1.1 christos else
15187 1.1 christos s = names16[code - eAX_reg];
15188 1.1 christos oappend (s);
15189 1.1 christos *obufp++ = close_char;
15190 1.1 christos *obufp = 0;
15191 1.1 christos }
15192 1.1 christos
15193 1.1 christos static void
15194 1.1 christos OP_ESreg (int code, int sizeflag)
15195 1.1 christos {
15196 1.1 christos if (intel_syntax)
15197 1.1 christos {
15198 1.1 christos switch (codep[-1])
15199 1.1 christos {
15200 1.1 christos case 0x6d: /* insw/insl */
15201 1.1 christos intel_operand_size (z_mode, sizeflag);
15202 1.1 christos break;
15203 1.1 christos case 0xa5: /* movsw/movsl/movsq */
15204 1.1 christos case 0xa7: /* cmpsw/cmpsl/cmpsq */
15205 1.1 christos case 0xab: /* stosw/stosl */
15206 1.1 christos case 0xaf: /* scasw/scasl */
15207 1.1 christos intel_operand_size (v_mode, sizeflag);
15208 1.1 christos break;
15209 1.1 christos default:
15210 1.1 christos intel_operand_size (b_mode, sizeflag);
15211 1.1 christos }
15212 1.1 christos }
15213 1.1.1.1.8.1 tls oappend_maybe_intel ("%es:");
15214 1.1 christos ptr_reg (code, sizeflag);
15215 1.1 christos }
15216 1.1 christos
15217 1.1 christos static void
15218 1.1 christos OP_DSreg (int code, int sizeflag)
15219 1.1 christos {
15220 1.1 christos if (intel_syntax)
15221 1.1 christos {
15222 1.1 christos switch (codep[-1])
15223 1.1 christos {
15224 1.1 christos case 0x6f: /* outsw/outsl */
15225 1.1 christos intel_operand_size (z_mode, sizeflag);
15226 1.1 christos break;
15227 1.1 christos case 0xa5: /* movsw/movsl/movsq */
15228 1.1 christos case 0xa7: /* cmpsw/cmpsl/cmpsq */
15229 1.1 christos case 0xad: /* lodsw/lodsl/lodsq */
15230 1.1 christos intel_operand_size (v_mode, sizeflag);
15231 1.1 christos break;
15232 1.1 christos default:
15233 1.1 christos intel_operand_size (b_mode, sizeflag);
15234 1.1 christos }
15235 1.1 christos }
15236 1.1 christos if ((prefixes
15237 1.1 christos & (PREFIX_CS
15238 1.1 christos | PREFIX_DS
15239 1.1 christos | PREFIX_SS
15240 1.1 christos | PREFIX_ES
15241 1.1 christos | PREFIX_FS
15242 1.1 christos | PREFIX_GS)) == 0)
15243 1.1 christos prefixes |= PREFIX_DS;
15244 1.1 christos append_seg ();
15245 1.1 christos ptr_reg (code, sizeflag);
15246 1.1 christos }
15247 1.1 christos
15248 1.1 christos static void
15249 1.1 christos OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15250 1.1 christos {
15251 1.1 christos int add;
15252 1.1 christos if (rex & REX_R)
15253 1.1 christos {
15254 1.1 christos USED_REX (REX_R);
15255 1.1 christos add = 8;
15256 1.1 christos }
15257 1.1 christos else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
15258 1.1 christos {
15259 1.1 christos all_prefixes[last_lock_prefix] = 0;
15260 1.1 christos used_prefixes |= PREFIX_LOCK;
15261 1.1 christos add = 8;
15262 1.1 christos }
15263 1.1 christos else
15264 1.1 christos add = 0;
15265 1.1 christos sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
15266 1.1.1.1.8.1 tls oappend_maybe_intel (scratchbuf);
15267 1.1 christos }
15268 1.1 christos
15269 1.1 christos static void
15270 1.1 christos OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15271 1.1 christos {
15272 1.1 christos int add;
15273 1.1 christos USED_REX (REX_R);
15274 1.1 christos if (rex & REX_R)
15275 1.1 christos add = 8;
15276 1.1 christos else
15277 1.1 christos add = 0;
15278 1.1 christos if (intel_syntax)
15279 1.1 christos sprintf (scratchbuf, "db%d", modrm.reg + add);
15280 1.1 christos else
15281 1.1 christos sprintf (scratchbuf, "%%db%d", modrm.reg + add);
15282 1.1 christos oappend (scratchbuf);
15283 1.1 christos }
15284 1.1 christos
15285 1.1 christos static void
15286 1.1 christos OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15287 1.1 christos {
15288 1.1 christos sprintf (scratchbuf, "%%tr%d", modrm.reg);
15289 1.1.1.1.8.1 tls oappend_maybe_intel (scratchbuf);
15290 1.1 christos }
15291 1.1 christos
15292 1.1 christos static void
15293 1.1 christos OP_R (int bytemode, int sizeflag)
15294 1.1 christos {
15295 1.1 christos if (modrm.mod == 3)
15296 1.1 christos OP_E (bytemode, sizeflag);
15297 1.1 christos else
15298 1.1 christos BadOp ();
15299 1.1 christos }
15300 1.1 christos
15301 1.1 christos static void
15302 1.1 christos OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15303 1.1 christos {
15304 1.1 christos int reg = modrm.reg;
15305 1.1 christos const char **names;
15306 1.1 christos
15307 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
15308 1.1 christos if (prefixes & PREFIX_DATA)
15309 1.1 christos {
15310 1.1 christos names = names_xmm;
15311 1.1 christos USED_REX (REX_R);
15312 1.1 christos if (rex & REX_R)
15313 1.1 christos reg += 8;
15314 1.1 christos }
15315 1.1 christos else
15316 1.1 christos names = names_mm;
15317 1.1 christos oappend (names[reg]);
15318 1.1 christos }
15319 1.1 christos
15320 1.1 christos static void
15321 1.1 christos OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15322 1.1 christos {
15323 1.1 christos int reg = modrm.reg;
15324 1.1 christos const char **names;
15325 1.1 christos
15326 1.1 christos USED_REX (REX_R);
15327 1.1 christos if (rex & REX_R)
15328 1.1 christos reg += 8;
15329 1.1.1.1.8.1 tls if (vex.evex)
15330 1.1.1.1.8.1 tls {
15331 1.1.1.1.8.1 tls if (!vex.r)
15332 1.1.1.1.8.1 tls reg += 16;
15333 1.1.1.1.8.1 tls }
15334 1.1.1.1.8.1 tls
15335 1.1 christos if (need_vex
15336 1.1 christos && bytemode != xmm_mode
15337 1.1.1.1.8.1 tls && bytemode != xmmq_mode
15338 1.1.1.1.8.1 tls && bytemode != evex_half_bcst_xmmq_mode
15339 1.1.1.1.8.1 tls && bytemode != ymm_mode
15340 1.1 christos && bytemode != scalar_mode)
15341 1.1 christos {
15342 1.1 christos switch (vex.length)
15343 1.1 christos {
15344 1.1 christos case 128:
15345 1.1 christos names = names_xmm;
15346 1.1 christos break;
15347 1.1 christos case 256:
15348 1.1.1.1.8.1 tls if (vex.w || bytemode != vex_vsib_q_w_dq_mode)
15349 1.1.1.1.8.1 tls names = names_ymm;
15350 1.1.1.1.8.1 tls else
15351 1.1.1.1.8.1 tls names = names_xmm;
15352 1.1.1.1.8.1 tls break;
15353 1.1.1.1.8.1 tls case 512:
15354 1.1.1.1.8.1 tls names = names_zmm;
15355 1.1.1.1.8.1 tls break;
15356 1.1.1.1.8.1 tls default:
15357 1.1.1.1.8.1 tls abort ();
15358 1.1.1.1.8.1 tls }
15359 1.1.1.1.8.1 tls }
15360 1.1.1.1.8.1 tls else if (bytemode == xmmq_mode
15361 1.1.1.1.8.1 tls || bytemode == evex_half_bcst_xmmq_mode)
15362 1.1.1.1.8.1 tls {
15363 1.1.1.1.8.1 tls switch (vex.length)
15364 1.1.1.1.8.1 tls {
15365 1.1.1.1.8.1 tls case 128:
15366 1.1.1.1.8.1 tls case 256:
15367 1.1.1.1.8.1 tls names = names_xmm;
15368 1.1.1.1.8.1 tls break;
15369 1.1.1.1.8.1 tls case 512:
15370 1.1 christos names = names_ymm;
15371 1.1 christos break;
15372 1.1 christos default:
15373 1.1 christos abort ();
15374 1.1 christos }
15375 1.1 christos }
15376 1.1.1.1.8.1 tls else if (bytemode == ymm_mode)
15377 1.1.1.1.8.1 tls names = names_ymm;
15378 1.1 christos else
15379 1.1 christos names = names_xmm;
15380 1.1 christos oappend (names[reg]);
15381 1.1 christos }
15382 1.1 christos
15383 1.1 christos static void
15384 1.1 christos OP_EM (int bytemode, int sizeflag)
15385 1.1 christos {
15386 1.1 christos int reg;
15387 1.1 christos const char **names;
15388 1.1 christos
15389 1.1 christos if (modrm.mod != 3)
15390 1.1 christos {
15391 1.1 christos if (intel_syntax
15392 1.1 christos && (bytemode == v_mode || bytemode == v_swap_mode))
15393 1.1 christos {
15394 1.1 christos bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15395 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
15396 1.1.1.1.8.1 tls }
15397 1.1 christos OP_E (bytemode, sizeflag);
15398 1.1 christos return;
15399 1.1 christos }
15400 1.1 christos
15401 1.1 christos if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
15402 1.1 christos swap_operand ();
15403 1.1 christos
15404 1.1 christos /* Skip mod/rm byte. */
15405 1.1 christos MODRM_CHECK;
15406 1.1 christos codep++;
15407 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
15408 1.1 christos reg = modrm.rm;
15409 1.1 christos if (prefixes & PREFIX_DATA)
15410 1.1 christos {
15411 1.1 christos names = names_xmm;
15412 1.1 christos USED_REX (REX_B);
15413 1.1 christos if (rex & REX_B)
15414 1.1 christos reg += 8;
15415 1.1 christos }
15416 1.1 christos else
15417 1.1 christos names = names_mm;
15418 1.1 christos oappend (names[reg]);
15419 1.1 christos }
15420 1.1 christos
15421 1.1 christos /* cvt* are the only instructions in sse2 which have
15422 1.1 christos both SSE and MMX operands and also have 0x66 prefix
15423 1.1 christos in their opcode. 0x66 was originally used to differentiate
15424 1.1 christos between SSE and MMX instruction(operands). So we have to handle the
15425 1.1 christos cvt* separately using OP_EMC and OP_MXC */
15426 1.1 christos static void
15427 1.1 christos OP_EMC (int bytemode, int sizeflag)
15428 1.1 christos {
15429 1.1 christos if (modrm.mod != 3)
15430 1.1 christos {
15431 1.1 christos if (intel_syntax && bytemode == v_mode)
15432 1.1 christos {
15433 1.1 christos bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
15434 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
15435 1.1.1.1.8.1 tls }
15436 1.1 christos OP_E (bytemode, sizeflag);
15437 1.1 christos return;
15438 1.1 christos }
15439 1.1 christos
15440 1.1 christos /* Skip mod/rm byte. */
15441 1.1 christos MODRM_CHECK;
15442 1.1 christos codep++;
15443 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
15444 1.1 christos oappend (names_mm[modrm.rm]);
15445 1.1 christos }
15446 1.1 christos
15447 1.1 christos static void
15448 1.1 christos OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15449 1.1 christos {
15450 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
15451 1.1 christos oappend (names_mm[modrm.reg]);
15452 1.1 christos }
15453 1.1 christos
15454 1.1 christos static void
15455 1.1 christos OP_EX (int bytemode, int sizeflag)
15456 1.1 christos {
15457 1.1 christos int reg;
15458 1.1 christos const char **names;
15459 1.1 christos
15460 1.1 christos /* Skip mod/rm byte. */
15461 1.1 christos MODRM_CHECK;
15462 1.1 christos codep++;
15463 1.1 christos
15464 1.1 christos if (modrm.mod != 3)
15465 1.1 christos {
15466 1.1 christos OP_E_memory (bytemode, sizeflag);
15467 1.1 christos return;
15468 1.1 christos }
15469 1.1 christos
15470 1.1 christos reg = modrm.rm;
15471 1.1 christos USED_REX (REX_B);
15472 1.1 christos if (rex & REX_B)
15473 1.1 christos reg += 8;
15474 1.1.1.1.8.1 tls if (vex.evex)
15475 1.1.1.1.8.1 tls {
15476 1.1.1.1.8.1 tls USED_REX (REX_X);
15477 1.1.1.1.8.1 tls if ((rex & REX_X))
15478 1.1.1.1.8.1 tls reg += 16;
15479 1.1.1.1.8.1 tls }
15480 1.1 christos
15481 1.1 christos if ((sizeflag & SUFFIX_ALWAYS)
15482 1.1 christos && (bytemode == x_swap_mode
15483 1.1 christos || bytemode == d_swap_mode
15484 1.1.1.1.8.1 tls || bytemode == d_scalar_swap_mode
15485 1.1 christos || bytemode == q_swap_mode
15486 1.1 christos || bytemode == q_scalar_swap_mode))
15487 1.1 christos swap_operand ();
15488 1.1 christos
15489 1.1 christos if (need_vex
15490 1.1 christos && bytemode != xmm_mode
15491 1.1.1.1.8.1 tls && bytemode != xmmdw_mode
15492 1.1.1.1.8.1 tls && bytemode != xmmqd_mode
15493 1.1.1.1.8.1 tls && bytemode != xmm_mb_mode
15494 1.1.1.1.8.1 tls && bytemode != xmm_mw_mode
15495 1.1.1.1.8.1 tls && bytemode != xmm_md_mode
15496 1.1.1.1.8.1 tls && bytemode != xmm_mq_mode
15497 1.1.1.1.8.1 tls && bytemode != xmm_mdq_mode
15498 1.1 christos && bytemode != xmmq_mode
15499 1.1.1.1.8.1 tls && bytemode != evex_half_bcst_xmmq_mode
15500 1.1.1.1.8.1 tls && bytemode != ymm_mode
15501 1.1 christos && bytemode != d_scalar_mode
15502 1.1.1.1.8.1 tls && bytemode != d_scalar_swap_mode
15503 1.1 christos && bytemode != q_scalar_mode
15504 1.1 christos && bytemode != q_scalar_swap_mode
15505 1.1 christos && bytemode != vex_scalar_w_dq_mode)
15506 1.1 christos {
15507 1.1 christos switch (vex.length)
15508 1.1 christos {
15509 1.1 christos case 128:
15510 1.1 christos names = names_xmm;
15511 1.1 christos break;
15512 1.1 christos case 256:
15513 1.1 christos names = names_ymm;
15514 1.1 christos break;
15515 1.1.1.1.8.1 tls case 512:
15516 1.1.1.1.8.1 tls names = names_zmm;
15517 1.1.1.1.8.1 tls break;
15518 1.1.1.1.8.1 tls default:
15519 1.1.1.1.8.1 tls abort ();
15520 1.1.1.1.8.1 tls }
15521 1.1.1.1.8.1 tls }
15522 1.1.1.1.8.1 tls else if (bytemode == xmmq_mode
15523 1.1.1.1.8.1 tls || bytemode == evex_half_bcst_xmmq_mode)
15524 1.1.1.1.8.1 tls {
15525 1.1.1.1.8.1 tls switch (vex.length)
15526 1.1.1.1.8.1 tls {
15527 1.1.1.1.8.1 tls case 128:
15528 1.1.1.1.8.1 tls case 256:
15529 1.1.1.1.8.1 tls names = names_xmm;
15530 1.1.1.1.8.1 tls break;
15531 1.1.1.1.8.1 tls case 512:
15532 1.1.1.1.8.1 tls names = names_ymm;
15533 1.1.1.1.8.1 tls break;
15534 1.1 christos default:
15535 1.1 christos abort ();
15536 1.1 christos }
15537 1.1 christos }
15538 1.1.1.1.8.1 tls else if (bytemode == ymm_mode)
15539 1.1.1.1.8.1 tls names = names_ymm;
15540 1.1 christos else
15541 1.1 christos names = names_xmm;
15542 1.1 christos oappend (names[reg]);
15543 1.1 christos }
15544 1.1 christos
15545 1.1 christos static void
15546 1.1 christos OP_MS (int bytemode, int sizeflag)
15547 1.1 christos {
15548 1.1 christos if (modrm.mod == 3)
15549 1.1 christos OP_EM (bytemode, sizeflag);
15550 1.1 christos else
15551 1.1 christos BadOp ();
15552 1.1 christos }
15553 1.1 christos
15554 1.1 christos static void
15555 1.1 christos OP_XS (int bytemode, int sizeflag)
15556 1.1 christos {
15557 1.1 christos if (modrm.mod == 3)
15558 1.1 christos OP_EX (bytemode, sizeflag);
15559 1.1 christos else
15560 1.1 christos BadOp ();
15561 1.1 christos }
15562 1.1 christos
15563 1.1 christos static void
15564 1.1 christos OP_M (int bytemode, int sizeflag)
15565 1.1 christos {
15566 1.1 christos if (modrm.mod == 3)
15567 1.1 christos /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
15568 1.1 christos BadOp ();
15569 1.1 christos else
15570 1.1 christos OP_E (bytemode, sizeflag);
15571 1.1 christos }
15572 1.1 christos
15573 1.1 christos static void
15574 1.1 christos OP_0f07 (int bytemode, int sizeflag)
15575 1.1 christos {
15576 1.1 christos if (modrm.mod != 3 || modrm.rm != 0)
15577 1.1 christos BadOp ();
15578 1.1 christos else
15579 1.1 christos OP_E (bytemode, sizeflag);
15580 1.1 christos }
15581 1.1 christos
15582 1.1 christos /* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
15583 1.1 christos 32bit mode and "xchg %rax,%rax" in 64bit mode. */
15584 1.1 christos
15585 1.1 christos static void
15586 1.1 christos NOP_Fixup1 (int bytemode, int sizeflag)
15587 1.1 christos {
15588 1.1 christos if ((prefixes & PREFIX_DATA) != 0
15589 1.1 christos || (rex != 0
15590 1.1 christos && rex != 0x48
15591 1.1 christos && address_mode == mode_64bit))
15592 1.1 christos OP_REG (bytemode, sizeflag);
15593 1.1 christos else
15594 1.1 christos strcpy (obuf, "nop");
15595 1.1 christos }
15596 1.1 christos
15597 1.1 christos static void
15598 1.1 christos NOP_Fixup2 (int bytemode, int sizeflag)
15599 1.1 christos {
15600 1.1 christos if ((prefixes & PREFIX_DATA) != 0
15601 1.1 christos || (rex != 0
15602 1.1 christos && rex != 0x48
15603 1.1 christos && address_mode == mode_64bit))
15604 1.1 christos OP_IMREG (bytemode, sizeflag);
15605 1.1 christos }
15606 1.1 christos
15607 1.1 christos static const char *const Suffix3DNow[] = {
15608 1.1 christos /* 00 */ NULL, NULL, NULL, NULL,
15609 1.1 christos /* 04 */ NULL, NULL, NULL, NULL,
15610 1.1 christos /* 08 */ NULL, NULL, NULL, NULL,
15611 1.1 christos /* 0C */ "pi2fw", "pi2fd", NULL, NULL,
15612 1.1 christos /* 10 */ NULL, NULL, NULL, NULL,
15613 1.1 christos /* 14 */ NULL, NULL, NULL, NULL,
15614 1.1 christos /* 18 */ NULL, NULL, NULL, NULL,
15615 1.1 christos /* 1C */ "pf2iw", "pf2id", NULL, NULL,
15616 1.1 christos /* 20 */ NULL, NULL, NULL, NULL,
15617 1.1 christos /* 24 */ NULL, NULL, NULL, NULL,
15618 1.1 christos /* 28 */ NULL, NULL, NULL, NULL,
15619 1.1 christos /* 2C */ NULL, NULL, NULL, NULL,
15620 1.1 christos /* 30 */ NULL, NULL, NULL, NULL,
15621 1.1 christos /* 34 */ NULL, NULL, NULL, NULL,
15622 1.1 christos /* 38 */ NULL, NULL, NULL, NULL,
15623 1.1 christos /* 3C */ NULL, NULL, NULL, NULL,
15624 1.1 christos /* 40 */ NULL, NULL, NULL, NULL,
15625 1.1 christos /* 44 */ NULL, NULL, NULL, NULL,
15626 1.1 christos /* 48 */ NULL, NULL, NULL, NULL,
15627 1.1 christos /* 4C */ NULL, NULL, NULL, NULL,
15628 1.1 christos /* 50 */ NULL, NULL, NULL, NULL,
15629 1.1 christos /* 54 */ NULL, NULL, NULL, NULL,
15630 1.1 christos /* 58 */ NULL, NULL, NULL, NULL,
15631 1.1 christos /* 5C */ NULL, NULL, NULL, NULL,
15632 1.1 christos /* 60 */ NULL, NULL, NULL, NULL,
15633 1.1 christos /* 64 */ NULL, NULL, NULL, NULL,
15634 1.1 christos /* 68 */ NULL, NULL, NULL, NULL,
15635 1.1 christos /* 6C */ NULL, NULL, NULL, NULL,
15636 1.1 christos /* 70 */ NULL, NULL, NULL, NULL,
15637 1.1 christos /* 74 */ NULL, NULL, NULL, NULL,
15638 1.1 christos /* 78 */ NULL, NULL, NULL, NULL,
15639 1.1 christos /* 7C */ NULL, NULL, NULL, NULL,
15640 1.1 christos /* 80 */ NULL, NULL, NULL, NULL,
15641 1.1 christos /* 84 */ NULL, NULL, NULL, NULL,
15642 1.1 christos /* 88 */ NULL, NULL, "pfnacc", NULL,
15643 1.1 christos /* 8C */ NULL, NULL, "pfpnacc", NULL,
15644 1.1 christos /* 90 */ "pfcmpge", NULL, NULL, NULL,
15645 1.1 christos /* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
15646 1.1 christos /* 98 */ NULL, NULL, "pfsub", NULL,
15647 1.1 christos /* 9C */ NULL, NULL, "pfadd", NULL,
15648 1.1 christos /* A0 */ "pfcmpgt", NULL, NULL, NULL,
15649 1.1 christos /* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
15650 1.1 christos /* A8 */ NULL, NULL, "pfsubr", NULL,
15651 1.1 christos /* AC */ NULL, NULL, "pfacc", NULL,
15652 1.1 christos /* B0 */ "pfcmpeq", NULL, NULL, NULL,
15653 1.1 christos /* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
15654 1.1 christos /* B8 */ NULL, NULL, NULL, "pswapd",
15655 1.1 christos /* BC */ NULL, NULL, NULL, "pavgusb",
15656 1.1 christos /* C0 */ NULL, NULL, NULL, NULL,
15657 1.1 christos /* C4 */ NULL, NULL, NULL, NULL,
15658 1.1 christos /* C8 */ NULL, NULL, NULL, NULL,
15659 1.1 christos /* CC */ NULL, NULL, NULL, NULL,
15660 1.1 christos /* D0 */ NULL, NULL, NULL, NULL,
15661 1.1 christos /* D4 */ NULL, NULL, NULL, NULL,
15662 1.1 christos /* D8 */ NULL, NULL, NULL, NULL,
15663 1.1 christos /* DC */ NULL, NULL, NULL, NULL,
15664 1.1 christos /* E0 */ NULL, NULL, NULL, NULL,
15665 1.1 christos /* E4 */ NULL, NULL, NULL, NULL,
15666 1.1 christos /* E8 */ NULL, NULL, NULL, NULL,
15667 1.1 christos /* EC */ NULL, NULL, NULL, NULL,
15668 1.1 christos /* F0 */ NULL, NULL, NULL, NULL,
15669 1.1 christos /* F4 */ NULL, NULL, NULL, NULL,
15670 1.1 christos /* F8 */ NULL, NULL, NULL, NULL,
15671 1.1 christos /* FC */ NULL, NULL, NULL, NULL,
15672 1.1 christos };
15673 1.1 christos
15674 1.1 christos static void
15675 1.1 christos OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15676 1.1 christos {
15677 1.1 christos const char *mnemonic;
15678 1.1 christos
15679 1.1 christos FETCH_DATA (the_info, codep + 1);
15680 1.1 christos /* AMD 3DNow! instructions are specified by an opcode suffix in the
15681 1.1 christos place where an 8-bit immediate would normally go. ie. the last
15682 1.1 christos byte of the instruction. */
15683 1.1 christos obufp = mnemonicendp;
15684 1.1 christos mnemonic = Suffix3DNow[*codep++ & 0xff];
15685 1.1 christos if (mnemonic)
15686 1.1 christos oappend (mnemonic);
15687 1.1 christos else
15688 1.1 christos {
15689 1.1 christos /* Since a variable sized modrm/sib chunk is between the start
15690 1.1 christos of the opcode (0x0f0f) and the opcode suffix, we need to do
15691 1.1 christos all the modrm processing first, and don't know until now that
15692 1.1 christos we have a bad opcode. This necessitates some cleaning up. */
15693 1.1 christos op_out[0][0] = '\0';
15694 1.1 christos op_out[1][0] = '\0';
15695 1.1 christos BadOp ();
15696 1.1 christos }
15697 1.1 christos mnemonicendp = obufp;
15698 1.1 christos }
15699 1.1 christos
15700 1.1 christos static struct op simd_cmp_op[] =
15701 1.1 christos {
15702 1.1 christos { STRING_COMMA_LEN ("eq") },
15703 1.1 christos { STRING_COMMA_LEN ("lt") },
15704 1.1 christos { STRING_COMMA_LEN ("le") },
15705 1.1 christos { STRING_COMMA_LEN ("unord") },
15706 1.1 christos { STRING_COMMA_LEN ("neq") },
15707 1.1 christos { STRING_COMMA_LEN ("nlt") },
15708 1.1 christos { STRING_COMMA_LEN ("nle") },
15709 1.1 christos { STRING_COMMA_LEN ("ord") }
15710 1.1 christos };
15711 1.1 christos
15712 1.1 christos static void
15713 1.1 christos CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15714 1.1 christos {
15715 1.1 christos unsigned int cmp_type;
15716 1.1 christos
15717 1.1 christos FETCH_DATA (the_info, codep + 1);
15718 1.1 christos cmp_type = *codep++ & 0xff;
15719 1.1 christos if (cmp_type < ARRAY_SIZE (simd_cmp_op))
15720 1.1 christos {
15721 1.1 christos char suffix [3];
15722 1.1 christos char *p = mnemonicendp - 2;
15723 1.1 christos suffix[0] = p[0];
15724 1.1 christos suffix[1] = p[1];
15725 1.1 christos suffix[2] = '\0';
15726 1.1 christos sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
15727 1.1 christos mnemonicendp += simd_cmp_op[cmp_type].len;
15728 1.1 christos }
15729 1.1 christos else
15730 1.1 christos {
15731 1.1 christos /* We have a reserved extension byte. Output it directly. */
15732 1.1 christos scratchbuf[0] = '$';
15733 1.1 christos print_operand_value (scratchbuf + 1, 1, cmp_type);
15734 1.1.1.1.8.1 tls oappend_maybe_intel (scratchbuf);
15735 1.1 christos scratchbuf[0] = '\0';
15736 1.1 christos }
15737 1.1 christos }
15738 1.1 christos
15739 1.1 christos static void
15740 1.1 christos OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
15741 1.1 christos int sizeflag ATTRIBUTE_UNUSED)
15742 1.1 christos {
15743 1.1 christos /* mwait %eax,%ecx */
15744 1.1 christos if (!intel_syntax)
15745 1.1 christos {
15746 1.1 christos const char **names = (address_mode == mode_64bit
15747 1.1 christos ? names64 : names32);
15748 1.1 christos strcpy (op_out[0], names[0]);
15749 1.1 christos strcpy (op_out[1], names[1]);
15750 1.1 christos two_source_ops = 1;
15751 1.1 christos }
15752 1.1 christos /* Skip mod/rm byte. */
15753 1.1 christos MODRM_CHECK;
15754 1.1 christos codep++;
15755 1.1 christos }
15756 1.1 christos
15757 1.1 christos static void
15758 1.1 christos OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
15759 1.1 christos int sizeflag ATTRIBUTE_UNUSED)
15760 1.1 christos {
15761 1.1 christos /* monitor %eax,%ecx,%edx" */
15762 1.1 christos if (!intel_syntax)
15763 1.1 christos {
15764 1.1 christos const char **op1_names;
15765 1.1 christos const char **names = (address_mode == mode_64bit
15766 1.1 christos ? names64 : names32);
15767 1.1 christos
15768 1.1 christos if (!(prefixes & PREFIX_ADDR))
15769 1.1 christos op1_names = (address_mode == mode_16bit
15770 1.1 christos ? names16 : names);
15771 1.1 christos else
15772 1.1 christos {
15773 1.1 christos /* Remove "addr16/addr32". */
15774 1.1 christos all_prefixes[last_addr_prefix] = 0;
15775 1.1 christos op1_names = (address_mode != mode_32bit
15776 1.1 christos ? names32 : names16);
15777 1.1 christos used_prefixes |= PREFIX_ADDR;
15778 1.1 christos }
15779 1.1 christos strcpy (op_out[0], op1_names[0]);
15780 1.1 christos strcpy (op_out[1], names[1]);
15781 1.1 christos strcpy (op_out[2], names[2]);
15782 1.1 christos two_source_ops = 1;
15783 1.1 christos }
15784 1.1 christos /* Skip mod/rm byte. */
15785 1.1 christos MODRM_CHECK;
15786 1.1 christos codep++;
15787 1.1 christos }
15788 1.1 christos
15789 1.1 christos static void
15790 1.1 christos BadOp (void)
15791 1.1 christos {
15792 1.1 christos /* Throw away prefixes and 1st. opcode byte. */
15793 1.1 christos codep = insn_codep + 1;
15794 1.1 christos oappend ("(bad)");
15795 1.1 christos }
15796 1.1 christos
15797 1.1 christos static void
15798 1.1 christos REP_Fixup (int bytemode, int sizeflag)
15799 1.1 christos {
15800 1.1 christos /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
15801 1.1 christos lods and stos. */
15802 1.1 christos if (prefixes & PREFIX_REPZ)
15803 1.1 christos all_prefixes[last_repz_prefix] = REP_PREFIX;
15804 1.1 christos
15805 1.1 christos switch (bytemode)
15806 1.1 christos {
15807 1.1 christos case al_reg:
15808 1.1 christos case eAX_reg:
15809 1.1 christos case indir_dx_reg:
15810 1.1 christos OP_IMREG (bytemode, sizeflag);
15811 1.1 christos break;
15812 1.1 christos case eDI_reg:
15813 1.1 christos OP_ESreg (bytemode, sizeflag);
15814 1.1 christos break;
15815 1.1 christos case eSI_reg:
15816 1.1 christos OP_DSreg (bytemode, sizeflag);
15817 1.1 christos break;
15818 1.1 christos default:
15819 1.1 christos abort ();
15820 1.1 christos break;
15821 1.1 christos }
15822 1.1 christos }
15823 1.1 christos
15824 1.1.1.1.8.1 tls /* For BND-prefixed instructions 0xF2 prefix should be displayed as
15825 1.1.1.1.8.1 tls "bnd". */
15826 1.1.1.1.8.1 tls
15827 1.1.1.1.8.1 tls static void
15828 1.1.1.1.8.1 tls BND_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15829 1.1.1.1.8.1 tls {
15830 1.1.1.1.8.1 tls if (prefixes & PREFIX_REPNZ)
15831 1.1.1.1.8.1 tls all_prefixes[last_repnz_prefix] = BND_PREFIX;
15832 1.1.1.1.8.1 tls }
15833 1.1.1.1.8.1 tls
15834 1.1.1.1.8.1 tls /* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15835 1.1.1.1.8.1 tls "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
15836 1.1.1.1.8.1 tls */
15837 1.1.1.1.8.1 tls
15838 1.1.1.1.8.1 tls static void
15839 1.1.1.1.8.1 tls HLE_Fixup1 (int bytemode, int sizeflag)
15840 1.1.1.1.8.1 tls {
15841 1.1.1.1.8.1 tls if (modrm.mod != 3
15842 1.1.1.1.8.1 tls && (prefixes & PREFIX_LOCK) != 0)
15843 1.1.1.1.8.1 tls {
15844 1.1.1.1.8.1 tls if (prefixes & PREFIX_REPZ)
15845 1.1.1.1.8.1 tls all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15846 1.1.1.1.8.1 tls if (prefixes & PREFIX_REPNZ)
15847 1.1.1.1.8.1 tls all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15848 1.1.1.1.8.1 tls }
15849 1.1.1.1.8.1 tls
15850 1.1.1.1.8.1 tls OP_E (bytemode, sizeflag);
15851 1.1.1.1.8.1 tls }
15852 1.1.1.1.8.1 tls
15853 1.1.1.1.8.1 tls /* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
15854 1.1.1.1.8.1 tls "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
15855 1.1.1.1.8.1 tls */
15856 1.1.1.1.8.1 tls
15857 1.1.1.1.8.1 tls static void
15858 1.1.1.1.8.1 tls HLE_Fixup2 (int bytemode, int sizeflag)
15859 1.1.1.1.8.1 tls {
15860 1.1.1.1.8.1 tls if (modrm.mod != 3)
15861 1.1.1.1.8.1 tls {
15862 1.1.1.1.8.1 tls if (prefixes & PREFIX_REPZ)
15863 1.1.1.1.8.1 tls all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15864 1.1.1.1.8.1 tls if (prefixes & PREFIX_REPNZ)
15865 1.1.1.1.8.1 tls all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15866 1.1.1.1.8.1 tls }
15867 1.1.1.1.8.1 tls
15868 1.1.1.1.8.1 tls OP_E (bytemode, sizeflag);
15869 1.1.1.1.8.1 tls }
15870 1.1.1.1.8.1 tls
15871 1.1.1.1.8.1 tls /* Similar to OP_E. But the 0xf3 prefixes should be displayed as
15872 1.1.1.1.8.1 tls "xrelease" for memory operand. No check for LOCK prefix. */
15873 1.1.1.1.8.1 tls
15874 1.1.1.1.8.1 tls static void
15875 1.1.1.1.8.1 tls HLE_Fixup3 (int bytemode, int sizeflag)
15876 1.1.1.1.8.1 tls {
15877 1.1.1.1.8.1 tls if (modrm.mod != 3
15878 1.1.1.1.8.1 tls && last_repz_prefix > last_repnz_prefix
15879 1.1.1.1.8.1 tls && (prefixes & PREFIX_REPZ) != 0)
15880 1.1.1.1.8.1 tls all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15881 1.1.1.1.8.1 tls
15882 1.1.1.1.8.1 tls OP_E (bytemode, sizeflag);
15883 1.1.1.1.8.1 tls }
15884 1.1.1.1.8.1 tls
15885 1.1 christos static void
15886 1.1 christos CMPXCHG8B_Fixup (int bytemode, int sizeflag)
15887 1.1 christos {
15888 1.1 christos USED_REX (REX_W);
15889 1.1 christos if (rex & REX_W)
15890 1.1 christos {
15891 1.1 christos /* Change cmpxchg8b to cmpxchg16b. */
15892 1.1 christos char *p = mnemonicendp - 2;
15893 1.1 christos mnemonicendp = stpcpy (p, "16b");
15894 1.1 christos bytemode = o_mode;
15895 1.1 christos }
15896 1.1.1.1.8.1 tls else if ((prefixes & PREFIX_LOCK) != 0)
15897 1.1.1.1.8.1 tls {
15898 1.1.1.1.8.1 tls if (prefixes & PREFIX_REPZ)
15899 1.1.1.1.8.1 tls all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
15900 1.1.1.1.8.1 tls if (prefixes & PREFIX_REPNZ)
15901 1.1.1.1.8.1 tls all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
15902 1.1.1.1.8.1 tls }
15903 1.1.1.1.8.1 tls
15904 1.1 christos OP_M (bytemode, sizeflag);
15905 1.1 christos }
15906 1.1 christos
15907 1.1 christos static void
15908 1.1 christos XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
15909 1.1 christos {
15910 1.1 christos const char **names;
15911 1.1 christos
15912 1.1 christos if (need_vex)
15913 1.1 christos {
15914 1.1 christos switch (vex.length)
15915 1.1 christos {
15916 1.1 christos case 128:
15917 1.1 christos names = names_xmm;
15918 1.1 christos break;
15919 1.1 christos case 256:
15920 1.1 christos names = names_ymm;
15921 1.1 christos break;
15922 1.1 christos default:
15923 1.1 christos abort ();
15924 1.1 christos }
15925 1.1 christos }
15926 1.1 christos else
15927 1.1 christos names = names_xmm;
15928 1.1 christos oappend (names[reg]);
15929 1.1 christos }
15930 1.1 christos
15931 1.1 christos static void
15932 1.1 christos CRC32_Fixup (int bytemode, int sizeflag)
15933 1.1 christos {
15934 1.1 christos /* Add proper suffix to "crc32". */
15935 1.1 christos char *p = mnemonicendp;
15936 1.1 christos
15937 1.1 christos switch (bytemode)
15938 1.1 christos {
15939 1.1 christos case b_mode:
15940 1.1 christos if (intel_syntax)
15941 1.1 christos goto skip;
15942 1.1 christos
15943 1.1 christos *p++ = 'b';
15944 1.1 christos break;
15945 1.1 christos case v_mode:
15946 1.1 christos if (intel_syntax)
15947 1.1 christos goto skip;
15948 1.1 christos
15949 1.1 christos USED_REX (REX_W);
15950 1.1 christos if (rex & REX_W)
15951 1.1 christos *p++ = 'q';
15952 1.1.1.1.8.1 tls else
15953 1.1 christos {
15954 1.1 christos if (sizeflag & DFLAG)
15955 1.1 christos *p++ = 'l';
15956 1.1 christos else
15957 1.1 christos *p++ = 'w';
15958 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
15959 1.1 christos }
15960 1.1 christos break;
15961 1.1 christos default:
15962 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
15963 1.1 christos break;
15964 1.1 christos }
15965 1.1 christos mnemonicendp = p;
15966 1.1 christos *p = '\0';
15967 1.1 christos
15968 1.1 christos skip:
15969 1.1 christos if (modrm.mod == 3)
15970 1.1 christos {
15971 1.1 christos int add;
15972 1.1 christos
15973 1.1 christos /* Skip mod/rm byte. */
15974 1.1 christos MODRM_CHECK;
15975 1.1 christos codep++;
15976 1.1 christos
15977 1.1 christos USED_REX (REX_B);
15978 1.1 christos add = (rex & REX_B) ? 8 : 0;
15979 1.1 christos if (bytemode == b_mode)
15980 1.1 christos {
15981 1.1 christos USED_REX (0);
15982 1.1 christos if (rex)
15983 1.1 christos oappend (names8rex[modrm.rm + add]);
15984 1.1 christos else
15985 1.1 christos oappend (names8[modrm.rm + add]);
15986 1.1 christos }
15987 1.1 christos else
15988 1.1 christos {
15989 1.1 christos USED_REX (REX_W);
15990 1.1 christos if (rex & REX_W)
15991 1.1 christos oappend (names64[modrm.rm + add]);
15992 1.1 christos else if ((prefixes & PREFIX_DATA))
15993 1.1 christos oappend (names16[modrm.rm + add]);
15994 1.1 christos else
15995 1.1 christos oappend (names32[modrm.rm + add]);
15996 1.1 christos }
15997 1.1 christos }
15998 1.1 christos else
15999 1.1 christos OP_E (bytemode, sizeflag);
16000 1.1 christos }
16001 1.1 christos
16002 1.1 christos static void
16003 1.1 christos FXSAVE_Fixup (int bytemode, int sizeflag)
16004 1.1 christos {
16005 1.1 christos /* Add proper suffix to "fxsave" and "fxrstor". */
16006 1.1 christos USED_REX (REX_W);
16007 1.1 christos if (rex & REX_W)
16008 1.1 christos {
16009 1.1 christos char *p = mnemonicendp;
16010 1.1 christos *p++ = '6';
16011 1.1 christos *p++ = '4';
16012 1.1 christos *p = '\0';
16013 1.1 christos mnemonicendp = p;
16014 1.1 christos }
16015 1.1 christos OP_M (bytemode, sizeflag);
16016 1.1 christos }
16017 1.1 christos
16018 1.1 christos /* Display the destination register operand for instructions with
16019 1.1 christos VEX. */
16020 1.1 christos
16021 1.1 christos static void
16022 1.1 christos OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16023 1.1 christos {
16024 1.1 christos int reg;
16025 1.1 christos const char **names;
16026 1.1 christos
16027 1.1 christos if (!need_vex)
16028 1.1 christos abort ();
16029 1.1 christos
16030 1.1 christos if (!need_vex_reg)
16031 1.1 christos return;
16032 1.1 christos
16033 1.1 christos reg = vex.register_specifier;
16034 1.1.1.1.8.1 tls if (vex.evex)
16035 1.1.1.1.8.1 tls {
16036 1.1.1.1.8.1 tls if (!vex.v)
16037 1.1.1.1.8.1 tls reg += 16;
16038 1.1.1.1.8.1 tls }
16039 1.1.1.1.8.1 tls
16040 1.1 christos if (bytemode == vex_scalar_mode)
16041 1.1 christos {
16042 1.1 christos oappend (names_xmm[reg]);
16043 1.1 christos return;
16044 1.1 christos }
16045 1.1 christos
16046 1.1 christos switch (vex.length)
16047 1.1 christos {
16048 1.1 christos case 128:
16049 1.1 christos switch (bytemode)
16050 1.1 christos {
16051 1.1 christos case vex_mode:
16052 1.1 christos case vex128_mode:
16053 1.1.1.1.8.1 tls case vex_vsib_q_w_dq_mode:
16054 1.1 christos names = names_xmm;
16055 1.1 christos break;
16056 1.1 christos case dq_mode:
16057 1.1 christos if (vex.w)
16058 1.1 christos names = names64;
16059 1.1 christos else
16060 1.1 christos names = names32;
16061 1.1 christos break;
16062 1.1.1.1.8.1 tls case mask_mode:
16063 1.1.1.1.8.1 tls names = names_mask;
16064 1.1.1.1.8.1 tls break;
16065 1.1 christos default:
16066 1.1 christos abort ();
16067 1.1 christos return;
16068 1.1 christos }
16069 1.1 christos break;
16070 1.1 christos case 256:
16071 1.1 christos switch (bytemode)
16072 1.1 christos {
16073 1.1 christos case vex_mode:
16074 1.1 christos case vex256_mode:
16075 1.1.1.1.8.1 tls names = names_ymm;
16076 1.1.1.1.8.1 tls break;
16077 1.1.1.1.8.1 tls case vex_vsib_q_w_dq_mode:
16078 1.1.1.1.8.1 tls names = vex.w ? names_ymm : names_xmm;
16079 1.1.1.1.8.1 tls break;
16080 1.1.1.1.8.1 tls case mask_mode:
16081 1.1.1.1.8.1 tls names = names_mask;
16082 1.1 christos break;
16083 1.1 christos default:
16084 1.1 christos abort ();
16085 1.1 christos return;
16086 1.1 christos }
16087 1.1.1.1.8.1 tls break;
16088 1.1.1.1.8.1 tls case 512:
16089 1.1.1.1.8.1 tls names = names_zmm;
16090 1.1 christos break;
16091 1.1 christos default:
16092 1.1 christos abort ();
16093 1.1 christos break;
16094 1.1 christos }
16095 1.1 christos oappend (names[reg]);
16096 1.1 christos }
16097 1.1 christos
16098 1.1 christos /* Get the VEX immediate byte without moving codep. */
16099 1.1 christos
16100 1.1 christos static unsigned char
16101 1.1 christos get_vex_imm8 (int sizeflag, int opnum)
16102 1.1 christos {
16103 1.1 christos int bytes_before_imm = 0;
16104 1.1 christos
16105 1.1 christos if (modrm.mod != 3)
16106 1.1 christos {
16107 1.1 christos /* There are SIB/displacement bytes. */
16108 1.1 christos if ((sizeflag & AFLAG) || address_mode == mode_64bit)
16109 1.1.1.1.8.1 tls {
16110 1.1 christos /* 32/64 bit address mode */
16111 1.1.1.1.8.1 tls int base = modrm.rm;
16112 1.1 christos
16113 1.1 christos /* Check SIB byte. */
16114 1.1.1.1.8.1 tls if (base == 4)
16115 1.1.1.1.8.1 tls {
16116 1.1.1.1.8.1 tls FETCH_DATA (the_info, codep + 1);
16117 1.1.1.1.8.1 tls base = *codep & 7;
16118 1.1.1.1.8.1 tls /* When decoding the third source, don't increase
16119 1.1.1.1.8.1 tls bytes_before_imm as this has already been incremented
16120 1.1.1.1.8.1 tls by one in OP_E_memory while decoding the second
16121 1.1.1.1.8.1 tls source operand. */
16122 1.1.1.1.8.1 tls if (opnum == 0)
16123 1.1.1.1.8.1 tls bytes_before_imm++;
16124 1.1.1.1.8.1 tls }
16125 1.1.1.1.8.1 tls
16126 1.1.1.1.8.1 tls /* Don't increase bytes_before_imm when decoding the third source,
16127 1.1.1.1.8.1 tls it has already been incremented by OP_E_memory while decoding
16128 1.1.1.1.8.1 tls the second source operand. */
16129 1.1.1.1.8.1 tls if (opnum == 0)
16130 1.1.1.1.8.1 tls {
16131 1.1.1.1.8.1 tls switch (modrm.mod)
16132 1.1.1.1.8.1 tls {
16133 1.1.1.1.8.1 tls case 0:
16134 1.1.1.1.8.1 tls /* When modrm.rm == 5 or modrm.rm == 4 and base in
16135 1.1.1.1.8.1 tls SIB == 5, there is a 4 byte displacement. */
16136 1.1.1.1.8.1 tls if (base != 5)
16137 1.1.1.1.8.1 tls /* No displacement. */
16138 1.1.1.1.8.1 tls break;
16139 1.1.1.1.8.1 tls case 2:
16140 1.1.1.1.8.1 tls /* 4 byte displacement. */
16141 1.1.1.1.8.1 tls bytes_before_imm += 4;
16142 1.1.1.1.8.1 tls break;
16143 1.1.1.1.8.1 tls case 1:
16144 1.1.1.1.8.1 tls /* 1 byte displacement. */
16145 1.1.1.1.8.1 tls bytes_before_imm++;
16146 1.1.1.1.8.1 tls break;
16147 1.1.1.1.8.1 tls }
16148 1.1.1.1.8.1 tls }
16149 1.1.1.1.8.1 tls }
16150 1.1 christos else
16151 1.1 christos {
16152 1.1 christos /* 16 bit address mode */
16153 1.1.1.1.8.1 tls /* Don't increase bytes_before_imm when decoding the third source,
16154 1.1.1.1.8.1 tls it has already been incremented by OP_E_memory while decoding
16155 1.1.1.1.8.1 tls the second source operand. */
16156 1.1.1.1.8.1 tls if (opnum == 0)
16157 1.1.1.1.8.1 tls {
16158 1.1 christos switch (modrm.mod)
16159 1.1 christos {
16160 1.1 christos case 0:
16161 1.1 christos /* When modrm.rm == 6, there is a 2 byte displacement. */
16162 1.1 christos if (modrm.rm != 6)
16163 1.1 christos /* No displacement. */
16164 1.1 christos break;
16165 1.1 christos case 2:
16166 1.1 christos /* 2 byte displacement. */
16167 1.1 christos bytes_before_imm += 2;
16168 1.1 christos break;
16169 1.1 christos case 1:
16170 1.1 christos /* 1 byte displacement: when decoding the third source,
16171 1.1 christos don't increase bytes_before_imm as this has already
16172 1.1 christos been incremented by one in OP_E_memory while decoding
16173 1.1 christos the second source operand. */
16174 1.1 christos if (opnum == 0)
16175 1.1 christos bytes_before_imm++;
16176 1.1 christos
16177 1.1 christos break;
16178 1.1 christos }
16179 1.1 christos }
16180 1.1 christos }
16181 1.1 christos }
16182 1.1 christos
16183 1.1 christos FETCH_DATA (the_info, codep + bytes_before_imm + 1);
16184 1.1 christos return codep [bytes_before_imm];
16185 1.1 christos }
16186 1.1 christos
16187 1.1 christos static void
16188 1.1 christos OP_EX_VexReg (int bytemode, int sizeflag, int reg)
16189 1.1 christos {
16190 1.1 christos const char **names;
16191 1.1 christos
16192 1.1 christos if (reg == -1 && modrm.mod != 3)
16193 1.1 christos {
16194 1.1 christos OP_E_memory (bytemode, sizeflag);
16195 1.1 christos return;
16196 1.1 christos }
16197 1.1 christos else
16198 1.1 christos {
16199 1.1 christos if (reg == -1)
16200 1.1 christos {
16201 1.1 christos reg = modrm.rm;
16202 1.1 christos USED_REX (REX_B);
16203 1.1 christos if (rex & REX_B)
16204 1.1 christos reg += 8;
16205 1.1 christos }
16206 1.1 christos else if (reg > 7 && address_mode != mode_64bit)
16207 1.1 christos BadOp ();
16208 1.1 christos }
16209 1.1 christos
16210 1.1 christos switch (vex.length)
16211 1.1 christos {
16212 1.1 christos case 128:
16213 1.1 christos names = names_xmm;
16214 1.1 christos break;
16215 1.1 christos case 256:
16216 1.1 christos names = names_ymm;
16217 1.1 christos break;
16218 1.1 christos default:
16219 1.1 christos abort ();
16220 1.1 christos }
16221 1.1 christos oappend (names[reg]);
16222 1.1 christos }
16223 1.1 christos
16224 1.1 christos static void
16225 1.1 christos OP_EX_VexImmW (int bytemode, int sizeflag)
16226 1.1 christos {
16227 1.1 christos int reg = -1;
16228 1.1 christos static unsigned char vex_imm8;
16229 1.1 christos
16230 1.1 christos if (vex_w_done == 0)
16231 1.1 christos {
16232 1.1 christos vex_w_done = 1;
16233 1.1 christos
16234 1.1 christos /* Skip mod/rm byte. */
16235 1.1 christos MODRM_CHECK;
16236 1.1 christos codep++;
16237 1.1 christos
16238 1.1 christos vex_imm8 = get_vex_imm8 (sizeflag, 0);
16239 1.1 christos
16240 1.1 christos if (vex.w)
16241 1.1 christos reg = vex_imm8 >> 4;
16242 1.1 christos
16243 1.1 christos OP_EX_VexReg (bytemode, sizeflag, reg);
16244 1.1 christos }
16245 1.1 christos else if (vex_w_done == 1)
16246 1.1 christos {
16247 1.1 christos vex_w_done = 2;
16248 1.1 christos
16249 1.1 christos if (!vex.w)
16250 1.1 christos reg = vex_imm8 >> 4;
16251 1.1 christos
16252 1.1 christos OP_EX_VexReg (bytemode, sizeflag, reg);
16253 1.1 christos }
16254 1.1 christos else
16255 1.1 christos {
16256 1.1 christos /* Output the imm8 directly. */
16257 1.1 christos scratchbuf[0] = '$';
16258 1.1 christos print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
16259 1.1.1.1.8.1 tls oappend_maybe_intel (scratchbuf);
16260 1.1 christos scratchbuf[0] = '\0';
16261 1.1 christos codep++;
16262 1.1 christos }
16263 1.1 christos }
16264 1.1 christos
16265 1.1 christos static void
16266 1.1 christos OP_Vex_2src (int bytemode, int sizeflag)
16267 1.1 christos {
16268 1.1 christos if (modrm.mod == 3)
16269 1.1 christos {
16270 1.1 christos int reg = modrm.rm;
16271 1.1 christos USED_REX (REX_B);
16272 1.1 christos if (rex & REX_B)
16273 1.1 christos reg += 8;
16274 1.1 christos oappend (names_xmm[reg]);
16275 1.1 christos }
16276 1.1 christos else
16277 1.1 christos {
16278 1.1 christos if (intel_syntax
16279 1.1 christos && (bytemode == v_mode || bytemode == v_swap_mode))
16280 1.1 christos {
16281 1.1 christos bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
16282 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
16283 1.1 christos }
16284 1.1 christos OP_E (bytemode, sizeflag);
16285 1.1 christos }
16286 1.1 christos }
16287 1.1 christos
16288 1.1 christos static void
16289 1.1 christos OP_Vex_2src_1 (int bytemode, int sizeflag)
16290 1.1 christos {
16291 1.1 christos if (modrm.mod == 3)
16292 1.1 christos {
16293 1.1 christos /* Skip mod/rm byte. */
16294 1.1 christos MODRM_CHECK;
16295 1.1 christos codep++;
16296 1.1 christos }
16297 1.1 christos
16298 1.1 christos if (vex.w)
16299 1.1 christos oappend (names_xmm[vex.register_specifier]);
16300 1.1 christos else
16301 1.1 christos OP_Vex_2src (bytemode, sizeflag);
16302 1.1 christos }
16303 1.1 christos
16304 1.1 christos static void
16305 1.1 christos OP_Vex_2src_2 (int bytemode, int sizeflag)
16306 1.1 christos {
16307 1.1 christos if (vex.w)
16308 1.1 christos OP_Vex_2src (bytemode, sizeflag);
16309 1.1 christos else
16310 1.1 christos oappend (names_xmm[vex.register_specifier]);
16311 1.1 christos }
16312 1.1 christos
16313 1.1 christos static void
16314 1.1 christos OP_EX_VexW (int bytemode, int sizeflag)
16315 1.1 christos {
16316 1.1 christos int reg = -1;
16317 1.1 christos
16318 1.1 christos if (!vex_w_done)
16319 1.1 christos {
16320 1.1 christos vex_w_done = 1;
16321 1.1 christos
16322 1.1 christos /* Skip mod/rm byte. */
16323 1.1 christos MODRM_CHECK;
16324 1.1 christos codep++;
16325 1.1 christos
16326 1.1 christos if (vex.w)
16327 1.1 christos reg = get_vex_imm8 (sizeflag, 0) >> 4;
16328 1.1 christos }
16329 1.1 christos else
16330 1.1 christos {
16331 1.1 christos if (!vex.w)
16332 1.1 christos reg = get_vex_imm8 (sizeflag, 1) >> 4;
16333 1.1 christos }
16334 1.1 christos
16335 1.1 christos OP_EX_VexReg (bytemode, sizeflag, reg);
16336 1.1 christos }
16337 1.1 christos
16338 1.1 christos static void
16339 1.1 christos VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
16340 1.1 christos int sizeflag ATTRIBUTE_UNUSED)
16341 1.1 christos {
16342 1.1 christos /* Skip the immediate byte and check for invalid bits. */
16343 1.1 christos FETCH_DATA (the_info, codep + 1);
16344 1.1 christos if (*codep++ & 0xf)
16345 1.1 christos BadOp ();
16346 1.1 christos }
16347 1.1 christos
16348 1.1 christos static void
16349 1.1 christos OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16350 1.1 christos {
16351 1.1 christos int reg;
16352 1.1 christos const char **names;
16353 1.1 christos
16354 1.1 christos FETCH_DATA (the_info, codep + 1);
16355 1.1 christos reg = *codep++;
16356 1.1 christos
16357 1.1 christos if (bytemode != x_mode)
16358 1.1 christos abort ();
16359 1.1 christos
16360 1.1 christos if (reg & 0xf)
16361 1.1 christos BadOp ();
16362 1.1 christos
16363 1.1 christos reg >>= 4;
16364 1.1 christos if (reg > 7 && address_mode != mode_64bit)
16365 1.1 christos BadOp ();
16366 1.1 christos
16367 1.1 christos switch (vex.length)
16368 1.1 christos {
16369 1.1 christos case 128:
16370 1.1 christos names = names_xmm;
16371 1.1 christos break;
16372 1.1 christos case 256:
16373 1.1 christos names = names_ymm;
16374 1.1 christos break;
16375 1.1 christos default:
16376 1.1 christos abort ();
16377 1.1 christos }
16378 1.1 christos oappend (names[reg]);
16379 1.1 christos }
16380 1.1 christos
16381 1.1 christos static void
16382 1.1 christos OP_XMM_VexW (int bytemode, int sizeflag)
16383 1.1 christos {
16384 1.1 christos /* Turn off the REX.W bit since it is used for swapping operands
16385 1.1 christos now. */
16386 1.1 christos rex &= ~REX_W;
16387 1.1 christos OP_XMM (bytemode, sizeflag);
16388 1.1 christos }
16389 1.1 christos
16390 1.1 christos static void
16391 1.1 christos OP_EX_Vex (int bytemode, int sizeflag)
16392 1.1 christos {
16393 1.1 christos if (modrm.mod != 3)
16394 1.1 christos {
16395 1.1 christos if (vex.register_specifier != 0)
16396 1.1 christos BadOp ();
16397 1.1 christos need_vex_reg = 0;
16398 1.1 christos }
16399 1.1 christos OP_EX (bytemode, sizeflag);
16400 1.1 christos }
16401 1.1 christos
16402 1.1 christos static void
16403 1.1 christos OP_XMM_Vex (int bytemode, int sizeflag)
16404 1.1 christos {
16405 1.1 christos if (modrm.mod != 3)
16406 1.1 christos {
16407 1.1 christos if (vex.register_specifier != 0)
16408 1.1 christos BadOp ();
16409 1.1 christos need_vex_reg = 0;
16410 1.1 christos }
16411 1.1 christos OP_XMM (bytemode, sizeflag);
16412 1.1 christos }
16413 1.1 christos
16414 1.1 christos static void
16415 1.1 christos VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16416 1.1 christos {
16417 1.1 christos switch (vex.length)
16418 1.1 christos {
16419 1.1 christos case 128:
16420 1.1 christos mnemonicendp = stpcpy (obuf, "vzeroupper");
16421 1.1 christos break;
16422 1.1 christos case 256:
16423 1.1 christos mnemonicendp = stpcpy (obuf, "vzeroall");
16424 1.1 christos break;
16425 1.1 christos default:
16426 1.1 christos abort ();
16427 1.1 christos }
16428 1.1 christos }
16429 1.1 christos
16430 1.1 christos static struct op vex_cmp_op[] =
16431 1.1 christos {
16432 1.1 christos { STRING_COMMA_LEN ("eq") },
16433 1.1 christos { STRING_COMMA_LEN ("lt") },
16434 1.1 christos { STRING_COMMA_LEN ("le") },
16435 1.1 christos { STRING_COMMA_LEN ("unord") },
16436 1.1 christos { STRING_COMMA_LEN ("neq") },
16437 1.1 christos { STRING_COMMA_LEN ("nlt") },
16438 1.1 christos { STRING_COMMA_LEN ("nle") },
16439 1.1 christos { STRING_COMMA_LEN ("ord") },
16440 1.1 christos { STRING_COMMA_LEN ("eq_uq") },
16441 1.1 christos { STRING_COMMA_LEN ("nge") },
16442 1.1 christos { STRING_COMMA_LEN ("ngt") },
16443 1.1 christos { STRING_COMMA_LEN ("false") },
16444 1.1 christos { STRING_COMMA_LEN ("neq_oq") },
16445 1.1 christos { STRING_COMMA_LEN ("ge") },
16446 1.1 christos { STRING_COMMA_LEN ("gt") },
16447 1.1 christos { STRING_COMMA_LEN ("true") },
16448 1.1 christos { STRING_COMMA_LEN ("eq_os") },
16449 1.1 christos { STRING_COMMA_LEN ("lt_oq") },
16450 1.1 christos { STRING_COMMA_LEN ("le_oq") },
16451 1.1 christos { STRING_COMMA_LEN ("unord_s") },
16452 1.1 christos { STRING_COMMA_LEN ("neq_us") },
16453 1.1 christos { STRING_COMMA_LEN ("nlt_uq") },
16454 1.1 christos { STRING_COMMA_LEN ("nle_uq") },
16455 1.1 christos { STRING_COMMA_LEN ("ord_s") },
16456 1.1 christos { STRING_COMMA_LEN ("eq_us") },
16457 1.1 christos { STRING_COMMA_LEN ("nge_uq") },
16458 1.1 christos { STRING_COMMA_LEN ("ngt_uq") },
16459 1.1 christos { STRING_COMMA_LEN ("false_os") },
16460 1.1 christos { STRING_COMMA_LEN ("neq_os") },
16461 1.1 christos { STRING_COMMA_LEN ("ge_oq") },
16462 1.1 christos { STRING_COMMA_LEN ("gt_oq") },
16463 1.1 christos { STRING_COMMA_LEN ("true_us") },
16464 1.1 christos };
16465 1.1 christos
16466 1.1 christos static void
16467 1.1 christos VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16468 1.1 christos {
16469 1.1 christos unsigned int cmp_type;
16470 1.1 christos
16471 1.1 christos FETCH_DATA (the_info, codep + 1);
16472 1.1 christos cmp_type = *codep++ & 0xff;
16473 1.1 christos if (cmp_type < ARRAY_SIZE (vex_cmp_op))
16474 1.1 christos {
16475 1.1 christos char suffix [3];
16476 1.1 christos char *p = mnemonicendp - 2;
16477 1.1 christos suffix[0] = p[0];
16478 1.1 christos suffix[1] = p[1];
16479 1.1 christos suffix[2] = '\0';
16480 1.1 christos sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
16481 1.1 christos mnemonicendp += vex_cmp_op[cmp_type].len;
16482 1.1 christos }
16483 1.1 christos else
16484 1.1 christos {
16485 1.1 christos /* We have a reserved extension byte. Output it directly. */
16486 1.1 christos scratchbuf[0] = '$';
16487 1.1 christos print_operand_value (scratchbuf + 1, 1, cmp_type);
16488 1.1.1.1.8.1 tls oappend_maybe_intel (scratchbuf);
16489 1.1.1.1.8.1 tls scratchbuf[0] = '\0';
16490 1.1.1.1.8.1 tls }
16491 1.1.1.1.8.1 tls }
16492 1.1.1.1.8.1 tls
16493 1.1.1.1.8.1 tls static void
16494 1.1.1.1.8.1 tls VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
16495 1.1.1.1.8.1 tls int sizeflag ATTRIBUTE_UNUSED)
16496 1.1.1.1.8.1 tls {
16497 1.1.1.1.8.1 tls unsigned int cmp_type;
16498 1.1.1.1.8.1 tls
16499 1.1.1.1.8.1 tls if (!vex.evex)
16500 1.1.1.1.8.1 tls abort ();
16501 1.1.1.1.8.1 tls
16502 1.1.1.1.8.1 tls FETCH_DATA (the_info, codep + 1);
16503 1.1.1.1.8.1 tls cmp_type = *codep++ & 0xff;
16504 1.1.1.1.8.1 tls /* There are aliases for immediates 0, 1, 2, 4, 5, 6.
16505 1.1.1.1.8.1 tls If it's the case, print suffix, otherwise - print the immediate. */
16506 1.1.1.1.8.1 tls if (cmp_type < ARRAY_SIZE (simd_cmp_op)
16507 1.1.1.1.8.1 tls && cmp_type != 3
16508 1.1.1.1.8.1 tls && cmp_type != 7)
16509 1.1.1.1.8.1 tls {
16510 1.1.1.1.8.1 tls char suffix [3];
16511 1.1.1.1.8.1 tls char *p = mnemonicendp - 2;
16512 1.1.1.1.8.1 tls
16513 1.1.1.1.8.1 tls /* vpcmp* can have both one- and two-lettered suffix. */
16514 1.1.1.1.8.1 tls if (p[0] == 'p')
16515 1.1.1.1.8.1 tls {
16516 1.1.1.1.8.1 tls p++;
16517 1.1.1.1.8.1 tls suffix[0] = p[0];
16518 1.1.1.1.8.1 tls suffix[1] = '\0';
16519 1.1.1.1.8.1 tls }
16520 1.1.1.1.8.1 tls else
16521 1.1.1.1.8.1 tls {
16522 1.1.1.1.8.1 tls suffix[0] = p[0];
16523 1.1.1.1.8.1 tls suffix[1] = p[1];
16524 1.1.1.1.8.1 tls suffix[2] = '\0';
16525 1.1.1.1.8.1 tls }
16526 1.1.1.1.8.1 tls
16527 1.1.1.1.8.1 tls sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
16528 1.1.1.1.8.1 tls mnemonicendp += simd_cmp_op[cmp_type].len;
16529 1.1.1.1.8.1 tls }
16530 1.1.1.1.8.1 tls else
16531 1.1.1.1.8.1 tls {
16532 1.1.1.1.8.1 tls /* We have a reserved extension byte. Output it directly. */
16533 1.1.1.1.8.1 tls scratchbuf[0] = '$';
16534 1.1.1.1.8.1 tls print_operand_value (scratchbuf + 1, 1, cmp_type);
16535 1.1.1.1.8.1 tls oappend_maybe_intel (scratchbuf);
16536 1.1 christos scratchbuf[0] = '\0';
16537 1.1 christos }
16538 1.1 christos }
16539 1.1 christos
16540 1.1 christos static const struct op pclmul_op[] =
16541 1.1 christos {
16542 1.1 christos { STRING_COMMA_LEN ("lql") },
16543 1.1 christos { STRING_COMMA_LEN ("hql") },
16544 1.1 christos { STRING_COMMA_LEN ("lqh") },
16545 1.1 christos { STRING_COMMA_LEN ("hqh") }
16546 1.1 christos };
16547 1.1 christos
16548 1.1 christos static void
16549 1.1 christos PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
16550 1.1 christos int sizeflag ATTRIBUTE_UNUSED)
16551 1.1 christos {
16552 1.1 christos unsigned int pclmul_type;
16553 1.1 christos
16554 1.1 christos FETCH_DATA (the_info, codep + 1);
16555 1.1 christos pclmul_type = *codep++ & 0xff;
16556 1.1 christos switch (pclmul_type)
16557 1.1 christos {
16558 1.1 christos case 0x10:
16559 1.1 christos pclmul_type = 2;
16560 1.1 christos break;
16561 1.1 christos case 0x11:
16562 1.1 christos pclmul_type = 3;
16563 1.1 christos break;
16564 1.1 christos default:
16565 1.1 christos break;
16566 1.1.1.1.8.1 tls }
16567 1.1 christos if (pclmul_type < ARRAY_SIZE (pclmul_op))
16568 1.1 christos {
16569 1.1 christos char suffix [4];
16570 1.1 christos char *p = mnemonicendp - 3;
16571 1.1 christos suffix[0] = p[0];
16572 1.1 christos suffix[1] = p[1];
16573 1.1 christos suffix[2] = p[2];
16574 1.1 christos suffix[3] = '\0';
16575 1.1 christos sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
16576 1.1 christos mnemonicendp += pclmul_op[pclmul_type].len;
16577 1.1 christos }
16578 1.1 christos else
16579 1.1 christos {
16580 1.1 christos /* We have a reserved extension byte. Output it directly. */
16581 1.1 christos scratchbuf[0] = '$';
16582 1.1 christos print_operand_value (scratchbuf + 1, 1, pclmul_type);
16583 1.1.1.1.8.1 tls oappend_maybe_intel (scratchbuf);
16584 1.1 christos scratchbuf[0] = '\0';
16585 1.1 christos }
16586 1.1 christos }
16587 1.1 christos
16588 1.1 christos static void
16589 1.1 christos MOVBE_Fixup (int bytemode, int sizeflag)
16590 1.1 christos {
16591 1.1 christos /* Add proper suffix to "movbe". */
16592 1.1 christos char *p = mnemonicendp;
16593 1.1 christos
16594 1.1 christos switch (bytemode)
16595 1.1 christos {
16596 1.1 christos case v_mode:
16597 1.1 christos if (intel_syntax)
16598 1.1 christos goto skip;
16599 1.1 christos
16600 1.1 christos USED_REX (REX_W);
16601 1.1 christos if (sizeflag & SUFFIX_ALWAYS)
16602 1.1 christos {
16603 1.1 christos if (rex & REX_W)
16604 1.1 christos *p++ = 'q';
16605 1.1 christos else
16606 1.1 christos {
16607 1.1 christos if (sizeflag & DFLAG)
16608 1.1 christos *p++ = 'l';
16609 1.1 christos else
16610 1.1 christos *p++ = 'w';
16611 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
16612 1.1 christos }
16613 1.1 christos }
16614 1.1 christos break;
16615 1.1 christos default:
16616 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
16617 1.1 christos break;
16618 1.1 christos }
16619 1.1 christos mnemonicendp = p;
16620 1.1 christos *p = '\0';
16621 1.1 christos
16622 1.1 christos skip:
16623 1.1 christos OP_M (bytemode, sizeflag);
16624 1.1 christos }
16625 1.1 christos
16626 1.1 christos static void
16627 1.1 christos OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16628 1.1 christos {
16629 1.1 christos int reg;
16630 1.1 christos const char **names;
16631 1.1 christos
16632 1.1 christos /* Skip mod/rm byte. */
16633 1.1 christos MODRM_CHECK;
16634 1.1 christos codep++;
16635 1.1 christos
16636 1.1 christos if (vex.w)
16637 1.1 christos names = names64;
16638 1.1 christos else
16639 1.1 christos names = names32;
16640 1.1 christos
16641 1.1 christos reg = modrm.rm;
16642 1.1 christos USED_REX (REX_B);
16643 1.1 christos if (rex & REX_B)
16644 1.1 christos reg += 8;
16645 1.1 christos
16646 1.1 christos oappend (names[reg]);
16647 1.1 christos }
16648 1.1 christos
16649 1.1 christos static void
16650 1.1 christos OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
16651 1.1 christos {
16652 1.1 christos const char **names;
16653 1.1 christos
16654 1.1 christos if (vex.w)
16655 1.1 christos names = names64;
16656 1.1 christos else
16657 1.1 christos names = names32;
16658 1.1 christos
16659 1.1 christos oappend (names[vex.register_specifier]);
16660 1.1 christos }
16661 1.1 christos
16662 1.1.1.1.8.1 tls static void
16663 1.1.1.1.8.1 tls OP_Mask (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16664 1.1.1.1.8.1 tls {
16665 1.1.1.1.8.1 tls if (!vex.evex
16666 1.1.1.1.8.1 tls || bytemode != mask_mode)
16667 1.1.1.1.8.1 tls abort ();
16668 1.1.1.1.8.1 tls
16669 1.1.1.1.8.1 tls USED_REX (REX_R);
16670 1.1.1.1.8.1 tls if ((rex & REX_R) != 0 || !vex.r)
16671 1.1.1.1.8.1 tls {
16672 1.1.1.1.8.1 tls BadOp ();
16673 1.1.1.1.8.1 tls return;
16674 1.1.1.1.8.1 tls }
16675 1.1.1.1.8.1 tls
16676 1.1.1.1.8.1 tls oappend (names_mask [modrm.reg]);
16677 1.1.1.1.8.1 tls }
16678 1.1.1.1.8.1 tls
16679 1.1.1.1.8.1 tls static void
16680 1.1.1.1.8.1 tls OP_Rounding (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
16681 1.1.1.1.8.1 tls {
16682 1.1.1.1.8.1 tls if (!vex.evex
16683 1.1.1.1.8.1 tls || (bytemode != evex_rounding_mode
16684 1.1.1.1.8.1 tls && bytemode != evex_sae_mode))
16685 1.1.1.1.8.1 tls abort ();
16686 1.1.1.1.8.1 tls if (modrm.mod == 3 && vex.b)
16687 1.1.1.1.8.1 tls switch (bytemode)
16688 1.1.1.1.8.1 tls {
16689 1.1.1.1.8.1 tls case evex_rounding_mode:
16690 1.1.1.1.8.1 tls oappend (names_rounding[vex.ll]);
16691 1.1.1.1.8.1 tls break;
16692 1.1.1.1.8.1 tls case evex_sae_mode:
16693 1.1.1.1.8.1 tls oappend ("{sae}");
16694 1.1.1.1.8.1 tls break;
16695 1.1.1.1.8.1 tls default:
16696 1.1.1.1.8.1 tls break;
16697 1.1.1.1.8.1 tls }
16698 1.1.1.1.8.1 tls }
16699