i386-dis.c revision 1.1.1.2 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.2 christos 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
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 christos static void OP_REG_VexI4 (int, int);
98 1.1 christos static void PCLMUL_Fixup (int, int);
99 1.1 christos static void VEXI4_Fixup (int, int);
100 1.1 christos static void VZERO_Fixup (int, int);
101 1.1 christos static void VCMP_Fixup (int, int);
102 1.1 christos static void OP_0f07 (int, int);
103 1.1 christos static void OP_Monitor (int, int);
104 1.1 christos static void OP_Mwait (int, int);
105 1.1 christos static void NOP_Fixup1 (int, int);
106 1.1 christos static void NOP_Fixup2 (int, int);
107 1.1 christos static void OP_3DNowSuffix (int, int);
108 1.1 christos static void CMP_Fixup (int, int);
109 1.1 christos static void BadOp (void);
110 1.1 christos static void REP_Fixup (int, int);
111 1.1.1.2 christos static void HLE_Fixup1 (int, int);
112 1.1.1.2 christos static void HLE_Fixup2 (int, int);
113 1.1.1.2 christos static void HLE_Fixup3 (int, int);
114 1.1 christos static void CMPXCHG8B_Fixup (int, int);
115 1.1 christos static void XMM_Fixup (int, int);
116 1.1 christos static void CRC32_Fixup (int, int);
117 1.1 christos static void FXSAVE_Fixup (int, int);
118 1.1 christos static void OP_LWPCB_E (int, int);
119 1.1 christos static void OP_LWP_E (int, int);
120 1.1 christos static void OP_Vex_2src_1 (int, int);
121 1.1 christos static void OP_Vex_2src_2 (int, int);
122 1.1 christos
123 1.1 christos static void MOVBE_Fixup (int, int);
124 1.1 christos
125 1.1 christos struct dis_private {
126 1.1 christos /* Points to first byte not fetched. */
127 1.1 christos bfd_byte *max_fetched;
128 1.1 christos bfd_byte the_buffer[MAX_MNEM_SIZE];
129 1.1 christos bfd_vma insn_start;
130 1.1 christos int orig_sizeflag;
131 1.1 christos jmp_buf bailout;
132 1.1 christos };
133 1.1 christos
134 1.1 christos enum address_mode
135 1.1 christos {
136 1.1 christos mode_16bit,
137 1.1 christos mode_32bit,
138 1.1 christos mode_64bit
139 1.1 christos };
140 1.1 christos
141 1.1 christos enum address_mode address_mode;
142 1.1 christos
143 1.1 christos /* Flags for the prefixes for the current instruction. See below. */
144 1.1 christos static int prefixes;
145 1.1 christos
146 1.1 christos /* REX prefix the current instruction. See below. */
147 1.1 christos static int rex;
148 1.1 christos /* Bits of REX we've already used. */
149 1.1 christos static int rex_used;
150 1.1 christos /* REX bits in original REX prefix ignored. */
151 1.1 christos static int rex_ignored;
152 1.1 christos /* Mark parts used in the REX prefix. When we are testing for
153 1.1 christos empty prefix (for 8bit register REX extension), just mask it
154 1.1 christos out. Otherwise test for REX bit is excuse for existence of REX
155 1.1 christos only in case value is nonzero. */
156 1.1 christos #define USED_REX(value) \
157 1.1 christos { \
158 1.1 christos if (value) \
159 1.1 christos { \
160 1.1 christos if ((rex & value)) \
161 1.1 christos rex_used |= (value) | REX_OPCODE; \
162 1.1 christos } \
163 1.1 christos else \
164 1.1 christos rex_used |= REX_OPCODE; \
165 1.1 christos }
166 1.1 christos
167 1.1 christos /* Flags for prefixes which we somehow handled when printing the
168 1.1 christos current instruction. */
169 1.1 christos static int used_prefixes;
170 1.1 christos
171 1.1 christos /* Flags stored in PREFIXES. */
172 1.1 christos #define PREFIX_REPZ 1
173 1.1 christos #define PREFIX_REPNZ 2
174 1.1 christos #define PREFIX_LOCK 4
175 1.1 christos #define PREFIX_CS 8
176 1.1 christos #define PREFIX_SS 0x10
177 1.1 christos #define PREFIX_DS 0x20
178 1.1 christos #define PREFIX_ES 0x40
179 1.1 christos #define PREFIX_FS 0x80
180 1.1 christos #define PREFIX_GS 0x100
181 1.1 christos #define PREFIX_DATA 0x200
182 1.1 christos #define PREFIX_ADDR 0x400
183 1.1 christos #define PREFIX_FWAIT 0x800
184 1.1 christos
185 1.1 christos /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
186 1.1 christos to ADDR (exclusive) are valid. Returns 1 for success, longjmps
187 1.1 christos on error. */
188 1.1 christos #define FETCH_DATA(info, addr) \
189 1.1 christos ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \
190 1.1 christos ? 1 : fetch_data ((info), (addr)))
191 1.1 christos
192 1.1 christos static int
193 1.1 christos fetch_data (struct disassemble_info *info, bfd_byte *addr)
194 1.1 christos {
195 1.1 christos int status;
196 1.1 christos struct dis_private *priv = (struct dis_private *) info->private_data;
197 1.1 christos bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
198 1.1 christos
199 1.1 christos if (addr <= priv->the_buffer + MAX_MNEM_SIZE)
200 1.1 christos status = (*info->read_memory_func) (start,
201 1.1 christos priv->max_fetched,
202 1.1 christos addr - priv->max_fetched,
203 1.1 christos info);
204 1.1 christos else
205 1.1 christos status = -1;
206 1.1 christos if (status != 0)
207 1.1 christos {
208 1.1 christos /* If we did manage to read at least one byte, then
209 1.1 christos print_insn_i386 will do something sensible. Otherwise, print
210 1.1 christos an error. We do that here because this is where we know
211 1.1 christos STATUS. */
212 1.1 christos if (priv->max_fetched == priv->the_buffer)
213 1.1 christos (*info->memory_error_func) (status, start, info);
214 1.1 christos longjmp (priv->bailout, 1);
215 1.1 christos }
216 1.1 christos else
217 1.1 christos priv->max_fetched = addr;
218 1.1 christos return 1;
219 1.1 christos }
220 1.1 christos
221 1.1 christos #define XX { NULL, 0 }
222 1.1 christos #define Bad_Opcode NULL, { { NULL, 0 } }
223 1.1 christos
224 1.1 christos #define Eb { OP_E, b_mode }
225 1.1 christos #define EbS { OP_E, b_swap_mode }
226 1.1 christos #define Ev { OP_E, v_mode }
227 1.1 christos #define EvS { OP_E, v_swap_mode }
228 1.1 christos #define Ed { OP_E, d_mode }
229 1.1 christos #define Edq { OP_E, dq_mode }
230 1.1 christos #define Edqw { OP_E, dqw_mode }
231 1.1 christos #define Edqb { OP_E, dqb_mode }
232 1.1 christos #define Edqd { OP_E, dqd_mode }
233 1.1 christos #define Eq { OP_E, q_mode }
234 1.1 christos #define indirEv { OP_indirE, stack_v_mode }
235 1.1 christos #define indirEp { OP_indirE, f_mode }
236 1.1 christos #define stackEv { OP_E, stack_v_mode }
237 1.1 christos #define Em { OP_E, m_mode }
238 1.1 christos #define Ew { OP_E, w_mode }
239 1.1 christos #define M { OP_M, 0 } /* lea, lgdt, etc. */
240 1.1 christos #define Ma { OP_M, a_mode }
241 1.1 christos #define Mb { OP_M, b_mode }
242 1.1 christos #define Md { OP_M, d_mode }
243 1.1 christos #define Mo { OP_M, o_mode }
244 1.1 christos #define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for LDS, LES etc */
245 1.1 christos #define Mq { OP_M, q_mode }
246 1.1 christos #define Mx { OP_M, x_mode }
247 1.1 christos #define Mxmm { OP_M, xmm_mode }
248 1.1 christos #define Gb { OP_G, b_mode }
249 1.1 christos #define Gv { OP_G, v_mode }
250 1.1 christos #define Gd { OP_G, d_mode }
251 1.1 christos #define Gdq { OP_G, dq_mode }
252 1.1 christos #define Gm { OP_G, m_mode }
253 1.1 christos #define Gw { OP_G, w_mode }
254 1.1 christos #define Rd { OP_R, d_mode }
255 1.1 christos #define Rm { OP_R, m_mode }
256 1.1 christos #define Ib { OP_I, b_mode }
257 1.1 christos #define sIb { OP_sI, b_mode } /* sign extened byte */
258 1.1 christos #define sIbT { OP_sI, b_T_mode } /* sign extened byte like 'T' */
259 1.1 christos #define Iv { OP_I, v_mode }
260 1.1.1.2 christos #define sIv { OP_sI, v_mode }
261 1.1 christos #define Iq { OP_I, q_mode }
262 1.1 christos #define Iv64 { OP_I64, v_mode }
263 1.1 christos #define Iw { OP_I, w_mode }
264 1.1 christos #define I1 { OP_I, const_1_mode }
265 1.1 christos #define Jb { OP_J, b_mode }
266 1.1 christos #define Jv { OP_J, v_mode }
267 1.1 christos #define Cm { OP_C, m_mode }
268 1.1 christos #define Dm { OP_D, m_mode }
269 1.1 christos #define Td { OP_T, d_mode }
270 1.1 christos #define Skip_MODRM { OP_Skip_MODRM, 0 }
271 1.1 christos
272 1.1 christos #define RMeAX { OP_REG, eAX_reg }
273 1.1 christos #define RMeBX { OP_REG, eBX_reg }
274 1.1 christos #define RMeCX { OP_REG, eCX_reg }
275 1.1 christos #define RMeDX { OP_REG, eDX_reg }
276 1.1 christos #define RMeSP { OP_REG, eSP_reg }
277 1.1 christos #define RMeBP { OP_REG, eBP_reg }
278 1.1 christos #define RMeSI { OP_REG, eSI_reg }
279 1.1 christos #define RMeDI { OP_REG, eDI_reg }
280 1.1 christos #define RMrAX { OP_REG, rAX_reg }
281 1.1 christos #define RMrBX { OP_REG, rBX_reg }
282 1.1 christos #define RMrCX { OP_REG, rCX_reg }
283 1.1 christos #define RMrDX { OP_REG, rDX_reg }
284 1.1 christos #define RMrSP { OP_REG, rSP_reg }
285 1.1 christos #define RMrBP { OP_REG, rBP_reg }
286 1.1 christos #define RMrSI { OP_REG, rSI_reg }
287 1.1 christos #define RMrDI { OP_REG, rDI_reg }
288 1.1 christos #define RMAL { OP_REG, al_reg }
289 1.1 christos #define RMCL { OP_REG, cl_reg }
290 1.1 christos #define RMDL { OP_REG, dl_reg }
291 1.1 christos #define RMBL { OP_REG, bl_reg }
292 1.1 christos #define RMAH { OP_REG, ah_reg }
293 1.1 christos #define RMCH { OP_REG, ch_reg }
294 1.1 christos #define RMDH { OP_REG, dh_reg }
295 1.1 christos #define RMBH { OP_REG, bh_reg }
296 1.1 christos #define RMAX { OP_REG, ax_reg }
297 1.1 christos #define RMDX { OP_REG, dx_reg }
298 1.1 christos
299 1.1 christos #define eAX { OP_IMREG, eAX_reg }
300 1.1 christos #define eBX { OP_IMREG, eBX_reg }
301 1.1 christos #define eCX { OP_IMREG, eCX_reg }
302 1.1 christos #define eDX { OP_IMREG, eDX_reg }
303 1.1 christos #define eSP { OP_IMREG, eSP_reg }
304 1.1 christos #define eBP { OP_IMREG, eBP_reg }
305 1.1 christos #define eSI { OP_IMREG, eSI_reg }
306 1.1 christos #define eDI { OP_IMREG, eDI_reg }
307 1.1 christos #define AL { OP_IMREG, al_reg }
308 1.1 christos #define CL { OP_IMREG, cl_reg }
309 1.1 christos #define DL { OP_IMREG, dl_reg }
310 1.1 christos #define BL { OP_IMREG, bl_reg }
311 1.1 christos #define AH { OP_IMREG, ah_reg }
312 1.1 christos #define CH { OP_IMREG, ch_reg }
313 1.1 christos #define DH { OP_IMREG, dh_reg }
314 1.1 christos #define BH { OP_IMREG, bh_reg }
315 1.1 christos #define AX { OP_IMREG, ax_reg }
316 1.1 christos #define DX { OP_IMREG, dx_reg }
317 1.1 christos #define zAX { OP_IMREG, z_mode_ax_reg }
318 1.1 christos #define indirDX { OP_IMREG, indir_dx_reg }
319 1.1 christos
320 1.1 christos #define Sw { OP_SEG, w_mode }
321 1.1 christos #define Sv { OP_SEG, v_mode }
322 1.1 christos #define Ap { OP_DIR, 0 }
323 1.1 christos #define Ob { OP_OFF64, b_mode }
324 1.1 christos #define Ov { OP_OFF64, v_mode }
325 1.1 christos #define Xb { OP_DSreg, eSI_reg }
326 1.1 christos #define Xv { OP_DSreg, eSI_reg }
327 1.1 christos #define Xz { OP_DSreg, eSI_reg }
328 1.1 christos #define Yb { OP_ESreg, eDI_reg }
329 1.1 christos #define Yv { OP_ESreg, eDI_reg }
330 1.1 christos #define DSBX { OP_DSreg, eBX_reg }
331 1.1 christos
332 1.1 christos #define es { OP_REG, es_reg }
333 1.1 christos #define ss { OP_REG, ss_reg }
334 1.1 christos #define cs { OP_REG, cs_reg }
335 1.1 christos #define ds { OP_REG, ds_reg }
336 1.1 christos #define fs { OP_REG, fs_reg }
337 1.1 christos #define gs { OP_REG, gs_reg }
338 1.1 christos
339 1.1 christos #define MX { OP_MMX, 0 }
340 1.1 christos #define XM { OP_XMM, 0 }
341 1.1 christos #define XMScalar { OP_XMM, scalar_mode }
342 1.1.1.2 christos #define XMGatherQ { OP_XMM, vex_vsib_q_w_dq_mode }
343 1.1 christos #define XMM { OP_XMM, xmm_mode }
344 1.1 christos #define EM { OP_EM, v_mode }
345 1.1 christos #define EMS { OP_EM, v_swap_mode }
346 1.1 christos #define EMd { OP_EM, d_mode }
347 1.1 christos #define EMx { OP_EM, x_mode }
348 1.1 christos #define EXw { OP_EX, w_mode }
349 1.1 christos #define EXd { OP_EX, d_mode }
350 1.1 christos #define EXdScalar { OP_EX, d_scalar_mode }
351 1.1 christos #define EXdS { OP_EX, d_swap_mode }
352 1.1 christos #define EXq { OP_EX, q_mode }
353 1.1 christos #define EXqScalar { OP_EX, q_scalar_mode }
354 1.1 christos #define EXqScalarS { OP_EX, q_scalar_swap_mode }
355 1.1 christos #define EXqS { OP_EX, q_swap_mode }
356 1.1 christos #define EXx { OP_EX, x_mode }
357 1.1 christos #define EXxS { OP_EX, x_swap_mode }
358 1.1 christos #define EXxmm { OP_EX, xmm_mode }
359 1.1 christos #define EXxmmq { OP_EX, xmmq_mode }
360 1.1.1.2 christos #define EXxmm_mb { OP_EX, xmm_mb_mode }
361 1.1.1.2 christos #define EXxmm_mw { OP_EX, xmm_mw_mode }
362 1.1.1.2 christos #define EXxmm_md { OP_EX, xmm_md_mode }
363 1.1.1.2 christos #define EXxmm_mq { OP_EX, xmm_mq_mode }
364 1.1.1.2 christos #define EXxmmdw { OP_EX, xmmdw_mode }
365 1.1.1.2 christos #define EXxmmqd { OP_EX, xmmqd_mode }
366 1.1 christos #define EXymmq { OP_EX, ymmq_mode }
367 1.1 christos #define EXVexWdq { OP_EX, vex_w_dq_mode }
368 1.1 christos #define EXVexWdqScalar { OP_EX, vex_scalar_w_dq_mode }
369 1.1 christos #define MS { OP_MS, v_mode }
370 1.1 christos #define XS { OP_XS, v_mode }
371 1.1 christos #define EMCq { OP_EMC, q_mode }
372 1.1 christos #define MXC { OP_MXC, 0 }
373 1.1 christos #define OPSUF { OP_3DNowSuffix, 0 }
374 1.1 christos #define CMP { CMP_Fixup, 0 }
375 1.1 christos #define XMM0 { XMM_Fixup, 0 }
376 1.1 christos #define FXSAVE { FXSAVE_Fixup, 0 }
377 1.1 christos #define Vex_2src_1 { OP_Vex_2src_1, 0 }
378 1.1 christos #define Vex_2src_2 { OP_Vex_2src_2, 0 }
379 1.1 christos
380 1.1 christos #define Vex { OP_VEX, vex_mode }
381 1.1 christos #define VexScalar { OP_VEX, vex_scalar_mode }
382 1.1.1.2 christos #define VexGatherQ { OP_VEX, vex_vsib_q_w_dq_mode }
383 1.1 christos #define Vex128 { OP_VEX, vex128_mode }
384 1.1 christos #define Vex256 { OP_VEX, vex256_mode }
385 1.1 christos #define VexGdq { OP_VEX, dq_mode }
386 1.1 christos #define VexI4 { VEXI4_Fixup, 0}
387 1.1 christos #define EXdVex { OP_EX_Vex, d_mode }
388 1.1 christos #define EXdVexS { OP_EX_Vex, d_swap_mode }
389 1.1 christos #define EXdVexScalarS { OP_EX_Vex, d_scalar_swap_mode }
390 1.1 christos #define EXqVex { OP_EX_Vex, q_mode }
391 1.1 christos #define EXqVexS { OP_EX_Vex, q_swap_mode }
392 1.1 christos #define EXqVexScalarS { OP_EX_Vex, q_scalar_swap_mode }
393 1.1 christos #define EXVexW { OP_EX_VexW, x_mode }
394 1.1 christos #define EXdVexW { OP_EX_VexW, d_mode }
395 1.1 christos #define EXqVexW { OP_EX_VexW, q_mode }
396 1.1 christos #define EXVexImmW { OP_EX_VexImmW, x_mode }
397 1.1 christos #define XMVex { OP_XMM_Vex, 0 }
398 1.1 christos #define XMVexScalar { OP_XMM_Vex, scalar_mode }
399 1.1 christos #define XMVexW { OP_XMM_VexW, 0 }
400 1.1 christos #define XMVexI4 { OP_REG_VexI4, x_mode }
401 1.1 christos #define PCLMUL { PCLMUL_Fixup, 0 }
402 1.1 christos #define VZERO { VZERO_Fixup, 0 }
403 1.1 christos #define VCMP { VCMP_Fixup, 0 }
404 1.1 christos
405 1.1.1.2 christos #define MVexVSIBDWpX { OP_M, vex_vsib_d_w_dq_mode }
406 1.1.1.2 christos #define MVexVSIBQWpX { OP_M, vex_vsib_q_w_dq_mode }
407 1.1.1.2 christos
408 1.1 christos /* Used handle "rep" prefix for string instructions. */
409 1.1 christos #define Xbr { REP_Fixup, eSI_reg }
410 1.1 christos #define Xvr { REP_Fixup, eSI_reg }
411 1.1 christos #define Ybr { REP_Fixup, eDI_reg }
412 1.1 christos #define Yvr { REP_Fixup, eDI_reg }
413 1.1 christos #define Yzr { REP_Fixup, eDI_reg }
414 1.1 christos #define indirDXr { REP_Fixup, indir_dx_reg }
415 1.1 christos #define ALr { REP_Fixup, al_reg }
416 1.1 christos #define eAXr { REP_Fixup, eAX_reg }
417 1.1 christos
418 1.1.1.2 christos /* Used handle HLE prefix for lockable instructions. */
419 1.1.1.2 christos #define Ebh1 { HLE_Fixup1, b_mode }
420 1.1.1.2 christos #define Evh1 { HLE_Fixup1, v_mode }
421 1.1.1.2 christos #define Ebh2 { HLE_Fixup2, b_mode }
422 1.1.1.2 christos #define Evh2 { HLE_Fixup2, v_mode }
423 1.1.1.2 christos #define Ebh3 { HLE_Fixup3, b_mode }
424 1.1.1.2 christos #define Evh3 { HLE_Fixup3, v_mode }
425 1.1.1.2 christos
426 1.1 christos #define cond_jump_flag { NULL, cond_jump_mode }
427 1.1 christos #define loop_jcxz_flag { NULL, loop_jcxz_mode }
428 1.1 christos
429 1.1 christos /* bits in sizeflag */
430 1.1 christos #define SUFFIX_ALWAYS 4
431 1.1 christos #define AFLAG 2
432 1.1 christos #define DFLAG 1
433 1.1 christos
434 1.1 christos enum
435 1.1 christos {
436 1.1 christos /* byte operand */
437 1.1 christos b_mode = 1,
438 1.1 christos /* byte operand with operand swapped */
439 1.1 christos b_swap_mode,
440 1.1 christos /* byte operand, sign extend like 'T' suffix */
441 1.1 christos b_T_mode,
442 1.1 christos /* operand size depends on prefixes */
443 1.1 christos v_mode,
444 1.1 christos /* operand size depends on prefixes with operand swapped */
445 1.1 christos v_swap_mode,
446 1.1 christos /* word operand */
447 1.1 christos w_mode,
448 1.1 christos /* double word operand */
449 1.1 christos d_mode,
450 1.1 christos /* double word operand with operand swapped */
451 1.1 christos d_swap_mode,
452 1.1 christos /* quad word operand */
453 1.1 christos q_mode,
454 1.1 christos /* quad word operand with operand swapped */
455 1.1 christos q_swap_mode,
456 1.1 christos /* ten-byte operand */
457 1.1 christos t_mode,
458 1.1 christos /* 16-byte XMM or 32-byte YMM operand */
459 1.1 christos x_mode,
460 1.1 christos /* 16-byte XMM or 32-byte YMM operand with operand swapped */
461 1.1 christos x_swap_mode,
462 1.1 christos /* 16-byte XMM operand */
463 1.1 christos xmm_mode,
464 1.1 christos /* 16-byte XMM or quad word operand */
465 1.1 christos xmmq_mode,
466 1.1.1.2 christos /* XMM register or byte memory operand */
467 1.1.1.2 christos xmm_mb_mode,
468 1.1.1.2 christos /* XMM register or word memory operand */
469 1.1.1.2 christos xmm_mw_mode,
470 1.1.1.2 christos /* XMM register or double word memory operand */
471 1.1.1.2 christos xmm_md_mode,
472 1.1.1.2 christos /* XMM register or quad word memory operand */
473 1.1.1.2 christos xmm_mq_mode,
474 1.1.1.2 christos /* 16-byte XMM, word or double word operand */
475 1.1.1.2 christos xmmdw_mode,
476 1.1.1.2 christos /* 16-byte XMM, double word or quad word operand */
477 1.1.1.2 christos xmmqd_mode,
478 1.1 christos /* 32-byte YMM or quad word operand */
479 1.1 christos ymmq_mode,
480 1.1.1.2 christos /* 32-byte YMM or 16-byte word operand */
481 1.1.1.2 christos ymmxmm_mode,
482 1.1 christos /* d_mode in 32bit, q_mode in 64bit mode. */
483 1.1 christos m_mode,
484 1.1 christos /* pair of v_mode operands */
485 1.1 christos a_mode,
486 1.1 christos cond_jump_mode,
487 1.1 christos loop_jcxz_mode,
488 1.1 christos /* operand size depends on REX prefixes. */
489 1.1 christos dq_mode,
490 1.1 christos /* registers like dq_mode, memory like w_mode. */
491 1.1 christos dqw_mode,
492 1.1 christos /* 4- or 6-byte pointer operand */
493 1.1 christos f_mode,
494 1.1 christos const_1_mode,
495 1.1 christos /* v_mode for stack-related opcodes. */
496 1.1 christos stack_v_mode,
497 1.1 christos /* non-quad operand size depends on prefixes */
498 1.1 christos z_mode,
499 1.1 christos /* 16-byte operand */
500 1.1 christos o_mode,
501 1.1 christos /* registers like dq_mode, memory like b_mode. */
502 1.1 christos dqb_mode,
503 1.1 christos /* registers like dq_mode, memory like d_mode. */
504 1.1 christos dqd_mode,
505 1.1 christos /* normal vex mode */
506 1.1 christos vex_mode,
507 1.1 christos /* 128bit vex mode */
508 1.1 christos vex128_mode,
509 1.1 christos /* 256bit vex mode */
510 1.1 christos vex256_mode,
511 1.1 christos /* operand size depends on the VEX.W bit. */
512 1.1 christos vex_w_dq_mode,
513 1.1 christos
514 1.1.1.2 christos /* Similar to vex_w_dq_mode, with VSIB dword indices. */
515 1.1.1.2 christos vex_vsib_d_w_dq_mode,
516 1.1.1.2 christos /* Similar to vex_w_dq_mode, with VSIB qword indices. */
517 1.1.1.2 christos vex_vsib_q_w_dq_mode,
518 1.1.1.2 christos
519 1.1 christos /* scalar, ignore vector length. */
520 1.1 christos scalar_mode,
521 1.1 christos /* like d_mode, ignore vector length. */
522 1.1 christos d_scalar_mode,
523 1.1 christos /* like d_swap_mode, ignore vector length. */
524 1.1 christos d_scalar_swap_mode,
525 1.1 christos /* like q_mode, ignore vector length. */
526 1.1 christos q_scalar_mode,
527 1.1 christos /* like q_swap_mode, ignore vector length. */
528 1.1 christos q_scalar_swap_mode,
529 1.1 christos /* like vex_mode, ignore vector length. */
530 1.1 christos vex_scalar_mode,
531 1.1 christos /* like vex_w_dq_mode, ignore vector length. */
532 1.1 christos vex_scalar_w_dq_mode,
533 1.1 christos
534 1.1 christos es_reg,
535 1.1 christos cs_reg,
536 1.1 christos ss_reg,
537 1.1 christos ds_reg,
538 1.1 christos fs_reg,
539 1.1 christos gs_reg,
540 1.1 christos
541 1.1 christos eAX_reg,
542 1.1 christos eCX_reg,
543 1.1 christos eDX_reg,
544 1.1 christos eBX_reg,
545 1.1 christos eSP_reg,
546 1.1 christos eBP_reg,
547 1.1 christos eSI_reg,
548 1.1 christos eDI_reg,
549 1.1 christos
550 1.1 christos al_reg,
551 1.1 christos cl_reg,
552 1.1 christos dl_reg,
553 1.1 christos bl_reg,
554 1.1 christos ah_reg,
555 1.1 christos ch_reg,
556 1.1 christos dh_reg,
557 1.1 christos bh_reg,
558 1.1 christos
559 1.1 christos ax_reg,
560 1.1 christos cx_reg,
561 1.1 christos dx_reg,
562 1.1 christos bx_reg,
563 1.1 christos sp_reg,
564 1.1 christos bp_reg,
565 1.1 christos si_reg,
566 1.1 christos di_reg,
567 1.1 christos
568 1.1 christos rAX_reg,
569 1.1 christos rCX_reg,
570 1.1 christos rDX_reg,
571 1.1 christos rBX_reg,
572 1.1 christos rSP_reg,
573 1.1 christos rBP_reg,
574 1.1 christos rSI_reg,
575 1.1 christos rDI_reg,
576 1.1 christos
577 1.1 christos z_mode_ax_reg,
578 1.1 christos indir_dx_reg
579 1.1 christos };
580 1.1 christos
581 1.1 christos enum
582 1.1 christos {
583 1.1 christos FLOATCODE = 1,
584 1.1 christos USE_REG_TABLE,
585 1.1 christos USE_MOD_TABLE,
586 1.1 christos USE_RM_TABLE,
587 1.1 christos USE_PREFIX_TABLE,
588 1.1 christos USE_X86_64_TABLE,
589 1.1 christos USE_3BYTE_TABLE,
590 1.1 christos USE_XOP_8F_TABLE,
591 1.1 christos USE_VEX_C4_TABLE,
592 1.1 christos USE_VEX_C5_TABLE,
593 1.1 christos USE_VEX_LEN_TABLE,
594 1.1 christos USE_VEX_W_TABLE
595 1.1 christos };
596 1.1 christos
597 1.1 christos #define FLOAT NULL, { { NULL, FLOATCODE } }
598 1.1 christos
599 1.1 christos #define DIS386(T, I) NULL, { { NULL, (T)}, { NULL, (I) } }
600 1.1 christos #define REG_TABLE(I) DIS386 (USE_REG_TABLE, (I))
601 1.1 christos #define MOD_TABLE(I) DIS386 (USE_MOD_TABLE, (I))
602 1.1 christos #define RM_TABLE(I) DIS386 (USE_RM_TABLE, (I))
603 1.1 christos #define PREFIX_TABLE(I) DIS386 (USE_PREFIX_TABLE, (I))
604 1.1 christos #define X86_64_TABLE(I) DIS386 (USE_X86_64_TABLE, (I))
605 1.1 christos #define THREE_BYTE_TABLE(I) DIS386 (USE_3BYTE_TABLE, (I))
606 1.1 christos #define XOP_8F_TABLE(I) DIS386 (USE_XOP_8F_TABLE, (I))
607 1.1 christos #define VEX_C4_TABLE(I) DIS386 (USE_VEX_C4_TABLE, (I))
608 1.1 christos #define VEX_C5_TABLE(I) DIS386 (USE_VEX_C5_TABLE, (I))
609 1.1 christos #define VEX_LEN_TABLE(I) DIS386 (USE_VEX_LEN_TABLE, (I))
610 1.1 christos #define VEX_W_TABLE(I) DIS386 (USE_VEX_W_TABLE, (I))
611 1.1 christos
612 1.1 christos enum
613 1.1 christos {
614 1.1 christos REG_80 = 0,
615 1.1 christos REG_81,
616 1.1 christos REG_82,
617 1.1 christos REG_8F,
618 1.1 christos REG_C0,
619 1.1 christos REG_C1,
620 1.1 christos REG_C6,
621 1.1 christos REG_C7,
622 1.1 christos REG_D0,
623 1.1 christos REG_D1,
624 1.1 christos REG_D2,
625 1.1 christos REG_D3,
626 1.1 christos REG_F6,
627 1.1 christos REG_F7,
628 1.1 christos REG_FE,
629 1.1 christos REG_FF,
630 1.1 christos REG_0F00,
631 1.1 christos REG_0F01,
632 1.1 christos REG_0F0D,
633 1.1 christos REG_0F18,
634 1.1 christos REG_0F71,
635 1.1 christos REG_0F72,
636 1.1 christos REG_0F73,
637 1.1 christos REG_0FA6,
638 1.1 christos REG_0FA7,
639 1.1 christos REG_0FAE,
640 1.1 christos REG_0FBA,
641 1.1 christos REG_0FC7,
642 1.1 christos REG_VEX_0F71,
643 1.1 christos REG_VEX_0F72,
644 1.1 christos REG_VEX_0F73,
645 1.1 christos REG_VEX_0FAE,
646 1.1 christos REG_VEX_0F38F3,
647 1.1 christos REG_XOP_LWPCB,
648 1.1 christos REG_XOP_LWP,
649 1.1 christos REG_XOP_TBM_01,
650 1.1 christos REG_XOP_TBM_02
651 1.1 christos };
652 1.1 christos
653 1.1 christos enum
654 1.1 christos {
655 1.1 christos MOD_8D = 0,
656 1.1.1.2 christos MOD_C6_REG_7,
657 1.1.1.2 christos MOD_C7_REG_7,
658 1.1 christos MOD_0F01_REG_0,
659 1.1 christos MOD_0F01_REG_1,
660 1.1 christos MOD_0F01_REG_2,
661 1.1 christos MOD_0F01_REG_3,
662 1.1 christos MOD_0F01_REG_7,
663 1.1 christos MOD_0F12_PREFIX_0,
664 1.1 christos MOD_0F13,
665 1.1 christos MOD_0F16_PREFIX_0,
666 1.1 christos MOD_0F17,
667 1.1 christos MOD_0F18_REG_0,
668 1.1 christos MOD_0F18_REG_1,
669 1.1 christos MOD_0F18_REG_2,
670 1.1 christos MOD_0F18_REG_3,
671 1.1.1.2 christos MOD_0F18_REG_4,
672 1.1.1.2 christos MOD_0F18_REG_5,
673 1.1.1.2 christos MOD_0F18_REG_6,
674 1.1.1.2 christos MOD_0F18_REG_7,
675 1.1 christos MOD_0F20,
676 1.1 christos MOD_0F21,
677 1.1 christos MOD_0F22,
678 1.1 christos MOD_0F23,
679 1.1 christos MOD_0F24,
680 1.1 christos MOD_0F26,
681 1.1 christos MOD_0F2B_PREFIX_0,
682 1.1 christos MOD_0F2B_PREFIX_1,
683 1.1 christos MOD_0F2B_PREFIX_2,
684 1.1 christos MOD_0F2B_PREFIX_3,
685 1.1 christos MOD_0F51,
686 1.1 christos MOD_0F71_REG_2,
687 1.1 christos MOD_0F71_REG_4,
688 1.1 christos MOD_0F71_REG_6,
689 1.1 christos MOD_0F72_REG_2,
690 1.1 christos MOD_0F72_REG_4,
691 1.1 christos MOD_0F72_REG_6,
692 1.1 christos MOD_0F73_REG_2,
693 1.1 christos MOD_0F73_REG_3,
694 1.1 christos MOD_0F73_REG_6,
695 1.1 christos MOD_0F73_REG_7,
696 1.1 christos MOD_0FAE_REG_0,
697 1.1 christos MOD_0FAE_REG_1,
698 1.1 christos MOD_0FAE_REG_2,
699 1.1 christos MOD_0FAE_REG_3,
700 1.1 christos MOD_0FAE_REG_4,
701 1.1 christos MOD_0FAE_REG_5,
702 1.1 christos MOD_0FAE_REG_6,
703 1.1 christos MOD_0FAE_REG_7,
704 1.1 christos MOD_0FB2,
705 1.1 christos MOD_0FB4,
706 1.1 christos MOD_0FB5,
707 1.1 christos MOD_0FC7_REG_6,
708 1.1 christos MOD_0FC7_REG_7,
709 1.1 christos MOD_0FD7,
710 1.1 christos MOD_0FE7_PREFIX_2,
711 1.1 christos MOD_0FF0_PREFIX_3,
712 1.1 christos MOD_0F382A_PREFIX_2,
713 1.1 christos MOD_62_32BIT,
714 1.1 christos MOD_C4_32BIT,
715 1.1 christos MOD_C5_32BIT,
716 1.1 christos MOD_VEX_0F12_PREFIX_0,
717 1.1 christos MOD_VEX_0F13,
718 1.1 christos MOD_VEX_0F16_PREFIX_0,
719 1.1 christos MOD_VEX_0F17,
720 1.1 christos MOD_VEX_0F2B,
721 1.1 christos MOD_VEX_0F50,
722 1.1 christos MOD_VEX_0F71_REG_2,
723 1.1 christos MOD_VEX_0F71_REG_4,
724 1.1 christos MOD_VEX_0F71_REG_6,
725 1.1 christos MOD_VEX_0F72_REG_2,
726 1.1 christos MOD_VEX_0F72_REG_4,
727 1.1 christos MOD_VEX_0F72_REG_6,
728 1.1 christos MOD_VEX_0F73_REG_2,
729 1.1 christos MOD_VEX_0F73_REG_3,
730 1.1 christos MOD_VEX_0F73_REG_6,
731 1.1 christos MOD_VEX_0F73_REG_7,
732 1.1 christos MOD_VEX_0FAE_REG_2,
733 1.1 christos MOD_VEX_0FAE_REG_3,
734 1.1 christos MOD_VEX_0FD7_PREFIX_2,
735 1.1 christos MOD_VEX_0FE7_PREFIX_2,
736 1.1 christos MOD_VEX_0FF0_PREFIX_3,
737 1.1 christos MOD_VEX_0F381A_PREFIX_2,
738 1.1 christos MOD_VEX_0F382A_PREFIX_2,
739 1.1 christos MOD_VEX_0F382C_PREFIX_2,
740 1.1 christos MOD_VEX_0F382D_PREFIX_2,
741 1.1 christos MOD_VEX_0F382E_PREFIX_2,
742 1.1.1.2 christos MOD_VEX_0F382F_PREFIX_2,
743 1.1.1.2 christos MOD_VEX_0F385A_PREFIX_2,
744 1.1.1.2 christos MOD_VEX_0F388C_PREFIX_2,
745 1.1.1.2 christos MOD_VEX_0F388E_PREFIX_2,
746 1.1 christos };
747 1.1 christos
748 1.1 christos enum
749 1.1 christos {
750 1.1.1.2 christos RM_C6_REG_7 = 0,
751 1.1.1.2 christos RM_C7_REG_7,
752 1.1.1.2 christos RM_0F01_REG_0,
753 1.1 christos RM_0F01_REG_1,
754 1.1 christos RM_0F01_REG_2,
755 1.1 christos RM_0F01_REG_3,
756 1.1 christos RM_0F01_REG_7,
757 1.1 christos RM_0FAE_REG_5,
758 1.1 christos RM_0FAE_REG_6,
759 1.1 christos RM_0FAE_REG_7
760 1.1 christos };
761 1.1 christos
762 1.1 christos enum
763 1.1 christos {
764 1.1 christos PREFIX_90 = 0,
765 1.1 christos PREFIX_0F10,
766 1.1 christos PREFIX_0F11,
767 1.1 christos PREFIX_0F12,
768 1.1 christos PREFIX_0F16,
769 1.1 christos PREFIX_0F2A,
770 1.1 christos PREFIX_0F2B,
771 1.1 christos PREFIX_0F2C,
772 1.1 christos PREFIX_0F2D,
773 1.1 christos PREFIX_0F2E,
774 1.1 christos PREFIX_0F2F,
775 1.1 christos PREFIX_0F51,
776 1.1 christos PREFIX_0F52,
777 1.1 christos PREFIX_0F53,
778 1.1 christos PREFIX_0F58,
779 1.1 christos PREFIX_0F59,
780 1.1 christos PREFIX_0F5A,
781 1.1 christos PREFIX_0F5B,
782 1.1 christos PREFIX_0F5C,
783 1.1 christos PREFIX_0F5D,
784 1.1 christos PREFIX_0F5E,
785 1.1 christos PREFIX_0F5F,
786 1.1 christos PREFIX_0F60,
787 1.1 christos PREFIX_0F61,
788 1.1 christos PREFIX_0F62,
789 1.1 christos PREFIX_0F6C,
790 1.1 christos PREFIX_0F6D,
791 1.1 christos PREFIX_0F6F,
792 1.1 christos PREFIX_0F70,
793 1.1 christos PREFIX_0F73_REG_3,
794 1.1 christos PREFIX_0F73_REG_7,
795 1.1 christos PREFIX_0F78,
796 1.1 christos PREFIX_0F79,
797 1.1 christos PREFIX_0F7C,
798 1.1 christos PREFIX_0F7D,
799 1.1 christos PREFIX_0F7E,
800 1.1 christos PREFIX_0F7F,
801 1.1 christos PREFIX_0FAE_REG_0,
802 1.1 christos PREFIX_0FAE_REG_1,
803 1.1 christos PREFIX_0FAE_REG_2,
804 1.1 christos PREFIX_0FAE_REG_3,
805 1.1 christos PREFIX_0FB8,
806 1.1 christos PREFIX_0FBC,
807 1.1 christos PREFIX_0FBD,
808 1.1 christos PREFIX_0FC2,
809 1.1 christos PREFIX_0FC3,
810 1.1 christos PREFIX_0FC7_REG_6,
811 1.1 christos PREFIX_0FD0,
812 1.1 christos PREFIX_0FD6,
813 1.1 christos PREFIX_0FE6,
814 1.1 christos PREFIX_0FE7,
815 1.1 christos PREFIX_0FF0,
816 1.1 christos PREFIX_0FF7,
817 1.1 christos PREFIX_0F3810,
818 1.1 christos PREFIX_0F3814,
819 1.1 christos PREFIX_0F3815,
820 1.1 christos PREFIX_0F3817,
821 1.1 christos PREFIX_0F3820,
822 1.1 christos PREFIX_0F3821,
823 1.1 christos PREFIX_0F3822,
824 1.1 christos PREFIX_0F3823,
825 1.1 christos PREFIX_0F3824,
826 1.1 christos PREFIX_0F3825,
827 1.1 christos PREFIX_0F3828,
828 1.1 christos PREFIX_0F3829,
829 1.1 christos PREFIX_0F382A,
830 1.1 christos PREFIX_0F382B,
831 1.1 christos PREFIX_0F3830,
832 1.1 christos PREFIX_0F3831,
833 1.1 christos PREFIX_0F3832,
834 1.1 christos PREFIX_0F3833,
835 1.1 christos PREFIX_0F3834,
836 1.1 christos PREFIX_0F3835,
837 1.1 christos PREFIX_0F3837,
838 1.1 christos PREFIX_0F3838,
839 1.1 christos PREFIX_0F3839,
840 1.1 christos PREFIX_0F383A,
841 1.1 christos PREFIX_0F383B,
842 1.1 christos PREFIX_0F383C,
843 1.1 christos PREFIX_0F383D,
844 1.1 christos PREFIX_0F383E,
845 1.1 christos PREFIX_0F383F,
846 1.1 christos PREFIX_0F3840,
847 1.1 christos PREFIX_0F3841,
848 1.1 christos PREFIX_0F3880,
849 1.1 christos PREFIX_0F3881,
850 1.1.1.2 christos PREFIX_0F3882,
851 1.1 christos PREFIX_0F38DB,
852 1.1 christos PREFIX_0F38DC,
853 1.1 christos PREFIX_0F38DD,
854 1.1 christos PREFIX_0F38DE,
855 1.1 christos PREFIX_0F38DF,
856 1.1 christos PREFIX_0F38F0,
857 1.1 christos PREFIX_0F38F1,
858 1.1.1.2 christos PREFIX_0F38F6,
859 1.1 christos PREFIX_0F3A08,
860 1.1 christos PREFIX_0F3A09,
861 1.1 christos PREFIX_0F3A0A,
862 1.1 christos PREFIX_0F3A0B,
863 1.1 christos PREFIX_0F3A0C,
864 1.1 christos PREFIX_0F3A0D,
865 1.1 christos PREFIX_0F3A0E,
866 1.1 christos PREFIX_0F3A14,
867 1.1 christos PREFIX_0F3A15,
868 1.1 christos PREFIX_0F3A16,
869 1.1 christos PREFIX_0F3A17,
870 1.1 christos PREFIX_0F3A20,
871 1.1 christos PREFIX_0F3A21,
872 1.1 christos PREFIX_0F3A22,
873 1.1 christos PREFIX_0F3A40,
874 1.1 christos PREFIX_0F3A41,
875 1.1 christos PREFIX_0F3A42,
876 1.1 christos PREFIX_0F3A44,
877 1.1 christos PREFIX_0F3A60,
878 1.1 christos PREFIX_0F3A61,
879 1.1 christos PREFIX_0F3A62,
880 1.1 christos PREFIX_0F3A63,
881 1.1 christos PREFIX_0F3ADF,
882 1.1 christos PREFIX_VEX_0F10,
883 1.1 christos PREFIX_VEX_0F11,
884 1.1 christos PREFIX_VEX_0F12,
885 1.1 christos PREFIX_VEX_0F16,
886 1.1 christos PREFIX_VEX_0F2A,
887 1.1 christos PREFIX_VEX_0F2C,
888 1.1 christos PREFIX_VEX_0F2D,
889 1.1 christos PREFIX_VEX_0F2E,
890 1.1 christos PREFIX_VEX_0F2F,
891 1.1 christos PREFIX_VEX_0F51,
892 1.1 christos PREFIX_VEX_0F52,
893 1.1 christos PREFIX_VEX_0F53,
894 1.1 christos PREFIX_VEX_0F58,
895 1.1 christos PREFIX_VEX_0F59,
896 1.1 christos PREFIX_VEX_0F5A,
897 1.1 christos PREFIX_VEX_0F5B,
898 1.1 christos PREFIX_VEX_0F5C,
899 1.1 christos PREFIX_VEX_0F5D,
900 1.1 christos PREFIX_VEX_0F5E,
901 1.1 christos PREFIX_VEX_0F5F,
902 1.1 christos PREFIX_VEX_0F60,
903 1.1 christos PREFIX_VEX_0F61,
904 1.1 christos PREFIX_VEX_0F62,
905 1.1 christos PREFIX_VEX_0F63,
906 1.1 christos PREFIX_VEX_0F64,
907 1.1 christos PREFIX_VEX_0F65,
908 1.1 christos PREFIX_VEX_0F66,
909 1.1 christos PREFIX_VEX_0F67,
910 1.1 christos PREFIX_VEX_0F68,
911 1.1 christos PREFIX_VEX_0F69,
912 1.1 christos PREFIX_VEX_0F6A,
913 1.1 christos PREFIX_VEX_0F6B,
914 1.1 christos PREFIX_VEX_0F6C,
915 1.1 christos PREFIX_VEX_0F6D,
916 1.1 christos PREFIX_VEX_0F6E,
917 1.1 christos PREFIX_VEX_0F6F,
918 1.1 christos PREFIX_VEX_0F70,
919 1.1 christos PREFIX_VEX_0F71_REG_2,
920 1.1 christos PREFIX_VEX_0F71_REG_4,
921 1.1 christos PREFIX_VEX_0F71_REG_6,
922 1.1 christos PREFIX_VEX_0F72_REG_2,
923 1.1 christos PREFIX_VEX_0F72_REG_4,
924 1.1 christos PREFIX_VEX_0F72_REG_6,
925 1.1 christos PREFIX_VEX_0F73_REG_2,
926 1.1 christos PREFIX_VEX_0F73_REG_3,
927 1.1 christos PREFIX_VEX_0F73_REG_6,
928 1.1 christos PREFIX_VEX_0F73_REG_7,
929 1.1 christos PREFIX_VEX_0F74,
930 1.1 christos PREFIX_VEX_0F75,
931 1.1 christos PREFIX_VEX_0F76,
932 1.1 christos PREFIX_VEX_0F77,
933 1.1 christos PREFIX_VEX_0F7C,
934 1.1 christos PREFIX_VEX_0F7D,
935 1.1 christos PREFIX_VEX_0F7E,
936 1.1 christos PREFIX_VEX_0F7F,
937 1.1 christos PREFIX_VEX_0FC2,
938 1.1 christos PREFIX_VEX_0FC4,
939 1.1 christos PREFIX_VEX_0FC5,
940 1.1 christos PREFIX_VEX_0FD0,
941 1.1 christos PREFIX_VEX_0FD1,
942 1.1 christos PREFIX_VEX_0FD2,
943 1.1 christos PREFIX_VEX_0FD3,
944 1.1 christos PREFIX_VEX_0FD4,
945 1.1 christos PREFIX_VEX_0FD5,
946 1.1 christos PREFIX_VEX_0FD6,
947 1.1 christos PREFIX_VEX_0FD7,
948 1.1 christos PREFIX_VEX_0FD8,
949 1.1 christos PREFIX_VEX_0FD9,
950 1.1 christos PREFIX_VEX_0FDA,
951 1.1 christos PREFIX_VEX_0FDB,
952 1.1 christos PREFIX_VEX_0FDC,
953 1.1 christos PREFIX_VEX_0FDD,
954 1.1 christos PREFIX_VEX_0FDE,
955 1.1 christos PREFIX_VEX_0FDF,
956 1.1 christos PREFIX_VEX_0FE0,
957 1.1 christos PREFIX_VEX_0FE1,
958 1.1 christos PREFIX_VEX_0FE2,
959 1.1 christos PREFIX_VEX_0FE3,
960 1.1 christos PREFIX_VEX_0FE4,
961 1.1 christos PREFIX_VEX_0FE5,
962 1.1 christos PREFIX_VEX_0FE6,
963 1.1 christos PREFIX_VEX_0FE7,
964 1.1 christos PREFIX_VEX_0FE8,
965 1.1 christos PREFIX_VEX_0FE9,
966 1.1 christos PREFIX_VEX_0FEA,
967 1.1 christos PREFIX_VEX_0FEB,
968 1.1 christos PREFIX_VEX_0FEC,
969 1.1 christos PREFIX_VEX_0FED,
970 1.1 christos PREFIX_VEX_0FEE,
971 1.1 christos PREFIX_VEX_0FEF,
972 1.1 christos PREFIX_VEX_0FF0,
973 1.1 christos PREFIX_VEX_0FF1,
974 1.1 christos PREFIX_VEX_0FF2,
975 1.1 christos PREFIX_VEX_0FF3,
976 1.1 christos PREFIX_VEX_0FF4,
977 1.1 christos PREFIX_VEX_0FF5,
978 1.1 christos PREFIX_VEX_0FF6,
979 1.1 christos PREFIX_VEX_0FF7,
980 1.1 christos PREFIX_VEX_0FF8,
981 1.1 christos PREFIX_VEX_0FF9,
982 1.1 christos PREFIX_VEX_0FFA,
983 1.1 christos PREFIX_VEX_0FFB,
984 1.1 christos PREFIX_VEX_0FFC,
985 1.1 christos PREFIX_VEX_0FFD,
986 1.1 christos PREFIX_VEX_0FFE,
987 1.1 christos PREFIX_VEX_0F3800,
988 1.1 christos PREFIX_VEX_0F3801,
989 1.1 christos PREFIX_VEX_0F3802,
990 1.1 christos PREFIX_VEX_0F3803,
991 1.1 christos PREFIX_VEX_0F3804,
992 1.1 christos PREFIX_VEX_0F3805,
993 1.1 christos PREFIX_VEX_0F3806,
994 1.1 christos PREFIX_VEX_0F3807,
995 1.1 christos PREFIX_VEX_0F3808,
996 1.1 christos PREFIX_VEX_0F3809,
997 1.1 christos PREFIX_VEX_0F380A,
998 1.1 christos PREFIX_VEX_0F380B,
999 1.1 christos PREFIX_VEX_0F380C,
1000 1.1 christos PREFIX_VEX_0F380D,
1001 1.1 christos PREFIX_VEX_0F380E,
1002 1.1 christos PREFIX_VEX_0F380F,
1003 1.1 christos PREFIX_VEX_0F3813,
1004 1.1.1.2 christos PREFIX_VEX_0F3816,
1005 1.1 christos PREFIX_VEX_0F3817,
1006 1.1 christos PREFIX_VEX_0F3818,
1007 1.1 christos PREFIX_VEX_0F3819,
1008 1.1 christos PREFIX_VEX_0F381A,
1009 1.1 christos PREFIX_VEX_0F381C,
1010 1.1 christos PREFIX_VEX_0F381D,
1011 1.1 christos PREFIX_VEX_0F381E,
1012 1.1 christos PREFIX_VEX_0F3820,
1013 1.1 christos PREFIX_VEX_0F3821,
1014 1.1 christos PREFIX_VEX_0F3822,
1015 1.1 christos PREFIX_VEX_0F3823,
1016 1.1 christos PREFIX_VEX_0F3824,
1017 1.1 christos PREFIX_VEX_0F3825,
1018 1.1 christos PREFIX_VEX_0F3828,
1019 1.1 christos PREFIX_VEX_0F3829,
1020 1.1 christos PREFIX_VEX_0F382A,
1021 1.1 christos PREFIX_VEX_0F382B,
1022 1.1 christos PREFIX_VEX_0F382C,
1023 1.1 christos PREFIX_VEX_0F382D,
1024 1.1 christos PREFIX_VEX_0F382E,
1025 1.1 christos PREFIX_VEX_0F382F,
1026 1.1 christos PREFIX_VEX_0F3830,
1027 1.1 christos PREFIX_VEX_0F3831,
1028 1.1 christos PREFIX_VEX_0F3832,
1029 1.1 christos PREFIX_VEX_0F3833,
1030 1.1 christos PREFIX_VEX_0F3834,
1031 1.1 christos PREFIX_VEX_0F3835,
1032 1.1.1.2 christos PREFIX_VEX_0F3836,
1033 1.1 christos PREFIX_VEX_0F3837,
1034 1.1 christos PREFIX_VEX_0F3838,
1035 1.1 christos PREFIX_VEX_0F3839,
1036 1.1 christos PREFIX_VEX_0F383A,
1037 1.1 christos PREFIX_VEX_0F383B,
1038 1.1 christos PREFIX_VEX_0F383C,
1039 1.1 christos PREFIX_VEX_0F383D,
1040 1.1 christos PREFIX_VEX_0F383E,
1041 1.1 christos PREFIX_VEX_0F383F,
1042 1.1 christos PREFIX_VEX_0F3840,
1043 1.1 christos PREFIX_VEX_0F3841,
1044 1.1.1.2 christos PREFIX_VEX_0F3845,
1045 1.1.1.2 christos PREFIX_VEX_0F3846,
1046 1.1.1.2 christos PREFIX_VEX_0F3847,
1047 1.1.1.2 christos PREFIX_VEX_0F3858,
1048 1.1.1.2 christos PREFIX_VEX_0F3859,
1049 1.1.1.2 christos PREFIX_VEX_0F385A,
1050 1.1.1.2 christos PREFIX_VEX_0F3878,
1051 1.1.1.2 christos PREFIX_VEX_0F3879,
1052 1.1.1.2 christos PREFIX_VEX_0F388C,
1053 1.1.1.2 christos PREFIX_VEX_0F388E,
1054 1.1.1.2 christos PREFIX_VEX_0F3890,
1055 1.1.1.2 christos PREFIX_VEX_0F3891,
1056 1.1.1.2 christos PREFIX_VEX_0F3892,
1057 1.1.1.2 christos PREFIX_VEX_0F3893,
1058 1.1 christos PREFIX_VEX_0F3896,
1059 1.1 christos PREFIX_VEX_0F3897,
1060 1.1 christos PREFIX_VEX_0F3898,
1061 1.1 christos PREFIX_VEX_0F3899,
1062 1.1 christos PREFIX_VEX_0F389A,
1063 1.1 christos PREFIX_VEX_0F389B,
1064 1.1 christos PREFIX_VEX_0F389C,
1065 1.1 christos PREFIX_VEX_0F389D,
1066 1.1 christos PREFIX_VEX_0F389E,
1067 1.1 christos PREFIX_VEX_0F389F,
1068 1.1 christos PREFIX_VEX_0F38A6,
1069 1.1 christos PREFIX_VEX_0F38A7,
1070 1.1 christos PREFIX_VEX_0F38A8,
1071 1.1 christos PREFIX_VEX_0F38A9,
1072 1.1 christos PREFIX_VEX_0F38AA,
1073 1.1 christos PREFIX_VEX_0F38AB,
1074 1.1 christos PREFIX_VEX_0F38AC,
1075 1.1 christos PREFIX_VEX_0F38AD,
1076 1.1 christos PREFIX_VEX_0F38AE,
1077 1.1 christos PREFIX_VEX_0F38AF,
1078 1.1 christos PREFIX_VEX_0F38B6,
1079 1.1 christos PREFIX_VEX_0F38B7,
1080 1.1 christos PREFIX_VEX_0F38B8,
1081 1.1 christos PREFIX_VEX_0F38B9,
1082 1.1 christos PREFIX_VEX_0F38BA,
1083 1.1 christos PREFIX_VEX_0F38BB,
1084 1.1 christos PREFIX_VEX_0F38BC,
1085 1.1 christos PREFIX_VEX_0F38BD,
1086 1.1 christos PREFIX_VEX_0F38BE,
1087 1.1 christos PREFIX_VEX_0F38BF,
1088 1.1 christos PREFIX_VEX_0F38DB,
1089 1.1 christos PREFIX_VEX_0F38DC,
1090 1.1 christos PREFIX_VEX_0F38DD,
1091 1.1 christos PREFIX_VEX_0F38DE,
1092 1.1 christos PREFIX_VEX_0F38DF,
1093 1.1 christos PREFIX_VEX_0F38F2,
1094 1.1 christos PREFIX_VEX_0F38F3_REG_1,
1095 1.1 christos PREFIX_VEX_0F38F3_REG_2,
1096 1.1 christos PREFIX_VEX_0F38F3_REG_3,
1097 1.1.1.2 christos PREFIX_VEX_0F38F5,
1098 1.1.1.2 christos PREFIX_VEX_0F38F6,
1099 1.1 christos PREFIX_VEX_0F38F7,
1100 1.1.1.2 christos PREFIX_VEX_0F3A00,
1101 1.1.1.2 christos PREFIX_VEX_0F3A01,
1102 1.1.1.2 christos PREFIX_VEX_0F3A02,
1103 1.1 christos PREFIX_VEX_0F3A04,
1104 1.1 christos PREFIX_VEX_0F3A05,
1105 1.1 christos PREFIX_VEX_0F3A06,
1106 1.1 christos PREFIX_VEX_0F3A08,
1107 1.1 christos PREFIX_VEX_0F3A09,
1108 1.1 christos PREFIX_VEX_0F3A0A,
1109 1.1 christos PREFIX_VEX_0F3A0B,
1110 1.1 christos PREFIX_VEX_0F3A0C,
1111 1.1 christos PREFIX_VEX_0F3A0D,
1112 1.1 christos PREFIX_VEX_0F3A0E,
1113 1.1 christos PREFIX_VEX_0F3A0F,
1114 1.1 christos PREFIX_VEX_0F3A14,
1115 1.1 christos PREFIX_VEX_0F3A15,
1116 1.1 christos PREFIX_VEX_0F3A16,
1117 1.1 christos PREFIX_VEX_0F3A17,
1118 1.1 christos PREFIX_VEX_0F3A18,
1119 1.1 christos PREFIX_VEX_0F3A19,
1120 1.1 christos PREFIX_VEX_0F3A1D,
1121 1.1 christos PREFIX_VEX_0F3A20,
1122 1.1 christos PREFIX_VEX_0F3A21,
1123 1.1 christos PREFIX_VEX_0F3A22,
1124 1.1.1.2 christos PREFIX_VEX_0F3A38,
1125 1.1.1.2 christos PREFIX_VEX_0F3A39,
1126 1.1 christos PREFIX_VEX_0F3A40,
1127 1.1 christos PREFIX_VEX_0F3A41,
1128 1.1 christos PREFIX_VEX_0F3A42,
1129 1.1 christos PREFIX_VEX_0F3A44,
1130 1.1.1.2 christos PREFIX_VEX_0F3A46,
1131 1.1 christos PREFIX_VEX_0F3A48,
1132 1.1 christos PREFIX_VEX_0F3A49,
1133 1.1 christos PREFIX_VEX_0F3A4A,
1134 1.1 christos PREFIX_VEX_0F3A4B,
1135 1.1 christos PREFIX_VEX_0F3A4C,
1136 1.1 christos PREFIX_VEX_0F3A5C,
1137 1.1 christos PREFIX_VEX_0F3A5D,
1138 1.1 christos PREFIX_VEX_0F3A5E,
1139 1.1 christos PREFIX_VEX_0F3A5F,
1140 1.1 christos PREFIX_VEX_0F3A60,
1141 1.1 christos PREFIX_VEX_0F3A61,
1142 1.1 christos PREFIX_VEX_0F3A62,
1143 1.1 christos PREFIX_VEX_0F3A63,
1144 1.1 christos PREFIX_VEX_0F3A68,
1145 1.1 christos PREFIX_VEX_0F3A69,
1146 1.1 christos PREFIX_VEX_0F3A6A,
1147 1.1 christos PREFIX_VEX_0F3A6B,
1148 1.1 christos PREFIX_VEX_0F3A6C,
1149 1.1 christos PREFIX_VEX_0F3A6D,
1150 1.1 christos PREFIX_VEX_0F3A6E,
1151 1.1 christos PREFIX_VEX_0F3A6F,
1152 1.1 christos PREFIX_VEX_0F3A78,
1153 1.1 christos PREFIX_VEX_0F3A79,
1154 1.1 christos PREFIX_VEX_0F3A7A,
1155 1.1 christos PREFIX_VEX_0F3A7B,
1156 1.1 christos PREFIX_VEX_0F3A7C,
1157 1.1 christos PREFIX_VEX_0F3A7D,
1158 1.1 christos PREFIX_VEX_0F3A7E,
1159 1.1 christos PREFIX_VEX_0F3A7F,
1160 1.1.1.2 christos PREFIX_VEX_0F3ADF,
1161 1.1.1.2 christos PREFIX_VEX_0F3AF0
1162 1.1 christos };
1163 1.1 christos
1164 1.1 christos enum
1165 1.1 christos {
1166 1.1 christos X86_64_06 = 0,
1167 1.1 christos X86_64_07,
1168 1.1 christos X86_64_0D,
1169 1.1 christos X86_64_16,
1170 1.1 christos X86_64_17,
1171 1.1 christos X86_64_1E,
1172 1.1 christos X86_64_1F,
1173 1.1 christos X86_64_27,
1174 1.1 christos X86_64_2F,
1175 1.1 christos X86_64_37,
1176 1.1 christos X86_64_3F,
1177 1.1 christos X86_64_60,
1178 1.1 christos X86_64_61,
1179 1.1 christos X86_64_62,
1180 1.1 christos X86_64_63,
1181 1.1 christos X86_64_6D,
1182 1.1 christos X86_64_6F,
1183 1.1 christos X86_64_9A,
1184 1.1 christos X86_64_C4,
1185 1.1 christos X86_64_C5,
1186 1.1 christos X86_64_CE,
1187 1.1 christos X86_64_D4,
1188 1.1 christos X86_64_D5,
1189 1.1 christos X86_64_EA,
1190 1.1 christos X86_64_0F01_REG_0,
1191 1.1 christos X86_64_0F01_REG_1,
1192 1.1 christos X86_64_0F01_REG_2,
1193 1.1 christos X86_64_0F01_REG_3
1194 1.1 christos };
1195 1.1 christos
1196 1.1 christos enum
1197 1.1 christos {
1198 1.1 christos THREE_BYTE_0F38 = 0,
1199 1.1 christos THREE_BYTE_0F3A,
1200 1.1 christos THREE_BYTE_0F7A
1201 1.1 christos };
1202 1.1 christos
1203 1.1 christos enum
1204 1.1 christos {
1205 1.1 christos XOP_08 = 0,
1206 1.1 christos XOP_09,
1207 1.1 christos XOP_0A
1208 1.1 christos };
1209 1.1 christos
1210 1.1 christos enum
1211 1.1 christos {
1212 1.1 christos VEX_0F = 0,
1213 1.1 christos VEX_0F38,
1214 1.1 christos VEX_0F3A
1215 1.1 christos };
1216 1.1 christos
1217 1.1 christos enum
1218 1.1 christos {
1219 1.1 christos VEX_LEN_0F10_P_1 = 0,
1220 1.1 christos VEX_LEN_0F10_P_3,
1221 1.1 christos VEX_LEN_0F11_P_1,
1222 1.1 christos VEX_LEN_0F11_P_3,
1223 1.1 christos VEX_LEN_0F12_P_0_M_0,
1224 1.1 christos VEX_LEN_0F12_P_0_M_1,
1225 1.1 christos VEX_LEN_0F12_P_2,
1226 1.1 christos VEX_LEN_0F13_M_0,
1227 1.1 christos VEX_LEN_0F16_P_0_M_0,
1228 1.1 christos VEX_LEN_0F16_P_0_M_1,
1229 1.1 christos VEX_LEN_0F16_P_2,
1230 1.1 christos VEX_LEN_0F17_M_0,
1231 1.1 christos VEX_LEN_0F2A_P_1,
1232 1.1 christos VEX_LEN_0F2A_P_3,
1233 1.1 christos VEX_LEN_0F2C_P_1,
1234 1.1 christos VEX_LEN_0F2C_P_3,
1235 1.1 christos VEX_LEN_0F2D_P_1,
1236 1.1 christos VEX_LEN_0F2D_P_3,
1237 1.1 christos VEX_LEN_0F2E_P_0,
1238 1.1 christos VEX_LEN_0F2E_P_2,
1239 1.1 christos VEX_LEN_0F2F_P_0,
1240 1.1 christos VEX_LEN_0F2F_P_2,
1241 1.1 christos VEX_LEN_0F51_P_1,
1242 1.1 christos VEX_LEN_0F51_P_3,
1243 1.1 christos VEX_LEN_0F52_P_1,
1244 1.1 christos VEX_LEN_0F53_P_1,
1245 1.1 christos VEX_LEN_0F58_P_1,
1246 1.1 christos VEX_LEN_0F58_P_3,
1247 1.1 christos VEX_LEN_0F59_P_1,
1248 1.1 christos VEX_LEN_0F59_P_3,
1249 1.1 christos VEX_LEN_0F5A_P_1,
1250 1.1 christos VEX_LEN_0F5A_P_3,
1251 1.1 christos VEX_LEN_0F5C_P_1,
1252 1.1 christos VEX_LEN_0F5C_P_3,
1253 1.1 christos VEX_LEN_0F5D_P_1,
1254 1.1 christos VEX_LEN_0F5D_P_3,
1255 1.1 christos VEX_LEN_0F5E_P_1,
1256 1.1 christos VEX_LEN_0F5E_P_3,
1257 1.1 christos VEX_LEN_0F5F_P_1,
1258 1.1 christos VEX_LEN_0F5F_P_3,
1259 1.1 christos VEX_LEN_0F6E_P_2,
1260 1.1 christos VEX_LEN_0F7E_P_1,
1261 1.1 christos VEX_LEN_0F7E_P_2,
1262 1.1 christos VEX_LEN_0FAE_R_2_M_0,
1263 1.1 christos VEX_LEN_0FAE_R_3_M_0,
1264 1.1 christos VEX_LEN_0FC2_P_1,
1265 1.1 christos VEX_LEN_0FC2_P_3,
1266 1.1 christos VEX_LEN_0FC4_P_2,
1267 1.1 christos VEX_LEN_0FC5_P_2,
1268 1.1 christos VEX_LEN_0FD6_P_2,
1269 1.1 christos VEX_LEN_0FF7_P_2,
1270 1.1.1.2 christos VEX_LEN_0F3816_P_2,
1271 1.1.1.2 christos VEX_LEN_0F3819_P_2,
1272 1.1 christos VEX_LEN_0F381A_P_2_M_0,
1273 1.1.1.2 christos VEX_LEN_0F3836_P_2,
1274 1.1 christos VEX_LEN_0F3841_P_2,
1275 1.1.1.2 christos VEX_LEN_0F385A_P_2_M_0,
1276 1.1 christos VEX_LEN_0F38DB_P_2,
1277 1.1 christos VEX_LEN_0F38DC_P_2,
1278 1.1 christos VEX_LEN_0F38DD_P_2,
1279 1.1 christos VEX_LEN_0F38DE_P_2,
1280 1.1 christos VEX_LEN_0F38DF_P_2,
1281 1.1 christos VEX_LEN_0F38F2_P_0,
1282 1.1 christos VEX_LEN_0F38F3_R_1_P_0,
1283 1.1 christos VEX_LEN_0F38F3_R_2_P_0,
1284 1.1 christos VEX_LEN_0F38F3_R_3_P_0,
1285 1.1.1.2 christos VEX_LEN_0F38F5_P_0,
1286 1.1.1.2 christos VEX_LEN_0F38F5_P_1,
1287 1.1.1.2 christos VEX_LEN_0F38F5_P_3,
1288 1.1.1.2 christos VEX_LEN_0F38F6_P_3,
1289 1.1 christos VEX_LEN_0F38F7_P_0,
1290 1.1.1.2 christos VEX_LEN_0F38F7_P_1,
1291 1.1.1.2 christos VEX_LEN_0F38F7_P_2,
1292 1.1.1.2 christos VEX_LEN_0F38F7_P_3,
1293 1.1.1.2 christos VEX_LEN_0F3A00_P_2,
1294 1.1.1.2 christos VEX_LEN_0F3A01_P_2,
1295 1.1 christos VEX_LEN_0F3A06_P_2,
1296 1.1 christos VEX_LEN_0F3A0A_P_2,
1297 1.1 christos VEX_LEN_0F3A0B_P_2,
1298 1.1 christos VEX_LEN_0F3A14_P_2,
1299 1.1 christos VEX_LEN_0F3A15_P_2,
1300 1.1 christos VEX_LEN_0F3A16_P_2,
1301 1.1 christos VEX_LEN_0F3A17_P_2,
1302 1.1 christos VEX_LEN_0F3A18_P_2,
1303 1.1 christos VEX_LEN_0F3A19_P_2,
1304 1.1 christos VEX_LEN_0F3A20_P_2,
1305 1.1 christos VEX_LEN_0F3A21_P_2,
1306 1.1 christos VEX_LEN_0F3A22_P_2,
1307 1.1.1.2 christos VEX_LEN_0F3A38_P_2,
1308 1.1.1.2 christos VEX_LEN_0F3A39_P_2,
1309 1.1 christos VEX_LEN_0F3A41_P_2,
1310 1.1 christos VEX_LEN_0F3A44_P_2,
1311 1.1.1.2 christos VEX_LEN_0F3A46_P_2,
1312 1.1 christos VEX_LEN_0F3A60_P_2,
1313 1.1 christos VEX_LEN_0F3A61_P_2,
1314 1.1 christos VEX_LEN_0F3A62_P_2,
1315 1.1 christos VEX_LEN_0F3A63_P_2,
1316 1.1 christos VEX_LEN_0F3A6A_P_2,
1317 1.1 christos VEX_LEN_0F3A6B_P_2,
1318 1.1 christos VEX_LEN_0F3A6E_P_2,
1319 1.1 christos VEX_LEN_0F3A6F_P_2,
1320 1.1 christos VEX_LEN_0F3A7A_P_2,
1321 1.1 christos VEX_LEN_0F3A7B_P_2,
1322 1.1 christos VEX_LEN_0F3A7E_P_2,
1323 1.1 christos VEX_LEN_0F3A7F_P_2,
1324 1.1 christos VEX_LEN_0F3ADF_P_2,
1325 1.1.1.2 christos VEX_LEN_0F3AF0_P_3,
1326 1.1.1.2 christos VEX_LEN_0FXOP_08_CC,
1327 1.1.1.2 christos VEX_LEN_0FXOP_08_CD,
1328 1.1.1.2 christos VEX_LEN_0FXOP_08_CE,
1329 1.1.1.2 christos VEX_LEN_0FXOP_08_CF,
1330 1.1.1.2 christos VEX_LEN_0FXOP_08_EC,
1331 1.1.1.2 christos VEX_LEN_0FXOP_08_ED,
1332 1.1.1.2 christos VEX_LEN_0FXOP_08_EE,
1333 1.1.1.2 christos VEX_LEN_0FXOP_08_EF,
1334 1.1 christos VEX_LEN_0FXOP_09_80,
1335 1.1 christos VEX_LEN_0FXOP_09_81
1336 1.1 christos };
1337 1.1 christos
1338 1.1 christos enum
1339 1.1 christos {
1340 1.1 christos VEX_W_0F10_P_0 = 0,
1341 1.1 christos VEX_W_0F10_P_1,
1342 1.1 christos VEX_W_0F10_P_2,
1343 1.1 christos VEX_W_0F10_P_3,
1344 1.1 christos VEX_W_0F11_P_0,
1345 1.1 christos VEX_W_0F11_P_1,
1346 1.1 christos VEX_W_0F11_P_2,
1347 1.1 christos VEX_W_0F11_P_3,
1348 1.1 christos VEX_W_0F12_P_0_M_0,
1349 1.1 christos VEX_W_0F12_P_0_M_1,
1350 1.1 christos VEX_W_0F12_P_1,
1351 1.1 christos VEX_W_0F12_P_2,
1352 1.1 christos VEX_W_0F12_P_3,
1353 1.1 christos VEX_W_0F13_M_0,
1354 1.1 christos VEX_W_0F14,
1355 1.1 christos VEX_W_0F15,
1356 1.1 christos VEX_W_0F16_P_0_M_0,
1357 1.1 christos VEX_W_0F16_P_0_M_1,
1358 1.1 christos VEX_W_0F16_P_1,
1359 1.1 christos VEX_W_0F16_P_2,
1360 1.1 christos VEX_W_0F17_M_0,
1361 1.1 christos VEX_W_0F28,
1362 1.1 christos VEX_W_0F29,
1363 1.1 christos VEX_W_0F2B_M_0,
1364 1.1 christos VEX_W_0F2E_P_0,
1365 1.1 christos VEX_W_0F2E_P_2,
1366 1.1 christos VEX_W_0F2F_P_0,
1367 1.1 christos VEX_W_0F2F_P_2,
1368 1.1 christos VEX_W_0F50_M_0,
1369 1.1 christos VEX_W_0F51_P_0,
1370 1.1 christos VEX_W_0F51_P_1,
1371 1.1 christos VEX_W_0F51_P_2,
1372 1.1 christos VEX_W_0F51_P_3,
1373 1.1 christos VEX_W_0F52_P_0,
1374 1.1 christos VEX_W_0F52_P_1,
1375 1.1 christos VEX_W_0F53_P_0,
1376 1.1 christos VEX_W_0F53_P_1,
1377 1.1 christos VEX_W_0F58_P_0,
1378 1.1 christos VEX_W_0F58_P_1,
1379 1.1 christos VEX_W_0F58_P_2,
1380 1.1 christos VEX_W_0F58_P_3,
1381 1.1 christos VEX_W_0F59_P_0,
1382 1.1 christos VEX_W_0F59_P_1,
1383 1.1 christos VEX_W_0F59_P_2,
1384 1.1 christos VEX_W_0F59_P_3,
1385 1.1 christos VEX_W_0F5A_P_0,
1386 1.1 christos VEX_W_0F5A_P_1,
1387 1.1 christos VEX_W_0F5A_P_3,
1388 1.1 christos VEX_W_0F5B_P_0,
1389 1.1 christos VEX_W_0F5B_P_1,
1390 1.1 christos VEX_W_0F5B_P_2,
1391 1.1 christos VEX_W_0F5C_P_0,
1392 1.1 christos VEX_W_0F5C_P_1,
1393 1.1 christos VEX_W_0F5C_P_2,
1394 1.1 christos VEX_W_0F5C_P_3,
1395 1.1 christos VEX_W_0F5D_P_0,
1396 1.1 christos VEX_W_0F5D_P_1,
1397 1.1 christos VEX_W_0F5D_P_2,
1398 1.1 christos VEX_W_0F5D_P_3,
1399 1.1 christos VEX_W_0F5E_P_0,
1400 1.1 christos VEX_W_0F5E_P_1,
1401 1.1 christos VEX_W_0F5E_P_2,
1402 1.1 christos VEX_W_0F5E_P_3,
1403 1.1 christos VEX_W_0F5F_P_0,
1404 1.1 christos VEX_W_0F5F_P_1,
1405 1.1 christos VEX_W_0F5F_P_2,
1406 1.1 christos VEX_W_0F5F_P_3,
1407 1.1 christos VEX_W_0F60_P_2,
1408 1.1 christos VEX_W_0F61_P_2,
1409 1.1 christos VEX_W_0F62_P_2,
1410 1.1 christos VEX_W_0F63_P_2,
1411 1.1 christos VEX_W_0F64_P_2,
1412 1.1 christos VEX_W_0F65_P_2,
1413 1.1 christos VEX_W_0F66_P_2,
1414 1.1 christos VEX_W_0F67_P_2,
1415 1.1 christos VEX_W_0F68_P_2,
1416 1.1 christos VEX_W_0F69_P_2,
1417 1.1 christos VEX_W_0F6A_P_2,
1418 1.1 christos VEX_W_0F6B_P_2,
1419 1.1 christos VEX_W_0F6C_P_2,
1420 1.1 christos VEX_W_0F6D_P_2,
1421 1.1 christos VEX_W_0F6F_P_1,
1422 1.1 christos VEX_W_0F6F_P_2,
1423 1.1 christos VEX_W_0F70_P_1,
1424 1.1 christos VEX_W_0F70_P_2,
1425 1.1 christos VEX_W_0F70_P_3,
1426 1.1 christos VEX_W_0F71_R_2_P_2,
1427 1.1 christos VEX_W_0F71_R_4_P_2,
1428 1.1 christos VEX_W_0F71_R_6_P_2,
1429 1.1 christos VEX_W_0F72_R_2_P_2,
1430 1.1 christos VEX_W_0F72_R_4_P_2,
1431 1.1 christos VEX_W_0F72_R_6_P_2,
1432 1.1 christos VEX_W_0F73_R_2_P_2,
1433 1.1 christos VEX_W_0F73_R_3_P_2,
1434 1.1 christos VEX_W_0F73_R_6_P_2,
1435 1.1 christos VEX_W_0F73_R_7_P_2,
1436 1.1 christos VEX_W_0F74_P_2,
1437 1.1 christos VEX_W_0F75_P_2,
1438 1.1 christos VEX_W_0F76_P_2,
1439 1.1 christos VEX_W_0F77_P_0,
1440 1.1 christos VEX_W_0F7C_P_2,
1441 1.1 christos VEX_W_0F7C_P_3,
1442 1.1 christos VEX_W_0F7D_P_2,
1443 1.1 christos VEX_W_0F7D_P_3,
1444 1.1 christos VEX_W_0F7E_P_1,
1445 1.1 christos VEX_W_0F7F_P_1,
1446 1.1 christos VEX_W_0F7F_P_2,
1447 1.1 christos VEX_W_0FAE_R_2_M_0,
1448 1.1 christos VEX_W_0FAE_R_3_M_0,
1449 1.1 christos VEX_W_0FC2_P_0,
1450 1.1 christos VEX_W_0FC2_P_1,
1451 1.1 christos VEX_W_0FC2_P_2,
1452 1.1 christos VEX_W_0FC2_P_3,
1453 1.1 christos VEX_W_0FC4_P_2,
1454 1.1 christos VEX_W_0FC5_P_2,
1455 1.1 christos VEX_W_0FD0_P_2,
1456 1.1 christos VEX_W_0FD0_P_3,
1457 1.1 christos VEX_W_0FD1_P_2,
1458 1.1 christos VEX_W_0FD2_P_2,
1459 1.1 christos VEX_W_0FD3_P_2,
1460 1.1 christos VEX_W_0FD4_P_2,
1461 1.1 christos VEX_W_0FD5_P_2,
1462 1.1 christos VEX_W_0FD6_P_2,
1463 1.1 christos VEX_W_0FD7_P_2_M_1,
1464 1.1 christos VEX_W_0FD8_P_2,
1465 1.1 christos VEX_W_0FD9_P_2,
1466 1.1 christos VEX_W_0FDA_P_2,
1467 1.1 christos VEX_W_0FDB_P_2,
1468 1.1 christos VEX_W_0FDC_P_2,
1469 1.1 christos VEX_W_0FDD_P_2,
1470 1.1 christos VEX_W_0FDE_P_2,
1471 1.1 christos VEX_W_0FDF_P_2,
1472 1.1 christos VEX_W_0FE0_P_2,
1473 1.1 christos VEX_W_0FE1_P_2,
1474 1.1 christos VEX_W_0FE2_P_2,
1475 1.1 christos VEX_W_0FE3_P_2,
1476 1.1 christos VEX_W_0FE4_P_2,
1477 1.1 christos VEX_W_0FE5_P_2,
1478 1.1 christos VEX_W_0FE6_P_1,
1479 1.1 christos VEX_W_0FE6_P_2,
1480 1.1 christos VEX_W_0FE6_P_3,
1481 1.1 christos VEX_W_0FE7_P_2_M_0,
1482 1.1 christos VEX_W_0FE8_P_2,
1483 1.1 christos VEX_W_0FE9_P_2,
1484 1.1 christos VEX_W_0FEA_P_2,
1485 1.1 christos VEX_W_0FEB_P_2,
1486 1.1 christos VEX_W_0FEC_P_2,
1487 1.1 christos VEX_W_0FED_P_2,
1488 1.1 christos VEX_W_0FEE_P_2,
1489 1.1 christos VEX_W_0FEF_P_2,
1490 1.1 christos VEX_W_0FF0_P_3_M_0,
1491 1.1 christos VEX_W_0FF1_P_2,
1492 1.1 christos VEX_W_0FF2_P_2,
1493 1.1 christos VEX_W_0FF3_P_2,
1494 1.1 christos VEX_W_0FF4_P_2,
1495 1.1 christos VEX_W_0FF5_P_2,
1496 1.1 christos VEX_W_0FF6_P_2,
1497 1.1 christos VEX_W_0FF7_P_2,
1498 1.1 christos VEX_W_0FF8_P_2,
1499 1.1 christos VEX_W_0FF9_P_2,
1500 1.1 christos VEX_W_0FFA_P_2,
1501 1.1 christos VEX_W_0FFB_P_2,
1502 1.1 christos VEX_W_0FFC_P_2,
1503 1.1 christos VEX_W_0FFD_P_2,
1504 1.1 christos VEX_W_0FFE_P_2,
1505 1.1 christos VEX_W_0F3800_P_2,
1506 1.1 christos VEX_W_0F3801_P_2,
1507 1.1 christos VEX_W_0F3802_P_2,
1508 1.1 christos VEX_W_0F3803_P_2,
1509 1.1 christos VEX_W_0F3804_P_2,
1510 1.1 christos VEX_W_0F3805_P_2,
1511 1.1 christos VEX_W_0F3806_P_2,
1512 1.1 christos VEX_W_0F3807_P_2,
1513 1.1 christos VEX_W_0F3808_P_2,
1514 1.1 christos VEX_W_0F3809_P_2,
1515 1.1 christos VEX_W_0F380A_P_2,
1516 1.1 christos VEX_W_0F380B_P_2,
1517 1.1 christos VEX_W_0F380C_P_2,
1518 1.1 christos VEX_W_0F380D_P_2,
1519 1.1 christos VEX_W_0F380E_P_2,
1520 1.1 christos VEX_W_0F380F_P_2,
1521 1.1.1.2 christos VEX_W_0F3816_P_2,
1522 1.1 christos VEX_W_0F3817_P_2,
1523 1.1.1.2 christos VEX_W_0F3818_P_2,
1524 1.1.1.2 christos VEX_W_0F3819_P_2,
1525 1.1 christos VEX_W_0F381A_P_2_M_0,
1526 1.1 christos VEX_W_0F381C_P_2,
1527 1.1 christos VEX_W_0F381D_P_2,
1528 1.1 christos VEX_W_0F381E_P_2,
1529 1.1 christos VEX_W_0F3820_P_2,
1530 1.1 christos VEX_W_0F3821_P_2,
1531 1.1 christos VEX_W_0F3822_P_2,
1532 1.1 christos VEX_W_0F3823_P_2,
1533 1.1 christos VEX_W_0F3824_P_2,
1534 1.1 christos VEX_W_0F3825_P_2,
1535 1.1 christos VEX_W_0F3828_P_2,
1536 1.1 christos VEX_W_0F3829_P_2,
1537 1.1 christos VEX_W_0F382A_P_2_M_0,
1538 1.1 christos VEX_W_0F382B_P_2,
1539 1.1 christos VEX_W_0F382C_P_2_M_0,
1540 1.1 christos VEX_W_0F382D_P_2_M_0,
1541 1.1 christos VEX_W_0F382E_P_2_M_0,
1542 1.1 christos VEX_W_0F382F_P_2_M_0,
1543 1.1 christos VEX_W_0F3830_P_2,
1544 1.1 christos VEX_W_0F3831_P_2,
1545 1.1 christos VEX_W_0F3832_P_2,
1546 1.1 christos VEX_W_0F3833_P_2,
1547 1.1 christos VEX_W_0F3834_P_2,
1548 1.1 christos VEX_W_0F3835_P_2,
1549 1.1.1.2 christos VEX_W_0F3836_P_2,
1550 1.1 christos VEX_W_0F3837_P_2,
1551 1.1 christos VEX_W_0F3838_P_2,
1552 1.1 christos VEX_W_0F3839_P_2,
1553 1.1 christos VEX_W_0F383A_P_2,
1554 1.1 christos VEX_W_0F383B_P_2,
1555 1.1 christos VEX_W_0F383C_P_2,
1556 1.1 christos VEX_W_0F383D_P_2,
1557 1.1 christos VEX_W_0F383E_P_2,
1558 1.1 christos VEX_W_0F383F_P_2,
1559 1.1 christos VEX_W_0F3840_P_2,
1560 1.1 christos VEX_W_0F3841_P_2,
1561 1.1.1.2 christos VEX_W_0F3846_P_2,
1562 1.1.1.2 christos VEX_W_0F3858_P_2,
1563 1.1.1.2 christos VEX_W_0F3859_P_2,
1564 1.1.1.2 christos VEX_W_0F385A_P_2_M_0,
1565 1.1.1.2 christos VEX_W_0F3878_P_2,
1566 1.1.1.2 christos VEX_W_0F3879_P_2,
1567 1.1 christos VEX_W_0F38DB_P_2,
1568 1.1 christos VEX_W_0F38DC_P_2,
1569 1.1 christos VEX_W_0F38DD_P_2,
1570 1.1 christos VEX_W_0F38DE_P_2,
1571 1.1 christos VEX_W_0F38DF_P_2,
1572 1.1.1.2 christos VEX_W_0F3A00_P_2,
1573 1.1.1.2 christos VEX_W_0F3A01_P_2,
1574 1.1.1.2 christos VEX_W_0F3A02_P_2,
1575 1.1 christos VEX_W_0F3A04_P_2,
1576 1.1 christos VEX_W_0F3A05_P_2,
1577 1.1 christos VEX_W_0F3A06_P_2,
1578 1.1 christos VEX_W_0F3A08_P_2,
1579 1.1 christos VEX_W_0F3A09_P_2,
1580 1.1 christos VEX_W_0F3A0A_P_2,
1581 1.1 christos VEX_W_0F3A0B_P_2,
1582 1.1 christos VEX_W_0F3A0C_P_2,
1583 1.1 christos VEX_W_0F3A0D_P_2,
1584 1.1 christos VEX_W_0F3A0E_P_2,
1585 1.1 christos VEX_W_0F3A0F_P_2,
1586 1.1 christos VEX_W_0F3A14_P_2,
1587 1.1 christos VEX_W_0F3A15_P_2,
1588 1.1 christos VEX_W_0F3A18_P_2,
1589 1.1 christos VEX_W_0F3A19_P_2,
1590 1.1 christos VEX_W_0F3A20_P_2,
1591 1.1 christos VEX_W_0F3A21_P_2,
1592 1.1.1.2 christos VEX_W_0F3A38_P_2,
1593 1.1.1.2 christos VEX_W_0F3A39_P_2,
1594 1.1 christos VEX_W_0F3A40_P_2,
1595 1.1 christos VEX_W_0F3A41_P_2,
1596 1.1 christos VEX_W_0F3A42_P_2,
1597 1.1 christos VEX_W_0F3A44_P_2,
1598 1.1.1.2 christos VEX_W_0F3A46_P_2,
1599 1.1 christos VEX_W_0F3A48_P_2,
1600 1.1 christos VEX_W_0F3A49_P_2,
1601 1.1 christos VEX_W_0F3A4A_P_2,
1602 1.1 christos VEX_W_0F3A4B_P_2,
1603 1.1 christos VEX_W_0F3A4C_P_2,
1604 1.1 christos VEX_W_0F3A60_P_2,
1605 1.1 christos VEX_W_0F3A61_P_2,
1606 1.1 christos VEX_W_0F3A62_P_2,
1607 1.1 christos VEX_W_0F3A63_P_2,
1608 1.1 christos VEX_W_0F3ADF_P_2
1609 1.1 christos };
1610 1.1 christos
1611 1.1 christos typedef void (*op_rtn) (int bytemode, int sizeflag);
1612 1.1 christos
1613 1.1 christos struct dis386 {
1614 1.1 christos const char *name;
1615 1.1 christos struct
1616 1.1 christos {
1617 1.1 christos op_rtn rtn;
1618 1.1 christos int bytemode;
1619 1.1 christos } op[MAX_OPERANDS];
1620 1.1 christos };
1621 1.1 christos
1622 1.1 christos /* Upper case letters in the instruction names here are macros.
1623 1.1 christos 'A' => print 'b' if no register operands or suffix_always is true
1624 1.1 christos 'B' => print 'b' if suffix_always is true
1625 1.1 christos 'C' => print 's' or 'l' ('w' or 'd' in Intel mode) depending on operand
1626 1.1 christos size prefix
1627 1.1 christos 'D' => print 'w' if no register operands or 'w', 'l' or 'q', if
1628 1.1 christos suffix_always is true
1629 1.1 christos 'E' => print 'e' if 32-bit form of jcxz
1630 1.1 christos 'F' => print 'w' or 'l' depending on address size prefix (loop insns)
1631 1.1 christos 'G' => print 'w' or 'l' depending on operand size prefix (i/o insns)
1632 1.1 christos 'H' => print ",pt" or ",pn" branch hint
1633 1.1 christos 'I' => honor following macro letter even in Intel mode (implemented only
1634 1.1 christos for some of the macro letters)
1635 1.1 christos 'J' => print 'l'
1636 1.1 christos 'K' => print 'd' or 'q' if rex prefix is present.
1637 1.1 christos 'L' => print 'l' if suffix_always is true
1638 1.1 christos 'M' => print 'r' if intel_mnemonic is false.
1639 1.1 christos 'N' => print 'n' if instruction has no wait "prefix"
1640 1.1 christos 'O' => print 'd' or 'o' (or 'q' in Intel mode)
1641 1.1 christos 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix,
1642 1.1 christos or suffix_always is true. print 'q' if rex prefix is present.
1643 1.1 christos 'Q' => print 'w', 'l' or 'q' for memory operand or suffix_always
1644 1.1 christos is true
1645 1.1 christos 'R' => print 'w', 'l' or 'q' ('d' for 'l' and 'e' in Intel mode)
1646 1.1 christos 'S' => print 'w', 'l' or 'q' if suffix_always is true
1647 1.1 christos 'T' => print 'q' in 64bit mode and behave as 'P' otherwise
1648 1.1 christos 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise
1649 1.1 christos 'V' => print 'q' in 64bit mode and behave as 'S' otherwise
1650 1.1 christos 'W' => print 'b', 'w' or 'l' ('d' in Intel mode)
1651 1.1 christos 'X' => print 's', 'd' depending on data16 prefix (for XMM)
1652 1.1 christos 'Y' => 'q' if instruction has an REX 64bit overwrite prefix and
1653 1.1 christos suffix_always is true.
1654 1.1 christos 'Z' => print 'q' in 64bit mode and behave as 'L' otherwise
1655 1.1 christos '!' => change condition from true to false or from false to true.
1656 1.1 christos '%' => add 1 upper case letter to the macro.
1657 1.1 christos
1658 1.1 christos 2 upper case letter macros:
1659 1.1 christos "XY" => print 'x' or 'y' if no register operands or suffix_always
1660 1.1 christos is true.
1661 1.1 christos "XW" => print 's', 'd' depending on the VEX.W bit (for FMA)
1662 1.1 christos "LQ" => print 'l' ('d' in Intel mode) or 'q' for memory operand
1663 1.1 christos or suffix_always is true
1664 1.1 christos "LB" => print "abs" in 64bit mode and behave as 'B' otherwise
1665 1.1 christos "LS" => print "abs" in 64bit mode and behave as 'S' otherwise
1666 1.1 christos "LV" => print "abs" for 64bit operand and behave as 'S' otherwise
1667 1.1.1.2 christos "LW" => print 'd', 'q' depending on the VEX.W bit
1668 1.1 christos
1669 1.1 christos Many of the above letters print nothing in Intel mode. See "putop"
1670 1.1 christos for the details.
1671 1.1 christos
1672 1.1 christos Braces '{' and '}', and vertical bars '|', indicate alternative
1673 1.1 christos mnemonic strings for AT&T and Intel. */
1674 1.1 christos
1675 1.1 christos static const struct dis386 dis386[] = {
1676 1.1 christos /* 00 */
1677 1.1.1.2 christos { "addB", { Ebh1, Gb } },
1678 1.1.1.2 christos { "addS", { Evh1, Gv } },
1679 1.1 christos { "addB", { Gb, EbS } },
1680 1.1 christos { "addS", { Gv, EvS } },
1681 1.1 christos { "addB", { AL, Ib } },
1682 1.1 christos { "addS", { eAX, Iv } },
1683 1.1 christos { X86_64_TABLE (X86_64_06) },
1684 1.1 christos { X86_64_TABLE (X86_64_07) },
1685 1.1 christos /* 08 */
1686 1.1.1.2 christos { "orB", { Ebh1, Gb } },
1687 1.1.1.2 christos { "orS", { Evh1, Gv } },
1688 1.1 christos { "orB", { Gb, EbS } },
1689 1.1 christos { "orS", { Gv, EvS } },
1690 1.1 christos { "orB", { AL, Ib } },
1691 1.1 christos { "orS", { eAX, Iv } },
1692 1.1 christos { X86_64_TABLE (X86_64_0D) },
1693 1.1 christos { Bad_Opcode }, /* 0x0f extended opcode escape */
1694 1.1 christos /* 10 */
1695 1.1.1.2 christos { "adcB", { Ebh1, Gb } },
1696 1.1.1.2 christos { "adcS", { Evh1, Gv } },
1697 1.1 christos { "adcB", { Gb, EbS } },
1698 1.1 christos { "adcS", { Gv, EvS } },
1699 1.1 christos { "adcB", { AL, Ib } },
1700 1.1 christos { "adcS", { eAX, Iv } },
1701 1.1 christos { X86_64_TABLE (X86_64_16) },
1702 1.1 christos { X86_64_TABLE (X86_64_17) },
1703 1.1 christos /* 18 */
1704 1.1.1.2 christos { "sbbB", { Ebh1, Gb } },
1705 1.1.1.2 christos { "sbbS", { Evh1, Gv } },
1706 1.1 christos { "sbbB", { Gb, EbS } },
1707 1.1 christos { "sbbS", { Gv, EvS } },
1708 1.1 christos { "sbbB", { AL, Ib } },
1709 1.1 christos { "sbbS", { eAX, Iv } },
1710 1.1 christos { X86_64_TABLE (X86_64_1E) },
1711 1.1 christos { X86_64_TABLE (X86_64_1F) },
1712 1.1 christos /* 20 */
1713 1.1.1.2 christos { "andB", { Ebh1, Gb } },
1714 1.1.1.2 christos { "andS", { Evh1, Gv } },
1715 1.1 christos { "andB", { Gb, EbS } },
1716 1.1 christos { "andS", { Gv, EvS } },
1717 1.1 christos { "andB", { AL, Ib } },
1718 1.1 christos { "andS", { eAX, Iv } },
1719 1.1 christos { Bad_Opcode }, /* SEG ES prefix */
1720 1.1 christos { X86_64_TABLE (X86_64_27) },
1721 1.1 christos /* 28 */
1722 1.1.1.2 christos { "subB", { Ebh1, Gb } },
1723 1.1.1.2 christos { "subS", { Evh1, Gv } },
1724 1.1 christos { "subB", { Gb, EbS } },
1725 1.1 christos { "subS", { Gv, EvS } },
1726 1.1 christos { "subB", { AL, Ib } },
1727 1.1 christos { "subS", { eAX, Iv } },
1728 1.1 christos { Bad_Opcode }, /* SEG CS prefix */
1729 1.1 christos { X86_64_TABLE (X86_64_2F) },
1730 1.1 christos /* 30 */
1731 1.1.1.2 christos { "xorB", { Ebh1, Gb } },
1732 1.1.1.2 christos { "xorS", { Evh1, Gv } },
1733 1.1 christos { "xorB", { Gb, EbS } },
1734 1.1 christos { "xorS", { Gv, EvS } },
1735 1.1 christos { "xorB", { AL, Ib } },
1736 1.1 christos { "xorS", { eAX, Iv } },
1737 1.1 christos { Bad_Opcode }, /* SEG SS prefix */
1738 1.1 christos { X86_64_TABLE (X86_64_37) },
1739 1.1 christos /* 38 */
1740 1.1 christos { "cmpB", { Eb, Gb } },
1741 1.1 christos { "cmpS", { Ev, Gv } },
1742 1.1 christos { "cmpB", { Gb, EbS } },
1743 1.1 christos { "cmpS", { Gv, EvS } },
1744 1.1 christos { "cmpB", { AL, Ib } },
1745 1.1 christos { "cmpS", { eAX, Iv } },
1746 1.1 christos { Bad_Opcode }, /* SEG DS prefix */
1747 1.1 christos { X86_64_TABLE (X86_64_3F) },
1748 1.1 christos /* 40 */
1749 1.1 christos { "inc{S|}", { RMeAX } },
1750 1.1 christos { "inc{S|}", { RMeCX } },
1751 1.1 christos { "inc{S|}", { RMeDX } },
1752 1.1 christos { "inc{S|}", { RMeBX } },
1753 1.1 christos { "inc{S|}", { RMeSP } },
1754 1.1 christos { "inc{S|}", { RMeBP } },
1755 1.1 christos { "inc{S|}", { RMeSI } },
1756 1.1 christos { "inc{S|}", { RMeDI } },
1757 1.1 christos /* 48 */
1758 1.1 christos { "dec{S|}", { RMeAX } },
1759 1.1 christos { "dec{S|}", { RMeCX } },
1760 1.1 christos { "dec{S|}", { RMeDX } },
1761 1.1 christos { "dec{S|}", { RMeBX } },
1762 1.1 christos { "dec{S|}", { RMeSP } },
1763 1.1 christos { "dec{S|}", { RMeBP } },
1764 1.1 christos { "dec{S|}", { RMeSI } },
1765 1.1 christos { "dec{S|}", { RMeDI } },
1766 1.1 christos /* 50 */
1767 1.1 christos { "pushV", { RMrAX } },
1768 1.1 christos { "pushV", { RMrCX } },
1769 1.1 christos { "pushV", { RMrDX } },
1770 1.1 christos { "pushV", { RMrBX } },
1771 1.1 christos { "pushV", { RMrSP } },
1772 1.1 christos { "pushV", { RMrBP } },
1773 1.1 christos { "pushV", { RMrSI } },
1774 1.1 christos { "pushV", { RMrDI } },
1775 1.1 christos /* 58 */
1776 1.1 christos { "popV", { RMrAX } },
1777 1.1 christos { "popV", { RMrCX } },
1778 1.1 christos { "popV", { RMrDX } },
1779 1.1 christos { "popV", { RMrBX } },
1780 1.1 christos { "popV", { RMrSP } },
1781 1.1 christos { "popV", { RMrBP } },
1782 1.1 christos { "popV", { RMrSI } },
1783 1.1 christos { "popV", { RMrDI } },
1784 1.1 christos /* 60 */
1785 1.1 christos { X86_64_TABLE (X86_64_60) },
1786 1.1 christos { X86_64_TABLE (X86_64_61) },
1787 1.1 christos { X86_64_TABLE (X86_64_62) },
1788 1.1 christos { X86_64_TABLE (X86_64_63) },
1789 1.1 christos { Bad_Opcode }, /* seg fs */
1790 1.1 christos { Bad_Opcode }, /* seg gs */
1791 1.1 christos { Bad_Opcode }, /* op size prefix */
1792 1.1 christos { Bad_Opcode }, /* adr size prefix */
1793 1.1 christos /* 68 */
1794 1.1 christos { "pushT", { sIv } },
1795 1.1 christos { "imulS", { Gv, Ev, Iv } },
1796 1.1 christos { "pushT", { sIbT } },
1797 1.1 christos { "imulS", { Gv, Ev, sIb } },
1798 1.1 christos { "ins{b|}", { Ybr, indirDX } },
1799 1.1 christos { X86_64_TABLE (X86_64_6D) },
1800 1.1 christos { "outs{b|}", { indirDXr, Xb } },
1801 1.1 christos { X86_64_TABLE (X86_64_6F) },
1802 1.1 christos /* 70 */
1803 1.1 christos { "joH", { Jb, XX, cond_jump_flag } },
1804 1.1 christos { "jnoH", { Jb, XX, cond_jump_flag } },
1805 1.1 christos { "jbH", { Jb, XX, cond_jump_flag } },
1806 1.1 christos { "jaeH", { Jb, XX, cond_jump_flag } },
1807 1.1 christos { "jeH", { Jb, XX, cond_jump_flag } },
1808 1.1 christos { "jneH", { Jb, XX, cond_jump_flag } },
1809 1.1 christos { "jbeH", { Jb, XX, cond_jump_flag } },
1810 1.1 christos { "jaH", { Jb, XX, cond_jump_flag } },
1811 1.1 christos /* 78 */
1812 1.1 christos { "jsH", { Jb, XX, cond_jump_flag } },
1813 1.1 christos { "jnsH", { Jb, XX, cond_jump_flag } },
1814 1.1 christos { "jpH", { Jb, XX, cond_jump_flag } },
1815 1.1 christos { "jnpH", { Jb, XX, cond_jump_flag } },
1816 1.1 christos { "jlH", { Jb, XX, cond_jump_flag } },
1817 1.1 christos { "jgeH", { Jb, XX, cond_jump_flag } },
1818 1.1 christos { "jleH", { Jb, XX, cond_jump_flag } },
1819 1.1 christos { "jgH", { Jb, XX, cond_jump_flag } },
1820 1.1 christos /* 80 */
1821 1.1 christos { REG_TABLE (REG_80) },
1822 1.1 christos { REG_TABLE (REG_81) },
1823 1.1 christos { Bad_Opcode },
1824 1.1 christos { REG_TABLE (REG_82) },
1825 1.1 christos { "testB", { Eb, Gb } },
1826 1.1 christos { "testS", { Ev, Gv } },
1827 1.1.1.2 christos { "xchgB", { Ebh2, Gb } },
1828 1.1.1.2 christos { "xchgS", { Evh2, Gv } },
1829 1.1 christos /* 88 */
1830 1.1.1.2 christos { "movB", { Ebh3, Gb } },
1831 1.1.1.2 christos { "movS", { Evh3, Gv } },
1832 1.1 christos { "movB", { Gb, EbS } },
1833 1.1 christos { "movS", { Gv, EvS } },
1834 1.1 christos { "movD", { Sv, Sw } },
1835 1.1 christos { MOD_TABLE (MOD_8D) },
1836 1.1 christos { "movD", { Sw, Sv } },
1837 1.1 christos { REG_TABLE (REG_8F) },
1838 1.1 christos /* 90 */
1839 1.1 christos { PREFIX_TABLE (PREFIX_90) },
1840 1.1 christos { "xchgS", { RMeCX, eAX } },
1841 1.1 christos { "xchgS", { RMeDX, eAX } },
1842 1.1 christos { "xchgS", { RMeBX, eAX } },
1843 1.1 christos { "xchgS", { RMeSP, eAX } },
1844 1.1 christos { "xchgS", { RMeBP, eAX } },
1845 1.1 christos { "xchgS", { RMeSI, eAX } },
1846 1.1 christos { "xchgS", { RMeDI, eAX } },
1847 1.1 christos /* 98 */
1848 1.1 christos { "cW{t|}R", { XX } },
1849 1.1 christos { "cR{t|}O", { XX } },
1850 1.1 christos { X86_64_TABLE (X86_64_9A) },
1851 1.1 christos { Bad_Opcode }, /* fwait */
1852 1.1 christos { "pushfT", { XX } },
1853 1.1 christos { "popfT", { XX } },
1854 1.1 christos { "sahf", { XX } },
1855 1.1 christos { "lahf", { XX } },
1856 1.1 christos /* a0 */
1857 1.1 christos { "mov%LB", { AL, Ob } },
1858 1.1 christos { "mov%LS", { eAX, Ov } },
1859 1.1 christos { "mov%LB", { Ob, AL } },
1860 1.1 christos { "mov%LS", { Ov, eAX } },
1861 1.1 christos { "movs{b|}", { Ybr, Xb } },
1862 1.1 christos { "movs{R|}", { Yvr, Xv } },
1863 1.1 christos { "cmps{b|}", { Xb, Yb } },
1864 1.1 christos { "cmps{R|}", { Xv, Yv } },
1865 1.1 christos /* a8 */
1866 1.1 christos { "testB", { AL, Ib } },
1867 1.1 christos { "testS", { eAX, Iv } },
1868 1.1 christos { "stosB", { Ybr, AL } },
1869 1.1 christos { "stosS", { Yvr, eAX } },
1870 1.1 christos { "lodsB", { ALr, Xb } },
1871 1.1 christos { "lodsS", { eAXr, Xv } },
1872 1.1 christos { "scasB", { AL, Yb } },
1873 1.1 christos { "scasS", { eAX, Yv } },
1874 1.1 christos /* b0 */
1875 1.1 christos { "movB", { RMAL, Ib } },
1876 1.1 christos { "movB", { RMCL, Ib } },
1877 1.1 christos { "movB", { RMDL, Ib } },
1878 1.1 christos { "movB", { RMBL, Ib } },
1879 1.1 christos { "movB", { RMAH, Ib } },
1880 1.1 christos { "movB", { RMCH, Ib } },
1881 1.1 christos { "movB", { RMDH, Ib } },
1882 1.1 christos { "movB", { RMBH, Ib } },
1883 1.1 christos /* b8 */
1884 1.1 christos { "mov%LV", { RMeAX, Iv64 } },
1885 1.1 christos { "mov%LV", { RMeCX, Iv64 } },
1886 1.1 christos { "mov%LV", { RMeDX, Iv64 } },
1887 1.1 christos { "mov%LV", { RMeBX, Iv64 } },
1888 1.1 christos { "mov%LV", { RMeSP, Iv64 } },
1889 1.1 christos { "mov%LV", { RMeBP, Iv64 } },
1890 1.1 christos { "mov%LV", { RMeSI, Iv64 } },
1891 1.1 christos { "mov%LV", { RMeDI, Iv64 } },
1892 1.1 christos /* c0 */
1893 1.1 christos { REG_TABLE (REG_C0) },
1894 1.1 christos { REG_TABLE (REG_C1) },
1895 1.1 christos { "retT", { Iw } },
1896 1.1 christos { "retT", { XX } },
1897 1.1 christos { X86_64_TABLE (X86_64_C4) },
1898 1.1 christos { X86_64_TABLE (X86_64_C5) },
1899 1.1 christos { REG_TABLE (REG_C6) },
1900 1.1 christos { REG_TABLE (REG_C7) },
1901 1.1 christos /* c8 */
1902 1.1 christos { "enterT", { Iw, Ib } },
1903 1.1 christos { "leaveT", { XX } },
1904 1.1 christos { "Jret{|f}P", { Iw } },
1905 1.1 christos { "Jret{|f}P", { XX } },
1906 1.1 christos { "int3", { XX } },
1907 1.1 christos { "int", { Ib } },
1908 1.1 christos { X86_64_TABLE (X86_64_CE) },
1909 1.1 christos { "iretP", { XX } },
1910 1.1 christos /* d0 */
1911 1.1 christos { REG_TABLE (REG_D0) },
1912 1.1 christos { REG_TABLE (REG_D1) },
1913 1.1 christos { REG_TABLE (REG_D2) },
1914 1.1 christos { REG_TABLE (REG_D3) },
1915 1.1 christos { X86_64_TABLE (X86_64_D4) },
1916 1.1 christos { X86_64_TABLE (X86_64_D5) },
1917 1.1 christos { Bad_Opcode },
1918 1.1 christos { "xlat", { DSBX } },
1919 1.1 christos /* d8 */
1920 1.1 christos { FLOAT },
1921 1.1 christos { FLOAT },
1922 1.1 christos { FLOAT },
1923 1.1 christos { FLOAT },
1924 1.1 christos { FLOAT },
1925 1.1 christos { FLOAT },
1926 1.1 christos { FLOAT },
1927 1.1 christos { FLOAT },
1928 1.1 christos /* e0 */
1929 1.1 christos { "loopneFH", { Jb, XX, loop_jcxz_flag } },
1930 1.1 christos { "loopeFH", { Jb, XX, loop_jcxz_flag } },
1931 1.1 christos { "loopFH", { Jb, XX, loop_jcxz_flag } },
1932 1.1 christos { "jEcxzH", { Jb, XX, loop_jcxz_flag } },
1933 1.1 christos { "inB", { AL, Ib } },
1934 1.1 christos { "inG", { zAX, Ib } },
1935 1.1 christos { "outB", { Ib, AL } },
1936 1.1 christos { "outG", { Ib, zAX } },
1937 1.1 christos /* e8 */
1938 1.1 christos { "callT", { Jv } },
1939 1.1 christos { "jmpT", { Jv } },
1940 1.1 christos { X86_64_TABLE (X86_64_EA) },
1941 1.1 christos { "jmp", { Jb } },
1942 1.1 christos { "inB", { AL, indirDX } },
1943 1.1 christos { "inG", { zAX, indirDX } },
1944 1.1 christos { "outB", { indirDX, AL } },
1945 1.1 christos { "outG", { indirDX, zAX } },
1946 1.1 christos /* f0 */
1947 1.1 christos { Bad_Opcode }, /* lock prefix */
1948 1.1 christos { "icebp", { XX } },
1949 1.1 christos { Bad_Opcode }, /* repne */
1950 1.1 christos { Bad_Opcode }, /* repz */
1951 1.1 christos { "hlt", { XX } },
1952 1.1 christos { "cmc", { XX } },
1953 1.1 christos { REG_TABLE (REG_F6) },
1954 1.1 christos { REG_TABLE (REG_F7) },
1955 1.1 christos /* f8 */
1956 1.1 christos { "clc", { XX } },
1957 1.1 christos { "stc", { XX } },
1958 1.1 christos { "cli", { XX } },
1959 1.1 christos { "sti", { XX } },
1960 1.1 christos { "cld", { XX } },
1961 1.1 christos { "std", { XX } },
1962 1.1 christos { REG_TABLE (REG_FE) },
1963 1.1 christos { REG_TABLE (REG_FF) },
1964 1.1 christos };
1965 1.1 christos
1966 1.1 christos static const struct dis386 dis386_twobyte[] = {
1967 1.1 christos /* 00 */
1968 1.1 christos { REG_TABLE (REG_0F00 ) },
1969 1.1 christos { REG_TABLE (REG_0F01 ) },
1970 1.1 christos { "larS", { Gv, Ew } },
1971 1.1 christos { "lslS", { Gv, Ew } },
1972 1.1 christos { Bad_Opcode },
1973 1.1 christos { "syscall", { XX } },
1974 1.1 christos { "clts", { XX } },
1975 1.1 christos { "sysretP", { XX } },
1976 1.1 christos /* 08 */
1977 1.1 christos { "invd", { XX } },
1978 1.1 christos { "wbinvd", { XX } },
1979 1.1 christos { Bad_Opcode },
1980 1.1 christos { "ud2", { XX } },
1981 1.1 christos { Bad_Opcode },
1982 1.1 christos { REG_TABLE (REG_0F0D) },
1983 1.1 christos { "femms", { XX } },
1984 1.1 christos { "", { MX, EM, OPSUF } }, /* See OP_3DNowSuffix. */
1985 1.1 christos /* 10 */
1986 1.1 christos { PREFIX_TABLE (PREFIX_0F10) },
1987 1.1 christos { PREFIX_TABLE (PREFIX_0F11) },
1988 1.1 christos { PREFIX_TABLE (PREFIX_0F12) },
1989 1.1 christos { MOD_TABLE (MOD_0F13) },
1990 1.1 christos { "unpcklpX", { XM, EXx } },
1991 1.1 christos { "unpckhpX", { XM, EXx } },
1992 1.1 christos { PREFIX_TABLE (PREFIX_0F16) },
1993 1.1 christos { MOD_TABLE (MOD_0F17) },
1994 1.1 christos /* 18 */
1995 1.1 christos { REG_TABLE (REG_0F18) },
1996 1.1 christos { "nopQ", { Ev } },
1997 1.1 christos { "nopQ", { Ev } },
1998 1.1 christos { "nopQ", { Ev } },
1999 1.1 christos { "nopQ", { Ev } },
2000 1.1 christos { "nopQ", { Ev } },
2001 1.1 christos { "nopQ", { Ev } },
2002 1.1 christos { "nopQ", { Ev } },
2003 1.1 christos /* 20 */
2004 1.1 christos { MOD_TABLE (MOD_0F20) },
2005 1.1 christos { MOD_TABLE (MOD_0F21) },
2006 1.1 christos { MOD_TABLE (MOD_0F22) },
2007 1.1 christos { MOD_TABLE (MOD_0F23) },
2008 1.1 christos { MOD_TABLE (MOD_0F24) },
2009 1.1 christos { Bad_Opcode },
2010 1.1 christos { MOD_TABLE (MOD_0F26) },
2011 1.1 christos { Bad_Opcode },
2012 1.1 christos /* 28 */
2013 1.1 christos { "movapX", { XM, EXx } },
2014 1.1 christos { "movapX", { EXxS, XM } },
2015 1.1 christos { PREFIX_TABLE (PREFIX_0F2A) },
2016 1.1 christos { PREFIX_TABLE (PREFIX_0F2B) },
2017 1.1 christos { PREFIX_TABLE (PREFIX_0F2C) },
2018 1.1 christos { PREFIX_TABLE (PREFIX_0F2D) },
2019 1.1 christos { PREFIX_TABLE (PREFIX_0F2E) },
2020 1.1 christos { PREFIX_TABLE (PREFIX_0F2F) },
2021 1.1 christos /* 30 */
2022 1.1 christos { "wrmsr", { XX } },
2023 1.1 christos { "rdtsc", { XX } },
2024 1.1 christos { "rdmsr", { XX } },
2025 1.1 christos { "rdpmc", { XX } },
2026 1.1 christos { "sysenter", { XX } },
2027 1.1 christos { "sysexit", { XX } },
2028 1.1 christos { Bad_Opcode },
2029 1.1 christos { "getsec", { XX } },
2030 1.1 christos /* 38 */
2031 1.1 christos { THREE_BYTE_TABLE (THREE_BYTE_0F38) },
2032 1.1 christos { Bad_Opcode },
2033 1.1 christos { THREE_BYTE_TABLE (THREE_BYTE_0F3A) },
2034 1.1 christos { Bad_Opcode },
2035 1.1 christos { Bad_Opcode },
2036 1.1 christos { Bad_Opcode },
2037 1.1 christos { Bad_Opcode },
2038 1.1 christos { Bad_Opcode },
2039 1.1 christos /* 40 */
2040 1.1 christos { "cmovoS", { Gv, Ev } },
2041 1.1 christos { "cmovnoS", { Gv, Ev } },
2042 1.1 christos { "cmovbS", { Gv, Ev } },
2043 1.1 christos { "cmovaeS", { Gv, Ev } },
2044 1.1 christos { "cmoveS", { Gv, Ev } },
2045 1.1 christos { "cmovneS", { Gv, Ev } },
2046 1.1 christos { "cmovbeS", { Gv, Ev } },
2047 1.1 christos { "cmovaS", { Gv, Ev } },
2048 1.1 christos /* 48 */
2049 1.1 christos { "cmovsS", { Gv, Ev } },
2050 1.1 christos { "cmovnsS", { Gv, Ev } },
2051 1.1 christos { "cmovpS", { Gv, Ev } },
2052 1.1 christos { "cmovnpS", { Gv, Ev } },
2053 1.1 christos { "cmovlS", { Gv, Ev } },
2054 1.1 christos { "cmovgeS", { Gv, Ev } },
2055 1.1 christos { "cmovleS", { Gv, Ev } },
2056 1.1 christos { "cmovgS", { Gv, Ev } },
2057 1.1 christos /* 50 */
2058 1.1 christos { MOD_TABLE (MOD_0F51) },
2059 1.1 christos { PREFIX_TABLE (PREFIX_0F51) },
2060 1.1 christos { PREFIX_TABLE (PREFIX_0F52) },
2061 1.1 christos { PREFIX_TABLE (PREFIX_0F53) },
2062 1.1 christos { "andpX", { XM, EXx } },
2063 1.1 christos { "andnpX", { XM, EXx } },
2064 1.1 christos { "orpX", { XM, EXx } },
2065 1.1 christos { "xorpX", { XM, EXx } },
2066 1.1 christos /* 58 */
2067 1.1 christos { PREFIX_TABLE (PREFIX_0F58) },
2068 1.1 christos { PREFIX_TABLE (PREFIX_0F59) },
2069 1.1 christos { PREFIX_TABLE (PREFIX_0F5A) },
2070 1.1 christos { PREFIX_TABLE (PREFIX_0F5B) },
2071 1.1 christos { PREFIX_TABLE (PREFIX_0F5C) },
2072 1.1 christos { PREFIX_TABLE (PREFIX_0F5D) },
2073 1.1 christos { PREFIX_TABLE (PREFIX_0F5E) },
2074 1.1 christos { PREFIX_TABLE (PREFIX_0F5F) },
2075 1.1 christos /* 60 */
2076 1.1 christos { PREFIX_TABLE (PREFIX_0F60) },
2077 1.1 christos { PREFIX_TABLE (PREFIX_0F61) },
2078 1.1 christos { PREFIX_TABLE (PREFIX_0F62) },
2079 1.1 christos { "packsswb", { MX, EM } },
2080 1.1 christos { "pcmpgtb", { MX, EM } },
2081 1.1 christos { "pcmpgtw", { MX, EM } },
2082 1.1 christos { "pcmpgtd", { MX, EM } },
2083 1.1 christos { "packuswb", { MX, EM } },
2084 1.1 christos /* 68 */
2085 1.1 christos { "punpckhbw", { MX, EM } },
2086 1.1 christos { "punpckhwd", { MX, EM } },
2087 1.1 christos { "punpckhdq", { MX, EM } },
2088 1.1 christos { "packssdw", { MX, EM } },
2089 1.1 christos { PREFIX_TABLE (PREFIX_0F6C) },
2090 1.1 christos { PREFIX_TABLE (PREFIX_0F6D) },
2091 1.1 christos { "movK", { MX, Edq } },
2092 1.1 christos { PREFIX_TABLE (PREFIX_0F6F) },
2093 1.1 christos /* 70 */
2094 1.1 christos { PREFIX_TABLE (PREFIX_0F70) },
2095 1.1 christos { REG_TABLE (REG_0F71) },
2096 1.1 christos { REG_TABLE (REG_0F72) },
2097 1.1 christos { REG_TABLE (REG_0F73) },
2098 1.1 christos { "pcmpeqb", { MX, EM } },
2099 1.1 christos { "pcmpeqw", { MX, EM } },
2100 1.1 christos { "pcmpeqd", { MX, EM } },
2101 1.1 christos { "emms", { XX } },
2102 1.1 christos /* 78 */
2103 1.1 christos { PREFIX_TABLE (PREFIX_0F78) },
2104 1.1 christos { PREFIX_TABLE (PREFIX_0F79) },
2105 1.1 christos { THREE_BYTE_TABLE (THREE_BYTE_0F7A) },
2106 1.1 christos { Bad_Opcode },
2107 1.1 christos { PREFIX_TABLE (PREFIX_0F7C) },
2108 1.1 christos { PREFIX_TABLE (PREFIX_0F7D) },
2109 1.1 christos { PREFIX_TABLE (PREFIX_0F7E) },
2110 1.1 christos { PREFIX_TABLE (PREFIX_0F7F) },
2111 1.1 christos /* 80 */
2112 1.1 christos { "joH", { Jv, XX, cond_jump_flag } },
2113 1.1 christos { "jnoH", { Jv, XX, cond_jump_flag } },
2114 1.1 christos { "jbH", { Jv, XX, cond_jump_flag } },
2115 1.1 christos { "jaeH", { Jv, XX, cond_jump_flag } },
2116 1.1 christos { "jeH", { Jv, XX, cond_jump_flag } },
2117 1.1 christos { "jneH", { Jv, XX, cond_jump_flag } },
2118 1.1 christos { "jbeH", { Jv, XX, cond_jump_flag } },
2119 1.1 christos { "jaH", { Jv, XX, cond_jump_flag } },
2120 1.1 christos /* 88 */
2121 1.1 christos { "jsH", { Jv, XX, cond_jump_flag } },
2122 1.1 christos { "jnsH", { Jv, XX, cond_jump_flag } },
2123 1.1 christos { "jpH", { Jv, XX, cond_jump_flag } },
2124 1.1 christos { "jnpH", { Jv, XX, cond_jump_flag } },
2125 1.1 christos { "jlH", { Jv, XX, cond_jump_flag } },
2126 1.1 christos { "jgeH", { Jv, XX, cond_jump_flag } },
2127 1.1 christos { "jleH", { Jv, XX, cond_jump_flag } },
2128 1.1 christos { "jgH", { Jv, XX, cond_jump_flag } },
2129 1.1 christos /* 90 */
2130 1.1 christos { "seto", { Eb } },
2131 1.1 christos { "setno", { Eb } },
2132 1.1 christos { "setb", { Eb } },
2133 1.1 christos { "setae", { Eb } },
2134 1.1 christos { "sete", { Eb } },
2135 1.1 christos { "setne", { Eb } },
2136 1.1 christos { "setbe", { Eb } },
2137 1.1 christos { "seta", { Eb } },
2138 1.1 christos /* 98 */
2139 1.1 christos { "sets", { Eb } },
2140 1.1 christos { "setns", { Eb } },
2141 1.1 christos { "setp", { Eb } },
2142 1.1 christos { "setnp", { Eb } },
2143 1.1 christos { "setl", { Eb } },
2144 1.1 christos { "setge", { Eb } },
2145 1.1 christos { "setle", { Eb } },
2146 1.1 christos { "setg", { Eb } },
2147 1.1 christos /* a0 */
2148 1.1 christos { "pushT", { fs } },
2149 1.1 christos { "popT", { fs } },
2150 1.1 christos { "cpuid", { XX } },
2151 1.1 christos { "btS", { Ev, Gv } },
2152 1.1 christos { "shldS", { Ev, Gv, Ib } },
2153 1.1 christos { "shldS", { Ev, Gv, CL } },
2154 1.1 christos { REG_TABLE (REG_0FA6) },
2155 1.1 christos { REG_TABLE (REG_0FA7) },
2156 1.1 christos /* a8 */
2157 1.1 christos { "pushT", { gs } },
2158 1.1 christos { "popT", { gs } },
2159 1.1 christos { "rsm", { XX } },
2160 1.1.1.2 christos { "btsS", { Evh1, Gv } },
2161 1.1 christos { "shrdS", { Ev, Gv, Ib } },
2162 1.1 christos { "shrdS", { Ev, Gv, CL } },
2163 1.1 christos { REG_TABLE (REG_0FAE) },
2164 1.1 christos { "imulS", { Gv, Ev } },
2165 1.1 christos /* b0 */
2166 1.1.1.2 christos { "cmpxchgB", { Ebh1, Gb } },
2167 1.1.1.2 christos { "cmpxchgS", { Evh1, Gv } },
2168 1.1 christos { MOD_TABLE (MOD_0FB2) },
2169 1.1.1.2 christos { "btrS", { Evh1, Gv } },
2170 1.1 christos { MOD_TABLE (MOD_0FB4) },
2171 1.1 christos { MOD_TABLE (MOD_0FB5) },
2172 1.1 christos { "movz{bR|x}", { Gv, Eb } },
2173 1.1 christos { "movz{wR|x}", { Gv, Ew } }, /* yes, there really is movzww ! */
2174 1.1 christos /* b8 */
2175 1.1 christos { PREFIX_TABLE (PREFIX_0FB8) },
2176 1.1 christos { "ud1", { XX } },
2177 1.1 christos { REG_TABLE (REG_0FBA) },
2178 1.1.1.2 christos { "btcS", { Evh1, Gv } },
2179 1.1 christos { PREFIX_TABLE (PREFIX_0FBC) },
2180 1.1 christos { PREFIX_TABLE (PREFIX_0FBD) },
2181 1.1 christos { "movs{bR|x}", { Gv, Eb } },
2182 1.1 christos { "movs{wR|x}", { Gv, Ew } }, /* yes, there really is movsww ! */
2183 1.1 christos /* c0 */
2184 1.1.1.2 christos { "xaddB", { Ebh1, Gb } },
2185 1.1.1.2 christos { "xaddS", { Evh1, Gv } },
2186 1.1 christos { PREFIX_TABLE (PREFIX_0FC2) },
2187 1.1 christos { PREFIX_TABLE (PREFIX_0FC3) },
2188 1.1 christos { "pinsrw", { MX, Edqw, Ib } },
2189 1.1 christos { "pextrw", { Gdq, MS, Ib } },
2190 1.1 christos { "shufpX", { XM, EXx, Ib } },
2191 1.1 christos { REG_TABLE (REG_0FC7) },
2192 1.1 christos /* c8 */
2193 1.1 christos { "bswap", { RMeAX } },
2194 1.1 christos { "bswap", { RMeCX } },
2195 1.1 christos { "bswap", { RMeDX } },
2196 1.1 christos { "bswap", { RMeBX } },
2197 1.1 christos { "bswap", { RMeSP } },
2198 1.1 christos { "bswap", { RMeBP } },
2199 1.1 christos { "bswap", { RMeSI } },
2200 1.1 christos { "bswap", { RMeDI } },
2201 1.1 christos /* d0 */
2202 1.1 christos { PREFIX_TABLE (PREFIX_0FD0) },
2203 1.1 christos { "psrlw", { MX, EM } },
2204 1.1 christos { "psrld", { MX, EM } },
2205 1.1 christos { "psrlq", { MX, EM } },
2206 1.1 christos { "paddq", { MX, EM } },
2207 1.1 christos { "pmullw", { MX, EM } },
2208 1.1 christos { PREFIX_TABLE (PREFIX_0FD6) },
2209 1.1 christos { MOD_TABLE (MOD_0FD7) },
2210 1.1 christos /* d8 */
2211 1.1 christos { "psubusb", { MX, EM } },
2212 1.1 christos { "psubusw", { MX, EM } },
2213 1.1 christos { "pminub", { MX, EM } },
2214 1.1 christos { "pand", { MX, EM } },
2215 1.1 christos { "paddusb", { MX, EM } },
2216 1.1 christos { "paddusw", { MX, EM } },
2217 1.1 christos { "pmaxub", { MX, EM } },
2218 1.1 christos { "pandn", { MX, EM } },
2219 1.1 christos /* e0 */
2220 1.1 christos { "pavgb", { MX, EM } },
2221 1.1 christos { "psraw", { MX, EM } },
2222 1.1 christos { "psrad", { MX, EM } },
2223 1.1 christos { "pavgw", { MX, EM } },
2224 1.1 christos { "pmulhuw", { MX, EM } },
2225 1.1 christos { "pmulhw", { MX, EM } },
2226 1.1 christos { PREFIX_TABLE (PREFIX_0FE6) },
2227 1.1 christos { PREFIX_TABLE (PREFIX_0FE7) },
2228 1.1 christos /* e8 */
2229 1.1 christos { "psubsb", { MX, EM } },
2230 1.1 christos { "psubsw", { MX, EM } },
2231 1.1 christos { "pminsw", { MX, EM } },
2232 1.1 christos { "por", { MX, EM } },
2233 1.1 christos { "paddsb", { MX, EM } },
2234 1.1 christos { "paddsw", { MX, EM } },
2235 1.1 christos { "pmaxsw", { MX, EM } },
2236 1.1 christos { "pxor", { MX, EM } },
2237 1.1 christos /* f0 */
2238 1.1 christos { PREFIX_TABLE (PREFIX_0FF0) },
2239 1.1 christos { "psllw", { MX, EM } },
2240 1.1 christos { "pslld", { MX, EM } },
2241 1.1 christos { "psllq", { MX, EM } },
2242 1.1 christos { "pmuludq", { MX, EM } },
2243 1.1 christos { "pmaddwd", { MX, EM } },
2244 1.1 christos { "psadbw", { MX, EM } },
2245 1.1 christos { PREFIX_TABLE (PREFIX_0FF7) },
2246 1.1 christos /* f8 */
2247 1.1 christos { "psubb", { MX, EM } },
2248 1.1 christos { "psubw", { MX, EM } },
2249 1.1 christos { "psubd", { MX, EM } },
2250 1.1 christos { "psubq", { MX, EM } },
2251 1.1 christos { "paddb", { MX, EM } },
2252 1.1 christos { "paddw", { MX, EM } },
2253 1.1 christos { "paddd", { MX, EM } },
2254 1.1 christos { Bad_Opcode },
2255 1.1 christos };
2256 1.1 christos
2257 1.1 christos static const unsigned char onebyte_has_modrm[256] = {
2258 1.1 christos /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2259 1.1 christos /* ------------------------------- */
2260 1.1 christos /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */
2261 1.1 christos /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */
2262 1.1 christos /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */
2263 1.1 christos /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */
2264 1.1 christos /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */
2265 1.1 christos /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */
2266 1.1 christos /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */
2267 1.1 christos /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */
2268 1.1 christos /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */
2269 1.1 christos /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */
2270 1.1 christos /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */
2271 1.1 christos /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */
2272 1.1 christos /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */
2273 1.1 christos /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */
2274 1.1 christos /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */
2275 1.1 christos /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */
2276 1.1 christos /* ------------------------------- */
2277 1.1 christos /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2278 1.1 christos };
2279 1.1 christos
2280 1.1 christos static const unsigned char twobyte_has_modrm[256] = {
2281 1.1 christos /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2282 1.1 christos /* ------------------------------- */
2283 1.1 christos /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */
2284 1.1 christos /* 10 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 1f */
2285 1.1 christos /* 20 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 2f */
2286 1.1 christos /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */
2287 1.1 christos /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */
2288 1.1 christos /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */
2289 1.1 christos /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */
2290 1.1 christos /* 70 */ 1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, /* 7f */
2291 1.1 christos /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */
2292 1.1 christos /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */
2293 1.1 christos /* a0 */ 0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1, /* af */
2294 1.1 christos /* b0 */ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, /* bf */
2295 1.1 christos /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */
2296 1.1 christos /* d0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */
2297 1.1 christos /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */
2298 1.1 christos /* f0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */
2299 1.1 christos /* ------------------------------- */
2300 1.1 christos /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
2301 1.1 christos };
2302 1.1 christos
2303 1.1 christos static char obuf[100];
2304 1.1 christos static char *obufp;
2305 1.1 christos static char *mnemonicendp;
2306 1.1 christos static char scratchbuf[100];
2307 1.1 christos static unsigned char *start_codep;
2308 1.1 christos static unsigned char *insn_codep;
2309 1.1 christos static unsigned char *codep;
2310 1.1 christos static int last_lock_prefix;
2311 1.1 christos static int last_repz_prefix;
2312 1.1 christos static int last_repnz_prefix;
2313 1.1 christos static int last_data_prefix;
2314 1.1 christos static int last_addr_prefix;
2315 1.1 christos static int last_rex_prefix;
2316 1.1 christos static int last_seg_prefix;
2317 1.1 christos #define MAX_CODE_LENGTH 15
2318 1.1 christos /* We can up to 14 prefixes since the maximum instruction length is
2319 1.1 christos 15bytes. */
2320 1.1 christos static int all_prefixes[MAX_CODE_LENGTH - 1];
2321 1.1 christos static disassemble_info *the_info;
2322 1.1 christos static struct
2323 1.1 christos {
2324 1.1 christos int mod;
2325 1.1 christos int reg;
2326 1.1 christos int rm;
2327 1.1 christos }
2328 1.1 christos modrm;
2329 1.1 christos static unsigned char need_modrm;
2330 1.1 christos static struct
2331 1.1 christos {
2332 1.1 christos int scale;
2333 1.1 christos int index;
2334 1.1 christos int base;
2335 1.1 christos }
2336 1.1 christos sib;
2337 1.1 christos static struct
2338 1.1 christos {
2339 1.1 christos int register_specifier;
2340 1.1 christos int length;
2341 1.1 christos int prefix;
2342 1.1 christos int w;
2343 1.1 christos }
2344 1.1 christos vex;
2345 1.1 christos static unsigned char need_vex;
2346 1.1 christos static unsigned char need_vex_reg;
2347 1.1 christos static unsigned char vex_w_done;
2348 1.1 christos
2349 1.1 christos struct op
2350 1.1 christos {
2351 1.1 christos const char *name;
2352 1.1 christos unsigned int len;
2353 1.1 christos };
2354 1.1 christos
2355 1.1 christos /* If we are accessing mod/rm/reg without need_modrm set, then the
2356 1.1 christos values are stale. Hitting this abort likely indicates that you
2357 1.1 christos need to update onebyte_has_modrm or twobyte_has_modrm. */
2358 1.1 christos #define MODRM_CHECK if (!need_modrm) abort ()
2359 1.1 christos
2360 1.1 christos static const char **names64;
2361 1.1 christos static const char **names32;
2362 1.1 christos static const char **names16;
2363 1.1 christos static const char **names8;
2364 1.1 christos static const char **names8rex;
2365 1.1 christos static const char **names_seg;
2366 1.1 christos static const char *index64;
2367 1.1 christos static const char *index32;
2368 1.1 christos static const char **index16;
2369 1.1 christos
2370 1.1 christos static const char *intel_names64[] = {
2371 1.1 christos "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
2372 1.1 christos "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
2373 1.1 christos };
2374 1.1 christos static const char *intel_names32[] = {
2375 1.1 christos "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
2376 1.1 christos "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
2377 1.1 christos };
2378 1.1 christos static const char *intel_names16[] = {
2379 1.1 christos "ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
2380 1.1 christos "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
2381 1.1 christos };
2382 1.1 christos static const char *intel_names8[] = {
2383 1.1 christos "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh",
2384 1.1 christos };
2385 1.1 christos static const char *intel_names8rex[] = {
2386 1.1 christos "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
2387 1.1 christos "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
2388 1.1 christos };
2389 1.1 christos static const char *intel_names_seg[] = {
2390 1.1 christos "es", "cs", "ss", "ds", "fs", "gs", "?", "?",
2391 1.1 christos };
2392 1.1 christos static const char *intel_index64 = "riz";
2393 1.1 christos static const char *intel_index32 = "eiz";
2394 1.1 christos static const char *intel_index16[] = {
2395 1.1 christos "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx"
2396 1.1 christos };
2397 1.1 christos
2398 1.1 christos static const char *att_names64[] = {
2399 1.1 christos "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
2400 1.1 christos "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
2401 1.1 christos };
2402 1.1 christos static const char *att_names32[] = {
2403 1.1 christos "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
2404 1.1 christos "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
2405 1.1 christos };
2406 1.1 christos static const char *att_names16[] = {
2407 1.1 christos "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
2408 1.1 christos "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
2409 1.1 christos };
2410 1.1 christos static const char *att_names8[] = {
2411 1.1 christos "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh",
2412 1.1 christos };
2413 1.1 christos static const char *att_names8rex[] = {
2414 1.1 christos "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
2415 1.1 christos "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
2416 1.1 christos };
2417 1.1 christos static const char *att_names_seg[] = {
2418 1.1 christos "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?",
2419 1.1 christos };
2420 1.1 christos static const char *att_index64 = "%riz";
2421 1.1 christos static const char *att_index32 = "%eiz";
2422 1.1 christos static const char *att_index16[] = {
2423 1.1 christos "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx"
2424 1.1 christos };
2425 1.1 christos
2426 1.1 christos static const char **names_mm;
2427 1.1 christos static const char *intel_names_mm[] = {
2428 1.1 christos "mm0", "mm1", "mm2", "mm3",
2429 1.1 christos "mm4", "mm5", "mm6", "mm7"
2430 1.1 christos };
2431 1.1 christos static const char *att_names_mm[] = {
2432 1.1 christos "%mm0", "%mm1", "%mm2", "%mm3",
2433 1.1 christos "%mm4", "%mm5", "%mm6", "%mm7"
2434 1.1 christos };
2435 1.1 christos
2436 1.1 christos static const char **names_xmm;
2437 1.1 christos static const char *intel_names_xmm[] = {
2438 1.1 christos "xmm0", "xmm1", "xmm2", "xmm3",
2439 1.1 christos "xmm4", "xmm5", "xmm6", "xmm7",
2440 1.1 christos "xmm8", "xmm9", "xmm10", "xmm11",
2441 1.1 christos "xmm12", "xmm13", "xmm14", "xmm15"
2442 1.1 christos };
2443 1.1 christos static const char *att_names_xmm[] = {
2444 1.1 christos "%xmm0", "%xmm1", "%xmm2", "%xmm3",
2445 1.1 christos "%xmm4", "%xmm5", "%xmm6", "%xmm7",
2446 1.1 christos "%xmm8", "%xmm9", "%xmm10", "%xmm11",
2447 1.1 christos "%xmm12", "%xmm13", "%xmm14", "%xmm15"
2448 1.1 christos };
2449 1.1 christos
2450 1.1 christos static const char **names_ymm;
2451 1.1 christos static const char *intel_names_ymm[] = {
2452 1.1 christos "ymm0", "ymm1", "ymm2", "ymm3",
2453 1.1 christos "ymm4", "ymm5", "ymm6", "ymm7",
2454 1.1 christos "ymm8", "ymm9", "ymm10", "ymm11",
2455 1.1 christos "ymm12", "ymm13", "ymm14", "ymm15"
2456 1.1 christos };
2457 1.1 christos static const char *att_names_ymm[] = {
2458 1.1 christos "%ymm0", "%ymm1", "%ymm2", "%ymm3",
2459 1.1 christos "%ymm4", "%ymm5", "%ymm6", "%ymm7",
2460 1.1 christos "%ymm8", "%ymm9", "%ymm10", "%ymm11",
2461 1.1 christos "%ymm12", "%ymm13", "%ymm14", "%ymm15"
2462 1.1 christos };
2463 1.1 christos
2464 1.1 christos static const struct dis386 reg_table[][8] = {
2465 1.1 christos /* REG_80 */
2466 1.1 christos {
2467 1.1.1.2 christos { "addA", { Ebh1, Ib } },
2468 1.1.1.2 christos { "orA", { Ebh1, Ib } },
2469 1.1.1.2 christos { "adcA", { Ebh1, Ib } },
2470 1.1.1.2 christos { "sbbA", { Ebh1, Ib } },
2471 1.1.1.2 christos { "andA", { Ebh1, Ib } },
2472 1.1.1.2 christos { "subA", { Ebh1, Ib } },
2473 1.1.1.2 christos { "xorA", { Ebh1, Ib } },
2474 1.1 christos { "cmpA", { Eb, Ib } },
2475 1.1 christos },
2476 1.1 christos /* REG_81 */
2477 1.1 christos {
2478 1.1.1.2 christos { "addQ", { Evh1, Iv } },
2479 1.1.1.2 christos { "orQ", { Evh1, Iv } },
2480 1.1.1.2 christos { "adcQ", { Evh1, Iv } },
2481 1.1.1.2 christos { "sbbQ", { Evh1, Iv } },
2482 1.1.1.2 christos { "andQ", { Evh1, Iv } },
2483 1.1.1.2 christos { "subQ", { Evh1, Iv } },
2484 1.1.1.2 christos { "xorQ", { Evh1, Iv } },
2485 1.1 christos { "cmpQ", { Ev, Iv } },
2486 1.1 christos },
2487 1.1 christos /* REG_82 */
2488 1.1 christos {
2489 1.1.1.2 christos { "addQ", { Evh1, sIb } },
2490 1.1.1.2 christos { "orQ", { Evh1, sIb } },
2491 1.1.1.2 christos { "adcQ", { Evh1, sIb } },
2492 1.1.1.2 christos { "sbbQ", { Evh1, sIb } },
2493 1.1.1.2 christos { "andQ", { Evh1, sIb } },
2494 1.1.1.2 christos { "subQ", { Evh1, sIb } },
2495 1.1.1.2 christos { "xorQ", { Evh1, sIb } },
2496 1.1 christos { "cmpQ", { Ev, sIb } },
2497 1.1 christos },
2498 1.1 christos /* REG_8F */
2499 1.1 christos {
2500 1.1 christos { "popU", { stackEv } },
2501 1.1 christos { XOP_8F_TABLE (XOP_09) },
2502 1.1 christos { Bad_Opcode },
2503 1.1 christos { Bad_Opcode },
2504 1.1 christos { Bad_Opcode },
2505 1.1 christos { XOP_8F_TABLE (XOP_09) },
2506 1.1 christos },
2507 1.1 christos /* REG_C0 */
2508 1.1 christos {
2509 1.1 christos { "rolA", { Eb, Ib } },
2510 1.1 christos { "rorA", { Eb, Ib } },
2511 1.1 christos { "rclA", { Eb, Ib } },
2512 1.1 christos { "rcrA", { Eb, Ib } },
2513 1.1 christos { "shlA", { Eb, Ib } },
2514 1.1 christos { "shrA", { Eb, Ib } },
2515 1.1 christos { Bad_Opcode },
2516 1.1 christos { "sarA", { Eb, Ib } },
2517 1.1 christos },
2518 1.1 christos /* REG_C1 */
2519 1.1 christos {
2520 1.1 christos { "rolQ", { Ev, Ib } },
2521 1.1 christos { "rorQ", { Ev, Ib } },
2522 1.1 christos { "rclQ", { Ev, Ib } },
2523 1.1 christos { "rcrQ", { Ev, Ib } },
2524 1.1 christos { "shlQ", { Ev, Ib } },
2525 1.1 christos { "shrQ", { Ev, Ib } },
2526 1.1 christos { Bad_Opcode },
2527 1.1 christos { "sarQ", { Ev, Ib } },
2528 1.1 christos },
2529 1.1 christos /* REG_C6 */
2530 1.1 christos {
2531 1.1.1.2 christos { "movA", { Ebh3, Ib } },
2532 1.1.1.2 christos { Bad_Opcode },
2533 1.1.1.2 christos { Bad_Opcode },
2534 1.1.1.2 christos { Bad_Opcode },
2535 1.1.1.2 christos { Bad_Opcode },
2536 1.1.1.2 christos { Bad_Opcode },
2537 1.1.1.2 christos { Bad_Opcode },
2538 1.1.1.2 christos { MOD_TABLE (MOD_C6_REG_7) },
2539 1.1 christos },
2540 1.1 christos /* REG_C7 */
2541 1.1 christos {
2542 1.1.1.2 christos { "movQ", { Evh3, Iv } },
2543 1.1.1.2 christos { Bad_Opcode },
2544 1.1.1.2 christos { Bad_Opcode },
2545 1.1.1.2 christos { Bad_Opcode },
2546 1.1.1.2 christos { Bad_Opcode },
2547 1.1.1.2 christos { Bad_Opcode },
2548 1.1.1.2 christos { Bad_Opcode },
2549 1.1.1.2 christos { MOD_TABLE (MOD_C7_REG_7) },
2550 1.1 christos },
2551 1.1 christos /* REG_D0 */
2552 1.1 christos {
2553 1.1 christos { "rolA", { Eb, I1 } },
2554 1.1 christos { "rorA", { Eb, I1 } },
2555 1.1 christos { "rclA", { Eb, I1 } },
2556 1.1 christos { "rcrA", { Eb, I1 } },
2557 1.1 christos { "shlA", { Eb, I1 } },
2558 1.1 christos { "shrA", { Eb, I1 } },
2559 1.1 christos { Bad_Opcode },
2560 1.1 christos { "sarA", { Eb, I1 } },
2561 1.1 christos },
2562 1.1 christos /* REG_D1 */
2563 1.1 christos {
2564 1.1 christos { "rolQ", { Ev, I1 } },
2565 1.1 christos { "rorQ", { Ev, I1 } },
2566 1.1 christos { "rclQ", { Ev, I1 } },
2567 1.1 christos { "rcrQ", { Ev, I1 } },
2568 1.1 christos { "shlQ", { Ev, I1 } },
2569 1.1 christos { "shrQ", { Ev, I1 } },
2570 1.1 christos { Bad_Opcode },
2571 1.1 christos { "sarQ", { Ev, I1 } },
2572 1.1 christos },
2573 1.1 christos /* REG_D2 */
2574 1.1 christos {
2575 1.1 christos { "rolA", { Eb, CL } },
2576 1.1 christos { "rorA", { Eb, CL } },
2577 1.1 christos { "rclA", { Eb, CL } },
2578 1.1 christos { "rcrA", { Eb, CL } },
2579 1.1 christos { "shlA", { Eb, CL } },
2580 1.1 christos { "shrA", { Eb, CL } },
2581 1.1 christos { Bad_Opcode },
2582 1.1 christos { "sarA", { Eb, CL } },
2583 1.1 christos },
2584 1.1 christos /* REG_D3 */
2585 1.1 christos {
2586 1.1 christos { "rolQ", { Ev, CL } },
2587 1.1 christos { "rorQ", { Ev, CL } },
2588 1.1 christos { "rclQ", { Ev, CL } },
2589 1.1 christos { "rcrQ", { Ev, CL } },
2590 1.1 christos { "shlQ", { Ev, CL } },
2591 1.1 christos { "shrQ", { Ev, CL } },
2592 1.1 christos { Bad_Opcode },
2593 1.1 christos { "sarQ", { Ev, CL } },
2594 1.1 christos },
2595 1.1 christos /* REG_F6 */
2596 1.1 christos {
2597 1.1 christos { "testA", { Eb, Ib } },
2598 1.1 christos { Bad_Opcode },
2599 1.1.1.2 christos { "notA", { Ebh1 } },
2600 1.1.1.2 christos { "negA", { Ebh1 } },
2601 1.1 christos { "mulA", { Eb } }, /* Don't print the implicit %al register, */
2602 1.1 christos { "imulA", { Eb } }, /* to distinguish these opcodes from other */
2603 1.1 christos { "divA", { Eb } }, /* mul/imul opcodes. Do the same for div */
2604 1.1 christos { "idivA", { Eb } }, /* and idiv for consistency. */
2605 1.1 christos },
2606 1.1 christos /* REG_F7 */
2607 1.1 christos {
2608 1.1 christos { "testQ", { Ev, Iv } },
2609 1.1 christos { Bad_Opcode },
2610 1.1.1.2 christos { "notQ", { Evh1 } },
2611 1.1.1.2 christos { "negQ", { Evh1 } },
2612 1.1 christos { "mulQ", { Ev } }, /* Don't print the implicit register. */
2613 1.1 christos { "imulQ", { Ev } },
2614 1.1 christos { "divQ", { Ev } },
2615 1.1 christos { "idivQ", { Ev } },
2616 1.1 christos },
2617 1.1 christos /* REG_FE */
2618 1.1 christos {
2619 1.1.1.2 christos { "incA", { Ebh1 } },
2620 1.1.1.2 christos { "decA", { Ebh1 } },
2621 1.1 christos },
2622 1.1 christos /* REG_FF */
2623 1.1 christos {
2624 1.1.1.2 christos { "incQ", { Evh1 } },
2625 1.1.1.2 christos { "decQ", { Evh1 } },
2626 1.1 christos { "call{T|}", { indirEv } },
2627 1.1 christos { "Jcall{T|}", { indirEp } },
2628 1.1 christos { "jmp{T|}", { indirEv } },
2629 1.1 christos { "Jjmp{T|}", { indirEp } },
2630 1.1 christos { "pushU", { stackEv } },
2631 1.1 christos { Bad_Opcode },
2632 1.1 christos },
2633 1.1 christos /* REG_0F00 */
2634 1.1 christos {
2635 1.1 christos { "sldtD", { Sv } },
2636 1.1 christos { "strD", { Sv } },
2637 1.1 christos { "lldt", { Ew } },
2638 1.1 christos { "ltr", { Ew } },
2639 1.1 christos { "verr", { Ew } },
2640 1.1 christos { "verw", { Ew } },
2641 1.1 christos { Bad_Opcode },
2642 1.1 christos { Bad_Opcode },
2643 1.1 christos },
2644 1.1 christos /* REG_0F01 */
2645 1.1 christos {
2646 1.1 christos { MOD_TABLE (MOD_0F01_REG_0) },
2647 1.1 christos { MOD_TABLE (MOD_0F01_REG_1) },
2648 1.1 christos { MOD_TABLE (MOD_0F01_REG_2) },
2649 1.1 christos { MOD_TABLE (MOD_0F01_REG_3) },
2650 1.1 christos { "smswD", { Sv } },
2651 1.1 christos { Bad_Opcode },
2652 1.1 christos { "lmsw", { Ew } },
2653 1.1 christos { MOD_TABLE (MOD_0F01_REG_7) },
2654 1.1 christos },
2655 1.1 christos /* REG_0F0D */
2656 1.1 christos {
2657 1.1 christos { "prefetch", { Mb } },
2658 1.1 christos { "prefetchw", { Mb } },
2659 1.1.1.2 christos { "prefetch", { Mb } },
2660 1.1.1.2 christos { "prefetch", { Mb } },
2661 1.1.1.2 christos { "prefetch", { Mb } },
2662 1.1.1.2 christos { "prefetch", { Mb } },
2663 1.1.1.2 christos { "prefetch", { Mb } },
2664 1.1.1.2 christos { "prefetch", { Mb } },
2665 1.1 christos },
2666 1.1 christos /* REG_0F18 */
2667 1.1 christos {
2668 1.1 christos { MOD_TABLE (MOD_0F18_REG_0) },
2669 1.1 christos { MOD_TABLE (MOD_0F18_REG_1) },
2670 1.1 christos { MOD_TABLE (MOD_0F18_REG_2) },
2671 1.1 christos { MOD_TABLE (MOD_0F18_REG_3) },
2672 1.1.1.2 christos { MOD_TABLE (MOD_0F18_REG_4) },
2673 1.1.1.2 christos { MOD_TABLE (MOD_0F18_REG_5) },
2674 1.1.1.2 christos { MOD_TABLE (MOD_0F18_REG_6) },
2675 1.1.1.2 christos { MOD_TABLE (MOD_0F18_REG_7) },
2676 1.1 christos },
2677 1.1 christos /* REG_0F71 */
2678 1.1 christos {
2679 1.1 christos { Bad_Opcode },
2680 1.1 christos { Bad_Opcode },
2681 1.1 christos { MOD_TABLE (MOD_0F71_REG_2) },
2682 1.1 christos { Bad_Opcode },
2683 1.1 christos { MOD_TABLE (MOD_0F71_REG_4) },
2684 1.1 christos { Bad_Opcode },
2685 1.1 christos { MOD_TABLE (MOD_0F71_REG_6) },
2686 1.1 christos },
2687 1.1 christos /* REG_0F72 */
2688 1.1 christos {
2689 1.1 christos { Bad_Opcode },
2690 1.1 christos { Bad_Opcode },
2691 1.1 christos { MOD_TABLE (MOD_0F72_REG_2) },
2692 1.1 christos { Bad_Opcode },
2693 1.1 christos { MOD_TABLE (MOD_0F72_REG_4) },
2694 1.1 christos { Bad_Opcode },
2695 1.1 christos { MOD_TABLE (MOD_0F72_REG_6) },
2696 1.1 christos },
2697 1.1 christos /* REG_0F73 */
2698 1.1 christos {
2699 1.1 christos { Bad_Opcode },
2700 1.1 christos { Bad_Opcode },
2701 1.1 christos { MOD_TABLE (MOD_0F73_REG_2) },
2702 1.1 christos { MOD_TABLE (MOD_0F73_REG_3) },
2703 1.1 christos { Bad_Opcode },
2704 1.1 christos { Bad_Opcode },
2705 1.1 christos { MOD_TABLE (MOD_0F73_REG_6) },
2706 1.1 christos { MOD_TABLE (MOD_0F73_REG_7) },
2707 1.1 christos },
2708 1.1 christos /* REG_0FA6 */
2709 1.1 christos {
2710 1.1 christos { "montmul", { { OP_0f07, 0 } } },
2711 1.1 christos { "xsha1", { { OP_0f07, 0 } } },
2712 1.1 christos { "xsha256", { { OP_0f07, 0 } } },
2713 1.1 christos },
2714 1.1 christos /* REG_0FA7 */
2715 1.1 christos {
2716 1.1 christos { "xstore-rng", { { OP_0f07, 0 } } },
2717 1.1 christos { "xcrypt-ecb", { { OP_0f07, 0 } } },
2718 1.1 christos { "xcrypt-cbc", { { OP_0f07, 0 } } },
2719 1.1 christos { "xcrypt-ctr", { { OP_0f07, 0 } } },
2720 1.1 christos { "xcrypt-cfb", { { OP_0f07, 0 } } },
2721 1.1 christos { "xcrypt-ofb", { { OP_0f07, 0 } } },
2722 1.1 christos },
2723 1.1 christos /* REG_0FAE */
2724 1.1 christos {
2725 1.1 christos { MOD_TABLE (MOD_0FAE_REG_0) },
2726 1.1 christos { MOD_TABLE (MOD_0FAE_REG_1) },
2727 1.1 christos { MOD_TABLE (MOD_0FAE_REG_2) },
2728 1.1 christos { MOD_TABLE (MOD_0FAE_REG_3) },
2729 1.1 christos { MOD_TABLE (MOD_0FAE_REG_4) },
2730 1.1 christos { MOD_TABLE (MOD_0FAE_REG_5) },
2731 1.1 christos { MOD_TABLE (MOD_0FAE_REG_6) },
2732 1.1 christos { MOD_TABLE (MOD_0FAE_REG_7) },
2733 1.1 christos },
2734 1.1 christos /* REG_0FBA */
2735 1.1 christos {
2736 1.1 christos { Bad_Opcode },
2737 1.1 christos { Bad_Opcode },
2738 1.1 christos { Bad_Opcode },
2739 1.1 christos { Bad_Opcode },
2740 1.1 christos { "btQ", { Ev, Ib } },
2741 1.1.1.2 christos { "btsQ", { Evh1, Ib } },
2742 1.1.1.2 christos { "btrQ", { Evh1, Ib } },
2743 1.1.1.2 christos { "btcQ", { Evh1, Ib } },
2744 1.1 christos },
2745 1.1 christos /* REG_0FC7 */
2746 1.1 christos {
2747 1.1 christos { Bad_Opcode },
2748 1.1 christos { "cmpxchg8b", { { CMPXCHG8B_Fixup, q_mode } } },
2749 1.1 christos { Bad_Opcode },
2750 1.1 christos { Bad_Opcode },
2751 1.1 christos { Bad_Opcode },
2752 1.1 christos { Bad_Opcode },
2753 1.1 christos { MOD_TABLE (MOD_0FC7_REG_6) },
2754 1.1 christos { MOD_TABLE (MOD_0FC7_REG_7) },
2755 1.1 christos },
2756 1.1 christos /* REG_VEX_0F71 */
2757 1.1 christos {
2758 1.1 christos { Bad_Opcode },
2759 1.1 christos { Bad_Opcode },
2760 1.1 christos { MOD_TABLE (MOD_VEX_0F71_REG_2) },
2761 1.1 christos { Bad_Opcode },
2762 1.1 christos { MOD_TABLE (MOD_VEX_0F71_REG_4) },
2763 1.1 christos { Bad_Opcode },
2764 1.1 christos { MOD_TABLE (MOD_VEX_0F71_REG_6) },
2765 1.1 christos },
2766 1.1 christos /* REG_VEX_0F72 */
2767 1.1 christos {
2768 1.1 christos { Bad_Opcode },
2769 1.1 christos { Bad_Opcode },
2770 1.1 christos { MOD_TABLE (MOD_VEX_0F72_REG_2) },
2771 1.1 christos { Bad_Opcode },
2772 1.1 christos { MOD_TABLE (MOD_VEX_0F72_REG_4) },
2773 1.1 christos { Bad_Opcode },
2774 1.1 christos { MOD_TABLE (MOD_VEX_0F72_REG_6) },
2775 1.1 christos },
2776 1.1 christos /* REG_VEX_0F73 */
2777 1.1 christos {
2778 1.1 christos { Bad_Opcode },
2779 1.1 christos { Bad_Opcode },
2780 1.1 christos { MOD_TABLE (MOD_VEX_0F73_REG_2) },
2781 1.1 christos { MOD_TABLE (MOD_VEX_0F73_REG_3) },
2782 1.1 christos { Bad_Opcode },
2783 1.1 christos { Bad_Opcode },
2784 1.1 christos { MOD_TABLE (MOD_VEX_0F73_REG_6) },
2785 1.1 christos { MOD_TABLE (MOD_VEX_0F73_REG_7) },
2786 1.1 christos },
2787 1.1 christos /* REG_VEX_0FAE */
2788 1.1 christos {
2789 1.1 christos { Bad_Opcode },
2790 1.1 christos { Bad_Opcode },
2791 1.1 christos { MOD_TABLE (MOD_VEX_0FAE_REG_2) },
2792 1.1 christos { MOD_TABLE (MOD_VEX_0FAE_REG_3) },
2793 1.1 christos },
2794 1.1 christos /* REG_VEX_0F38F3 */
2795 1.1 christos {
2796 1.1 christos { Bad_Opcode },
2797 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_1) },
2798 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_2) },
2799 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38F3_REG_3) },
2800 1.1 christos },
2801 1.1 christos /* REG_XOP_LWPCB */
2802 1.1 christos {
2803 1.1 christos { "llwpcb", { { OP_LWPCB_E, 0 } } },
2804 1.1 christos { "slwpcb", { { OP_LWPCB_E, 0 } } },
2805 1.1 christos },
2806 1.1 christos /* REG_XOP_LWP */
2807 1.1 christos {
2808 1.1 christos { "lwpins", { { OP_LWP_E, 0 }, Ed, Iq } },
2809 1.1 christos { "lwpval", { { OP_LWP_E, 0 }, Ed, Iq } },
2810 1.1 christos },
2811 1.1 christos /* REG_XOP_TBM_01 */
2812 1.1 christos {
2813 1.1 christos { Bad_Opcode },
2814 1.1 christos { "blcfill", { { OP_LWP_E, 0 }, Ev } },
2815 1.1 christos { "blsfill", { { OP_LWP_E, 0 }, Ev } },
2816 1.1 christos { "blcs", { { OP_LWP_E, 0 }, Ev } },
2817 1.1 christos { "tzmsk", { { OP_LWP_E, 0 }, Ev } },
2818 1.1 christos { "blcic", { { OP_LWP_E, 0 }, Ev } },
2819 1.1 christos { "blsic", { { OP_LWP_E, 0 }, Ev } },
2820 1.1 christos { "t1mskc", { { OP_LWP_E, 0 }, Ev } },
2821 1.1 christos },
2822 1.1 christos /* REG_XOP_TBM_02 */
2823 1.1 christos {
2824 1.1 christos { Bad_Opcode },
2825 1.1 christos { "blcmsk", { { OP_LWP_E, 0 }, Ev } },
2826 1.1 christos { Bad_Opcode },
2827 1.1 christos { Bad_Opcode },
2828 1.1 christos { Bad_Opcode },
2829 1.1 christos { Bad_Opcode },
2830 1.1 christos { "blci", { { OP_LWP_E, 0 }, Ev } },
2831 1.1 christos },
2832 1.1 christos };
2833 1.1 christos
2834 1.1 christos static const struct dis386 prefix_table[][4] = {
2835 1.1 christos /* PREFIX_90 */
2836 1.1 christos {
2837 1.1 christos { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2838 1.1 christos { "pause", { XX } },
2839 1.1 christos { "xchgS", { { NOP_Fixup1, eAX_reg }, { NOP_Fixup2, eAX_reg } } },
2840 1.1 christos },
2841 1.1 christos
2842 1.1 christos /* PREFIX_0F10 */
2843 1.1 christos {
2844 1.1 christos { "movups", { XM, EXx } },
2845 1.1 christos { "movss", { XM, EXd } },
2846 1.1 christos { "movupd", { XM, EXx } },
2847 1.1 christos { "movsd", { XM, EXq } },
2848 1.1 christos },
2849 1.1 christos
2850 1.1 christos /* PREFIX_0F11 */
2851 1.1 christos {
2852 1.1 christos { "movups", { EXxS, XM } },
2853 1.1 christos { "movss", { EXdS, XM } },
2854 1.1 christos { "movupd", { EXxS, XM } },
2855 1.1 christos { "movsd", { EXqS, XM } },
2856 1.1 christos },
2857 1.1 christos
2858 1.1 christos /* PREFIX_0F12 */
2859 1.1 christos {
2860 1.1 christos { MOD_TABLE (MOD_0F12_PREFIX_0) },
2861 1.1 christos { "movsldup", { XM, EXx } },
2862 1.1 christos { "movlpd", { XM, EXq } },
2863 1.1 christos { "movddup", { XM, EXq } },
2864 1.1 christos },
2865 1.1 christos
2866 1.1 christos /* PREFIX_0F16 */
2867 1.1 christos {
2868 1.1 christos { MOD_TABLE (MOD_0F16_PREFIX_0) },
2869 1.1 christos { "movshdup", { XM, EXx } },
2870 1.1 christos { "movhpd", { XM, EXq } },
2871 1.1 christos },
2872 1.1 christos
2873 1.1 christos /* PREFIX_0F2A */
2874 1.1 christos {
2875 1.1 christos { "cvtpi2ps", { XM, EMCq } },
2876 1.1 christos { "cvtsi2ss%LQ", { XM, Ev } },
2877 1.1 christos { "cvtpi2pd", { XM, EMCq } },
2878 1.1 christos { "cvtsi2sd%LQ", { XM, Ev } },
2879 1.1 christos },
2880 1.1 christos
2881 1.1 christos /* PREFIX_0F2B */
2882 1.1 christos {
2883 1.1 christos { MOD_TABLE (MOD_0F2B_PREFIX_0) },
2884 1.1 christos { MOD_TABLE (MOD_0F2B_PREFIX_1) },
2885 1.1 christos { MOD_TABLE (MOD_0F2B_PREFIX_2) },
2886 1.1 christos { MOD_TABLE (MOD_0F2B_PREFIX_3) },
2887 1.1 christos },
2888 1.1 christos
2889 1.1 christos /* PREFIX_0F2C */
2890 1.1 christos {
2891 1.1 christos { "cvttps2pi", { MXC, EXq } },
2892 1.1 christos { "cvttss2siY", { Gv, EXd } },
2893 1.1 christos { "cvttpd2pi", { MXC, EXx } },
2894 1.1 christos { "cvttsd2siY", { Gv, EXq } },
2895 1.1 christos },
2896 1.1 christos
2897 1.1 christos /* PREFIX_0F2D */
2898 1.1 christos {
2899 1.1 christos { "cvtps2pi", { MXC, EXq } },
2900 1.1 christos { "cvtss2siY", { Gv, EXd } },
2901 1.1 christos { "cvtpd2pi", { MXC, EXx } },
2902 1.1 christos { "cvtsd2siY", { Gv, EXq } },
2903 1.1 christos },
2904 1.1 christos
2905 1.1 christos /* PREFIX_0F2E */
2906 1.1 christos {
2907 1.1.1.2 christos { "ucomiss",{ XM, EXd } },
2908 1.1 christos { Bad_Opcode },
2909 1.1.1.2 christos { "ucomisd",{ XM, EXq } },
2910 1.1 christos },
2911 1.1 christos
2912 1.1 christos /* PREFIX_0F2F */
2913 1.1 christos {
2914 1.1 christos { "comiss", { XM, EXd } },
2915 1.1 christos { Bad_Opcode },
2916 1.1 christos { "comisd", { XM, EXq } },
2917 1.1 christos },
2918 1.1 christos
2919 1.1 christos /* PREFIX_0F51 */
2920 1.1 christos {
2921 1.1 christos { "sqrtps", { XM, EXx } },
2922 1.1 christos { "sqrtss", { XM, EXd } },
2923 1.1 christos { "sqrtpd", { XM, EXx } },
2924 1.1 christos { "sqrtsd", { XM, EXq } },
2925 1.1 christos },
2926 1.1 christos
2927 1.1 christos /* PREFIX_0F52 */
2928 1.1 christos {
2929 1.1 christos { "rsqrtps",{ XM, EXx } },
2930 1.1 christos { "rsqrtss",{ XM, EXd } },
2931 1.1 christos },
2932 1.1 christos
2933 1.1 christos /* PREFIX_0F53 */
2934 1.1 christos {
2935 1.1 christos { "rcpps", { XM, EXx } },
2936 1.1 christos { "rcpss", { XM, EXd } },
2937 1.1 christos },
2938 1.1 christos
2939 1.1 christos /* PREFIX_0F58 */
2940 1.1 christos {
2941 1.1 christos { "addps", { XM, EXx } },
2942 1.1 christos { "addss", { XM, EXd } },
2943 1.1 christos { "addpd", { XM, EXx } },
2944 1.1 christos { "addsd", { XM, EXq } },
2945 1.1 christos },
2946 1.1 christos
2947 1.1 christos /* PREFIX_0F59 */
2948 1.1 christos {
2949 1.1 christos { "mulps", { XM, EXx } },
2950 1.1 christos { "mulss", { XM, EXd } },
2951 1.1 christos { "mulpd", { XM, EXx } },
2952 1.1 christos { "mulsd", { XM, EXq } },
2953 1.1 christos },
2954 1.1 christos
2955 1.1 christos /* PREFIX_0F5A */
2956 1.1 christos {
2957 1.1 christos { "cvtps2pd", { XM, EXq } },
2958 1.1 christos { "cvtss2sd", { XM, EXd } },
2959 1.1 christos { "cvtpd2ps", { XM, EXx } },
2960 1.1 christos { "cvtsd2ss", { XM, EXq } },
2961 1.1 christos },
2962 1.1 christos
2963 1.1 christos /* PREFIX_0F5B */
2964 1.1 christos {
2965 1.1 christos { "cvtdq2ps", { XM, EXx } },
2966 1.1 christos { "cvttps2dq", { XM, EXx } },
2967 1.1 christos { "cvtps2dq", { XM, EXx } },
2968 1.1 christos },
2969 1.1 christos
2970 1.1 christos /* PREFIX_0F5C */
2971 1.1 christos {
2972 1.1 christos { "subps", { XM, EXx } },
2973 1.1 christos { "subss", { XM, EXd } },
2974 1.1 christos { "subpd", { XM, EXx } },
2975 1.1 christos { "subsd", { XM, EXq } },
2976 1.1 christos },
2977 1.1 christos
2978 1.1 christos /* PREFIX_0F5D */
2979 1.1 christos {
2980 1.1 christos { "minps", { XM, EXx } },
2981 1.1 christos { "minss", { XM, EXd } },
2982 1.1 christos { "minpd", { XM, EXx } },
2983 1.1 christos { "minsd", { XM, EXq } },
2984 1.1 christos },
2985 1.1 christos
2986 1.1 christos /* PREFIX_0F5E */
2987 1.1 christos {
2988 1.1 christos { "divps", { XM, EXx } },
2989 1.1 christos { "divss", { XM, EXd } },
2990 1.1 christos { "divpd", { XM, EXx } },
2991 1.1 christos { "divsd", { XM, EXq } },
2992 1.1 christos },
2993 1.1 christos
2994 1.1 christos /* PREFIX_0F5F */
2995 1.1 christos {
2996 1.1 christos { "maxps", { XM, EXx } },
2997 1.1 christos { "maxss", { XM, EXd } },
2998 1.1 christos { "maxpd", { XM, EXx } },
2999 1.1 christos { "maxsd", { XM, EXq } },
3000 1.1 christos },
3001 1.1 christos
3002 1.1 christos /* PREFIX_0F60 */
3003 1.1 christos {
3004 1.1 christos { "punpcklbw",{ MX, EMd } },
3005 1.1 christos { Bad_Opcode },
3006 1.1 christos { "punpcklbw",{ MX, EMx } },
3007 1.1 christos },
3008 1.1 christos
3009 1.1 christos /* PREFIX_0F61 */
3010 1.1 christos {
3011 1.1 christos { "punpcklwd",{ MX, EMd } },
3012 1.1 christos { Bad_Opcode },
3013 1.1 christos { "punpcklwd",{ MX, EMx } },
3014 1.1 christos },
3015 1.1 christos
3016 1.1 christos /* PREFIX_0F62 */
3017 1.1 christos {
3018 1.1 christos { "punpckldq",{ MX, EMd } },
3019 1.1 christos { Bad_Opcode },
3020 1.1 christos { "punpckldq",{ MX, EMx } },
3021 1.1 christos },
3022 1.1 christos
3023 1.1 christos /* PREFIX_0F6C */
3024 1.1 christos {
3025 1.1 christos { Bad_Opcode },
3026 1.1 christos { Bad_Opcode },
3027 1.1 christos { "punpcklqdq", { XM, EXx } },
3028 1.1 christos },
3029 1.1 christos
3030 1.1 christos /* PREFIX_0F6D */
3031 1.1 christos {
3032 1.1 christos { Bad_Opcode },
3033 1.1 christos { Bad_Opcode },
3034 1.1 christos { "punpckhqdq", { XM, EXx } },
3035 1.1 christos },
3036 1.1 christos
3037 1.1 christos /* PREFIX_0F6F */
3038 1.1 christos {
3039 1.1 christos { "movq", { MX, EM } },
3040 1.1 christos { "movdqu", { XM, EXx } },
3041 1.1 christos { "movdqa", { XM, EXx } },
3042 1.1 christos },
3043 1.1 christos
3044 1.1 christos /* PREFIX_0F70 */
3045 1.1 christos {
3046 1.1 christos { "pshufw", { MX, EM, Ib } },
3047 1.1 christos { "pshufhw",{ XM, EXx, Ib } },
3048 1.1 christos { "pshufd", { XM, EXx, Ib } },
3049 1.1 christos { "pshuflw",{ XM, EXx, Ib } },
3050 1.1 christos },
3051 1.1 christos
3052 1.1 christos /* PREFIX_0F73_REG_3 */
3053 1.1 christos {
3054 1.1 christos { Bad_Opcode },
3055 1.1 christos { Bad_Opcode },
3056 1.1 christos { "psrldq", { XS, Ib } },
3057 1.1 christos },
3058 1.1 christos
3059 1.1 christos /* PREFIX_0F73_REG_7 */
3060 1.1 christos {
3061 1.1 christos { Bad_Opcode },
3062 1.1 christos { Bad_Opcode },
3063 1.1 christos { "pslldq", { XS, Ib } },
3064 1.1 christos },
3065 1.1 christos
3066 1.1 christos /* PREFIX_0F78 */
3067 1.1 christos {
3068 1.1 christos {"vmread", { Em, Gm } },
3069 1.1 christos { Bad_Opcode },
3070 1.1 christos {"extrq", { XS, Ib, Ib } },
3071 1.1 christos {"insertq", { XM, XS, Ib, Ib } },
3072 1.1 christos },
3073 1.1 christos
3074 1.1 christos /* PREFIX_0F79 */
3075 1.1 christos {
3076 1.1 christos {"vmwrite", { Gm, Em } },
3077 1.1 christos { Bad_Opcode },
3078 1.1 christos {"extrq", { XM, XS } },
3079 1.1 christos {"insertq", { XM, XS } },
3080 1.1 christos },
3081 1.1 christos
3082 1.1 christos /* PREFIX_0F7C */
3083 1.1 christos {
3084 1.1 christos { Bad_Opcode },
3085 1.1 christos { Bad_Opcode },
3086 1.1 christos { "haddpd", { XM, EXx } },
3087 1.1 christos { "haddps", { XM, EXx } },
3088 1.1 christos },
3089 1.1 christos
3090 1.1 christos /* PREFIX_0F7D */
3091 1.1 christos {
3092 1.1 christos { Bad_Opcode },
3093 1.1 christos { Bad_Opcode },
3094 1.1 christos { "hsubpd", { XM, EXx } },
3095 1.1 christos { "hsubps", { XM, EXx } },
3096 1.1 christos },
3097 1.1 christos
3098 1.1 christos /* PREFIX_0F7E */
3099 1.1 christos {
3100 1.1 christos { "movK", { Edq, MX } },
3101 1.1 christos { "movq", { XM, EXq } },
3102 1.1 christos { "movK", { Edq, XM } },
3103 1.1 christos },
3104 1.1 christos
3105 1.1 christos /* PREFIX_0F7F */
3106 1.1 christos {
3107 1.1 christos { "movq", { EMS, MX } },
3108 1.1 christos { "movdqu", { EXxS, XM } },
3109 1.1 christos { "movdqa", { EXxS, XM } },
3110 1.1 christos },
3111 1.1 christos
3112 1.1 christos /* PREFIX_0FAE_REG_0 */
3113 1.1 christos {
3114 1.1 christos { Bad_Opcode },
3115 1.1 christos { "rdfsbase", { Ev } },
3116 1.1 christos },
3117 1.1 christos
3118 1.1 christos /* PREFIX_0FAE_REG_1 */
3119 1.1 christos {
3120 1.1 christos { Bad_Opcode },
3121 1.1 christos { "rdgsbase", { Ev } },
3122 1.1 christos },
3123 1.1 christos
3124 1.1 christos /* PREFIX_0FAE_REG_2 */
3125 1.1 christos {
3126 1.1 christos { Bad_Opcode },
3127 1.1 christos { "wrfsbase", { Ev } },
3128 1.1 christos },
3129 1.1 christos
3130 1.1 christos /* PREFIX_0FAE_REG_3 */
3131 1.1 christos {
3132 1.1 christos { Bad_Opcode },
3133 1.1 christos { "wrgsbase", { Ev } },
3134 1.1 christos },
3135 1.1 christos
3136 1.1 christos /* PREFIX_0FB8 */
3137 1.1 christos {
3138 1.1 christos { Bad_Opcode },
3139 1.1 christos { "popcntS", { Gv, Ev } },
3140 1.1 christos },
3141 1.1 christos
3142 1.1 christos /* PREFIX_0FBC */
3143 1.1 christos {
3144 1.1 christos { "bsfS", { Gv, Ev } },
3145 1.1 christos { "tzcntS", { Gv, Ev } },
3146 1.1 christos { "bsfS", { Gv, Ev } },
3147 1.1 christos },
3148 1.1 christos
3149 1.1 christos /* PREFIX_0FBD */
3150 1.1 christos {
3151 1.1 christos { "bsrS", { Gv, Ev } },
3152 1.1 christos { "lzcntS", { Gv, Ev } },
3153 1.1 christos { "bsrS", { Gv, Ev } },
3154 1.1 christos },
3155 1.1 christos
3156 1.1 christos /* PREFIX_0FC2 */
3157 1.1 christos {
3158 1.1 christos { "cmpps", { XM, EXx, CMP } },
3159 1.1 christos { "cmpss", { XM, EXd, CMP } },
3160 1.1 christos { "cmppd", { XM, EXx, CMP } },
3161 1.1 christos { "cmpsd", { XM, EXq, CMP } },
3162 1.1 christos },
3163 1.1 christos
3164 1.1 christos /* PREFIX_0FC3 */
3165 1.1 christos {
3166 1.1 christos { "movntiS", { Ma, Gv } },
3167 1.1 christos },
3168 1.1 christos
3169 1.1 christos /* PREFIX_0FC7_REG_6 */
3170 1.1 christos {
3171 1.1 christos { "vmptrld",{ Mq } },
3172 1.1 christos { "vmxon", { Mq } },
3173 1.1 christos { "vmclear",{ Mq } },
3174 1.1 christos },
3175 1.1 christos
3176 1.1 christos /* PREFIX_0FD0 */
3177 1.1 christos {
3178 1.1 christos { Bad_Opcode },
3179 1.1 christos { Bad_Opcode },
3180 1.1 christos { "addsubpd", { XM, EXx } },
3181 1.1 christos { "addsubps", { XM, EXx } },
3182 1.1 christos },
3183 1.1 christos
3184 1.1 christos /* PREFIX_0FD6 */
3185 1.1 christos {
3186 1.1 christos { Bad_Opcode },
3187 1.1 christos { "movq2dq",{ XM, MS } },
3188 1.1 christos { "movq", { EXqS, XM } },
3189 1.1 christos { "movdq2q",{ MX, XS } },
3190 1.1 christos },
3191 1.1 christos
3192 1.1 christos /* PREFIX_0FE6 */
3193 1.1 christos {
3194 1.1 christos { Bad_Opcode },
3195 1.1 christos { "cvtdq2pd", { XM, EXq } },
3196 1.1 christos { "cvttpd2dq", { XM, EXx } },
3197 1.1 christos { "cvtpd2dq", { XM, EXx } },
3198 1.1 christos },
3199 1.1 christos
3200 1.1 christos /* PREFIX_0FE7 */
3201 1.1 christos {
3202 1.1 christos { "movntq", { Mq, MX } },
3203 1.1 christos { Bad_Opcode },
3204 1.1 christos { MOD_TABLE (MOD_0FE7_PREFIX_2) },
3205 1.1 christos },
3206 1.1 christos
3207 1.1 christos /* PREFIX_0FF0 */
3208 1.1 christos {
3209 1.1 christos { Bad_Opcode },
3210 1.1 christos { Bad_Opcode },
3211 1.1 christos { Bad_Opcode },
3212 1.1 christos { MOD_TABLE (MOD_0FF0_PREFIX_3) },
3213 1.1 christos },
3214 1.1 christos
3215 1.1 christos /* PREFIX_0FF7 */
3216 1.1 christos {
3217 1.1 christos { "maskmovq", { MX, MS } },
3218 1.1 christos { Bad_Opcode },
3219 1.1 christos { "maskmovdqu", { XM, XS } },
3220 1.1 christos },
3221 1.1 christos
3222 1.1 christos /* PREFIX_0F3810 */
3223 1.1 christos {
3224 1.1 christos { Bad_Opcode },
3225 1.1 christos { Bad_Opcode },
3226 1.1 christos { "pblendvb", { XM, EXx, XMM0 } },
3227 1.1 christos },
3228 1.1 christos
3229 1.1 christos /* PREFIX_0F3814 */
3230 1.1 christos {
3231 1.1 christos { Bad_Opcode },
3232 1.1 christos { Bad_Opcode },
3233 1.1 christos { "blendvps", { XM, EXx, XMM0 } },
3234 1.1 christos },
3235 1.1 christos
3236 1.1 christos /* PREFIX_0F3815 */
3237 1.1 christos {
3238 1.1 christos { Bad_Opcode },
3239 1.1 christos { Bad_Opcode },
3240 1.1 christos { "blendvpd", { XM, EXx, XMM0 } },
3241 1.1 christos },
3242 1.1 christos
3243 1.1 christos /* PREFIX_0F3817 */
3244 1.1 christos {
3245 1.1 christos { Bad_Opcode },
3246 1.1 christos { Bad_Opcode },
3247 1.1 christos { "ptest", { XM, EXx } },
3248 1.1 christos },
3249 1.1 christos
3250 1.1 christos /* PREFIX_0F3820 */
3251 1.1 christos {
3252 1.1 christos { Bad_Opcode },
3253 1.1 christos { Bad_Opcode },
3254 1.1 christos { "pmovsxbw", { XM, EXq } },
3255 1.1 christos },
3256 1.1 christos
3257 1.1 christos /* PREFIX_0F3821 */
3258 1.1 christos {
3259 1.1 christos { Bad_Opcode },
3260 1.1 christos { Bad_Opcode },
3261 1.1 christos { "pmovsxbd", { XM, EXd } },
3262 1.1 christos },
3263 1.1 christos
3264 1.1 christos /* PREFIX_0F3822 */
3265 1.1 christos {
3266 1.1 christos { Bad_Opcode },
3267 1.1 christos { Bad_Opcode },
3268 1.1 christos { "pmovsxbq", { XM, EXw } },
3269 1.1 christos },
3270 1.1 christos
3271 1.1 christos /* PREFIX_0F3823 */
3272 1.1 christos {
3273 1.1 christos { Bad_Opcode },
3274 1.1 christos { Bad_Opcode },
3275 1.1 christos { "pmovsxwd", { XM, EXq } },
3276 1.1 christos },
3277 1.1 christos
3278 1.1 christos /* PREFIX_0F3824 */
3279 1.1 christos {
3280 1.1 christos { Bad_Opcode },
3281 1.1 christos { Bad_Opcode },
3282 1.1 christos { "pmovsxwq", { XM, EXd } },
3283 1.1 christos },
3284 1.1 christos
3285 1.1 christos /* PREFIX_0F3825 */
3286 1.1 christos {
3287 1.1 christos { Bad_Opcode },
3288 1.1 christos { Bad_Opcode },
3289 1.1 christos { "pmovsxdq", { XM, EXq } },
3290 1.1 christos },
3291 1.1 christos
3292 1.1 christos /* PREFIX_0F3828 */
3293 1.1 christos {
3294 1.1 christos { Bad_Opcode },
3295 1.1 christos { Bad_Opcode },
3296 1.1 christos { "pmuldq", { XM, EXx } },
3297 1.1 christos },
3298 1.1 christos
3299 1.1 christos /* PREFIX_0F3829 */
3300 1.1 christos {
3301 1.1 christos { Bad_Opcode },
3302 1.1 christos { Bad_Opcode },
3303 1.1 christos { "pcmpeqq", { XM, EXx } },
3304 1.1 christos },
3305 1.1 christos
3306 1.1 christos /* PREFIX_0F382A */
3307 1.1 christos {
3308 1.1 christos { Bad_Opcode },
3309 1.1 christos { Bad_Opcode },
3310 1.1 christos { MOD_TABLE (MOD_0F382A_PREFIX_2) },
3311 1.1 christos },
3312 1.1 christos
3313 1.1 christos /* PREFIX_0F382B */
3314 1.1 christos {
3315 1.1 christos { Bad_Opcode },
3316 1.1 christos { Bad_Opcode },
3317 1.1 christos { "packusdw", { XM, EXx } },
3318 1.1 christos },
3319 1.1 christos
3320 1.1 christos /* PREFIX_0F3830 */
3321 1.1 christos {
3322 1.1 christos { Bad_Opcode },
3323 1.1 christos { Bad_Opcode },
3324 1.1 christos { "pmovzxbw", { XM, EXq } },
3325 1.1 christos },
3326 1.1 christos
3327 1.1 christos /* PREFIX_0F3831 */
3328 1.1 christos {
3329 1.1 christos { Bad_Opcode },
3330 1.1 christos { Bad_Opcode },
3331 1.1 christos { "pmovzxbd", { XM, EXd } },
3332 1.1 christos },
3333 1.1 christos
3334 1.1 christos /* PREFIX_0F3832 */
3335 1.1 christos {
3336 1.1 christos { Bad_Opcode },
3337 1.1 christos { Bad_Opcode },
3338 1.1 christos { "pmovzxbq", { XM, EXw } },
3339 1.1 christos },
3340 1.1 christos
3341 1.1 christos /* PREFIX_0F3833 */
3342 1.1 christos {
3343 1.1 christos { Bad_Opcode },
3344 1.1 christos { Bad_Opcode },
3345 1.1 christos { "pmovzxwd", { XM, EXq } },
3346 1.1 christos },
3347 1.1 christos
3348 1.1 christos /* PREFIX_0F3834 */
3349 1.1 christos {
3350 1.1 christos { Bad_Opcode },
3351 1.1 christos { Bad_Opcode },
3352 1.1 christos { "pmovzxwq", { XM, EXd } },
3353 1.1 christos },
3354 1.1 christos
3355 1.1 christos /* PREFIX_0F3835 */
3356 1.1 christos {
3357 1.1 christos { Bad_Opcode },
3358 1.1 christos { Bad_Opcode },
3359 1.1 christos { "pmovzxdq", { XM, EXq } },
3360 1.1 christos },
3361 1.1 christos
3362 1.1 christos /* PREFIX_0F3837 */
3363 1.1 christos {
3364 1.1 christos { Bad_Opcode },
3365 1.1 christos { Bad_Opcode },
3366 1.1 christos { "pcmpgtq", { XM, EXx } },
3367 1.1 christos },
3368 1.1 christos
3369 1.1 christos /* PREFIX_0F3838 */
3370 1.1 christos {
3371 1.1 christos { Bad_Opcode },
3372 1.1 christos { Bad_Opcode },
3373 1.1 christos { "pminsb", { XM, EXx } },
3374 1.1 christos },
3375 1.1 christos
3376 1.1 christos /* PREFIX_0F3839 */
3377 1.1 christos {
3378 1.1 christos { Bad_Opcode },
3379 1.1 christos { Bad_Opcode },
3380 1.1 christos { "pminsd", { XM, EXx } },
3381 1.1 christos },
3382 1.1 christos
3383 1.1 christos /* PREFIX_0F383A */
3384 1.1 christos {
3385 1.1 christos { Bad_Opcode },
3386 1.1 christos { Bad_Opcode },
3387 1.1 christos { "pminuw", { XM, EXx } },
3388 1.1 christos },
3389 1.1 christos
3390 1.1 christos /* PREFIX_0F383B */
3391 1.1 christos {
3392 1.1 christos { Bad_Opcode },
3393 1.1 christos { Bad_Opcode },
3394 1.1 christos { "pminud", { XM, EXx } },
3395 1.1 christos },
3396 1.1 christos
3397 1.1 christos /* PREFIX_0F383C */
3398 1.1 christos {
3399 1.1 christos { Bad_Opcode },
3400 1.1 christos { Bad_Opcode },
3401 1.1 christos { "pmaxsb", { XM, EXx } },
3402 1.1 christos },
3403 1.1 christos
3404 1.1 christos /* PREFIX_0F383D */
3405 1.1 christos {
3406 1.1 christos { Bad_Opcode },
3407 1.1 christos { Bad_Opcode },
3408 1.1 christos { "pmaxsd", { XM, EXx } },
3409 1.1 christos },
3410 1.1 christos
3411 1.1 christos /* PREFIX_0F383E */
3412 1.1 christos {
3413 1.1 christos { Bad_Opcode },
3414 1.1 christos { Bad_Opcode },
3415 1.1 christos { "pmaxuw", { XM, EXx } },
3416 1.1 christos },
3417 1.1 christos
3418 1.1 christos /* PREFIX_0F383F */
3419 1.1 christos {
3420 1.1 christos { Bad_Opcode },
3421 1.1 christos { Bad_Opcode },
3422 1.1 christos { "pmaxud", { XM, EXx } },
3423 1.1 christos },
3424 1.1 christos
3425 1.1 christos /* PREFIX_0F3840 */
3426 1.1 christos {
3427 1.1 christos { Bad_Opcode },
3428 1.1 christos { Bad_Opcode },
3429 1.1 christos { "pmulld", { XM, EXx } },
3430 1.1 christos },
3431 1.1 christos
3432 1.1 christos /* PREFIX_0F3841 */
3433 1.1 christos {
3434 1.1 christos { Bad_Opcode },
3435 1.1 christos { Bad_Opcode },
3436 1.1 christos { "phminposuw", { XM, EXx } },
3437 1.1 christos },
3438 1.1 christos
3439 1.1 christos /* PREFIX_0F3880 */
3440 1.1 christos {
3441 1.1 christos { Bad_Opcode },
3442 1.1 christos { Bad_Opcode },
3443 1.1 christos { "invept", { Gm, Mo } },
3444 1.1 christos },
3445 1.1 christos
3446 1.1 christos /* PREFIX_0F3881 */
3447 1.1 christos {
3448 1.1 christos { Bad_Opcode },
3449 1.1 christos { Bad_Opcode },
3450 1.1 christos { "invvpid", { Gm, Mo } },
3451 1.1 christos },
3452 1.1 christos
3453 1.1.1.2 christos /* PREFIX_0F3882 */
3454 1.1.1.2 christos {
3455 1.1.1.2 christos { Bad_Opcode },
3456 1.1.1.2 christos { Bad_Opcode },
3457 1.1.1.2 christos { "invpcid", { Gm, M } },
3458 1.1.1.2 christos },
3459 1.1.1.2 christos
3460 1.1 christos /* PREFIX_0F38DB */
3461 1.1 christos {
3462 1.1 christos { Bad_Opcode },
3463 1.1 christos { Bad_Opcode },
3464 1.1 christos { "aesimc", { XM, EXx } },
3465 1.1 christos },
3466 1.1 christos
3467 1.1 christos /* PREFIX_0F38DC */
3468 1.1 christos {
3469 1.1 christos { Bad_Opcode },
3470 1.1 christos { Bad_Opcode },
3471 1.1 christos { "aesenc", { XM, EXx } },
3472 1.1 christos },
3473 1.1 christos
3474 1.1 christos /* PREFIX_0F38DD */
3475 1.1 christos {
3476 1.1 christos { Bad_Opcode },
3477 1.1 christos { Bad_Opcode },
3478 1.1 christos { "aesenclast", { XM, EXx } },
3479 1.1 christos },
3480 1.1 christos
3481 1.1 christos /* PREFIX_0F38DE */
3482 1.1 christos {
3483 1.1 christos { Bad_Opcode },
3484 1.1 christos { Bad_Opcode },
3485 1.1 christos { "aesdec", { XM, EXx } },
3486 1.1 christos },
3487 1.1 christos
3488 1.1 christos /* PREFIX_0F38DF */
3489 1.1 christos {
3490 1.1 christos { Bad_Opcode },
3491 1.1 christos { Bad_Opcode },
3492 1.1 christos { "aesdeclast", { XM, EXx } },
3493 1.1 christos },
3494 1.1 christos
3495 1.1 christos /* PREFIX_0F38F0 */
3496 1.1 christos {
3497 1.1 christos { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
3498 1.1 christos { Bad_Opcode },
3499 1.1 christos { "movbeS", { Gv, { MOVBE_Fixup, v_mode } } },
3500 1.1.1.2 christos { "crc32", { Gdq, { CRC32_Fixup, b_mode } } },
3501 1.1 christos },
3502 1.1 christos
3503 1.1 christos /* PREFIX_0F38F1 */
3504 1.1 christos {
3505 1.1 christos { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
3506 1.1 christos { Bad_Opcode },
3507 1.1 christos { "movbeS", { { MOVBE_Fixup, v_mode }, Gv } },
3508 1.1.1.2 christos { "crc32", { Gdq, { CRC32_Fixup, v_mode } } },
3509 1.1.1.2 christos },
3510 1.1.1.2 christos
3511 1.1.1.2 christos /* PREFIX_0F38F6 */
3512 1.1.1.2 christos {
3513 1.1.1.2 christos { Bad_Opcode },
3514 1.1.1.2 christos { "adoxS", { Gdq, Edq} },
3515 1.1.1.2 christos { "adcxS", { Gdq, Edq} },
3516 1.1.1.2 christos { Bad_Opcode },
3517 1.1 christos },
3518 1.1 christos
3519 1.1 christos /* PREFIX_0F3A08 */
3520 1.1 christos {
3521 1.1 christos { Bad_Opcode },
3522 1.1 christos { Bad_Opcode },
3523 1.1 christos { "roundps", { XM, EXx, Ib } },
3524 1.1 christos },
3525 1.1 christos
3526 1.1 christos /* PREFIX_0F3A09 */
3527 1.1 christos {
3528 1.1 christos { Bad_Opcode },
3529 1.1 christos { Bad_Opcode },
3530 1.1 christos { "roundpd", { XM, EXx, Ib } },
3531 1.1 christos },
3532 1.1 christos
3533 1.1 christos /* PREFIX_0F3A0A */
3534 1.1 christos {
3535 1.1 christos { Bad_Opcode },
3536 1.1 christos { Bad_Opcode },
3537 1.1 christos { "roundss", { XM, EXd, Ib } },
3538 1.1 christos },
3539 1.1 christos
3540 1.1 christos /* PREFIX_0F3A0B */
3541 1.1 christos {
3542 1.1 christos { Bad_Opcode },
3543 1.1 christos { Bad_Opcode },
3544 1.1 christos { "roundsd", { XM, EXq, Ib } },
3545 1.1 christos },
3546 1.1 christos
3547 1.1 christos /* PREFIX_0F3A0C */
3548 1.1 christos {
3549 1.1 christos { Bad_Opcode },
3550 1.1 christos { Bad_Opcode },
3551 1.1 christos { "blendps", { XM, EXx, Ib } },
3552 1.1 christos },
3553 1.1 christos
3554 1.1 christos /* PREFIX_0F3A0D */
3555 1.1 christos {
3556 1.1 christos { Bad_Opcode },
3557 1.1 christos { Bad_Opcode },
3558 1.1 christos { "blendpd", { XM, EXx, Ib } },
3559 1.1 christos },
3560 1.1 christos
3561 1.1 christos /* PREFIX_0F3A0E */
3562 1.1 christos {
3563 1.1 christos { Bad_Opcode },
3564 1.1 christos { Bad_Opcode },
3565 1.1 christos { "pblendw", { XM, EXx, Ib } },
3566 1.1 christos },
3567 1.1 christos
3568 1.1 christos /* PREFIX_0F3A14 */
3569 1.1 christos {
3570 1.1 christos { Bad_Opcode },
3571 1.1 christos { Bad_Opcode },
3572 1.1 christos { "pextrb", { Edqb, XM, Ib } },
3573 1.1 christos },
3574 1.1 christos
3575 1.1 christos /* PREFIX_0F3A15 */
3576 1.1 christos {
3577 1.1 christos { Bad_Opcode },
3578 1.1 christos { Bad_Opcode },
3579 1.1 christos { "pextrw", { Edqw, XM, Ib } },
3580 1.1 christos },
3581 1.1 christos
3582 1.1 christos /* PREFIX_0F3A16 */
3583 1.1 christos {
3584 1.1 christos { Bad_Opcode },
3585 1.1 christos { Bad_Opcode },
3586 1.1 christos { "pextrK", { Edq, XM, Ib } },
3587 1.1 christos },
3588 1.1 christos
3589 1.1 christos /* PREFIX_0F3A17 */
3590 1.1 christos {
3591 1.1 christos { Bad_Opcode },
3592 1.1 christos { Bad_Opcode },
3593 1.1 christos { "extractps", { Edqd, XM, Ib } },
3594 1.1 christos },
3595 1.1 christos
3596 1.1 christos /* PREFIX_0F3A20 */
3597 1.1 christos {
3598 1.1 christos { Bad_Opcode },
3599 1.1 christos { Bad_Opcode },
3600 1.1 christos { "pinsrb", { XM, Edqb, Ib } },
3601 1.1 christos },
3602 1.1 christos
3603 1.1 christos /* PREFIX_0F3A21 */
3604 1.1 christos {
3605 1.1 christos { Bad_Opcode },
3606 1.1 christos { Bad_Opcode },
3607 1.1 christos { "insertps", { XM, EXd, Ib } },
3608 1.1 christos },
3609 1.1 christos
3610 1.1 christos /* PREFIX_0F3A22 */
3611 1.1 christos {
3612 1.1 christos { Bad_Opcode },
3613 1.1 christos { Bad_Opcode },
3614 1.1 christos { "pinsrK", { XM, Edq, Ib } },
3615 1.1 christos },
3616 1.1 christos
3617 1.1 christos /* PREFIX_0F3A40 */
3618 1.1 christos {
3619 1.1 christos { Bad_Opcode },
3620 1.1 christos { Bad_Opcode },
3621 1.1 christos { "dpps", { XM, EXx, Ib } },
3622 1.1 christos },
3623 1.1 christos
3624 1.1 christos /* PREFIX_0F3A41 */
3625 1.1 christos {
3626 1.1 christos { Bad_Opcode },
3627 1.1 christos { Bad_Opcode },
3628 1.1 christos { "dppd", { XM, EXx, Ib } },
3629 1.1 christos },
3630 1.1 christos
3631 1.1 christos /* PREFIX_0F3A42 */
3632 1.1 christos {
3633 1.1 christos { Bad_Opcode },
3634 1.1 christos { Bad_Opcode },
3635 1.1 christos { "mpsadbw", { XM, EXx, Ib } },
3636 1.1 christos },
3637 1.1 christos
3638 1.1 christos /* PREFIX_0F3A44 */
3639 1.1 christos {
3640 1.1 christos { Bad_Opcode },
3641 1.1 christos { Bad_Opcode },
3642 1.1 christos { "pclmulqdq", { XM, EXx, PCLMUL } },
3643 1.1 christos },
3644 1.1 christos
3645 1.1 christos /* PREFIX_0F3A60 */
3646 1.1 christos {
3647 1.1 christos { Bad_Opcode },
3648 1.1 christos { Bad_Opcode },
3649 1.1 christos { "pcmpestrm", { XM, EXx, Ib } },
3650 1.1 christos },
3651 1.1 christos
3652 1.1 christos /* PREFIX_0F3A61 */
3653 1.1 christos {
3654 1.1 christos { Bad_Opcode },
3655 1.1 christos { Bad_Opcode },
3656 1.1 christos { "pcmpestri", { XM, EXx, Ib } },
3657 1.1 christos },
3658 1.1 christos
3659 1.1 christos /* PREFIX_0F3A62 */
3660 1.1 christos {
3661 1.1 christos { Bad_Opcode },
3662 1.1 christos { Bad_Opcode },
3663 1.1 christos { "pcmpistrm", { XM, EXx, Ib } },
3664 1.1 christos },
3665 1.1 christos
3666 1.1 christos /* PREFIX_0F3A63 */
3667 1.1 christos {
3668 1.1 christos { Bad_Opcode },
3669 1.1 christos { Bad_Opcode },
3670 1.1 christos { "pcmpistri", { XM, EXx, Ib } },
3671 1.1 christos },
3672 1.1 christos
3673 1.1 christos /* PREFIX_0F3ADF */
3674 1.1 christos {
3675 1.1 christos { Bad_Opcode },
3676 1.1 christos { Bad_Opcode },
3677 1.1 christos { "aeskeygenassist", { XM, EXx, Ib } },
3678 1.1 christos },
3679 1.1 christos
3680 1.1 christos /* PREFIX_VEX_0F10 */
3681 1.1 christos {
3682 1.1 christos { VEX_W_TABLE (VEX_W_0F10_P_0) },
3683 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F10_P_1) },
3684 1.1 christos { VEX_W_TABLE (VEX_W_0F10_P_2) },
3685 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F10_P_3) },
3686 1.1 christos },
3687 1.1 christos
3688 1.1 christos /* PREFIX_VEX_0F11 */
3689 1.1 christos {
3690 1.1 christos { VEX_W_TABLE (VEX_W_0F11_P_0) },
3691 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F11_P_1) },
3692 1.1 christos { VEX_W_TABLE (VEX_W_0F11_P_2) },
3693 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F11_P_3) },
3694 1.1 christos },
3695 1.1 christos
3696 1.1 christos /* PREFIX_VEX_0F12 */
3697 1.1 christos {
3698 1.1 christos { MOD_TABLE (MOD_VEX_0F12_PREFIX_0) },
3699 1.1 christos { VEX_W_TABLE (VEX_W_0F12_P_1) },
3700 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F12_P_2) },
3701 1.1 christos { VEX_W_TABLE (VEX_W_0F12_P_3) },
3702 1.1 christos },
3703 1.1 christos
3704 1.1 christos /* PREFIX_VEX_0F16 */
3705 1.1 christos {
3706 1.1 christos { MOD_TABLE (MOD_VEX_0F16_PREFIX_0) },
3707 1.1 christos { VEX_W_TABLE (VEX_W_0F16_P_1) },
3708 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F16_P_2) },
3709 1.1 christos },
3710 1.1 christos
3711 1.1 christos /* PREFIX_VEX_0F2A */
3712 1.1 christos {
3713 1.1 christos { Bad_Opcode },
3714 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2A_P_1) },
3715 1.1 christos { Bad_Opcode },
3716 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2A_P_3) },
3717 1.1 christos },
3718 1.1 christos
3719 1.1 christos /* PREFIX_VEX_0F2C */
3720 1.1 christos {
3721 1.1 christos { Bad_Opcode },
3722 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2C_P_1) },
3723 1.1 christos { Bad_Opcode },
3724 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2C_P_3) },
3725 1.1 christos },
3726 1.1 christos
3727 1.1 christos /* PREFIX_VEX_0F2D */
3728 1.1 christos {
3729 1.1 christos { Bad_Opcode },
3730 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2D_P_1) },
3731 1.1 christos { Bad_Opcode },
3732 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2D_P_3) },
3733 1.1 christos },
3734 1.1 christos
3735 1.1 christos /* PREFIX_VEX_0F2E */
3736 1.1 christos {
3737 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2E_P_0) },
3738 1.1 christos { Bad_Opcode },
3739 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2E_P_2) },
3740 1.1 christos },
3741 1.1 christos
3742 1.1 christos /* PREFIX_VEX_0F2F */
3743 1.1 christos {
3744 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2F_P_0) },
3745 1.1 christos { Bad_Opcode },
3746 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F2F_P_2) },
3747 1.1 christos },
3748 1.1 christos
3749 1.1 christos /* PREFIX_VEX_0F51 */
3750 1.1 christos {
3751 1.1 christos { VEX_W_TABLE (VEX_W_0F51_P_0) },
3752 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F51_P_1) },
3753 1.1 christos { VEX_W_TABLE (VEX_W_0F51_P_2) },
3754 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F51_P_3) },
3755 1.1 christos },
3756 1.1 christos
3757 1.1 christos /* PREFIX_VEX_0F52 */
3758 1.1 christos {
3759 1.1 christos { VEX_W_TABLE (VEX_W_0F52_P_0) },
3760 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F52_P_1) },
3761 1.1 christos },
3762 1.1 christos
3763 1.1 christos /* PREFIX_VEX_0F53 */
3764 1.1 christos {
3765 1.1 christos { VEX_W_TABLE (VEX_W_0F53_P_0) },
3766 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F53_P_1) },
3767 1.1 christos },
3768 1.1 christos
3769 1.1 christos /* PREFIX_VEX_0F58 */
3770 1.1 christos {
3771 1.1 christos { VEX_W_TABLE (VEX_W_0F58_P_0) },
3772 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F58_P_1) },
3773 1.1 christos { VEX_W_TABLE (VEX_W_0F58_P_2) },
3774 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F58_P_3) },
3775 1.1 christos },
3776 1.1 christos
3777 1.1 christos /* PREFIX_VEX_0F59 */
3778 1.1 christos {
3779 1.1 christos { VEX_W_TABLE (VEX_W_0F59_P_0) },
3780 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F59_P_1) },
3781 1.1 christos { VEX_W_TABLE (VEX_W_0F59_P_2) },
3782 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F59_P_3) },
3783 1.1 christos },
3784 1.1 christos
3785 1.1 christos /* PREFIX_VEX_0F5A */
3786 1.1 christos {
3787 1.1 christos { VEX_W_TABLE (VEX_W_0F5A_P_0) },
3788 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5A_P_1) },
3789 1.1 christos { "vcvtpd2ps%XY", { XMM, EXx } },
3790 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5A_P_3) },
3791 1.1 christos },
3792 1.1 christos
3793 1.1 christos /* PREFIX_VEX_0F5B */
3794 1.1 christos {
3795 1.1 christos { VEX_W_TABLE (VEX_W_0F5B_P_0) },
3796 1.1 christos { VEX_W_TABLE (VEX_W_0F5B_P_1) },
3797 1.1 christos { VEX_W_TABLE (VEX_W_0F5B_P_2) },
3798 1.1 christos },
3799 1.1 christos
3800 1.1 christos /* PREFIX_VEX_0F5C */
3801 1.1 christos {
3802 1.1 christos { VEX_W_TABLE (VEX_W_0F5C_P_0) },
3803 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5C_P_1) },
3804 1.1 christos { VEX_W_TABLE (VEX_W_0F5C_P_2) },
3805 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5C_P_3) },
3806 1.1 christos },
3807 1.1 christos
3808 1.1 christos /* PREFIX_VEX_0F5D */
3809 1.1 christos {
3810 1.1 christos { VEX_W_TABLE (VEX_W_0F5D_P_0) },
3811 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5D_P_1) },
3812 1.1 christos { VEX_W_TABLE (VEX_W_0F5D_P_2) },
3813 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5D_P_3) },
3814 1.1 christos },
3815 1.1 christos
3816 1.1 christos /* PREFIX_VEX_0F5E */
3817 1.1 christos {
3818 1.1 christos { VEX_W_TABLE (VEX_W_0F5E_P_0) },
3819 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5E_P_1) },
3820 1.1 christos { VEX_W_TABLE (VEX_W_0F5E_P_2) },
3821 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5E_P_3) },
3822 1.1 christos },
3823 1.1 christos
3824 1.1 christos /* PREFIX_VEX_0F5F */
3825 1.1 christos {
3826 1.1 christos { VEX_W_TABLE (VEX_W_0F5F_P_0) },
3827 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5F_P_1) },
3828 1.1 christos { VEX_W_TABLE (VEX_W_0F5F_P_2) },
3829 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F5F_P_3) },
3830 1.1 christos },
3831 1.1 christos
3832 1.1 christos /* PREFIX_VEX_0F60 */
3833 1.1 christos {
3834 1.1 christos { Bad_Opcode },
3835 1.1 christos { Bad_Opcode },
3836 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F60_P_2) },
3837 1.1 christos },
3838 1.1 christos
3839 1.1 christos /* PREFIX_VEX_0F61 */
3840 1.1 christos {
3841 1.1 christos { Bad_Opcode },
3842 1.1 christos { Bad_Opcode },
3843 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F61_P_2) },
3844 1.1 christos },
3845 1.1 christos
3846 1.1 christos /* PREFIX_VEX_0F62 */
3847 1.1 christos {
3848 1.1 christos { Bad_Opcode },
3849 1.1 christos { Bad_Opcode },
3850 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F62_P_2) },
3851 1.1 christos },
3852 1.1 christos
3853 1.1 christos /* PREFIX_VEX_0F63 */
3854 1.1 christos {
3855 1.1 christos { Bad_Opcode },
3856 1.1 christos { Bad_Opcode },
3857 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F63_P_2) },
3858 1.1 christos },
3859 1.1 christos
3860 1.1 christos /* PREFIX_VEX_0F64 */
3861 1.1 christos {
3862 1.1 christos { Bad_Opcode },
3863 1.1 christos { Bad_Opcode },
3864 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F64_P_2) },
3865 1.1 christos },
3866 1.1 christos
3867 1.1 christos /* PREFIX_VEX_0F65 */
3868 1.1 christos {
3869 1.1 christos { Bad_Opcode },
3870 1.1 christos { Bad_Opcode },
3871 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F65_P_2) },
3872 1.1 christos },
3873 1.1 christos
3874 1.1 christos /* PREFIX_VEX_0F66 */
3875 1.1 christos {
3876 1.1 christos { Bad_Opcode },
3877 1.1 christos { Bad_Opcode },
3878 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F66_P_2) },
3879 1.1 christos },
3880 1.1 christos
3881 1.1 christos /* PREFIX_VEX_0F67 */
3882 1.1 christos {
3883 1.1 christos { Bad_Opcode },
3884 1.1 christos { Bad_Opcode },
3885 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F67_P_2) },
3886 1.1 christos },
3887 1.1 christos
3888 1.1 christos /* PREFIX_VEX_0F68 */
3889 1.1 christos {
3890 1.1 christos { Bad_Opcode },
3891 1.1 christos { Bad_Opcode },
3892 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F68_P_2) },
3893 1.1 christos },
3894 1.1 christos
3895 1.1 christos /* PREFIX_VEX_0F69 */
3896 1.1 christos {
3897 1.1 christos { Bad_Opcode },
3898 1.1 christos { Bad_Opcode },
3899 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F69_P_2) },
3900 1.1 christos },
3901 1.1 christos
3902 1.1 christos /* PREFIX_VEX_0F6A */
3903 1.1 christos {
3904 1.1 christos { Bad_Opcode },
3905 1.1 christos { Bad_Opcode },
3906 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F6A_P_2) },
3907 1.1 christos },
3908 1.1 christos
3909 1.1 christos /* PREFIX_VEX_0F6B */
3910 1.1 christos {
3911 1.1 christos { Bad_Opcode },
3912 1.1 christos { Bad_Opcode },
3913 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F6B_P_2) },
3914 1.1 christos },
3915 1.1 christos
3916 1.1 christos /* PREFIX_VEX_0F6C */
3917 1.1 christos {
3918 1.1 christos { Bad_Opcode },
3919 1.1 christos { Bad_Opcode },
3920 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F6C_P_2) },
3921 1.1 christos },
3922 1.1 christos
3923 1.1 christos /* PREFIX_VEX_0F6D */
3924 1.1 christos {
3925 1.1 christos { Bad_Opcode },
3926 1.1 christos { Bad_Opcode },
3927 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F6D_P_2) },
3928 1.1 christos },
3929 1.1 christos
3930 1.1 christos /* PREFIX_VEX_0F6E */
3931 1.1 christos {
3932 1.1 christos { Bad_Opcode },
3933 1.1 christos { Bad_Opcode },
3934 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F6E_P_2) },
3935 1.1 christos },
3936 1.1 christos
3937 1.1 christos /* PREFIX_VEX_0F6F */
3938 1.1 christos {
3939 1.1 christos { Bad_Opcode },
3940 1.1 christos { VEX_W_TABLE (VEX_W_0F6F_P_1) },
3941 1.1 christos { VEX_W_TABLE (VEX_W_0F6F_P_2) },
3942 1.1 christos },
3943 1.1 christos
3944 1.1 christos /* PREFIX_VEX_0F70 */
3945 1.1 christos {
3946 1.1 christos { Bad_Opcode },
3947 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F70_P_1) },
3948 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F70_P_2) },
3949 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F70_P_3) },
3950 1.1 christos },
3951 1.1 christos
3952 1.1 christos /* PREFIX_VEX_0F71_REG_2 */
3953 1.1 christos {
3954 1.1 christos { Bad_Opcode },
3955 1.1 christos { Bad_Opcode },
3956 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F71_R_2_P_2) },
3957 1.1 christos },
3958 1.1 christos
3959 1.1 christos /* PREFIX_VEX_0F71_REG_4 */
3960 1.1 christos {
3961 1.1 christos { Bad_Opcode },
3962 1.1 christos { Bad_Opcode },
3963 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F71_R_4_P_2) },
3964 1.1 christos },
3965 1.1 christos
3966 1.1 christos /* PREFIX_VEX_0F71_REG_6 */
3967 1.1 christos {
3968 1.1 christos { Bad_Opcode },
3969 1.1 christos { Bad_Opcode },
3970 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F71_R_6_P_2) },
3971 1.1 christos },
3972 1.1 christos
3973 1.1 christos /* PREFIX_VEX_0F72_REG_2 */
3974 1.1 christos {
3975 1.1 christos { Bad_Opcode },
3976 1.1 christos { Bad_Opcode },
3977 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F72_R_2_P_2) },
3978 1.1 christos },
3979 1.1 christos
3980 1.1 christos /* PREFIX_VEX_0F72_REG_4 */
3981 1.1 christos {
3982 1.1 christos { Bad_Opcode },
3983 1.1 christos { Bad_Opcode },
3984 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F72_R_4_P_2) },
3985 1.1 christos },
3986 1.1 christos
3987 1.1 christos /* PREFIX_VEX_0F72_REG_6 */
3988 1.1 christos {
3989 1.1 christos { Bad_Opcode },
3990 1.1 christos { Bad_Opcode },
3991 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F72_R_6_P_2) },
3992 1.1 christos },
3993 1.1 christos
3994 1.1 christos /* PREFIX_VEX_0F73_REG_2 */
3995 1.1 christos {
3996 1.1 christos { Bad_Opcode },
3997 1.1 christos { Bad_Opcode },
3998 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F73_R_2_P_2) },
3999 1.1 christos },
4000 1.1 christos
4001 1.1 christos /* PREFIX_VEX_0F73_REG_3 */
4002 1.1 christos {
4003 1.1 christos { Bad_Opcode },
4004 1.1 christos { Bad_Opcode },
4005 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F73_R_3_P_2) },
4006 1.1 christos },
4007 1.1 christos
4008 1.1 christos /* PREFIX_VEX_0F73_REG_6 */
4009 1.1 christos {
4010 1.1 christos { Bad_Opcode },
4011 1.1 christos { Bad_Opcode },
4012 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F73_R_6_P_2) },
4013 1.1 christos },
4014 1.1 christos
4015 1.1 christos /* PREFIX_VEX_0F73_REG_7 */
4016 1.1 christos {
4017 1.1 christos { Bad_Opcode },
4018 1.1 christos { Bad_Opcode },
4019 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F73_R_7_P_2) },
4020 1.1 christos },
4021 1.1 christos
4022 1.1 christos /* PREFIX_VEX_0F74 */
4023 1.1 christos {
4024 1.1 christos { Bad_Opcode },
4025 1.1 christos { Bad_Opcode },
4026 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F74_P_2) },
4027 1.1 christos },
4028 1.1 christos
4029 1.1 christos /* PREFIX_VEX_0F75 */
4030 1.1 christos {
4031 1.1 christos { Bad_Opcode },
4032 1.1 christos { Bad_Opcode },
4033 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F75_P_2) },
4034 1.1 christos },
4035 1.1 christos
4036 1.1 christos /* PREFIX_VEX_0F76 */
4037 1.1 christos {
4038 1.1 christos { Bad_Opcode },
4039 1.1 christos { Bad_Opcode },
4040 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F76_P_2) },
4041 1.1 christos },
4042 1.1 christos
4043 1.1 christos /* PREFIX_VEX_0F77 */
4044 1.1 christos {
4045 1.1 christos { VEX_W_TABLE (VEX_W_0F77_P_0) },
4046 1.1 christos },
4047 1.1 christos
4048 1.1 christos /* PREFIX_VEX_0F7C */
4049 1.1 christos {
4050 1.1 christos { Bad_Opcode },
4051 1.1 christos { Bad_Opcode },
4052 1.1 christos { VEX_W_TABLE (VEX_W_0F7C_P_2) },
4053 1.1 christos { VEX_W_TABLE (VEX_W_0F7C_P_3) },
4054 1.1 christos },
4055 1.1 christos
4056 1.1 christos /* PREFIX_VEX_0F7D */
4057 1.1 christos {
4058 1.1 christos { Bad_Opcode },
4059 1.1 christos { Bad_Opcode },
4060 1.1 christos { VEX_W_TABLE (VEX_W_0F7D_P_2) },
4061 1.1 christos { VEX_W_TABLE (VEX_W_0F7D_P_3) },
4062 1.1 christos },
4063 1.1 christos
4064 1.1 christos /* PREFIX_VEX_0F7E */
4065 1.1 christos {
4066 1.1 christos { Bad_Opcode },
4067 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F7E_P_1) },
4068 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F7E_P_2) },
4069 1.1 christos },
4070 1.1 christos
4071 1.1 christos /* PREFIX_VEX_0F7F */
4072 1.1 christos {
4073 1.1 christos { Bad_Opcode },
4074 1.1 christos { VEX_W_TABLE (VEX_W_0F7F_P_1) },
4075 1.1 christos { VEX_W_TABLE (VEX_W_0F7F_P_2) },
4076 1.1 christos },
4077 1.1 christos
4078 1.1 christos /* PREFIX_VEX_0FC2 */
4079 1.1 christos {
4080 1.1 christos { VEX_W_TABLE (VEX_W_0FC2_P_0) },
4081 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FC2_P_1) },
4082 1.1 christos { VEX_W_TABLE (VEX_W_0FC2_P_2) },
4083 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FC2_P_3) },
4084 1.1 christos },
4085 1.1 christos
4086 1.1 christos /* PREFIX_VEX_0FC4 */
4087 1.1 christos {
4088 1.1 christos { Bad_Opcode },
4089 1.1 christos { Bad_Opcode },
4090 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FC4_P_2) },
4091 1.1 christos },
4092 1.1 christos
4093 1.1 christos /* PREFIX_VEX_0FC5 */
4094 1.1 christos {
4095 1.1 christos { Bad_Opcode },
4096 1.1 christos { Bad_Opcode },
4097 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FC5_P_2) },
4098 1.1 christos },
4099 1.1 christos
4100 1.1 christos /* PREFIX_VEX_0FD0 */
4101 1.1 christos {
4102 1.1 christos { Bad_Opcode },
4103 1.1 christos { Bad_Opcode },
4104 1.1 christos { VEX_W_TABLE (VEX_W_0FD0_P_2) },
4105 1.1 christos { VEX_W_TABLE (VEX_W_0FD0_P_3) },
4106 1.1 christos },
4107 1.1 christos
4108 1.1 christos /* PREFIX_VEX_0FD1 */
4109 1.1 christos {
4110 1.1 christos { Bad_Opcode },
4111 1.1 christos { Bad_Opcode },
4112 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FD1_P_2) },
4113 1.1 christos },
4114 1.1 christos
4115 1.1 christos /* PREFIX_VEX_0FD2 */
4116 1.1 christos {
4117 1.1 christos { Bad_Opcode },
4118 1.1 christos { Bad_Opcode },
4119 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FD2_P_2) },
4120 1.1 christos },
4121 1.1 christos
4122 1.1 christos /* PREFIX_VEX_0FD3 */
4123 1.1 christos {
4124 1.1 christos { Bad_Opcode },
4125 1.1 christos { Bad_Opcode },
4126 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FD3_P_2) },
4127 1.1 christos },
4128 1.1 christos
4129 1.1 christos /* PREFIX_VEX_0FD4 */
4130 1.1 christos {
4131 1.1 christos { Bad_Opcode },
4132 1.1 christos { Bad_Opcode },
4133 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FD4_P_2) },
4134 1.1 christos },
4135 1.1 christos
4136 1.1 christos /* PREFIX_VEX_0FD5 */
4137 1.1 christos {
4138 1.1 christos { Bad_Opcode },
4139 1.1 christos { Bad_Opcode },
4140 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FD5_P_2) },
4141 1.1 christos },
4142 1.1 christos
4143 1.1 christos /* PREFIX_VEX_0FD6 */
4144 1.1 christos {
4145 1.1 christos { Bad_Opcode },
4146 1.1 christos { Bad_Opcode },
4147 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FD6_P_2) },
4148 1.1 christos },
4149 1.1 christos
4150 1.1 christos /* PREFIX_VEX_0FD7 */
4151 1.1 christos {
4152 1.1 christos { Bad_Opcode },
4153 1.1 christos { Bad_Opcode },
4154 1.1 christos { MOD_TABLE (MOD_VEX_0FD7_PREFIX_2) },
4155 1.1 christos },
4156 1.1 christos
4157 1.1 christos /* PREFIX_VEX_0FD8 */
4158 1.1 christos {
4159 1.1 christos { Bad_Opcode },
4160 1.1 christos { Bad_Opcode },
4161 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FD8_P_2) },
4162 1.1 christos },
4163 1.1 christos
4164 1.1 christos /* PREFIX_VEX_0FD9 */
4165 1.1 christos {
4166 1.1 christos { Bad_Opcode },
4167 1.1 christos { Bad_Opcode },
4168 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FD9_P_2) },
4169 1.1 christos },
4170 1.1 christos
4171 1.1 christos /* PREFIX_VEX_0FDA */
4172 1.1 christos {
4173 1.1 christos { Bad_Opcode },
4174 1.1 christos { Bad_Opcode },
4175 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FDA_P_2) },
4176 1.1 christos },
4177 1.1 christos
4178 1.1 christos /* PREFIX_VEX_0FDB */
4179 1.1 christos {
4180 1.1 christos { Bad_Opcode },
4181 1.1 christos { Bad_Opcode },
4182 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FDB_P_2) },
4183 1.1 christos },
4184 1.1 christos
4185 1.1 christos /* PREFIX_VEX_0FDC */
4186 1.1 christos {
4187 1.1 christos { Bad_Opcode },
4188 1.1 christos { Bad_Opcode },
4189 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FDC_P_2) },
4190 1.1 christos },
4191 1.1 christos
4192 1.1 christos /* PREFIX_VEX_0FDD */
4193 1.1 christos {
4194 1.1 christos { Bad_Opcode },
4195 1.1 christos { Bad_Opcode },
4196 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FDD_P_2) },
4197 1.1 christos },
4198 1.1 christos
4199 1.1 christos /* PREFIX_VEX_0FDE */
4200 1.1 christos {
4201 1.1 christos { Bad_Opcode },
4202 1.1 christos { Bad_Opcode },
4203 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FDE_P_2) },
4204 1.1 christos },
4205 1.1 christos
4206 1.1 christos /* PREFIX_VEX_0FDF */
4207 1.1 christos {
4208 1.1 christos { Bad_Opcode },
4209 1.1 christos { Bad_Opcode },
4210 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FDF_P_2) },
4211 1.1 christos },
4212 1.1 christos
4213 1.1 christos /* PREFIX_VEX_0FE0 */
4214 1.1 christos {
4215 1.1 christos { Bad_Opcode },
4216 1.1 christos { Bad_Opcode },
4217 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FE0_P_2) },
4218 1.1 christos },
4219 1.1 christos
4220 1.1 christos /* PREFIX_VEX_0FE1 */
4221 1.1 christos {
4222 1.1 christos { Bad_Opcode },
4223 1.1 christos { Bad_Opcode },
4224 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FE1_P_2) },
4225 1.1 christos },
4226 1.1 christos
4227 1.1 christos /* PREFIX_VEX_0FE2 */
4228 1.1 christos {
4229 1.1 christos { Bad_Opcode },
4230 1.1 christos { Bad_Opcode },
4231 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FE2_P_2) },
4232 1.1 christos },
4233 1.1 christos
4234 1.1 christos /* PREFIX_VEX_0FE3 */
4235 1.1 christos {
4236 1.1 christos { Bad_Opcode },
4237 1.1 christos { Bad_Opcode },
4238 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FE3_P_2) },
4239 1.1 christos },
4240 1.1 christos
4241 1.1 christos /* PREFIX_VEX_0FE4 */
4242 1.1 christos {
4243 1.1 christos { Bad_Opcode },
4244 1.1 christos { Bad_Opcode },
4245 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FE4_P_2) },
4246 1.1 christos },
4247 1.1 christos
4248 1.1 christos /* PREFIX_VEX_0FE5 */
4249 1.1 christos {
4250 1.1 christos { Bad_Opcode },
4251 1.1 christos { Bad_Opcode },
4252 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FE5_P_2) },
4253 1.1 christos },
4254 1.1 christos
4255 1.1 christos /* PREFIX_VEX_0FE6 */
4256 1.1 christos {
4257 1.1 christos { Bad_Opcode },
4258 1.1 christos { VEX_W_TABLE (VEX_W_0FE6_P_1) },
4259 1.1 christos { VEX_W_TABLE (VEX_W_0FE6_P_2) },
4260 1.1 christos { VEX_W_TABLE (VEX_W_0FE6_P_3) },
4261 1.1 christos },
4262 1.1 christos
4263 1.1 christos /* PREFIX_VEX_0FE7 */
4264 1.1 christos {
4265 1.1 christos { Bad_Opcode },
4266 1.1 christos { Bad_Opcode },
4267 1.1 christos { MOD_TABLE (MOD_VEX_0FE7_PREFIX_2) },
4268 1.1 christos },
4269 1.1 christos
4270 1.1 christos /* PREFIX_VEX_0FE8 */
4271 1.1 christos {
4272 1.1 christos { Bad_Opcode },
4273 1.1 christos { Bad_Opcode },
4274 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FE8_P_2) },
4275 1.1 christos },
4276 1.1 christos
4277 1.1 christos /* PREFIX_VEX_0FE9 */
4278 1.1 christos {
4279 1.1 christos { Bad_Opcode },
4280 1.1 christos { Bad_Opcode },
4281 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FE9_P_2) },
4282 1.1 christos },
4283 1.1 christos
4284 1.1 christos /* PREFIX_VEX_0FEA */
4285 1.1 christos {
4286 1.1 christos { Bad_Opcode },
4287 1.1 christos { Bad_Opcode },
4288 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FEA_P_2) },
4289 1.1 christos },
4290 1.1 christos
4291 1.1 christos /* PREFIX_VEX_0FEB */
4292 1.1 christos {
4293 1.1 christos { Bad_Opcode },
4294 1.1 christos { Bad_Opcode },
4295 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FEB_P_2) },
4296 1.1 christos },
4297 1.1 christos
4298 1.1 christos /* PREFIX_VEX_0FEC */
4299 1.1 christos {
4300 1.1 christos { Bad_Opcode },
4301 1.1 christos { Bad_Opcode },
4302 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FEC_P_2) },
4303 1.1 christos },
4304 1.1 christos
4305 1.1 christos /* PREFIX_VEX_0FED */
4306 1.1 christos {
4307 1.1 christos { Bad_Opcode },
4308 1.1 christos { Bad_Opcode },
4309 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FED_P_2) },
4310 1.1 christos },
4311 1.1 christos
4312 1.1 christos /* PREFIX_VEX_0FEE */
4313 1.1 christos {
4314 1.1 christos { Bad_Opcode },
4315 1.1 christos { Bad_Opcode },
4316 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FEE_P_2) },
4317 1.1 christos },
4318 1.1 christos
4319 1.1 christos /* PREFIX_VEX_0FEF */
4320 1.1 christos {
4321 1.1 christos { Bad_Opcode },
4322 1.1 christos { Bad_Opcode },
4323 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FEF_P_2) },
4324 1.1 christos },
4325 1.1 christos
4326 1.1 christos /* PREFIX_VEX_0FF0 */
4327 1.1 christos {
4328 1.1 christos { Bad_Opcode },
4329 1.1 christos { Bad_Opcode },
4330 1.1 christos { Bad_Opcode },
4331 1.1 christos { MOD_TABLE (MOD_VEX_0FF0_PREFIX_3) },
4332 1.1 christos },
4333 1.1 christos
4334 1.1 christos /* PREFIX_VEX_0FF1 */
4335 1.1 christos {
4336 1.1 christos { Bad_Opcode },
4337 1.1 christos { Bad_Opcode },
4338 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FF1_P_2) },
4339 1.1 christos },
4340 1.1 christos
4341 1.1 christos /* PREFIX_VEX_0FF2 */
4342 1.1 christos {
4343 1.1 christos { Bad_Opcode },
4344 1.1 christos { Bad_Opcode },
4345 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FF2_P_2) },
4346 1.1 christos },
4347 1.1 christos
4348 1.1 christos /* PREFIX_VEX_0FF3 */
4349 1.1 christos {
4350 1.1 christos { Bad_Opcode },
4351 1.1 christos { Bad_Opcode },
4352 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FF3_P_2) },
4353 1.1 christos },
4354 1.1 christos
4355 1.1 christos /* PREFIX_VEX_0FF4 */
4356 1.1 christos {
4357 1.1 christos { Bad_Opcode },
4358 1.1 christos { Bad_Opcode },
4359 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FF4_P_2) },
4360 1.1 christos },
4361 1.1 christos
4362 1.1 christos /* PREFIX_VEX_0FF5 */
4363 1.1 christos {
4364 1.1 christos { Bad_Opcode },
4365 1.1 christos { Bad_Opcode },
4366 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FF5_P_2) },
4367 1.1 christos },
4368 1.1 christos
4369 1.1 christos /* PREFIX_VEX_0FF6 */
4370 1.1 christos {
4371 1.1 christos { Bad_Opcode },
4372 1.1 christos { Bad_Opcode },
4373 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FF6_P_2) },
4374 1.1 christos },
4375 1.1 christos
4376 1.1 christos /* PREFIX_VEX_0FF7 */
4377 1.1 christos {
4378 1.1 christos { Bad_Opcode },
4379 1.1 christos { Bad_Opcode },
4380 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FF7_P_2) },
4381 1.1 christos },
4382 1.1 christos
4383 1.1 christos /* PREFIX_VEX_0FF8 */
4384 1.1 christos {
4385 1.1 christos { Bad_Opcode },
4386 1.1 christos { Bad_Opcode },
4387 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FF8_P_2) },
4388 1.1 christos },
4389 1.1 christos
4390 1.1 christos /* PREFIX_VEX_0FF9 */
4391 1.1 christos {
4392 1.1 christos { Bad_Opcode },
4393 1.1 christos { Bad_Opcode },
4394 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FF9_P_2) },
4395 1.1 christos },
4396 1.1 christos
4397 1.1 christos /* PREFIX_VEX_0FFA */
4398 1.1 christos {
4399 1.1 christos { Bad_Opcode },
4400 1.1 christos { Bad_Opcode },
4401 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FFA_P_2) },
4402 1.1 christos },
4403 1.1 christos
4404 1.1 christos /* PREFIX_VEX_0FFB */
4405 1.1 christos {
4406 1.1 christos { Bad_Opcode },
4407 1.1 christos { Bad_Opcode },
4408 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FFB_P_2) },
4409 1.1 christos },
4410 1.1 christos
4411 1.1 christos /* PREFIX_VEX_0FFC */
4412 1.1 christos {
4413 1.1 christos { Bad_Opcode },
4414 1.1 christos { Bad_Opcode },
4415 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FFC_P_2) },
4416 1.1 christos },
4417 1.1 christos
4418 1.1 christos /* PREFIX_VEX_0FFD */
4419 1.1 christos {
4420 1.1 christos { Bad_Opcode },
4421 1.1 christos { Bad_Opcode },
4422 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FFD_P_2) },
4423 1.1 christos },
4424 1.1 christos
4425 1.1 christos /* PREFIX_VEX_0FFE */
4426 1.1 christos {
4427 1.1 christos { Bad_Opcode },
4428 1.1 christos { Bad_Opcode },
4429 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FFE_P_2) },
4430 1.1 christos },
4431 1.1 christos
4432 1.1 christos /* PREFIX_VEX_0F3800 */
4433 1.1 christos {
4434 1.1 christos { Bad_Opcode },
4435 1.1 christos { Bad_Opcode },
4436 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3800_P_2) },
4437 1.1 christos },
4438 1.1 christos
4439 1.1 christos /* PREFIX_VEX_0F3801 */
4440 1.1 christos {
4441 1.1 christos { Bad_Opcode },
4442 1.1 christos { Bad_Opcode },
4443 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3801_P_2) },
4444 1.1 christos },
4445 1.1 christos
4446 1.1 christos /* PREFIX_VEX_0F3802 */
4447 1.1 christos {
4448 1.1 christos { Bad_Opcode },
4449 1.1 christos { Bad_Opcode },
4450 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3802_P_2) },
4451 1.1 christos },
4452 1.1 christos
4453 1.1 christos /* PREFIX_VEX_0F3803 */
4454 1.1 christos {
4455 1.1 christos { Bad_Opcode },
4456 1.1 christos { Bad_Opcode },
4457 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3803_P_2) },
4458 1.1 christos },
4459 1.1 christos
4460 1.1 christos /* PREFIX_VEX_0F3804 */
4461 1.1 christos {
4462 1.1 christos { Bad_Opcode },
4463 1.1 christos { Bad_Opcode },
4464 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3804_P_2) },
4465 1.1 christos },
4466 1.1 christos
4467 1.1 christos /* PREFIX_VEX_0F3805 */
4468 1.1 christos {
4469 1.1 christos { Bad_Opcode },
4470 1.1 christos { Bad_Opcode },
4471 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3805_P_2) },
4472 1.1 christos },
4473 1.1 christos
4474 1.1 christos /* PREFIX_VEX_0F3806 */
4475 1.1 christos {
4476 1.1 christos { Bad_Opcode },
4477 1.1 christos { Bad_Opcode },
4478 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3806_P_2) },
4479 1.1 christos },
4480 1.1 christos
4481 1.1 christos /* PREFIX_VEX_0F3807 */
4482 1.1 christos {
4483 1.1 christos { Bad_Opcode },
4484 1.1 christos { Bad_Opcode },
4485 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3807_P_2) },
4486 1.1 christos },
4487 1.1 christos
4488 1.1 christos /* PREFIX_VEX_0F3808 */
4489 1.1 christos {
4490 1.1 christos { Bad_Opcode },
4491 1.1 christos { Bad_Opcode },
4492 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3808_P_2) },
4493 1.1 christos },
4494 1.1 christos
4495 1.1 christos /* PREFIX_VEX_0F3809 */
4496 1.1 christos {
4497 1.1 christos { Bad_Opcode },
4498 1.1 christos { Bad_Opcode },
4499 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3809_P_2) },
4500 1.1 christos },
4501 1.1 christos
4502 1.1 christos /* PREFIX_VEX_0F380A */
4503 1.1 christos {
4504 1.1 christos { Bad_Opcode },
4505 1.1 christos { Bad_Opcode },
4506 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F380A_P_2) },
4507 1.1 christos },
4508 1.1 christos
4509 1.1 christos /* PREFIX_VEX_0F380B */
4510 1.1 christos {
4511 1.1 christos { Bad_Opcode },
4512 1.1 christos { Bad_Opcode },
4513 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F380B_P_2) },
4514 1.1 christos },
4515 1.1 christos
4516 1.1 christos /* PREFIX_VEX_0F380C */
4517 1.1 christos {
4518 1.1 christos { Bad_Opcode },
4519 1.1 christos { Bad_Opcode },
4520 1.1 christos { VEX_W_TABLE (VEX_W_0F380C_P_2) },
4521 1.1 christos },
4522 1.1 christos
4523 1.1 christos /* PREFIX_VEX_0F380D */
4524 1.1 christos {
4525 1.1 christos { Bad_Opcode },
4526 1.1 christos { Bad_Opcode },
4527 1.1 christos { VEX_W_TABLE (VEX_W_0F380D_P_2) },
4528 1.1 christos },
4529 1.1 christos
4530 1.1 christos /* PREFIX_VEX_0F380E */
4531 1.1 christos {
4532 1.1 christos { Bad_Opcode },
4533 1.1 christos { Bad_Opcode },
4534 1.1 christos { VEX_W_TABLE (VEX_W_0F380E_P_2) },
4535 1.1 christos },
4536 1.1 christos
4537 1.1 christos /* PREFIX_VEX_0F380F */
4538 1.1 christos {
4539 1.1 christos { Bad_Opcode },
4540 1.1 christos { Bad_Opcode },
4541 1.1 christos { VEX_W_TABLE (VEX_W_0F380F_P_2) },
4542 1.1 christos },
4543 1.1 christos
4544 1.1 christos /* PREFIX_VEX_0F3813 */
4545 1.1 christos {
4546 1.1 christos { Bad_Opcode },
4547 1.1 christos { Bad_Opcode },
4548 1.1 christos { "vcvtph2ps", { XM, EXxmmq } },
4549 1.1 christos },
4550 1.1 christos
4551 1.1.1.2 christos /* PREFIX_VEX_0F3816 */
4552 1.1.1.2 christos {
4553 1.1.1.2 christos { Bad_Opcode },
4554 1.1.1.2 christos { Bad_Opcode },
4555 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F3816_P_2) },
4556 1.1.1.2 christos },
4557 1.1.1.2 christos
4558 1.1 christos /* PREFIX_VEX_0F3817 */
4559 1.1 christos {
4560 1.1 christos { Bad_Opcode },
4561 1.1 christos { Bad_Opcode },
4562 1.1 christos { VEX_W_TABLE (VEX_W_0F3817_P_2) },
4563 1.1 christos },
4564 1.1 christos
4565 1.1 christos /* PREFIX_VEX_0F3818 */
4566 1.1 christos {
4567 1.1 christos { Bad_Opcode },
4568 1.1 christos { Bad_Opcode },
4569 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3818_P_2) },
4570 1.1 christos },
4571 1.1 christos
4572 1.1 christos /* PREFIX_VEX_0F3819 */
4573 1.1 christos {
4574 1.1 christos { Bad_Opcode },
4575 1.1 christos { Bad_Opcode },
4576 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F3819_P_2) },
4577 1.1 christos },
4578 1.1 christos
4579 1.1 christos /* PREFIX_VEX_0F381A */
4580 1.1 christos {
4581 1.1 christos { Bad_Opcode },
4582 1.1 christos { Bad_Opcode },
4583 1.1 christos { MOD_TABLE (MOD_VEX_0F381A_PREFIX_2) },
4584 1.1 christos },
4585 1.1 christos
4586 1.1 christos /* PREFIX_VEX_0F381C */
4587 1.1 christos {
4588 1.1 christos { Bad_Opcode },
4589 1.1 christos { Bad_Opcode },
4590 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F381C_P_2) },
4591 1.1 christos },
4592 1.1 christos
4593 1.1 christos /* PREFIX_VEX_0F381D */
4594 1.1 christos {
4595 1.1 christos { Bad_Opcode },
4596 1.1 christos { Bad_Opcode },
4597 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F381D_P_2) },
4598 1.1 christos },
4599 1.1 christos
4600 1.1 christos /* PREFIX_VEX_0F381E */
4601 1.1 christos {
4602 1.1 christos { Bad_Opcode },
4603 1.1 christos { Bad_Opcode },
4604 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F381E_P_2) },
4605 1.1 christos },
4606 1.1 christos
4607 1.1 christos /* PREFIX_VEX_0F3820 */
4608 1.1 christos {
4609 1.1 christos { Bad_Opcode },
4610 1.1 christos { Bad_Opcode },
4611 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3820_P_2) },
4612 1.1 christos },
4613 1.1 christos
4614 1.1 christos /* PREFIX_VEX_0F3821 */
4615 1.1 christos {
4616 1.1 christos { Bad_Opcode },
4617 1.1 christos { Bad_Opcode },
4618 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3821_P_2) },
4619 1.1 christos },
4620 1.1 christos
4621 1.1 christos /* PREFIX_VEX_0F3822 */
4622 1.1 christos {
4623 1.1 christos { Bad_Opcode },
4624 1.1 christos { Bad_Opcode },
4625 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3822_P_2) },
4626 1.1 christos },
4627 1.1 christos
4628 1.1 christos /* PREFIX_VEX_0F3823 */
4629 1.1 christos {
4630 1.1 christos { Bad_Opcode },
4631 1.1 christos { Bad_Opcode },
4632 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3823_P_2) },
4633 1.1 christos },
4634 1.1 christos
4635 1.1 christos /* PREFIX_VEX_0F3824 */
4636 1.1 christos {
4637 1.1 christos { Bad_Opcode },
4638 1.1 christos { Bad_Opcode },
4639 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3824_P_2) },
4640 1.1 christos },
4641 1.1 christos
4642 1.1 christos /* PREFIX_VEX_0F3825 */
4643 1.1 christos {
4644 1.1 christos { Bad_Opcode },
4645 1.1 christos { Bad_Opcode },
4646 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3825_P_2) },
4647 1.1 christos },
4648 1.1 christos
4649 1.1 christos /* PREFIX_VEX_0F3828 */
4650 1.1 christos {
4651 1.1 christos { Bad_Opcode },
4652 1.1 christos { Bad_Opcode },
4653 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3828_P_2) },
4654 1.1 christos },
4655 1.1 christos
4656 1.1 christos /* PREFIX_VEX_0F3829 */
4657 1.1 christos {
4658 1.1 christos { Bad_Opcode },
4659 1.1 christos { Bad_Opcode },
4660 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3829_P_2) },
4661 1.1 christos },
4662 1.1 christos
4663 1.1 christos /* PREFIX_VEX_0F382A */
4664 1.1 christos {
4665 1.1 christos { Bad_Opcode },
4666 1.1 christos { Bad_Opcode },
4667 1.1 christos { MOD_TABLE (MOD_VEX_0F382A_PREFIX_2) },
4668 1.1 christos },
4669 1.1 christos
4670 1.1 christos /* PREFIX_VEX_0F382B */
4671 1.1 christos {
4672 1.1 christos { Bad_Opcode },
4673 1.1 christos { Bad_Opcode },
4674 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F382B_P_2) },
4675 1.1 christos },
4676 1.1 christos
4677 1.1 christos /* PREFIX_VEX_0F382C */
4678 1.1 christos {
4679 1.1 christos { Bad_Opcode },
4680 1.1 christos { Bad_Opcode },
4681 1.1 christos { MOD_TABLE (MOD_VEX_0F382C_PREFIX_2) },
4682 1.1 christos },
4683 1.1 christos
4684 1.1 christos /* PREFIX_VEX_0F382D */
4685 1.1 christos {
4686 1.1 christos { Bad_Opcode },
4687 1.1 christos { Bad_Opcode },
4688 1.1 christos { MOD_TABLE (MOD_VEX_0F382D_PREFIX_2) },
4689 1.1 christos },
4690 1.1 christos
4691 1.1 christos /* PREFIX_VEX_0F382E */
4692 1.1 christos {
4693 1.1 christos { Bad_Opcode },
4694 1.1 christos { Bad_Opcode },
4695 1.1 christos { MOD_TABLE (MOD_VEX_0F382E_PREFIX_2) },
4696 1.1 christos },
4697 1.1 christos
4698 1.1 christos /* PREFIX_VEX_0F382F */
4699 1.1 christos {
4700 1.1 christos { Bad_Opcode },
4701 1.1 christos { Bad_Opcode },
4702 1.1 christos { MOD_TABLE (MOD_VEX_0F382F_PREFIX_2) },
4703 1.1 christos },
4704 1.1 christos
4705 1.1 christos /* PREFIX_VEX_0F3830 */
4706 1.1 christos {
4707 1.1 christos { Bad_Opcode },
4708 1.1 christos { Bad_Opcode },
4709 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3830_P_2) },
4710 1.1 christos },
4711 1.1 christos
4712 1.1 christos /* PREFIX_VEX_0F3831 */
4713 1.1 christos {
4714 1.1 christos { Bad_Opcode },
4715 1.1 christos { Bad_Opcode },
4716 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3831_P_2) },
4717 1.1 christos },
4718 1.1 christos
4719 1.1 christos /* PREFIX_VEX_0F3832 */
4720 1.1 christos {
4721 1.1 christos { Bad_Opcode },
4722 1.1 christos { Bad_Opcode },
4723 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3832_P_2) },
4724 1.1 christos },
4725 1.1 christos
4726 1.1 christos /* PREFIX_VEX_0F3833 */
4727 1.1 christos {
4728 1.1 christos { Bad_Opcode },
4729 1.1 christos { Bad_Opcode },
4730 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3833_P_2) },
4731 1.1 christos },
4732 1.1 christos
4733 1.1 christos /* PREFIX_VEX_0F3834 */
4734 1.1 christos {
4735 1.1 christos { Bad_Opcode },
4736 1.1 christos { Bad_Opcode },
4737 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3834_P_2) },
4738 1.1 christos },
4739 1.1 christos
4740 1.1 christos /* PREFIX_VEX_0F3835 */
4741 1.1 christos {
4742 1.1 christos { Bad_Opcode },
4743 1.1 christos { Bad_Opcode },
4744 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3835_P_2) },
4745 1.1.1.2 christos },
4746 1.1.1.2 christos
4747 1.1.1.2 christos /* PREFIX_VEX_0F3836 */
4748 1.1.1.2 christos {
4749 1.1.1.2 christos { Bad_Opcode },
4750 1.1.1.2 christos { Bad_Opcode },
4751 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F3836_P_2) },
4752 1.1 christos },
4753 1.1 christos
4754 1.1 christos /* PREFIX_VEX_0F3837 */
4755 1.1 christos {
4756 1.1 christos { Bad_Opcode },
4757 1.1 christos { Bad_Opcode },
4758 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3837_P_2) },
4759 1.1 christos },
4760 1.1 christos
4761 1.1 christos /* PREFIX_VEX_0F3838 */
4762 1.1 christos {
4763 1.1 christos { Bad_Opcode },
4764 1.1 christos { Bad_Opcode },
4765 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3838_P_2) },
4766 1.1 christos },
4767 1.1 christos
4768 1.1 christos /* PREFIX_VEX_0F3839 */
4769 1.1 christos {
4770 1.1 christos { Bad_Opcode },
4771 1.1 christos { Bad_Opcode },
4772 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3839_P_2) },
4773 1.1 christos },
4774 1.1 christos
4775 1.1 christos /* PREFIX_VEX_0F383A */
4776 1.1 christos {
4777 1.1 christos { Bad_Opcode },
4778 1.1 christos { Bad_Opcode },
4779 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F383A_P_2) },
4780 1.1 christos },
4781 1.1 christos
4782 1.1 christos /* PREFIX_VEX_0F383B */
4783 1.1 christos {
4784 1.1 christos { Bad_Opcode },
4785 1.1 christos { Bad_Opcode },
4786 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F383B_P_2) },
4787 1.1 christos },
4788 1.1 christos
4789 1.1 christos /* PREFIX_VEX_0F383C */
4790 1.1 christos {
4791 1.1 christos { Bad_Opcode },
4792 1.1 christos { Bad_Opcode },
4793 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F383C_P_2) },
4794 1.1 christos },
4795 1.1 christos
4796 1.1 christos /* PREFIX_VEX_0F383D */
4797 1.1 christos {
4798 1.1 christos { Bad_Opcode },
4799 1.1 christos { Bad_Opcode },
4800 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F383D_P_2) },
4801 1.1 christos },
4802 1.1 christos
4803 1.1 christos /* PREFIX_VEX_0F383E */
4804 1.1 christos {
4805 1.1 christos { Bad_Opcode },
4806 1.1 christos { Bad_Opcode },
4807 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F383E_P_2) },
4808 1.1 christos },
4809 1.1 christos
4810 1.1 christos /* PREFIX_VEX_0F383F */
4811 1.1 christos {
4812 1.1 christos { Bad_Opcode },
4813 1.1 christos { Bad_Opcode },
4814 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F383F_P_2) },
4815 1.1 christos },
4816 1.1 christos
4817 1.1 christos /* PREFIX_VEX_0F3840 */
4818 1.1 christos {
4819 1.1 christos { Bad_Opcode },
4820 1.1 christos { Bad_Opcode },
4821 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3840_P_2) },
4822 1.1 christos },
4823 1.1 christos
4824 1.1 christos /* PREFIX_VEX_0F3841 */
4825 1.1 christos {
4826 1.1 christos { Bad_Opcode },
4827 1.1 christos { Bad_Opcode },
4828 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3841_P_2) },
4829 1.1 christos },
4830 1.1 christos
4831 1.1.1.2 christos /* PREFIX_VEX_0F3845 */
4832 1.1.1.2 christos {
4833 1.1.1.2 christos { Bad_Opcode },
4834 1.1.1.2 christos { Bad_Opcode },
4835 1.1.1.2 christos { "vpsrlv%LW", { XM, Vex, EXx } },
4836 1.1.1.2 christos },
4837 1.1.1.2 christos
4838 1.1.1.2 christos /* PREFIX_VEX_0F3846 */
4839 1.1.1.2 christos {
4840 1.1.1.2 christos { Bad_Opcode },
4841 1.1.1.2 christos { Bad_Opcode },
4842 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3846_P_2) },
4843 1.1.1.2 christos },
4844 1.1.1.2 christos
4845 1.1.1.2 christos /* PREFIX_VEX_0F3847 */
4846 1.1.1.2 christos {
4847 1.1.1.2 christos { Bad_Opcode },
4848 1.1.1.2 christos { Bad_Opcode },
4849 1.1.1.2 christos { "vpsllv%LW", { XM, Vex, EXx } },
4850 1.1.1.2 christos },
4851 1.1.1.2 christos
4852 1.1.1.2 christos /* PREFIX_VEX_0F3858 */
4853 1.1.1.2 christos {
4854 1.1.1.2 christos { Bad_Opcode },
4855 1.1.1.2 christos { Bad_Opcode },
4856 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3858_P_2) },
4857 1.1.1.2 christos },
4858 1.1.1.2 christos
4859 1.1.1.2 christos /* PREFIX_VEX_0F3859 */
4860 1.1.1.2 christos {
4861 1.1.1.2 christos { Bad_Opcode },
4862 1.1.1.2 christos { Bad_Opcode },
4863 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3859_P_2) },
4864 1.1.1.2 christos },
4865 1.1.1.2 christos
4866 1.1.1.2 christos /* PREFIX_VEX_0F385A */
4867 1.1.1.2 christos {
4868 1.1.1.2 christos { Bad_Opcode },
4869 1.1.1.2 christos { Bad_Opcode },
4870 1.1.1.2 christos { MOD_TABLE (MOD_VEX_0F385A_PREFIX_2) },
4871 1.1.1.2 christos },
4872 1.1.1.2 christos
4873 1.1.1.2 christos /* PREFIX_VEX_0F3878 */
4874 1.1.1.2 christos {
4875 1.1.1.2 christos { Bad_Opcode },
4876 1.1.1.2 christos { Bad_Opcode },
4877 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3878_P_2) },
4878 1.1.1.2 christos },
4879 1.1.1.2 christos
4880 1.1.1.2 christos /* PREFIX_VEX_0F3879 */
4881 1.1.1.2 christos {
4882 1.1.1.2 christos { Bad_Opcode },
4883 1.1.1.2 christos { Bad_Opcode },
4884 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3879_P_2) },
4885 1.1.1.2 christos },
4886 1.1.1.2 christos
4887 1.1.1.2 christos /* PREFIX_VEX_0F388C */
4888 1.1.1.2 christos {
4889 1.1.1.2 christos { Bad_Opcode },
4890 1.1.1.2 christos { Bad_Opcode },
4891 1.1.1.2 christos { MOD_TABLE (MOD_VEX_0F388C_PREFIX_2) },
4892 1.1.1.2 christos },
4893 1.1.1.2 christos
4894 1.1.1.2 christos /* PREFIX_VEX_0F388E */
4895 1.1.1.2 christos {
4896 1.1.1.2 christos { Bad_Opcode },
4897 1.1.1.2 christos { Bad_Opcode },
4898 1.1.1.2 christos { MOD_TABLE (MOD_VEX_0F388E_PREFIX_2) },
4899 1.1.1.2 christos },
4900 1.1.1.2 christos
4901 1.1.1.2 christos /* PREFIX_VEX_0F3890 */
4902 1.1.1.2 christos {
4903 1.1.1.2 christos { Bad_Opcode },
4904 1.1.1.2 christos { Bad_Opcode },
4905 1.1.1.2 christos { "vpgatherd%LW", { XM, MVexVSIBDWpX, Vex } },
4906 1.1.1.2 christos },
4907 1.1.1.2 christos
4908 1.1.1.2 christos /* PREFIX_VEX_0F3891 */
4909 1.1.1.2 christos {
4910 1.1.1.2 christos { Bad_Opcode },
4911 1.1.1.2 christos { Bad_Opcode },
4912 1.1.1.2 christos { "vpgatherq%LW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
4913 1.1.1.2 christos },
4914 1.1.1.2 christos
4915 1.1.1.2 christos /* PREFIX_VEX_0F3892 */
4916 1.1.1.2 christos {
4917 1.1.1.2 christos { Bad_Opcode },
4918 1.1.1.2 christos { Bad_Opcode },
4919 1.1.1.2 christos { "vgatherdp%XW", { XM, MVexVSIBDWpX, Vex } },
4920 1.1.1.2 christos },
4921 1.1.1.2 christos
4922 1.1.1.2 christos /* PREFIX_VEX_0F3893 */
4923 1.1.1.2 christos {
4924 1.1.1.2 christos { Bad_Opcode },
4925 1.1.1.2 christos { Bad_Opcode },
4926 1.1.1.2 christos { "vgatherqp%XW", { XMGatherQ, MVexVSIBQWpX, VexGatherQ } },
4927 1.1.1.2 christos },
4928 1.1.1.2 christos
4929 1.1 christos /* PREFIX_VEX_0F3896 */
4930 1.1 christos {
4931 1.1 christos { Bad_Opcode },
4932 1.1 christos { Bad_Opcode },
4933 1.1 christos { "vfmaddsub132p%XW", { XM, Vex, EXx } },
4934 1.1 christos },
4935 1.1 christos
4936 1.1 christos /* PREFIX_VEX_0F3897 */
4937 1.1 christos {
4938 1.1 christos { Bad_Opcode },
4939 1.1 christos { Bad_Opcode },
4940 1.1 christos { "vfmsubadd132p%XW", { XM, Vex, EXx } },
4941 1.1 christos },
4942 1.1 christos
4943 1.1 christos /* PREFIX_VEX_0F3898 */
4944 1.1 christos {
4945 1.1 christos { Bad_Opcode },
4946 1.1 christos { Bad_Opcode },
4947 1.1 christos { "vfmadd132p%XW", { XM, Vex, EXx } },
4948 1.1 christos },
4949 1.1 christos
4950 1.1 christos /* PREFIX_VEX_0F3899 */
4951 1.1 christos {
4952 1.1 christos { Bad_Opcode },
4953 1.1 christos { Bad_Opcode },
4954 1.1 christos { "vfmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4955 1.1 christos },
4956 1.1 christos
4957 1.1 christos /* PREFIX_VEX_0F389A */
4958 1.1 christos {
4959 1.1 christos { Bad_Opcode },
4960 1.1 christos { Bad_Opcode },
4961 1.1 christos { "vfmsub132p%XW", { XM, Vex, EXx } },
4962 1.1 christos },
4963 1.1 christos
4964 1.1 christos /* PREFIX_VEX_0F389B */
4965 1.1 christos {
4966 1.1 christos { Bad_Opcode },
4967 1.1 christos { Bad_Opcode },
4968 1.1 christos { "vfmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4969 1.1 christos },
4970 1.1 christos
4971 1.1 christos /* PREFIX_VEX_0F389C */
4972 1.1 christos {
4973 1.1 christos { Bad_Opcode },
4974 1.1 christos { Bad_Opcode },
4975 1.1 christos { "vfnmadd132p%XW", { XM, Vex, EXx } },
4976 1.1 christos },
4977 1.1 christos
4978 1.1 christos /* PREFIX_VEX_0F389D */
4979 1.1 christos {
4980 1.1 christos { Bad_Opcode },
4981 1.1 christos { Bad_Opcode },
4982 1.1 christos { "vfnmadd132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4983 1.1 christos },
4984 1.1 christos
4985 1.1 christos /* PREFIX_VEX_0F389E */
4986 1.1 christos {
4987 1.1 christos { Bad_Opcode },
4988 1.1 christos { Bad_Opcode },
4989 1.1 christos { "vfnmsub132p%XW", { XM, Vex, EXx } },
4990 1.1 christos },
4991 1.1 christos
4992 1.1 christos /* PREFIX_VEX_0F389F */
4993 1.1 christos {
4994 1.1 christos { Bad_Opcode },
4995 1.1 christos { Bad_Opcode },
4996 1.1 christos { "vfnmsub132s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
4997 1.1 christos },
4998 1.1 christos
4999 1.1 christos /* PREFIX_VEX_0F38A6 */
5000 1.1 christos {
5001 1.1 christos { Bad_Opcode },
5002 1.1 christos { Bad_Opcode },
5003 1.1 christos { "vfmaddsub213p%XW", { XM, Vex, EXx } },
5004 1.1 christos { Bad_Opcode },
5005 1.1 christos },
5006 1.1 christos
5007 1.1 christos /* PREFIX_VEX_0F38A7 */
5008 1.1 christos {
5009 1.1 christos { Bad_Opcode },
5010 1.1 christos { Bad_Opcode },
5011 1.1 christos { "vfmsubadd213p%XW", { XM, Vex, EXx } },
5012 1.1 christos },
5013 1.1 christos
5014 1.1 christos /* PREFIX_VEX_0F38A8 */
5015 1.1 christos {
5016 1.1 christos { Bad_Opcode },
5017 1.1 christos { Bad_Opcode },
5018 1.1 christos { "vfmadd213p%XW", { XM, Vex, EXx } },
5019 1.1 christos },
5020 1.1 christos
5021 1.1 christos /* PREFIX_VEX_0F38A9 */
5022 1.1 christos {
5023 1.1 christos { Bad_Opcode },
5024 1.1 christos { Bad_Opcode },
5025 1.1 christos { "vfmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5026 1.1 christos },
5027 1.1 christos
5028 1.1 christos /* PREFIX_VEX_0F38AA */
5029 1.1 christos {
5030 1.1 christos { Bad_Opcode },
5031 1.1 christos { Bad_Opcode },
5032 1.1 christos { "vfmsub213p%XW", { XM, Vex, EXx } },
5033 1.1 christos },
5034 1.1 christos
5035 1.1 christos /* PREFIX_VEX_0F38AB */
5036 1.1 christos {
5037 1.1 christos { Bad_Opcode },
5038 1.1 christos { Bad_Opcode },
5039 1.1 christos { "vfmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5040 1.1 christos },
5041 1.1 christos
5042 1.1 christos /* PREFIX_VEX_0F38AC */
5043 1.1 christos {
5044 1.1 christos { Bad_Opcode },
5045 1.1 christos { Bad_Opcode },
5046 1.1 christos { "vfnmadd213p%XW", { XM, Vex, EXx } },
5047 1.1 christos },
5048 1.1 christos
5049 1.1 christos /* PREFIX_VEX_0F38AD */
5050 1.1 christos {
5051 1.1 christos { Bad_Opcode },
5052 1.1 christos { Bad_Opcode },
5053 1.1 christos { "vfnmadd213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5054 1.1 christos },
5055 1.1 christos
5056 1.1 christos /* PREFIX_VEX_0F38AE */
5057 1.1 christos {
5058 1.1 christos { Bad_Opcode },
5059 1.1 christos { Bad_Opcode },
5060 1.1 christos { "vfnmsub213p%XW", { XM, Vex, EXx } },
5061 1.1 christos },
5062 1.1 christos
5063 1.1 christos /* PREFIX_VEX_0F38AF */
5064 1.1 christos {
5065 1.1 christos { Bad_Opcode },
5066 1.1 christos { Bad_Opcode },
5067 1.1 christos { "vfnmsub213s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5068 1.1 christos },
5069 1.1 christos
5070 1.1 christos /* PREFIX_VEX_0F38B6 */
5071 1.1 christos {
5072 1.1 christos { Bad_Opcode },
5073 1.1 christos { Bad_Opcode },
5074 1.1 christos { "vfmaddsub231p%XW", { XM, Vex, EXx } },
5075 1.1 christos },
5076 1.1 christos
5077 1.1 christos /* PREFIX_VEX_0F38B7 */
5078 1.1 christos {
5079 1.1 christos { Bad_Opcode },
5080 1.1 christos { Bad_Opcode },
5081 1.1 christos { "vfmsubadd231p%XW", { XM, Vex, EXx } },
5082 1.1 christos },
5083 1.1 christos
5084 1.1 christos /* PREFIX_VEX_0F38B8 */
5085 1.1 christos {
5086 1.1 christos { Bad_Opcode },
5087 1.1 christos { Bad_Opcode },
5088 1.1 christos { "vfmadd231p%XW", { XM, Vex, EXx } },
5089 1.1 christos },
5090 1.1 christos
5091 1.1 christos /* PREFIX_VEX_0F38B9 */
5092 1.1 christos {
5093 1.1 christos { Bad_Opcode },
5094 1.1 christos { Bad_Opcode },
5095 1.1 christos { "vfmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5096 1.1 christos },
5097 1.1 christos
5098 1.1 christos /* PREFIX_VEX_0F38BA */
5099 1.1 christos {
5100 1.1 christos { Bad_Opcode },
5101 1.1 christos { Bad_Opcode },
5102 1.1 christos { "vfmsub231p%XW", { XM, Vex, EXx } },
5103 1.1 christos },
5104 1.1 christos
5105 1.1 christos /* PREFIX_VEX_0F38BB */
5106 1.1 christos {
5107 1.1 christos { Bad_Opcode },
5108 1.1 christos { Bad_Opcode },
5109 1.1 christos { "vfmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5110 1.1 christos },
5111 1.1 christos
5112 1.1 christos /* PREFIX_VEX_0F38BC */
5113 1.1 christos {
5114 1.1 christos { Bad_Opcode },
5115 1.1 christos { Bad_Opcode },
5116 1.1 christos { "vfnmadd231p%XW", { XM, Vex, EXx } },
5117 1.1 christos },
5118 1.1 christos
5119 1.1 christos /* PREFIX_VEX_0F38BD */
5120 1.1 christos {
5121 1.1 christos { Bad_Opcode },
5122 1.1 christos { Bad_Opcode },
5123 1.1 christos { "vfnmadd231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5124 1.1 christos },
5125 1.1 christos
5126 1.1 christos /* PREFIX_VEX_0F38BE */
5127 1.1 christos {
5128 1.1 christos { Bad_Opcode },
5129 1.1 christos { Bad_Opcode },
5130 1.1 christos { "vfnmsub231p%XW", { XM, Vex, EXx } },
5131 1.1 christos },
5132 1.1 christos
5133 1.1 christos /* PREFIX_VEX_0F38BF */
5134 1.1 christos {
5135 1.1 christos { Bad_Opcode },
5136 1.1 christos { Bad_Opcode },
5137 1.1 christos { "vfnmsub231s%XW", { XMScalar, VexScalar, EXVexWdqScalar } },
5138 1.1 christos },
5139 1.1 christos
5140 1.1 christos /* PREFIX_VEX_0F38DB */
5141 1.1 christos {
5142 1.1 christos { Bad_Opcode },
5143 1.1 christos { Bad_Opcode },
5144 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38DB_P_2) },
5145 1.1 christos },
5146 1.1 christos
5147 1.1 christos /* PREFIX_VEX_0F38DC */
5148 1.1 christos {
5149 1.1 christos { Bad_Opcode },
5150 1.1 christos { Bad_Opcode },
5151 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38DC_P_2) },
5152 1.1 christos },
5153 1.1 christos
5154 1.1 christos /* PREFIX_VEX_0F38DD */
5155 1.1 christos {
5156 1.1 christos { Bad_Opcode },
5157 1.1 christos { Bad_Opcode },
5158 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38DD_P_2) },
5159 1.1 christos },
5160 1.1 christos
5161 1.1 christos /* PREFIX_VEX_0F38DE */
5162 1.1 christos {
5163 1.1 christos { Bad_Opcode },
5164 1.1 christos { Bad_Opcode },
5165 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38DE_P_2) },
5166 1.1 christos },
5167 1.1 christos
5168 1.1 christos /* PREFIX_VEX_0F38DF */
5169 1.1 christos {
5170 1.1 christos { Bad_Opcode },
5171 1.1 christos { Bad_Opcode },
5172 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38DF_P_2) },
5173 1.1 christos },
5174 1.1 christos
5175 1.1 christos /* PREFIX_VEX_0F38F2 */
5176 1.1 christos {
5177 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38F2_P_0) },
5178 1.1 christos },
5179 1.1 christos
5180 1.1 christos /* PREFIX_VEX_0F38F3_REG_1 */
5181 1.1 christos {
5182 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_1_P_0) },
5183 1.1 christos },
5184 1.1 christos
5185 1.1 christos /* PREFIX_VEX_0F38F3_REG_2 */
5186 1.1 christos {
5187 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_2_P_0) },
5188 1.1 christos },
5189 1.1 christos
5190 1.1 christos /* PREFIX_VEX_0F38F3_REG_3 */
5191 1.1 christos {
5192 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38F3_R_3_P_0) },
5193 1.1 christos },
5194 1.1 christos
5195 1.1.1.2 christos /* PREFIX_VEX_0F38F5 */
5196 1.1.1.2 christos {
5197 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_0) },
5198 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_1) },
5199 1.1.1.2 christos { Bad_Opcode },
5200 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F38F5_P_3) },
5201 1.1.1.2 christos },
5202 1.1.1.2 christos
5203 1.1.1.2 christos /* PREFIX_VEX_0F38F6 */
5204 1.1.1.2 christos {
5205 1.1.1.2 christos { Bad_Opcode },
5206 1.1.1.2 christos { Bad_Opcode },
5207 1.1.1.2 christos { Bad_Opcode },
5208 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F38F6_P_3) },
5209 1.1.1.2 christos },
5210 1.1.1.2 christos
5211 1.1 christos /* PREFIX_VEX_0F38F7 */
5212 1.1 christos {
5213 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_0) },
5214 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_1) },
5215 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_2) },
5216 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F38F7_P_3) },
5217 1.1.1.2 christos },
5218 1.1.1.2 christos
5219 1.1.1.2 christos /* PREFIX_VEX_0F3A00 */
5220 1.1.1.2 christos {
5221 1.1.1.2 christos { Bad_Opcode },
5222 1.1.1.2 christos { Bad_Opcode },
5223 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F3A00_P_2) },
5224 1.1.1.2 christos },
5225 1.1.1.2 christos
5226 1.1.1.2 christos /* PREFIX_VEX_0F3A01 */
5227 1.1.1.2 christos {
5228 1.1.1.2 christos { Bad_Opcode },
5229 1.1.1.2 christos { Bad_Opcode },
5230 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F3A01_P_2) },
5231 1.1.1.2 christos },
5232 1.1.1.2 christos
5233 1.1.1.2 christos /* PREFIX_VEX_0F3A02 */
5234 1.1.1.2 christos {
5235 1.1.1.2 christos { Bad_Opcode },
5236 1.1.1.2 christos { Bad_Opcode },
5237 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A02_P_2) },
5238 1.1 christos },
5239 1.1 christos
5240 1.1 christos /* PREFIX_VEX_0F3A04 */
5241 1.1 christos {
5242 1.1 christos { Bad_Opcode },
5243 1.1 christos { Bad_Opcode },
5244 1.1 christos { VEX_W_TABLE (VEX_W_0F3A04_P_2) },
5245 1.1 christos },
5246 1.1 christos
5247 1.1 christos /* PREFIX_VEX_0F3A05 */
5248 1.1 christos {
5249 1.1 christos { Bad_Opcode },
5250 1.1 christos { Bad_Opcode },
5251 1.1 christos { VEX_W_TABLE (VEX_W_0F3A05_P_2) },
5252 1.1 christos },
5253 1.1 christos
5254 1.1 christos /* PREFIX_VEX_0F3A06 */
5255 1.1 christos {
5256 1.1 christos { Bad_Opcode },
5257 1.1 christos { Bad_Opcode },
5258 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A06_P_2) },
5259 1.1 christos },
5260 1.1 christos
5261 1.1 christos /* PREFIX_VEX_0F3A08 */
5262 1.1 christos {
5263 1.1 christos { Bad_Opcode },
5264 1.1 christos { Bad_Opcode },
5265 1.1 christos { VEX_W_TABLE (VEX_W_0F3A08_P_2) },
5266 1.1 christos },
5267 1.1 christos
5268 1.1 christos /* PREFIX_VEX_0F3A09 */
5269 1.1 christos {
5270 1.1 christos { Bad_Opcode },
5271 1.1 christos { Bad_Opcode },
5272 1.1 christos { VEX_W_TABLE (VEX_W_0F3A09_P_2) },
5273 1.1 christos },
5274 1.1 christos
5275 1.1 christos /* PREFIX_VEX_0F3A0A */
5276 1.1 christos {
5277 1.1 christos { Bad_Opcode },
5278 1.1 christos { Bad_Opcode },
5279 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A0A_P_2) },
5280 1.1 christos },
5281 1.1 christos
5282 1.1 christos /* PREFIX_VEX_0F3A0B */
5283 1.1 christos {
5284 1.1 christos { Bad_Opcode },
5285 1.1 christos { Bad_Opcode },
5286 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A0B_P_2) },
5287 1.1 christos },
5288 1.1 christos
5289 1.1 christos /* PREFIX_VEX_0F3A0C */
5290 1.1 christos {
5291 1.1 christos { Bad_Opcode },
5292 1.1 christos { Bad_Opcode },
5293 1.1 christos { VEX_W_TABLE (VEX_W_0F3A0C_P_2) },
5294 1.1 christos },
5295 1.1 christos
5296 1.1 christos /* PREFIX_VEX_0F3A0D */
5297 1.1 christos {
5298 1.1 christos { Bad_Opcode },
5299 1.1 christos { Bad_Opcode },
5300 1.1 christos { VEX_W_TABLE (VEX_W_0F3A0D_P_2) },
5301 1.1 christos },
5302 1.1 christos
5303 1.1 christos /* PREFIX_VEX_0F3A0E */
5304 1.1 christos {
5305 1.1 christos { Bad_Opcode },
5306 1.1 christos { Bad_Opcode },
5307 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A0E_P_2) },
5308 1.1 christos },
5309 1.1 christos
5310 1.1 christos /* PREFIX_VEX_0F3A0F */
5311 1.1 christos {
5312 1.1 christos { Bad_Opcode },
5313 1.1 christos { Bad_Opcode },
5314 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A0F_P_2) },
5315 1.1 christos },
5316 1.1 christos
5317 1.1 christos /* PREFIX_VEX_0F3A14 */
5318 1.1 christos {
5319 1.1 christos { Bad_Opcode },
5320 1.1 christos { Bad_Opcode },
5321 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A14_P_2) },
5322 1.1 christos },
5323 1.1 christos
5324 1.1 christos /* PREFIX_VEX_0F3A15 */
5325 1.1 christos {
5326 1.1 christos { Bad_Opcode },
5327 1.1 christos { Bad_Opcode },
5328 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A15_P_2) },
5329 1.1 christos },
5330 1.1 christos
5331 1.1 christos /* PREFIX_VEX_0F3A16 */
5332 1.1 christos {
5333 1.1 christos { Bad_Opcode },
5334 1.1 christos { Bad_Opcode },
5335 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A16_P_2) },
5336 1.1 christos },
5337 1.1 christos
5338 1.1 christos /* PREFIX_VEX_0F3A17 */
5339 1.1 christos {
5340 1.1 christos { Bad_Opcode },
5341 1.1 christos { Bad_Opcode },
5342 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A17_P_2) },
5343 1.1 christos },
5344 1.1 christos
5345 1.1 christos /* PREFIX_VEX_0F3A18 */
5346 1.1 christos {
5347 1.1 christos { Bad_Opcode },
5348 1.1 christos { Bad_Opcode },
5349 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A18_P_2) },
5350 1.1 christos },
5351 1.1 christos
5352 1.1 christos /* PREFIX_VEX_0F3A19 */
5353 1.1 christos {
5354 1.1 christos { Bad_Opcode },
5355 1.1 christos { Bad_Opcode },
5356 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A19_P_2) },
5357 1.1 christos },
5358 1.1 christos
5359 1.1 christos /* PREFIX_VEX_0F3A1D */
5360 1.1 christos {
5361 1.1 christos { Bad_Opcode },
5362 1.1 christos { Bad_Opcode },
5363 1.1 christos { "vcvtps2ph", { EXxmmq, XM, Ib } },
5364 1.1 christos },
5365 1.1 christos
5366 1.1 christos /* PREFIX_VEX_0F3A20 */
5367 1.1 christos {
5368 1.1 christos { Bad_Opcode },
5369 1.1 christos { Bad_Opcode },
5370 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A20_P_2) },
5371 1.1 christos },
5372 1.1 christos
5373 1.1 christos /* PREFIX_VEX_0F3A21 */
5374 1.1 christos {
5375 1.1 christos { Bad_Opcode },
5376 1.1 christos { Bad_Opcode },
5377 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A21_P_2) },
5378 1.1 christos },
5379 1.1 christos
5380 1.1 christos /* PREFIX_VEX_0F3A22 */
5381 1.1 christos {
5382 1.1 christos { Bad_Opcode },
5383 1.1 christos { Bad_Opcode },
5384 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A22_P_2) },
5385 1.1 christos },
5386 1.1 christos
5387 1.1.1.2 christos /* PREFIX_VEX_0F3A38 */
5388 1.1 christos {
5389 1.1 christos { Bad_Opcode },
5390 1.1 christos { Bad_Opcode },
5391 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F3A38_P_2) },
5392 1.1 christos },
5393 1.1 christos
5394 1.1.1.2 christos /* PREFIX_VEX_0F3A39 */
5395 1.1 christos {
5396 1.1 christos { Bad_Opcode },
5397 1.1 christos { Bad_Opcode },
5398 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F3A39_P_2) },
5399 1.1 christos },
5400 1.1 christos
5401 1.1.1.2 christos /* PREFIX_VEX_0F3A40 */
5402 1.1 christos {
5403 1.1 christos { Bad_Opcode },
5404 1.1 christos { Bad_Opcode },
5405 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A40_P_2) },
5406 1.1 christos },
5407 1.1 christos
5408 1.1.1.2 christos /* PREFIX_VEX_0F3A41 */
5409 1.1.1.2 christos {
5410 1.1.1.2 christos { Bad_Opcode },
5411 1.1.1.2 christos { Bad_Opcode },
5412 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F3A41_P_2) },
5413 1.1.1.2 christos },
5414 1.1.1.2 christos
5415 1.1.1.2 christos /* PREFIX_VEX_0F3A42 */
5416 1.1.1.2 christos {
5417 1.1.1.2 christos { Bad_Opcode },
5418 1.1.1.2 christos { Bad_Opcode },
5419 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A42_P_2) },
5420 1.1.1.2 christos },
5421 1.1.1.2 christos
5422 1.1.1.2 christos /* PREFIX_VEX_0F3A44 */
5423 1.1 christos {
5424 1.1 christos { Bad_Opcode },
5425 1.1 christos { Bad_Opcode },
5426 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A44_P_2) },
5427 1.1 christos },
5428 1.1 christos
5429 1.1.1.2 christos /* PREFIX_VEX_0F3A46 */
5430 1.1.1.2 christos {
5431 1.1.1.2 christos { Bad_Opcode },
5432 1.1.1.2 christos { Bad_Opcode },
5433 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F3A46_P_2) },
5434 1.1.1.2 christos },
5435 1.1.1.2 christos
5436 1.1 christos /* PREFIX_VEX_0F3A48 */
5437 1.1 christos {
5438 1.1 christos { Bad_Opcode },
5439 1.1 christos { Bad_Opcode },
5440 1.1 christos { VEX_W_TABLE (VEX_W_0F3A48_P_2) },
5441 1.1 christos },
5442 1.1 christos
5443 1.1 christos /* PREFIX_VEX_0F3A49 */
5444 1.1 christos {
5445 1.1 christos { Bad_Opcode },
5446 1.1 christos { Bad_Opcode },
5447 1.1 christos { VEX_W_TABLE (VEX_W_0F3A49_P_2) },
5448 1.1 christos },
5449 1.1 christos
5450 1.1 christos /* PREFIX_VEX_0F3A4A */
5451 1.1 christos {
5452 1.1 christos { Bad_Opcode },
5453 1.1 christos { Bad_Opcode },
5454 1.1 christos { VEX_W_TABLE (VEX_W_0F3A4A_P_2) },
5455 1.1 christos },
5456 1.1 christos
5457 1.1 christos /* PREFIX_VEX_0F3A4B */
5458 1.1 christos {
5459 1.1 christos { Bad_Opcode },
5460 1.1 christos { Bad_Opcode },
5461 1.1 christos { VEX_W_TABLE (VEX_W_0F3A4B_P_2) },
5462 1.1 christos },
5463 1.1 christos
5464 1.1 christos /* PREFIX_VEX_0F3A4C */
5465 1.1 christos {
5466 1.1 christos { Bad_Opcode },
5467 1.1 christos { Bad_Opcode },
5468 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A4C_P_2) },
5469 1.1 christos },
5470 1.1 christos
5471 1.1 christos /* PREFIX_VEX_0F3A5C */
5472 1.1 christos {
5473 1.1 christos { Bad_Opcode },
5474 1.1 christos { Bad_Opcode },
5475 1.1 christos { "vfmaddsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5476 1.1 christos },
5477 1.1 christos
5478 1.1 christos /* PREFIX_VEX_0F3A5D */
5479 1.1 christos {
5480 1.1 christos { Bad_Opcode },
5481 1.1 christos { Bad_Opcode },
5482 1.1 christos { "vfmaddsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5483 1.1 christos },
5484 1.1 christos
5485 1.1 christos /* PREFIX_VEX_0F3A5E */
5486 1.1 christos {
5487 1.1 christos { Bad_Opcode },
5488 1.1 christos { Bad_Opcode },
5489 1.1 christos { "vfmsubaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5490 1.1 christos },
5491 1.1 christos
5492 1.1 christos /* PREFIX_VEX_0F3A5F */
5493 1.1 christos {
5494 1.1 christos { Bad_Opcode },
5495 1.1 christos { Bad_Opcode },
5496 1.1 christos { "vfmsubaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5497 1.1 christos },
5498 1.1 christos
5499 1.1 christos /* PREFIX_VEX_0F3A60 */
5500 1.1 christos {
5501 1.1 christos { Bad_Opcode },
5502 1.1 christos { Bad_Opcode },
5503 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A60_P_2) },
5504 1.1 christos { Bad_Opcode },
5505 1.1 christos },
5506 1.1 christos
5507 1.1 christos /* PREFIX_VEX_0F3A61 */
5508 1.1 christos {
5509 1.1 christos { Bad_Opcode },
5510 1.1 christos { Bad_Opcode },
5511 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A61_P_2) },
5512 1.1 christos },
5513 1.1 christos
5514 1.1 christos /* PREFIX_VEX_0F3A62 */
5515 1.1 christos {
5516 1.1 christos { Bad_Opcode },
5517 1.1 christos { Bad_Opcode },
5518 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A62_P_2) },
5519 1.1 christos },
5520 1.1 christos
5521 1.1 christos /* PREFIX_VEX_0F3A63 */
5522 1.1 christos {
5523 1.1 christos { Bad_Opcode },
5524 1.1 christos { Bad_Opcode },
5525 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A63_P_2) },
5526 1.1 christos },
5527 1.1 christos
5528 1.1 christos /* PREFIX_VEX_0F3A68 */
5529 1.1 christos {
5530 1.1 christos { Bad_Opcode },
5531 1.1 christos { Bad_Opcode },
5532 1.1 christos { "vfmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5533 1.1 christos },
5534 1.1 christos
5535 1.1 christos /* PREFIX_VEX_0F3A69 */
5536 1.1 christos {
5537 1.1 christos { Bad_Opcode },
5538 1.1 christos { Bad_Opcode },
5539 1.1 christos { "vfmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5540 1.1 christos },
5541 1.1 christos
5542 1.1 christos /* PREFIX_VEX_0F3A6A */
5543 1.1 christos {
5544 1.1 christos { Bad_Opcode },
5545 1.1 christos { Bad_Opcode },
5546 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A6A_P_2) },
5547 1.1 christos },
5548 1.1 christos
5549 1.1 christos /* PREFIX_VEX_0F3A6B */
5550 1.1 christos {
5551 1.1 christos { Bad_Opcode },
5552 1.1 christos { Bad_Opcode },
5553 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A6B_P_2) },
5554 1.1 christos },
5555 1.1 christos
5556 1.1 christos /* PREFIX_VEX_0F3A6C */
5557 1.1 christos {
5558 1.1 christos { Bad_Opcode },
5559 1.1 christos { Bad_Opcode },
5560 1.1 christos { "vfmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5561 1.1 christos },
5562 1.1 christos
5563 1.1 christos /* PREFIX_VEX_0F3A6D */
5564 1.1 christos {
5565 1.1 christos { Bad_Opcode },
5566 1.1 christos { Bad_Opcode },
5567 1.1 christos { "vfmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5568 1.1 christos },
5569 1.1 christos
5570 1.1 christos /* PREFIX_VEX_0F3A6E */
5571 1.1 christos {
5572 1.1 christos { Bad_Opcode },
5573 1.1 christos { Bad_Opcode },
5574 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A6E_P_2) },
5575 1.1 christos },
5576 1.1 christos
5577 1.1 christos /* PREFIX_VEX_0F3A6F */
5578 1.1 christos {
5579 1.1 christos { Bad_Opcode },
5580 1.1 christos { Bad_Opcode },
5581 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A6F_P_2) },
5582 1.1 christos },
5583 1.1 christos
5584 1.1 christos /* PREFIX_VEX_0F3A78 */
5585 1.1 christos {
5586 1.1 christos { Bad_Opcode },
5587 1.1 christos { Bad_Opcode },
5588 1.1 christos { "vfnmaddps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5589 1.1 christos },
5590 1.1 christos
5591 1.1 christos /* PREFIX_VEX_0F3A79 */
5592 1.1 christos {
5593 1.1 christos { Bad_Opcode },
5594 1.1 christos { Bad_Opcode },
5595 1.1 christos { "vfnmaddpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5596 1.1 christos },
5597 1.1 christos
5598 1.1 christos /* PREFIX_VEX_0F3A7A */
5599 1.1 christos {
5600 1.1 christos { Bad_Opcode },
5601 1.1 christos { Bad_Opcode },
5602 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A7A_P_2) },
5603 1.1 christos },
5604 1.1 christos
5605 1.1 christos /* PREFIX_VEX_0F3A7B */
5606 1.1 christos {
5607 1.1 christos { Bad_Opcode },
5608 1.1 christos { Bad_Opcode },
5609 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A7B_P_2) },
5610 1.1 christos },
5611 1.1 christos
5612 1.1 christos /* PREFIX_VEX_0F3A7C */
5613 1.1 christos {
5614 1.1 christos { Bad_Opcode },
5615 1.1 christos { Bad_Opcode },
5616 1.1 christos { "vfnmsubps", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5617 1.1 christos { Bad_Opcode },
5618 1.1 christos },
5619 1.1 christos
5620 1.1 christos /* PREFIX_VEX_0F3A7D */
5621 1.1 christos {
5622 1.1 christos { Bad_Opcode },
5623 1.1 christos { Bad_Opcode },
5624 1.1 christos { "vfnmsubpd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
5625 1.1 christos },
5626 1.1 christos
5627 1.1 christos /* PREFIX_VEX_0F3A7E */
5628 1.1 christos {
5629 1.1 christos { Bad_Opcode },
5630 1.1 christos { Bad_Opcode },
5631 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A7E_P_2) },
5632 1.1 christos },
5633 1.1 christos
5634 1.1 christos /* PREFIX_VEX_0F3A7F */
5635 1.1 christos {
5636 1.1 christos { Bad_Opcode },
5637 1.1 christos { Bad_Opcode },
5638 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3A7F_P_2) },
5639 1.1 christos },
5640 1.1 christos
5641 1.1 christos /* PREFIX_VEX_0F3ADF */
5642 1.1 christos {
5643 1.1 christos { Bad_Opcode },
5644 1.1 christos { Bad_Opcode },
5645 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F3ADF_P_2) },
5646 1.1 christos },
5647 1.1.1.2 christos
5648 1.1.1.2 christos /* PREFIX_VEX_0F3AF0 */
5649 1.1.1.2 christos {
5650 1.1.1.2 christos { Bad_Opcode },
5651 1.1.1.2 christos { Bad_Opcode },
5652 1.1.1.2 christos { Bad_Opcode },
5653 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F3AF0_P_3) },
5654 1.1.1.2 christos },
5655 1.1 christos };
5656 1.1 christos
5657 1.1 christos static const struct dis386 x86_64_table[][2] = {
5658 1.1 christos /* X86_64_06 */
5659 1.1 christos {
5660 1.1 christos { "pushP", { es } },
5661 1.1 christos },
5662 1.1 christos
5663 1.1 christos /* X86_64_07 */
5664 1.1 christos {
5665 1.1 christos { "popP", { es } },
5666 1.1 christos },
5667 1.1 christos
5668 1.1 christos /* X86_64_0D */
5669 1.1 christos {
5670 1.1 christos { "pushP", { cs } },
5671 1.1 christos },
5672 1.1 christos
5673 1.1 christos /* X86_64_16 */
5674 1.1 christos {
5675 1.1 christos { "pushP", { ss } },
5676 1.1 christos },
5677 1.1 christos
5678 1.1 christos /* X86_64_17 */
5679 1.1 christos {
5680 1.1 christos { "popP", { ss } },
5681 1.1 christos },
5682 1.1 christos
5683 1.1 christos /* X86_64_1E */
5684 1.1 christos {
5685 1.1 christos { "pushP", { ds } },
5686 1.1 christos },
5687 1.1 christos
5688 1.1 christos /* X86_64_1F */
5689 1.1 christos {
5690 1.1 christos { "popP", { ds } },
5691 1.1 christos },
5692 1.1 christos
5693 1.1 christos /* X86_64_27 */
5694 1.1 christos {
5695 1.1 christos { "daa", { XX } },
5696 1.1 christos },
5697 1.1 christos
5698 1.1 christos /* X86_64_2F */
5699 1.1 christos {
5700 1.1 christos { "das", { XX } },
5701 1.1 christos },
5702 1.1 christos
5703 1.1 christos /* X86_64_37 */
5704 1.1 christos {
5705 1.1 christos { "aaa", { XX } },
5706 1.1 christos },
5707 1.1 christos
5708 1.1 christos /* X86_64_3F */
5709 1.1 christos {
5710 1.1 christos { "aas", { XX } },
5711 1.1 christos },
5712 1.1 christos
5713 1.1 christos /* X86_64_60 */
5714 1.1 christos {
5715 1.1 christos { "pushaP", { XX } },
5716 1.1 christos },
5717 1.1 christos
5718 1.1 christos /* X86_64_61 */
5719 1.1 christos {
5720 1.1 christos { "popaP", { XX } },
5721 1.1 christos },
5722 1.1 christos
5723 1.1 christos /* X86_64_62 */
5724 1.1 christos {
5725 1.1 christos { MOD_TABLE (MOD_62_32BIT) },
5726 1.1 christos },
5727 1.1 christos
5728 1.1 christos /* X86_64_63 */
5729 1.1 christos {
5730 1.1 christos { "arpl", { Ew, Gw } },
5731 1.1 christos { "movs{lq|xd}", { Gv, Ed } },
5732 1.1 christos },
5733 1.1 christos
5734 1.1 christos /* X86_64_6D */
5735 1.1 christos {
5736 1.1 christos { "ins{R|}", { Yzr, indirDX } },
5737 1.1 christos { "ins{G|}", { Yzr, indirDX } },
5738 1.1 christos },
5739 1.1 christos
5740 1.1 christos /* X86_64_6F */
5741 1.1 christos {
5742 1.1 christos { "outs{R|}", { indirDXr, Xz } },
5743 1.1 christos { "outs{G|}", { indirDXr, Xz } },
5744 1.1 christos },
5745 1.1 christos
5746 1.1 christos /* X86_64_9A */
5747 1.1 christos {
5748 1.1 christos { "Jcall{T|}", { Ap } },
5749 1.1 christos },
5750 1.1 christos
5751 1.1 christos /* X86_64_C4 */
5752 1.1 christos {
5753 1.1 christos { MOD_TABLE (MOD_C4_32BIT) },
5754 1.1 christos { VEX_C4_TABLE (VEX_0F) },
5755 1.1 christos },
5756 1.1 christos
5757 1.1 christos /* X86_64_C5 */
5758 1.1 christos {
5759 1.1 christos { MOD_TABLE (MOD_C5_32BIT) },
5760 1.1 christos { VEX_C5_TABLE (VEX_0F) },
5761 1.1 christos },
5762 1.1 christos
5763 1.1 christos /* X86_64_CE */
5764 1.1 christos {
5765 1.1 christos { "into", { XX } },
5766 1.1 christos },
5767 1.1 christos
5768 1.1 christos /* X86_64_D4 */
5769 1.1 christos {
5770 1.1 christos { "aam", { Ib } },
5771 1.1 christos },
5772 1.1 christos
5773 1.1 christos /* X86_64_D5 */
5774 1.1 christos {
5775 1.1 christos { "aad", { Ib } },
5776 1.1 christos },
5777 1.1 christos
5778 1.1 christos /* X86_64_EA */
5779 1.1 christos {
5780 1.1 christos { "Jjmp{T|}", { Ap } },
5781 1.1 christos },
5782 1.1 christos
5783 1.1 christos /* X86_64_0F01_REG_0 */
5784 1.1 christos {
5785 1.1 christos { "sgdt{Q|IQ}", { M } },
5786 1.1 christos { "sgdt", { M } },
5787 1.1 christos },
5788 1.1 christos
5789 1.1 christos /* X86_64_0F01_REG_1 */
5790 1.1 christos {
5791 1.1 christos { "sidt{Q|IQ}", { M } },
5792 1.1 christos { "sidt", { M } },
5793 1.1 christos },
5794 1.1 christos
5795 1.1 christos /* X86_64_0F01_REG_2 */
5796 1.1 christos {
5797 1.1 christos { "lgdt{Q|Q}", { M } },
5798 1.1 christos { "lgdt", { M } },
5799 1.1 christos },
5800 1.1 christos
5801 1.1 christos /* X86_64_0F01_REG_3 */
5802 1.1 christos {
5803 1.1 christos { "lidt{Q|Q}", { M } },
5804 1.1 christos { "lidt", { M } },
5805 1.1 christos },
5806 1.1 christos };
5807 1.1 christos
5808 1.1 christos static const struct dis386 three_byte_table[][256] = {
5809 1.1 christos
5810 1.1 christos /* THREE_BYTE_0F38 */
5811 1.1 christos {
5812 1.1 christos /* 00 */
5813 1.1 christos { "pshufb", { MX, EM } },
5814 1.1 christos { "phaddw", { MX, EM } },
5815 1.1 christos { "phaddd", { MX, EM } },
5816 1.1 christos { "phaddsw", { MX, EM } },
5817 1.1 christos { "pmaddubsw", { MX, EM } },
5818 1.1 christos { "phsubw", { MX, EM } },
5819 1.1 christos { "phsubd", { MX, EM } },
5820 1.1 christos { "phsubsw", { MX, EM } },
5821 1.1 christos /* 08 */
5822 1.1 christos { "psignb", { MX, EM } },
5823 1.1 christos { "psignw", { MX, EM } },
5824 1.1 christos { "psignd", { MX, EM } },
5825 1.1 christos { "pmulhrsw", { MX, EM } },
5826 1.1 christos { Bad_Opcode },
5827 1.1 christos { Bad_Opcode },
5828 1.1 christos { Bad_Opcode },
5829 1.1 christos { Bad_Opcode },
5830 1.1 christos /* 10 */
5831 1.1 christos { PREFIX_TABLE (PREFIX_0F3810) },
5832 1.1 christos { Bad_Opcode },
5833 1.1 christos { Bad_Opcode },
5834 1.1 christos { Bad_Opcode },
5835 1.1 christos { PREFIX_TABLE (PREFIX_0F3814) },
5836 1.1 christos { PREFIX_TABLE (PREFIX_0F3815) },
5837 1.1 christos { Bad_Opcode },
5838 1.1 christos { PREFIX_TABLE (PREFIX_0F3817) },
5839 1.1 christos /* 18 */
5840 1.1 christos { Bad_Opcode },
5841 1.1 christos { Bad_Opcode },
5842 1.1 christos { Bad_Opcode },
5843 1.1 christos { Bad_Opcode },
5844 1.1 christos { "pabsb", { MX, EM } },
5845 1.1 christos { "pabsw", { MX, EM } },
5846 1.1 christos { "pabsd", { MX, EM } },
5847 1.1 christos { Bad_Opcode },
5848 1.1 christos /* 20 */
5849 1.1 christos { PREFIX_TABLE (PREFIX_0F3820) },
5850 1.1 christos { PREFIX_TABLE (PREFIX_0F3821) },
5851 1.1 christos { PREFIX_TABLE (PREFIX_0F3822) },
5852 1.1 christos { PREFIX_TABLE (PREFIX_0F3823) },
5853 1.1 christos { PREFIX_TABLE (PREFIX_0F3824) },
5854 1.1 christos { PREFIX_TABLE (PREFIX_0F3825) },
5855 1.1 christos { Bad_Opcode },
5856 1.1 christos { Bad_Opcode },
5857 1.1 christos /* 28 */
5858 1.1 christos { PREFIX_TABLE (PREFIX_0F3828) },
5859 1.1 christos { PREFIX_TABLE (PREFIX_0F3829) },
5860 1.1 christos { PREFIX_TABLE (PREFIX_0F382A) },
5861 1.1 christos { PREFIX_TABLE (PREFIX_0F382B) },
5862 1.1 christos { Bad_Opcode },
5863 1.1 christos { Bad_Opcode },
5864 1.1 christos { Bad_Opcode },
5865 1.1 christos { Bad_Opcode },
5866 1.1 christos /* 30 */
5867 1.1 christos { PREFIX_TABLE (PREFIX_0F3830) },
5868 1.1 christos { PREFIX_TABLE (PREFIX_0F3831) },
5869 1.1 christos { PREFIX_TABLE (PREFIX_0F3832) },
5870 1.1 christos { PREFIX_TABLE (PREFIX_0F3833) },
5871 1.1 christos { PREFIX_TABLE (PREFIX_0F3834) },
5872 1.1 christos { PREFIX_TABLE (PREFIX_0F3835) },
5873 1.1 christos { Bad_Opcode },
5874 1.1 christos { PREFIX_TABLE (PREFIX_0F3837) },
5875 1.1 christos /* 38 */
5876 1.1 christos { PREFIX_TABLE (PREFIX_0F3838) },
5877 1.1 christos { PREFIX_TABLE (PREFIX_0F3839) },
5878 1.1 christos { PREFIX_TABLE (PREFIX_0F383A) },
5879 1.1 christos { PREFIX_TABLE (PREFIX_0F383B) },
5880 1.1 christos { PREFIX_TABLE (PREFIX_0F383C) },
5881 1.1 christos { PREFIX_TABLE (PREFIX_0F383D) },
5882 1.1 christos { PREFIX_TABLE (PREFIX_0F383E) },
5883 1.1 christos { PREFIX_TABLE (PREFIX_0F383F) },
5884 1.1 christos /* 40 */
5885 1.1 christos { PREFIX_TABLE (PREFIX_0F3840) },
5886 1.1 christos { PREFIX_TABLE (PREFIX_0F3841) },
5887 1.1 christos { Bad_Opcode },
5888 1.1 christos { Bad_Opcode },
5889 1.1 christos { Bad_Opcode },
5890 1.1 christos { Bad_Opcode },
5891 1.1 christos { Bad_Opcode },
5892 1.1 christos { Bad_Opcode },
5893 1.1 christos /* 48 */
5894 1.1 christos { Bad_Opcode },
5895 1.1 christos { Bad_Opcode },
5896 1.1 christos { Bad_Opcode },
5897 1.1 christos { Bad_Opcode },
5898 1.1 christos { Bad_Opcode },
5899 1.1 christos { Bad_Opcode },
5900 1.1 christos { Bad_Opcode },
5901 1.1 christos { Bad_Opcode },
5902 1.1 christos /* 50 */
5903 1.1 christos { Bad_Opcode },
5904 1.1 christos { Bad_Opcode },
5905 1.1 christos { Bad_Opcode },
5906 1.1 christos { Bad_Opcode },
5907 1.1 christos { Bad_Opcode },
5908 1.1 christos { Bad_Opcode },
5909 1.1 christos { Bad_Opcode },
5910 1.1 christos { Bad_Opcode },
5911 1.1 christos /* 58 */
5912 1.1 christos { Bad_Opcode },
5913 1.1 christos { Bad_Opcode },
5914 1.1 christos { Bad_Opcode },
5915 1.1 christos { Bad_Opcode },
5916 1.1 christos { Bad_Opcode },
5917 1.1 christos { Bad_Opcode },
5918 1.1 christos { Bad_Opcode },
5919 1.1 christos { Bad_Opcode },
5920 1.1 christos /* 60 */
5921 1.1 christos { Bad_Opcode },
5922 1.1 christos { Bad_Opcode },
5923 1.1 christos { Bad_Opcode },
5924 1.1 christos { Bad_Opcode },
5925 1.1 christos { Bad_Opcode },
5926 1.1 christos { Bad_Opcode },
5927 1.1 christos { Bad_Opcode },
5928 1.1 christos { Bad_Opcode },
5929 1.1 christos /* 68 */
5930 1.1 christos { Bad_Opcode },
5931 1.1 christos { Bad_Opcode },
5932 1.1 christos { Bad_Opcode },
5933 1.1 christos { Bad_Opcode },
5934 1.1 christos { Bad_Opcode },
5935 1.1 christos { Bad_Opcode },
5936 1.1 christos { Bad_Opcode },
5937 1.1 christos { Bad_Opcode },
5938 1.1 christos /* 70 */
5939 1.1 christos { Bad_Opcode },
5940 1.1 christos { Bad_Opcode },
5941 1.1 christos { Bad_Opcode },
5942 1.1 christos { Bad_Opcode },
5943 1.1 christos { Bad_Opcode },
5944 1.1 christos { Bad_Opcode },
5945 1.1 christos { Bad_Opcode },
5946 1.1 christos { Bad_Opcode },
5947 1.1 christos /* 78 */
5948 1.1 christos { Bad_Opcode },
5949 1.1 christos { Bad_Opcode },
5950 1.1 christos { Bad_Opcode },
5951 1.1 christos { Bad_Opcode },
5952 1.1 christos { Bad_Opcode },
5953 1.1 christos { Bad_Opcode },
5954 1.1 christos { Bad_Opcode },
5955 1.1 christos { Bad_Opcode },
5956 1.1 christos /* 80 */
5957 1.1 christos { PREFIX_TABLE (PREFIX_0F3880) },
5958 1.1 christos { PREFIX_TABLE (PREFIX_0F3881) },
5959 1.1.1.2 christos { PREFIX_TABLE (PREFIX_0F3882) },
5960 1.1 christos { Bad_Opcode },
5961 1.1 christos { Bad_Opcode },
5962 1.1 christos { Bad_Opcode },
5963 1.1 christos { Bad_Opcode },
5964 1.1 christos { Bad_Opcode },
5965 1.1 christos /* 88 */
5966 1.1 christos { Bad_Opcode },
5967 1.1 christos { Bad_Opcode },
5968 1.1 christos { Bad_Opcode },
5969 1.1 christos { Bad_Opcode },
5970 1.1 christos { Bad_Opcode },
5971 1.1 christos { Bad_Opcode },
5972 1.1 christos { Bad_Opcode },
5973 1.1 christos { Bad_Opcode },
5974 1.1 christos /* 90 */
5975 1.1 christos { Bad_Opcode },
5976 1.1 christos { Bad_Opcode },
5977 1.1 christos { Bad_Opcode },
5978 1.1 christos { Bad_Opcode },
5979 1.1 christos { Bad_Opcode },
5980 1.1 christos { Bad_Opcode },
5981 1.1 christos { Bad_Opcode },
5982 1.1 christos { Bad_Opcode },
5983 1.1 christos /* 98 */
5984 1.1 christos { Bad_Opcode },
5985 1.1 christos { Bad_Opcode },
5986 1.1 christos { Bad_Opcode },
5987 1.1 christos { Bad_Opcode },
5988 1.1 christos { Bad_Opcode },
5989 1.1 christos { Bad_Opcode },
5990 1.1 christos { Bad_Opcode },
5991 1.1 christos { Bad_Opcode },
5992 1.1 christos /* a0 */
5993 1.1 christos { Bad_Opcode },
5994 1.1 christos { Bad_Opcode },
5995 1.1 christos { Bad_Opcode },
5996 1.1 christos { Bad_Opcode },
5997 1.1 christos { Bad_Opcode },
5998 1.1 christos { Bad_Opcode },
5999 1.1 christos { Bad_Opcode },
6000 1.1 christos { Bad_Opcode },
6001 1.1 christos /* a8 */
6002 1.1 christos { Bad_Opcode },
6003 1.1 christos { Bad_Opcode },
6004 1.1 christos { Bad_Opcode },
6005 1.1 christos { Bad_Opcode },
6006 1.1 christos { Bad_Opcode },
6007 1.1 christos { Bad_Opcode },
6008 1.1 christos { Bad_Opcode },
6009 1.1 christos { Bad_Opcode },
6010 1.1 christos /* b0 */
6011 1.1 christos { Bad_Opcode },
6012 1.1 christos { Bad_Opcode },
6013 1.1 christos { Bad_Opcode },
6014 1.1 christos { Bad_Opcode },
6015 1.1 christos { Bad_Opcode },
6016 1.1 christos { Bad_Opcode },
6017 1.1 christos { Bad_Opcode },
6018 1.1 christos { Bad_Opcode },
6019 1.1 christos /* b8 */
6020 1.1 christos { Bad_Opcode },
6021 1.1 christos { Bad_Opcode },
6022 1.1 christos { Bad_Opcode },
6023 1.1 christos { Bad_Opcode },
6024 1.1 christos { Bad_Opcode },
6025 1.1 christos { Bad_Opcode },
6026 1.1 christos { Bad_Opcode },
6027 1.1 christos { Bad_Opcode },
6028 1.1 christos /* c0 */
6029 1.1 christos { Bad_Opcode },
6030 1.1 christos { Bad_Opcode },
6031 1.1 christos { Bad_Opcode },
6032 1.1 christos { Bad_Opcode },
6033 1.1 christos { Bad_Opcode },
6034 1.1 christos { Bad_Opcode },
6035 1.1 christos { Bad_Opcode },
6036 1.1 christos { Bad_Opcode },
6037 1.1 christos /* c8 */
6038 1.1 christos { Bad_Opcode },
6039 1.1 christos { Bad_Opcode },
6040 1.1 christos { Bad_Opcode },
6041 1.1 christos { Bad_Opcode },
6042 1.1 christos { Bad_Opcode },
6043 1.1 christos { Bad_Opcode },
6044 1.1 christos { Bad_Opcode },
6045 1.1 christos { Bad_Opcode },
6046 1.1 christos /* d0 */
6047 1.1 christos { Bad_Opcode },
6048 1.1 christos { Bad_Opcode },
6049 1.1 christos { Bad_Opcode },
6050 1.1 christos { Bad_Opcode },
6051 1.1 christos { Bad_Opcode },
6052 1.1 christos { Bad_Opcode },
6053 1.1 christos { Bad_Opcode },
6054 1.1 christos { Bad_Opcode },
6055 1.1 christos /* d8 */
6056 1.1 christos { Bad_Opcode },
6057 1.1 christos { Bad_Opcode },
6058 1.1 christos { Bad_Opcode },
6059 1.1 christos { PREFIX_TABLE (PREFIX_0F38DB) },
6060 1.1 christos { PREFIX_TABLE (PREFIX_0F38DC) },
6061 1.1 christos { PREFIX_TABLE (PREFIX_0F38DD) },
6062 1.1 christos { PREFIX_TABLE (PREFIX_0F38DE) },
6063 1.1 christos { PREFIX_TABLE (PREFIX_0F38DF) },
6064 1.1 christos /* e0 */
6065 1.1 christos { Bad_Opcode },
6066 1.1 christos { Bad_Opcode },
6067 1.1 christos { Bad_Opcode },
6068 1.1 christos { Bad_Opcode },
6069 1.1 christos { Bad_Opcode },
6070 1.1 christos { Bad_Opcode },
6071 1.1 christos { Bad_Opcode },
6072 1.1 christos { Bad_Opcode },
6073 1.1 christos /* e8 */
6074 1.1 christos { Bad_Opcode },
6075 1.1 christos { Bad_Opcode },
6076 1.1 christos { Bad_Opcode },
6077 1.1 christos { Bad_Opcode },
6078 1.1 christos { Bad_Opcode },
6079 1.1 christos { Bad_Opcode },
6080 1.1 christos { Bad_Opcode },
6081 1.1 christos { Bad_Opcode },
6082 1.1 christos /* f0 */
6083 1.1 christos { PREFIX_TABLE (PREFIX_0F38F0) },
6084 1.1 christos { PREFIX_TABLE (PREFIX_0F38F1) },
6085 1.1 christos { Bad_Opcode },
6086 1.1 christos { Bad_Opcode },
6087 1.1 christos { Bad_Opcode },
6088 1.1 christos { Bad_Opcode },
6089 1.1.1.2 christos { PREFIX_TABLE (PREFIX_0F38F6) },
6090 1.1 christos { Bad_Opcode },
6091 1.1 christos /* f8 */
6092 1.1 christos { Bad_Opcode },
6093 1.1 christos { Bad_Opcode },
6094 1.1 christos { Bad_Opcode },
6095 1.1 christos { Bad_Opcode },
6096 1.1 christos { Bad_Opcode },
6097 1.1 christos { Bad_Opcode },
6098 1.1 christos { Bad_Opcode },
6099 1.1 christos { Bad_Opcode },
6100 1.1 christos },
6101 1.1 christos /* THREE_BYTE_0F3A */
6102 1.1 christos {
6103 1.1 christos /* 00 */
6104 1.1 christos { Bad_Opcode },
6105 1.1 christos { Bad_Opcode },
6106 1.1 christos { Bad_Opcode },
6107 1.1 christos { Bad_Opcode },
6108 1.1 christos { Bad_Opcode },
6109 1.1 christos { Bad_Opcode },
6110 1.1 christos { Bad_Opcode },
6111 1.1 christos { Bad_Opcode },
6112 1.1 christos /* 08 */
6113 1.1 christos { PREFIX_TABLE (PREFIX_0F3A08) },
6114 1.1 christos { PREFIX_TABLE (PREFIX_0F3A09) },
6115 1.1 christos { PREFIX_TABLE (PREFIX_0F3A0A) },
6116 1.1 christos { PREFIX_TABLE (PREFIX_0F3A0B) },
6117 1.1 christos { PREFIX_TABLE (PREFIX_0F3A0C) },
6118 1.1 christos { PREFIX_TABLE (PREFIX_0F3A0D) },
6119 1.1 christos { PREFIX_TABLE (PREFIX_0F3A0E) },
6120 1.1 christos { "palignr", { MX, EM, Ib } },
6121 1.1 christos /* 10 */
6122 1.1 christos { Bad_Opcode },
6123 1.1 christos { Bad_Opcode },
6124 1.1 christos { Bad_Opcode },
6125 1.1 christos { Bad_Opcode },
6126 1.1 christos { PREFIX_TABLE (PREFIX_0F3A14) },
6127 1.1 christos { PREFIX_TABLE (PREFIX_0F3A15) },
6128 1.1 christos { PREFIX_TABLE (PREFIX_0F3A16) },
6129 1.1 christos { PREFIX_TABLE (PREFIX_0F3A17) },
6130 1.1 christos /* 18 */
6131 1.1 christos { Bad_Opcode },
6132 1.1 christos { Bad_Opcode },
6133 1.1 christos { Bad_Opcode },
6134 1.1 christos { Bad_Opcode },
6135 1.1 christos { Bad_Opcode },
6136 1.1 christos { Bad_Opcode },
6137 1.1 christos { Bad_Opcode },
6138 1.1 christos { Bad_Opcode },
6139 1.1 christos /* 20 */
6140 1.1 christos { PREFIX_TABLE (PREFIX_0F3A20) },
6141 1.1 christos { PREFIX_TABLE (PREFIX_0F3A21) },
6142 1.1 christos { PREFIX_TABLE (PREFIX_0F3A22) },
6143 1.1 christos { Bad_Opcode },
6144 1.1 christos { Bad_Opcode },
6145 1.1 christos { Bad_Opcode },
6146 1.1 christos { Bad_Opcode },
6147 1.1 christos { Bad_Opcode },
6148 1.1 christos /* 28 */
6149 1.1 christos { Bad_Opcode },
6150 1.1 christos { Bad_Opcode },
6151 1.1 christos { Bad_Opcode },
6152 1.1 christos { Bad_Opcode },
6153 1.1 christos { Bad_Opcode },
6154 1.1 christos { Bad_Opcode },
6155 1.1 christos { Bad_Opcode },
6156 1.1 christos { Bad_Opcode },
6157 1.1 christos /* 30 */
6158 1.1 christos { Bad_Opcode },
6159 1.1 christos { Bad_Opcode },
6160 1.1 christos { Bad_Opcode },
6161 1.1 christos { Bad_Opcode },
6162 1.1 christos { Bad_Opcode },
6163 1.1 christos { Bad_Opcode },
6164 1.1 christos { Bad_Opcode },
6165 1.1 christos { Bad_Opcode },
6166 1.1 christos /* 38 */
6167 1.1 christos { Bad_Opcode },
6168 1.1 christos { Bad_Opcode },
6169 1.1 christos { Bad_Opcode },
6170 1.1 christos { Bad_Opcode },
6171 1.1 christos { Bad_Opcode },
6172 1.1 christos { Bad_Opcode },
6173 1.1 christos { Bad_Opcode },
6174 1.1 christos { Bad_Opcode },
6175 1.1 christos /* 40 */
6176 1.1 christos { PREFIX_TABLE (PREFIX_0F3A40) },
6177 1.1 christos { PREFIX_TABLE (PREFIX_0F3A41) },
6178 1.1 christos { PREFIX_TABLE (PREFIX_0F3A42) },
6179 1.1 christos { Bad_Opcode },
6180 1.1 christos { PREFIX_TABLE (PREFIX_0F3A44) },
6181 1.1 christos { Bad_Opcode },
6182 1.1 christos { Bad_Opcode },
6183 1.1 christos { Bad_Opcode },
6184 1.1 christos /* 48 */
6185 1.1 christos { Bad_Opcode },
6186 1.1 christos { Bad_Opcode },
6187 1.1 christos { Bad_Opcode },
6188 1.1 christos { Bad_Opcode },
6189 1.1 christos { Bad_Opcode },
6190 1.1 christos { Bad_Opcode },
6191 1.1 christos { Bad_Opcode },
6192 1.1 christos { Bad_Opcode },
6193 1.1 christos /* 50 */
6194 1.1 christos { Bad_Opcode },
6195 1.1 christos { Bad_Opcode },
6196 1.1 christos { Bad_Opcode },
6197 1.1 christos { Bad_Opcode },
6198 1.1 christos { Bad_Opcode },
6199 1.1 christos { Bad_Opcode },
6200 1.1 christos { Bad_Opcode },
6201 1.1 christos { Bad_Opcode },
6202 1.1 christos /* 58 */
6203 1.1 christos { Bad_Opcode },
6204 1.1 christos { Bad_Opcode },
6205 1.1 christos { Bad_Opcode },
6206 1.1 christos { Bad_Opcode },
6207 1.1 christos { Bad_Opcode },
6208 1.1 christos { Bad_Opcode },
6209 1.1 christos { Bad_Opcode },
6210 1.1 christos { Bad_Opcode },
6211 1.1 christos /* 60 */
6212 1.1 christos { PREFIX_TABLE (PREFIX_0F3A60) },
6213 1.1 christos { PREFIX_TABLE (PREFIX_0F3A61) },
6214 1.1 christos { PREFIX_TABLE (PREFIX_0F3A62) },
6215 1.1 christos { PREFIX_TABLE (PREFIX_0F3A63) },
6216 1.1 christos { Bad_Opcode },
6217 1.1 christos { Bad_Opcode },
6218 1.1 christos { Bad_Opcode },
6219 1.1 christos { Bad_Opcode },
6220 1.1 christos /* 68 */
6221 1.1 christos { Bad_Opcode },
6222 1.1 christos { Bad_Opcode },
6223 1.1 christos { Bad_Opcode },
6224 1.1 christos { Bad_Opcode },
6225 1.1 christos { Bad_Opcode },
6226 1.1 christos { Bad_Opcode },
6227 1.1 christos { Bad_Opcode },
6228 1.1 christos { Bad_Opcode },
6229 1.1 christos /* 70 */
6230 1.1 christos { Bad_Opcode },
6231 1.1 christos { Bad_Opcode },
6232 1.1 christos { Bad_Opcode },
6233 1.1 christos { Bad_Opcode },
6234 1.1 christos { Bad_Opcode },
6235 1.1 christos { Bad_Opcode },
6236 1.1 christos { Bad_Opcode },
6237 1.1 christos { Bad_Opcode },
6238 1.1 christos /* 78 */
6239 1.1 christos { Bad_Opcode },
6240 1.1 christos { Bad_Opcode },
6241 1.1 christos { Bad_Opcode },
6242 1.1 christos { Bad_Opcode },
6243 1.1 christos { Bad_Opcode },
6244 1.1 christos { Bad_Opcode },
6245 1.1 christos { Bad_Opcode },
6246 1.1 christos { Bad_Opcode },
6247 1.1 christos /* 80 */
6248 1.1 christos { Bad_Opcode },
6249 1.1 christos { Bad_Opcode },
6250 1.1 christos { Bad_Opcode },
6251 1.1 christos { Bad_Opcode },
6252 1.1 christos { Bad_Opcode },
6253 1.1 christos { Bad_Opcode },
6254 1.1 christos { Bad_Opcode },
6255 1.1 christos { Bad_Opcode },
6256 1.1 christos /* 88 */
6257 1.1 christos { Bad_Opcode },
6258 1.1 christos { Bad_Opcode },
6259 1.1 christos { Bad_Opcode },
6260 1.1 christos { Bad_Opcode },
6261 1.1 christos { Bad_Opcode },
6262 1.1 christos { Bad_Opcode },
6263 1.1 christos { Bad_Opcode },
6264 1.1 christos { Bad_Opcode },
6265 1.1 christos /* 90 */
6266 1.1 christos { Bad_Opcode },
6267 1.1 christos { Bad_Opcode },
6268 1.1 christos { Bad_Opcode },
6269 1.1 christos { Bad_Opcode },
6270 1.1 christos { Bad_Opcode },
6271 1.1 christos { Bad_Opcode },
6272 1.1 christos { Bad_Opcode },
6273 1.1 christos { Bad_Opcode },
6274 1.1 christos /* 98 */
6275 1.1 christos { Bad_Opcode },
6276 1.1 christos { Bad_Opcode },
6277 1.1 christos { Bad_Opcode },
6278 1.1 christos { Bad_Opcode },
6279 1.1 christos { Bad_Opcode },
6280 1.1 christos { Bad_Opcode },
6281 1.1 christos { Bad_Opcode },
6282 1.1 christos { Bad_Opcode },
6283 1.1 christos /* a0 */
6284 1.1 christos { Bad_Opcode },
6285 1.1 christos { Bad_Opcode },
6286 1.1 christos { Bad_Opcode },
6287 1.1 christos { Bad_Opcode },
6288 1.1 christos { Bad_Opcode },
6289 1.1 christos { Bad_Opcode },
6290 1.1 christos { Bad_Opcode },
6291 1.1 christos { Bad_Opcode },
6292 1.1 christos /* a8 */
6293 1.1 christos { Bad_Opcode },
6294 1.1 christos { Bad_Opcode },
6295 1.1 christos { Bad_Opcode },
6296 1.1 christos { Bad_Opcode },
6297 1.1 christos { Bad_Opcode },
6298 1.1 christos { Bad_Opcode },
6299 1.1 christos { Bad_Opcode },
6300 1.1 christos { Bad_Opcode },
6301 1.1 christos /* b0 */
6302 1.1 christos { Bad_Opcode },
6303 1.1 christos { Bad_Opcode },
6304 1.1 christos { Bad_Opcode },
6305 1.1 christos { Bad_Opcode },
6306 1.1 christos { Bad_Opcode },
6307 1.1 christos { Bad_Opcode },
6308 1.1 christos { Bad_Opcode },
6309 1.1 christos { Bad_Opcode },
6310 1.1 christos /* b8 */
6311 1.1 christos { Bad_Opcode },
6312 1.1 christos { Bad_Opcode },
6313 1.1 christos { Bad_Opcode },
6314 1.1 christos { Bad_Opcode },
6315 1.1 christos { Bad_Opcode },
6316 1.1 christos { Bad_Opcode },
6317 1.1 christos { Bad_Opcode },
6318 1.1 christos { Bad_Opcode },
6319 1.1 christos /* c0 */
6320 1.1 christos { Bad_Opcode },
6321 1.1 christos { Bad_Opcode },
6322 1.1 christos { Bad_Opcode },
6323 1.1 christos { Bad_Opcode },
6324 1.1 christos { Bad_Opcode },
6325 1.1 christos { Bad_Opcode },
6326 1.1 christos { Bad_Opcode },
6327 1.1 christos { Bad_Opcode },
6328 1.1 christos /* c8 */
6329 1.1 christos { Bad_Opcode },
6330 1.1 christos { Bad_Opcode },
6331 1.1 christos { Bad_Opcode },
6332 1.1 christos { Bad_Opcode },
6333 1.1 christos { Bad_Opcode },
6334 1.1 christos { Bad_Opcode },
6335 1.1 christos { Bad_Opcode },
6336 1.1 christos { Bad_Opcode },
6337 1.1 christos /* d0 */
6338 1.1 christos { Bad_Opcode },
6339 1.1 christos { Bad_Opcode },
6340 1.1 christos { Bad_Opcode },
6341 1.1 christos { Bad_Opcode },
6342 1.1 christos { Bad_Opcode },
6343 1.1 christos { Bad_Opcode },
6344 1.1 christos { Bad_Opcode },
6345 1.1 christos { Bad_Opcode },
6346 1.1 christos /* d8 */
6347 1.1 christos { Bad_Opcode },
6348 1.1 christos { Bad_Opcode },
6349 1.1 christos { Bad_Opcode },
6350 1.1 christos { Bad_Opcode },
6351 1.1 christos { Bad_Opcode },
6352 1.1 christos { Bad_Opcode },
6353 1.1 christos { Bad_Opcode },
6354 1.1 christos { PREFIX_TABLE (PREFIX_0F3ADF) },
6355 1.1 christos /* e0 */
6356 1.1 christos { Bad_Opcode },
6357 1.1 christos { Bad_Opcode },
6358 1.1 christos { Bad_Opcode },
6359 1.1 christos { Bad_Opcode },
6360 1.1 christos { Bad_Opcode },
6361 1.1 christos { Bad_Opcode },
6362 1.1 christos { Bad_Opcode },
6363 1.1 christos { Bad_Opcode },
6364 1.1 christos /* e8 */
6365 1.1 christos { Bad_Opcode },
6366 1.1 christos { Bad_Opcode },
6367 1.1 christos { Bad_Opcode },
6368 1.1 christos { Bad_Opcode },
6369 1.1 christos { Bad_Opcode },
6370 1.1 christos { Bad_Opcode },
6371 1.1 christos { Bad_Opcode },
6372 1.1 christos { Bad_Opcode },
6373 1.1 christos /* f0 */
6374 1.1 christos { Bad_Opcode },
6375 1.1 christos { Bad_Opcode },
6376 1.1 christos { Bad_Opcode },
6377 1.1 christos { Bad_Opcode },
6378 1.1 christos { Bad_Opcode },
6379 1.1 christos { Bad_Opcode },
6380 1.1 christos { Bad_Opcode },
6381 1.1 christos { Bad_Opcode },
6382 1.1 christos /* f8 */
6383 1.1 christos { Bad_Opcode },
6384 1.1 christos { Bad_Opcode },
6385 1.1 christos { Bad_Opcode },
6386 1.1 christos { Bad_Opcode },
6387 1.1 christos { Bad_Opcode },
6388 1.1 christos { Bad_Opcode },
6389 1.1 christos { Bad_Opcode },
6390 1.1 christos { Bad_Opcode },
6391 1.1 christos },
6392 1.1 christos
6393 1.1 christos /* THREE_BYTE_0F7A */
6394 1.1 christos {
6395 1.1 christos /* 00 */
6396 1.1 christos { Bad_Opcode },
6397 1.1 christos { Bad_Opcode },
6398 1.1 christos { Bad_Opcode },
6399 1.1 christos { Bad_Opcode },
6400 1.1 christos { Bad_Opcode },
6401 1.1 christos { Bad_Opcode },
6402 1.1 christos { Bad_Opcode },
6403 1.1 christos { Bad_Opcode },
6404 1.1 christos /* 08 */
6405 1.1 christos { Bad_Opcode },
6406 1.1 christos { Bad_Opcode },
6407 1.1 christos { Bad_Opcode },
6408 1.1 christos { Bad_Opcode },
6409 1.1 christos { Bad_Opcode },
6410 1.1 christos { Bad_Opcode },
6411 1.1 christos { Bad_Opcode },
6412 1.1 christos { Bad_Opcode },
6413 1.1 christos /* 10 */
6414 1.1 christos { Bad_Opcode },
6415 1.1 christos { Bad_Opcode },
6416 1.1 christos { Bad_Opcode },
6417 1.1 christos { Bad_Opcode },
6418 1.1 christos { Bad_Opcode },
6419 1.1 christos { Bad_Opcode },
6420 1.1 christos { Bad_Opcode },
6421 1.1 christos { Bad_Opcode },
6422 1.1 christos /* 18 */
6423 1.1 christos { Bad_Opcode },
6424 1.1 christos { Bad_Opcode },
6425 1.1 christos { Bad_Opcode },
6426 1.1 christos { Bad_Opcode },
6427 1.1 christos { Bad_Opcode },
6428 1.1 christos { Bad_Opcode },
6429 1.1 christos { Bad_Opcode },
6430 1.1 christos { Bad_Opcode },
6431 1.1 christos /* 20 */
6432 1.1 christos { "ptest", { XX } },
6433 1.1 christos { Bad_Opcode },
6434 1.1 christos { Bad_Opcode },
6435 1.1 christos { Bad_Opcode },
6436 1.1 christos { Bad_Opcode },
6437 1.1 christos { Bad_Opcode },
6438 1.1 christos { Bad_Opcode },
6439 1.1 christos { Bad_Opcode },
6440 1.1 christos /* 28 */
6441 1.1 christos { Bad_Opcode },
6442 1.1 christos { Bad_Opcode },
6443 1.1 christos { Bad_Opcode },
6444 1.1 christos { Bad_Opcode },
6445 1.1 christos { Bad_Opcode },
6446 1.1 christos { Bad_Opcode },
6447 1.1 christos { Bad_Opcode },
6448 1.1 christos { Bad_Opcode },
6449 1.1 christos /* 30 */
6450 1.1 christos { Bad_Opcode },
6451 1.1 christos { Bad_Opcode },
6452 1.1 christos { Bad_Opcode },
6453 1.1 christos { Bad_Opcode },
6454 1.1 christos { Bad_Opcode },
6455 1.1 christos { Bad_Opcode },
6456 1.1 christos { Bad_Opcode },
6457 1.1 christos { Bad_Opcode },
6458 1.1 christos /* 38 */
6459 1.1 christos { Bad_Opcode },
6460 1.1 christos { Bad_Opcode },
6461 1.1 christos { Bad_Opcode },
6462 1.1 christos { Bad_Opcode },
6463 1.1 christos { Bad_Opcode },
6464 1.1 christos { Bad_Opcode },
6465 1.1 christos { Bad_Opcode },
6466 1.1 christos { Bad_Opcode },
6467 1.1 christos /* 40 */
6468 1.1 christos { Bad_Opcode },
6469 1.1 christos { "phaddbw", { XM, EXq } },
6470 1.1 christos { "phaddbd", { XM, EXq } },
6471 1.1 christos { "phaddbq", { XM, EXq } },
6472 1.1 christos { Bad_Opcode },
6473 1.1 christos { Bad_Opcode },
6474 1.1 christos { "phaddwd", { XM, EXq } },
6475 1.1 christos { "phaddwq", { XM, EXq } },
6476 1.1 christos /* 48 */
6477 1.1 christos { Bad_Opcode },
6478 1.1 christos { Bad_Opcode },
6479 1.1 christos { Bad_Opcode },
6480 1.1 christos { "phadddq", { XM, EXq } },
6481 1.1 christos { Bad_Opcode },
6482 1.1 christos { Bad_Opcode },
6483 1.1 christos { Bad_Opcode },
6484 1.1 christos { Bad_Opcode },
6485 1.1 christos /* 50 */
6486 1.1 christos { Bad_Opcode },
6487 1.1 christos { "phaddubw", { XM, EXq } },
6488 1.1 christos { "phaddubd", { XM, EXq } },
6489 1.1 christos { "phaddubq", { XM, EXq } },
6490 1.1 christos { Bad_Opcode },
6491 1.1 christos { Bad_Opcode },
6492 1.1 christos { "phadduwd", { XM, EXq } },
6493 1.1 christos { "phadduwq", { XM, EXq } },
6494 1.1 christos /* 58 */
6495 1.1 christos { Bad_Opcode },
6496 1.1 christos { Bad_Opcode },
6497 1.1 christos { Bad_Opcode },
6498 1.1 christos { "phaddudq", { XM, EXq } },
6499 1.1 christos { Bad_Opcode },
6500 1.1 christos { Bad_Opcode },
6501 1.1 christos { Bad_Opcode },
6502 1.1 christos { Bad_Opcode },
6503 1.1 christos /* 60 */
6504 1.1 christos { Bad_Opcode },
6505 1.1 christos { "phsubbw", { XM, EXq } },
6506 1.1 christos { "phsubbd", { XM, EXq } },
6507 1.1 christos { "phsubbq", { XM, EXq } },
6508 1.1 christos { Bad_Opcode },
6509 1.1 christos { Bad_Opcode },
6510 1.1 christos { Bad_Opcode },
6511 1.1 christos { Bad_Opcode },
6512 1.1 christos /* 68 */
6513 1.1 christos { Bad_Opcode },
6514 1.1 christos { Bad_Opcode },
6515 1.1 christos { Bad_Opcode },
6516 1.1 christos { Bad_Opcode },
6517 1.1 christos { Bad_Opcode },
6518 1.1 christos { Bad_Opcode },
6519 1.1 christos { Bad_Opcode },
6520 1.1 christos { Bad_Opcode },
6521 1.1 christos /* 70 */
6522 1.1 christos { Bad_Opcode },
6523 1.1 christos { Bad_Opcode },
6524 1.1 christos { Bad_Opcode },
6525 1.1 christos { Bad_Opcode },
6526 1.1 christos { Bad_Opcode },
6527 1.1 christos { Bad_Opcode },
6528 1.1 christos { Bad_Opcode },
6529 1.1 christos { Bad_Opcode },
6530 1.1 christos /* 78 */
6531 1.1 christos { Bad_Opcode },
6532 1.1 christos { Bad_Opcode },
6533 1.1 christos { Bad_Opcode },
6534 1.1 christos { Bad_Opcode },
6535 1.1 christos { Bad_Opcode },
6536 1.1 christos { Bad_Opcode },
6537 1.1 christos { Bad_Opcode },
6538 1.1 christos { Bad_Opcode },
6539 1.1 christos /* 80 */
6540 1.1 christos { Bad_Opcode },
6541 1.1 christos { Bad_Opcode },
6542 1.1 christos { Bad_Opcode },
6543 1.1 christos { Bad_Opcode },
6544 1.1 christos { Bad_Opcode },
6545 1.1 christos { Bad_Opcode },
6546 1.1 christos { Bad_Opcode },
6547 1.1 christos { Bad_Opcode },
6548 1.1 christos /* 88 */
6549 1.1 christos { Bad_Opcode },
6550 1.1 christos { Bad_Opcode },
6551 1.1 christos { Bad_Opcode },
6552 1.1 christos { Bad_Opcode },
6553 1.1 christos { Bad_Opcode },
6554 1.1 christos { Bad_Opcode },
6555 1.1 christos { Bad_Opcode },
6556 1.1 christos { Bad_Opcode },
6557 1.1 christos /* 90 */
6558 1.1 christos { Bad_Opcode },
6559 1.1 christos { Bad_Opcode },
6560 1.1 christos { Bad_Opcode },
6561 1.1 christos { Bad_Opcode },
6562 1.1 christos { Bad_Opcode },
6563 1.1 christos { Bad_Opcode },
6564 1.1 christos { Bad_Opcode },
6565 1.1 christos { Bad_Opcode },
6566 1.1 christos /* 98 */
6567 1.1 christos { Bad_Opcode },
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 { Bad_Opcode },
6573 1.1 christos { Bad_Opcode },
6574 1.1 christos { Bad_Opcode },
6575 1.1 christos /* a0 */
6576 1.1 christos { Bad_Opcode },
6577 1.1 christos { Bad_Opcode },
6578 1.1 christos { Bad_Opcode },
6579 1.1 christos { Bad_Opcode },
6580 1.1 christos { Bad_Opcode },
6581 1.1 christos { Bad_Opcode },
6582 1.1 christos { Bad_Opcode },
6583 1.1 christos { Bad_Opcode },
6584 1.1 christos /* a8 */
6585 1.1 christos { Bad_Opcode },
6586 1.1 christos { Bad_Opcode },
6587 1.1 christos { Bad_Opcode },
6588 1.1 christos { Bad_Opcode },
6589 1.1 christos { Bad_Opcode },
6590 1.1 christos { Bad_Opcode },
6591 1.1 christos { Bad_Opcode },
6592 1.1 christos { Bad_Opcode },
6593 1.1 christos /* b0 */
6594 1.1 christos { Bad_Opcode },
6595 1.1 christos { Bad_Opcode },
6596 1.1 christos { Bad_Opcode },
6597 1.1 christos { Bad_Opcode },
6598 1.1 christos { Bad_Opcode },
6599 1.1 christos { Bad_Opcode },
6600 1.1 christos { Bad_Opcode },
6601 1.1 christos { Bad_Opcode },
6602 1.1 christos /* b8 */
6603 1.1 christos { Bad_Opcode },
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 { Bad_Opcode },
6609 1.1 christos { Bad_Opcode },
6610 1.1 christos { Bad_Opcode },
6611 1.1 christos /* c0 */
6612 1.1 christos { Bad_Opcode },
6613 1.1 christos { Bad_Opcode },
6614 1.1 christos { Bad_Opcode },
6615 1.1 christos { Bad_Opcode },
6616 1.1 christos { Bad_Opcode },
6617 1.1 christos { Bad_Opcode },
6618 1.1 christos { Bad_Opcode },
6619 1.1 christos { Bad_Opcode },
6620 1.1 christos /* c8 */
6621 1.1 christos { Bad_Opcode },
6622 1.1 christos { Bad_Opcode },
6623 1.1 christos { Bad_Opcode },
6624 1.1 christos { Bad_Opcode },
6625 1.1 christos { Bad_Opcode },
6626 1.1 christos { Bad_Opcode },
6627 1.1 christos { Bad_Opcode },
6628 1.1 christos { Bad_Opcode },
6629 1.1 christos /* d0 */
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 { Bad_Opcode },
6636 1.1 christos { Bad_Opcode },
6637 1.1 christos { Bad_Opcode },
6638 1.1 christos /* d8 */
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 { Bad_Opcode },
6645 1.1 christos { Bad_Opcode },
6646 1.1 christos { Bad_Opcode },
6647 1.1 christos /* e0 */
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 { Bad_Opcode },
6654 1.1 christos { Bad_Opcode },
6655 1.1 christos { Bad_Opcode },
6656 1.1 christos /* e8 */
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 { Bad_Opcode },
6663 1.1 christos { Bad_Opcode },
6664 1.1 christos { Bad_Opcode },
6665 1.1 christos /* f0 */
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 { Bad_Opcode },
6672 1.1 christos { Bad_Opcode },
6673 1.1 christos { Bad_Opcode },
6674 1.1 christos /* f8 */
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 { Bad_Opcode },
6681 1.1 christos { Bad_Opcode },
6682 1.1 christos { Bad_Opcode },
6683 1.1 christos },
6684 1.1 christos };
6685 1.1 christos
6686 1.1 christos static const struct dis386 xop_table[][256] = {
6687 1.1 christos /* XOP_08 */
6688 1.1 christos {
6689 1.1 christos /* 00 */
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 /* 08 */
6699 1.1 christos { Bad_Opcode },
6700 1.1 christos { Bad_Opcode },
6701 1.1 christos { Bad_Opcode },
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 /* 10 */
6708 1.1.1.2 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 /* 18 */
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 /* 20 */
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 /* 28 */
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 /* 30 */
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 /* 38 */
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 /* 40 */
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 /* 48 */
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 /* 50 */
6780 1.1 christos { Bad_Opcode },
6781 1.1 christos { Bad_Opcode },
6782 1.1 christos { Bad_Opcode },
6783 1.1 christos { Bad_Opcode },
6784 1.1 christos { Bad_Opcode },
6785 1.1 christos { Bad_Opcode },
6786 1.1 christos { Bad_Opcode },
6787 1.1 christos { Bad_Opcode },
6788 1.1 christos /* 58 */
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 /* 60 */
6798 1.1 christos { Bad_Opcode },
6799 1.1 christos { Bad_Opcode },
6800 1.1 christos { Bad_Opcode },
6801 1.1 christos { Bad_Opcode },
6802 1.1 christos { Bad_Opcode },
6803 1.1 christos { Bad_Opcode },
6804 1.1 christos { Bad_Opcode },
6805 1.1 christos { Bad_Opcode },
6806 1.1 christos /* 68 */
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 /* 70 */
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 /* 78 */
6825 1.1 christos { Bad_Opcode },
6826 1.1 christos { Bad_Opcode },
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 christos { Bad_Opcode },
6832 1.1 christos { Bad_Opcode },
6833 1.1 christos /* 80 */
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 { "vpmacssww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6840 1.1 christos { "vpmacsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6841 1.1 christos { "vpmacssdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6842 1.1 christos /* 88 */
6843 1.1 christos { Bad_Opcode },
6844 1.1 christos { Bad_Opcode },
6845 1.1 christos { Bad_Opcode },
6846 1.1 christos { Bad_Opcode },
6847 1.1 christos { Bad_Opcode },
6848 1.1 christos { Bad_Opcode },
6849 1.1 christos { "vpmacssdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6850 1.1 christos { "vpmacssdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6851 1.1 christos /* 90 */
6852 1.1 christos { Bad_Opcode },
6853 1.1 christos { Bad_Opcode },
6854 1.1 christos { Bad_Opcode },
6855 1.1 christos { Bad_Opcode },
6856 1.1 christos { Bad_Opcode },
6857 1.1 christos { "vpmacsww", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6858 1.1 christos { "vpmacswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6859 1.1 christos { "vpmacsdql", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6860 1.1 christos /* 98 */
6861 1.1 christos { Bad_Opcode },
6862 1.1 christos { Bad_Opcode },
6863 1.1 christos { Bad_Opcode },
6864 1.1 christos { Bad_Opcode },
6865 1.1 christos { Bad_Opcode },
6866 1.1 christos { Bad_Opcode },
6867 1.1 christos { "vpmacsdd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6868 1.1 christos { "vpmacsdqh", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6869 1.1 christos /* a0 */
6870 1.1 christos { Bad_Opcode },
6871 1.1 christos { Bad_Opcode },
6872 1.1 christos { "vpcmov", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6873 1.1 christos { "vpperm", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6874 1.1 christos { Bad_Opcode },
6875 1.1 christos { Bad_Opcode },
6876 1.1 christos { "vpmadcsswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6877 1.1 christos { Bad_Opcode },
6878 1.1 christos /* a8 */
6879 1.1 christos { Bad_Opcode },
6880 1.1 christos { Bad_Opcode },
6881 1.1 christos { Bad_Opcode },
6882 1.1 christos { Bad_Opcode },
6883 1.1 christos { Bad_Opcode },
6884 1.1 christos { Bad_Opcode },
6885 1.1 christos { Bad_Opcode },
6886 1.1 christos { Bad_Opcode },
6887 1.1 christos /* b0 */
6888 1.1 christos { Bad_Opcode },
6889 1.1 christos { Bad_Opcode },
6890 1.1 christos { Bad_Opcode },
6891 1.1 christos { Bad_Opcode },
6892 1.1 christos { Bad_Opcode },
6893 1.1 christos { Bad_Opcode },
6894 1.1 christos { "vpmadcswd", { XMVexW, Vex, EXVexW, EXVexW, VexI4 } },
6895 1.1 christos { Bad_Opcode },
6896 1.1 christos /* b8 */
6897 1.1 christos { Bad_Opcode },
6898 1.1 christos { Bad_Opcode },
6899 1.1 christos { Bad_Opcode },
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 /* c0 */
6906 1.1 christos { "vprotb", { XM, Vex_2src_1, Ib } },
6907 1.1 christos { "vprotw", { XM, Vex_2src_1, Ib } },
6908 1.1 christos { "vprotd", { XM, Vex_2src_1, Ib } },
6909 1.1 christos { "vprotq", { XM, Vex_2src_1, Ib } },
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 /* c8 */
6915 1.1 christos { Bad_Opcode },
6916 1.1 christos { Bad_Opcode },
6917 1.1 christos { Bad_Opcode },
6918 1.1 christos { Bad_Opcode },
6919 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CC) },
6920 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CD) },
6921 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CE) },
6922 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_CF) },
6923 1.1 christos /* d0 */
6924 1.1 christos { Bad_Opcode },
6925 1.1 christos { Bad_Opcode },
6926 1.1 christos { Bad_Opcode },
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 /* d8 */
6933 1.1 christos { Bad_Opcode },
6934 1.1 christos { Bad_Opcode },
6935 1.1 christos { Bad_Opcode },
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 /* e0 */
6942 1.1 christos { Bad_Opcode },
6943 1.1 christos { Bad_Opcode },
6944 1.1 christos { Bad_Opcode },
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 /* e8 */
6951 1.1 christos { Bad_Opcode },
6952 1.1 christos { Bad_Opcode },
6953 1.1 christos { Bad_Opcode },
6954 1.1 christos { Bad_Opcode },
6955 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EC) },
6956 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_ED) },
6957 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EE) },
6958 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0FXOP_08_EF) },
6959 1.1 christos /* f0 */
6960 1.1 christos { Bad_Opcode },
6961 1.1 christos { Bad_Opcode },
6962 1.1 christos { Bad_Opcode },
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 /* f8 */
6969 1.1 christos { Bad_Opcode },
6970 1.1 christos { Bad_Opcode },
6971 1.1 christos { Bad_Opcode },
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 },
6978 1.1 christos /* XOP_09 */
6979 1.1 christos {
6980 1.1 christos /* 00 */
6981 1.1 christos { Bad_Opcode },
6982 1.1 christos { REG_TABLE (REG_XOP_TBM_01) },
6983 1.1 christos { REG_TABLE (REG_XOP_TBM_02) },
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 /* 08 */
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 /* 10 */
6999 1.1 christos { Bad_Opcode },
7000 1.1 christos { Bad_Opcode },
7001 1.1 christos { REG_TABLE (REG_XOP_LWPCB) },
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 /* 18 */
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 /* 20 */
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 /* 28 */
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 /* 30 */
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 /* 38 */
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 /* 40 */
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 /* 48 */
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 /* 50 */
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 christos { Bad_Opcode },
7076 1.1 christos { Bad_Opcode },
7077 1.1 christos { Bad_Opcode },
7078 1.1 christos { Bad_Opcode },
7079 1.1 christos /* 58 */
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 /* 60 */
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 { Bad_Opcode },
7097 1.1 christos /* 68 */
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 /* 70 */
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 /* 78 */
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 /* 80 */
7125 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_80) },
7126 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FXOP_09_81) },
7127 1.1 christos { "vfrczss", { XM, EXd } },
7128 1.1 christos { "vfrczsd", { XM, EXq } },
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 /* 88 */
7134 1.1 christos { Bad_Opcode },
7135 1.1 christos { Bad_Opcode },
7136 1.1 christos { Bad_Opcode },
7137 1.1 christos { Bad_Opcode },
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 /* 90 */
7143 1.1 christos { "vprotb", { XM, Vex_2src_1, Vex_2src_2 } },
7144 1.1 christos { "vprotw", { XM, Vex_2src_1, Vex_2src_2 } },
7145 1.1 christos { "vprotd", { XM, Vex_2src_1, Vex_2src_2 } },
7146 1.1 christos { "vprotq", { XM, Vex_2src_1, Vex_2src_2 } },
7147 1.1 christos { "vpshlb", { XM, Vex_2src_1, Vex_2src_2 } },
7148 1.1 christos { "vpshlw", { XM, Vex_2src_1, Vex_2src_2 } },
7149 1.1 christos { "vpshld", { XM, Vex_2src_1, Vex_2src_2 } },
7150 1.1 christos { "vpshlq", { XM, Vex_2src_1, Vex_2src_2 } },
7151 1.1 christos /* 98 */
7152 1.1 christos { "vpshab", { XM, Vex_2src_1, Vex_2src_2 } },
7153 1.1 christos { "vpshaw", { XM, Vex_2src_1, Vex_2src_2 } },
7154 1.1 christos { "vpshad", { XM, Vex_2src_1, Vex_2src_2 } },
7155 1.1 christos { "vpshaq", { XM, Vex_2src_1, Vex_2src_2 } },
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 /* a0 */
7161 1.1 christos { Bad_Opcode },
7162 1.1 christos { Bad_Opcode },
7163 1.1 christos { Bad_Opcode },
7164 1.1 christos { Bad_Opcode },
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 /* a8 */
7170 1.1 christos { Bad_Opcode },
7171 1.1 christos { Bad_Opcode },
7172 1.1 christos { Bad_Opcode },
7173 1.1 christos { Bad_Opcode },
7174 1.1 christos { Bad_Opcode },
7175 1.1 christos { Bad_Opcode },
7176 1.1 christos { Bad_Opcode },
7177 1.1 christos { Bad_Opcode },
7178 1.1 christos /* b0 */
7179 1.1 christos { Bad_Opcode },
7180 1.1 christos { Bad_Opcode },
7181 1.1 christos { Bad_Opcode },
7182 1.1 christos { Bad_Opcode },
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 /* b8 */
7188 1.1 christos { Bad_Opcode },
7189 1.1 christos { Bad_Opcode },
7190 1.1 christos { Bad_Opcode },
7191 1.1 christos { Bad_Opcode },
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 /* c0 */
7197 1.1 christos { Bad_Opcode },
7198 1.1 christos { "vphaddbw", { XM, EXxmm } },
7199 1.1 christos { "vphaddbd", { XM, EXxmm } },
7200 1.1 christos { "vphaddbq", { XM, EXxmm } },
7201 1.1 christos { Bad_Opcode },
7202 1.1 christos { Bad_Opcode },
7203 1.1 christos { "vphaddwd", { XM, EXxmm } },
7204 1.1 christos { "vphaddwq", { XM, EXxmm } },
7205 1.1 christos /* c8 */
7206 1.1 christos { Bad_Opcode },
7207 1.1 christos { Bad_Opcode },
7208 1.1 christos { Bad_Opcode },
7209 1.1 christos { "vphadddq", { XM, EXxmm } },
7210 1.1 christos { Bad_Opcode },
7211 1.1 christos { Bad_Opcode },
7212 1.1 christos { Bad_Opcode },
7213 1.1 christos { Bad_Opcode },
7214 1.1 christos /* d0 */
7215 1.1 christos { Bad_Opcode },
7216 1.1 christos { "vphaddubw", { XM, EXxmm } },
7217 1.1 christos { "vphaddubd", { XM, EXxmm } },
7218 1.1 christos { "vphaddubq", { XM, EXxmm } },
7219 1.1 christos { Bad_Opcode },
7220 1.1 christos { Bad_Opcode },
7221 1.1 christos { "vphadduwd", { XM, EXxmm } },
7222 1.1 christos { "vphadduwq", { XM, EXxmm } },
7223 1.1 christos /* d8 */
7224 1.1 christos { Bad_Opcode },
7225 1.1 christos { Bad_Opcode },
7226 1.1 christos { Bad_Opcode },
7227 1.1 christos { "vphaddudq", { XM, EXxmm } },
7228 1.1 christos { Bad_Opcode },
7229 1.1 christos { Bad_Opcode },
7230 1.1 christos { Bad_Opcode },
7231 1.1 christos { Bad_Opcode },
7232 1.1 christos /* e0 */
7233 1.1 christos { Bad_Opcode },
7234 1.1 christos { "vphsubbw", { XM, EXxmm } },
7235 1.1 christos { "vphsubwd", { XM, EXxmm } },
7236 1.1 christos { "vphsubdq", { XM, EXxmm } },
7237 1.1 christos { Bad_Opcode },
7238 1.1 christos { Bad_Opcode },
7239 1.1 christos { Bad_Opcode },
7240 1.1 christos { Bad_Opcode },
7241 1.1 christos /* e8 */
7242 1.1 christos { Bad_Opcode },
7243 1.1 christos { Bad_Opcode },
7244 1.1 christos { Bad_Opcode },
7245 1.1 christos { Bad_Opcode },
7246 1.1 christos { Bad_Opcode },
7247 1.1 christos { Bad_Opcode },
7248 1.1 christos { Bad_Opcode },
7249 1.1 christos { Bad_Opcode },
7250 1.1 christos /* f0 */
7251 1.1 christos { Bad_Opcode },
7252 1.1 christos { Bad_Opcode },
7253 1.1 christos { Bad_Opcode },
7254 1.1 christos { Bad_Opcode },
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 /* f8 */
7260 1.1 christos { Bad_Opcode },
7261 1.1 christos { Bad_Opcode },
7262 1.1 christos { Bad_Opcode },
7263 1.1 christos { Bad_Opcode },
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 },
7269 1.1 christos /* XOP_0A */
7270 1.1 christos {
7271 1.1 christos /* 00 */
7272 1.1 christos { Bad_Opcode },
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 /* 08 */
7281 1.1 christos { Bad_Opcode },
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 /* 10 */
7290 1.1 christos { "bextr", { Gv, Ev, Iq } },
7291 1.1 christos { Bad_Opcode },
7292 1.1 christos { REG_TABLE (REG_XOP_LWP) },
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 /* 18 */
7299 1.1 christos { Bad_Opcode },
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 /* 20 */
7308 1.1 christos { Bad_Opcode },
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 /* 28 */
7317 1.1 christos { Bad_Opcode },
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 /* 30 */
7326 1.1 christos { Bad_Opcode },
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 /* 38 */
7335 1.1 christos { Bad_Opcode },
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 /* 40 */
7344 1.1 christos { Bad_Opcode },
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 /* 48 */
7353 1.1 christos { Bad_Opcode },
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 /* 50 */
7362 1.1 christos { Bad_Opcode },
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 /* 58 */
7371 1.1 christos { Bad_Opcode },
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 /* 60 */
7380 1.1 christos { Bad_Opcode },
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 /* 68 */
7389 1.1 christos { Bad_Opcode },
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 /* 70 */
7398 1.1 christos { Bad_Opcode },
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 /* 78 */
7407 1.1 christos { Bad_Opcode },
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 /* 80 */
7416 1.1 christos { Bad_Opcode },
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 /* 88 */
7425 1.1 christos { Bad_Opcode },
7426 1.1 christos { Bad_Opcode },
7427 1.1 christos { Bad_Opcode },
7428 1.1 christos { Bad_Opcode },
7429 1.1 christos { Bad_Opcode },
7430 1.1 christos { Bad_Opcode },
7431 1.1 christos { Bad_Opcode },
7432 1.1 christos { Bad_Opcode },
7433 1.1 christos /* 90 */
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 { Bad_Opcode },
7441 1.1 christos { Bad_Opcode },
7442 1.1 christos /* 98 */
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 { Bad_Opcode },
7450 1.1 christos { Bad_Opcode },
7451 1.1 christos /* a0 */
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 { Bad_Opcode },
7459 1.1 christos { Bad_Opcode },
7460 1.1 christos /* a8 */
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 { Bad_Opcode },
7468 1.1 christos { Bad_Opcode },
7469 1.1 christos /* b0 */
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 { Bad_Opcode },
7477 1.1 christos { Bad_Opcode },
7478 1.1 christos /* b8 */
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 { Bad_Opcode },
7486 1.1 christos { Bad_Opcode },
7487 1.1 christos /* c0 */
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 { Bad_Opcode },
7495 1.1 christos { Bad_Opcode },
7496 1.1 christos /* c8 */
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 { Bad_Opcode },
7504 1.1 christos { Bad_Opcode },
7505 1.1 christos /* d0 */
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 { Bad_Opcode },
7513 1.1 christos { Bad_Opcode },
7514 1.1 christos /* d8 */
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 { Bad_Opcode },
7522 1.1 christos { Bad_Opcode },
7523 1.1 christos /* e0 */
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 { Bad_Opcode },
7531 1.1 christos { Bad_Opcode },
7532 1.1 christos /* e8 */
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 { Bad_Opcode },
7540 1.1 christos { Bad_Opcode },
7541 1.1 christos /* f0 */
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 { Bad_Opcode },
7549 1.1 christos { Bad_Opcode },
7550 1.1 christos /* f8 */
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 { Bad_Opcode },
7558 1.1 christos { Bad_Opcode },
7559 1.1 christos },
7560 1.1 christos };
7561 1.1 christos
7562 1.1 christos static const struct dis386 vex_table[][256] = {
7563 1.1 christos /* VEX_0F */
7564 1.1 christos {
7565 1.1 christos /* 00 */
7566 1.1 christos { Bad_Opcode },
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 /* 08 */
7575 1.1 christos { Bad_Opcode },
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 { Bad_Opcode },
7582 1.1 christos { Bad_Opcode },
7583 1.1 christos /* 10 */
7584 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F10) },
7585 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F11) },
7586 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F12) },
7587 1.1 christos { MOD_TABLE (MOD_VEX_0F13) },
7588 1.1 christos { VEX_W_TABLE (VEX_W_0F14) },
7589 1.1 christos { VEX_W_TABLE (VEX_W_0F15) },
7590 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F16) },
7591 1.1 christos { MOD_TABLE (MOD_VEX_0F17) },
7592 1.1 christos /* 18 */
7593 1.1 christos { Bad_Opcode },
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 { Bad_Opcode },
7600 1.1 christos { Bad_Opcode },
7601 1.1 christos /* 20 */
7602 1.1 christos { Bad_Opcode },
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 { Bad_Opcode },
7610 1.1 christos /* 28 */
7611 1.1 christos { VEX_W_TABLE (VEX_W_0F28) },
7612 1.1 christos { VEX_W_TABLE (VEX_W_0F29) },
7613 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F2A) },
7614 1.1 christos { MOD_TABLE (MOD_VEX_0F2B) },
7615 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F2C) },
7616 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F2D) },
7617 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F2E) },
7618 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F2F) },
7619 1.1 christos /* 30 */
7620 1.1 christos { Bad_Opcode },
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 /* 38 */
7629 1.1 christos { Bad_Opcode },
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 { Bad_Opcode },
7637 1.1 christos /* 40 */
7638 1.1 christos { Bad_Opcode },
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 /* 48 */
7647 1.1 christos { Bad_Opcode },
7648 1.1 christos { Bad_Opcode },
7649 1.1 christos { Bad_Opcode },
7650 1.1 christos { Bad_Opcode },
7651 1.1 christos { Bad_Opcode },
7652 1.1 christos { Bad_Opcode },
7653 1.1 christos { Bad_Opcode },
7654 1.1 christos { Bad_Opcode },
7655 1.1 christos /* 50 */
7656 1.1 christos { MOD_TABLE (MOD_VEX_0F50) },
7657 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F51) },
7658 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F52) },
7659 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F53) },
7660 1.1 christos { "vandpX", { XM, Vex, EXx } },
7661 1.1 christos { "vandnpX", { XM, Vex, EXx } },
7662 1.1 christos { "vorpX", { XM, Vex, EXx } },
7663 1.1 christos { "vxorpX", { XM, Vex, EXx } },
7664 1.1 christos /* 58 */
7665 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F58) },
7666 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F59) },
7667 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F5A) },
7668 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F5B) },
7669 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F5C) },
7670 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F5D) },
7671 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F5E) },
7672 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F5F) },
7673 1.1 christos /* 60 */
7674 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F60) },
7675 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F61) },
7676 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F62) },
7677 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F63) },
7678 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F64) },
7679 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F65) },
7680 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F66) },
7681 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F67) },
7682 1.1 christos /* 68 */
7683 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F68) },
7684 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F69) },
7685 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F6A) },
7686 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F6B) },
7687 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F6C) },
7688 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F6D) },
7689 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F6E) },
7690 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F6F) },
7691 1.1 christos /* 70 */
7692 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F70) },
7693 1.1 christos { REG_TABLE (REG_VEX_0F71) },
7694 1.1 christos { REG_TABLE (REG_VEX_0F72) },
7695 1.1 christos { REG_TABLE (REG_VEX_0F73) },
7696 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F74) },
7697 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F75) },
7698 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F76) },
7699 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F77) },
7700 1.1 christos /* 78 */
7701 1.1 christos { Bad_Opcode },
7702 1.1 christos { Bad_Opcode },
7703 1.1 christos { Bad_Opcode },
7704 1.1 christos { Bad_Opcode },
7705 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F7C) },
7706 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F7D) },
7707 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F7E) },
7708 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F7F) },
7709 1.1 christos /* 80 */
7710 1.1 christos { Bad_Opcode },
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 /* 88 */
7719 1.1 christos { Bad_Opcode },
7720 1.1 christos { Bad_Opcode },
7721 1.1 christos { Bad_Opcode },
7722 1.1 christos { Bad_Opcode },
7723 1.1 christos { Bad_Opcode },
7724 1.1 christos { Bad_Opcode },
7725 1.1 christos { Bad_Opcode },
7726 1.1 christos { Bad_Opcode },
7727 1.1 christos /* 90 */
7728 1.1 christos { Bad_Opcode },
7729 1.1 christos { Bad_Opcode },
7730 1.1 christos { Bad_Opcode },
7731 1.1 christos { Bad_Opcode },
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 /* 98 */
7737 1.1 christos { Bad_Opcode },
7738 1.1 christos { Bad_Opcode },
7739 1.1 christos { Bad_Opcode },
7740 1.1 christos { Bad_Opcode },
7741 1.1 christos { Bad_Opcode },
7742 1.1 christos { Bad_Opcode },
7743 1.1 christos { Bad_Opcode },
7744 1.1 christos { Bad_Opcode },
7745 1.1 christos /* a0 */
7746 1.1 christos { Bad_Opcode },
7747 1.1 christos { Bad_Opcode },
7748 1.1 christos { Bad_Opcode },
7749 1.1 christos { Bad_Opcode },
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 /* a8 */
7755 1.1 christos { Bad_Opcode },
7756 1.1 christos { Bad_Opcode },
7757 1.1 christos { Bad_Opcode },
7758 1.1 christos { Bad_Opcode },
7759 1.1 christos { Bad_Opcode },
7760 1.1 christos { Bad_Opcode },
7761 1.1 christos { REG_TABLE (REG_VEX_0FAE) },
7762 1.1 christos { Bad_Opcode },
7763 1.1 christos /* b0 */
7764 1.1 christos { Bad_Opcode },
7765 1.1 christos { Bad_Opcode },
7766 1.1 christos { Bad_Opcode },
7767 1.1 christos { Bad_Opcode },
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 /* b8 */
7773 1.1 christos { Bad_Opcode },
7774 1.1 christos { Bad_Opcode },
7775 1.1 christos { Bad_Opcode },
7776 1.1 christos { Bad_Opcode },
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 /* c0 */
7782 1.1 christos { Bad_Opcode },
7783 1.1 christos { Bad_Opcode },
7784 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FC2) },
7785 1.1 christos { Bad_Opcode },
7786 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FC4) },
7787 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FC5) },
7788 1.1 christos { "vshufpX", { XM, Vex, EXx, Ib } },
7789 1.1 christos { Bad_Opcode },
7790 1.1 christos /* c8 */
7791 1.1 christos { Bad_Opcode },
7792 1.1 christos { Bad_Opcode },
7793 1.1 christos { Bad_Opcode },
7794 1.1 christos { Bad_Opcode },
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 /* d0 */
7800 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD0) },
7801 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD1) },
7802 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD2) },
7803 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD3) },
7804 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD4) },
7805 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD5) },
7806 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD6) },
7807 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD7) },
7808 1.1 christos /* d8 */
7809 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD8) },
7810 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FD9) },
7811 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FDA) },
7812 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FDB) },
7813 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FDC) },
7814 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FDD) },
7815 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FDE) },
7816 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FDF) },
7817 1.1 christos /* e0 */
7818 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE0) },
7819 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE1) },
7820 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE2) },
7821 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE3) },
7822 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE4) },
7823 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE5) },
7824 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE6) },
7825 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE7) },
7826 1.1 christos /* e8 */
7827 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE8) },
7828 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FE9) },
7829 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FEA) },
7830 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FEB) },
7831 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FEC) },
7832 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FED) },
7833 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FEE) },
7834 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FEF) },
7835 1.1 christos /* f0 */
7836 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF0) },
7837 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF1) },
7838 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF2) },
7839 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF3) },
7840 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF4) },
7841 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF5) },
7842 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF6) },
7843 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF7) },
7844 1.1 christos /* f8 */
7845 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF8) },
7846 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FF9) },
7847 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FFA) },
7848 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FFB) },
7849 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FFC) },
7850 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FFD) },
7851 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0FFE) },
7852 1.1 christos { Bad_Opcode },
7853 1.1 christos },
7854 1.1 christos /* VEX_0F38 */
7855 1.1 christos {
7856 1.1 christos /* 00 */
7857 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3800) },
7858 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3801) },
7859 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3802) },
7860 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3803) },
7861 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3804) },
7862 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3805) },
7863 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3806) },
7864 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3807) },
7865 1.1 christos /* 08 */
7866 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3808) },
7867 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3809) },
7868 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F380A) },
7869 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F380B) },
7870 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F380C) },
7871 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F380D) },
7872 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F380E) },
7873 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F380F) },
7874 1.1 christos /* 10 */
7875 1.1 christos { Bad_Opcode },
7876 1.1 christos { Bad_Opcode },
7877 1.1 christos { Bad_Opcode },
7878 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3813) },
7879 1.1 christos { Bad_Opcode },
7880 1.1 christos { Bad_Opcode },
7881 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3816) },
7882 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3817) },
7883 1.1 christos /* 18 */
7884 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3818) },
7885 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3819) },
7886 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F381A) },
7887 1.1 christos { Bad_Opcode },
7888 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F381C) },
7889 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F381D) },
7890 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F381E) },
7891 1.1 christos { Bad_Opcode },
7892 1.1 christos /* 20 */
7893 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3820) },
7894 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3821) },
7895 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3822) },
7896 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3823) },
7897 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3824) },
7898 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3825) },
7899 1.1 christos { Bad_Opcode },
7900 1.1 christos { Bad_Opcode },
7901 1.1 christos /* 28 */
7902 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3828) },
7903 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3829) },
7904 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F382A) },
7905 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F382B) },
7906 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F382C) },
7907 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F382D) },
7908 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F382E) },
7909 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F382F) },
7910 1.1 christos /* 30 */
7911 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3830) },
7912 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3831) },
7913 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3832) },
7914 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3833) },
7915 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3834) },
7916 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3835) },
7917 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3836) },
7918 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3837) },
7919 1.1 christos /* 38 */
7920 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3838) },
7921 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3839) },
7922 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F383A) },
7923 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F383B) },
7924 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F383C) },
7925 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F383D) },
7926 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F383E) },
7927 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F383F) },
7928 1.1 christos /* 40 */
7929 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3840) },
7930 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3841) },
7931 1.1 christos { Bad_Opcode },
7932 1.1 christos { Bad_Opcode },
7933 1.1 christos { Bad_Opcode },
7934 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3845) },
7935 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3846) },
7936 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3847) },
7937 1.1 christos /* 48 */
7938 1.1 christos { Bad_Opcode },
7939 1.1 christos { Bad_Opcode },
7940 1.1 christos { Bad_Opcode },
7941 1.1 christos { Bad_Opcode },
7942 1.1 christos { Bad_Opcode },
7943 1.1 christos { Bad_Opcode },
7944 1.1 christos { Bad_Opcode },
7945 1.1 christos { Bad_Opcode },
7946 1.1 christos /* 50 */
7947 1.1 christos { Bad_Opcode },
7948 1.1 christos { Bad_Opcode },
7949 1.1 christos { Bad_Opcode },
7950 1.1 christos { Bad_Opcode },
7951 1.1 christos { Bad_Opcode },
7952 1.1 christos { Bad_Opcode },
7953 1.1 christos { Bad_Opcode },
7954 1.1 christos { Bad_Opcode },
7955 1.1 christos /* 58 */
7956 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3858) },
7957 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3859) },
7958 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F385A) },
7959 1.1 christos { Bad_Opcode },
7960 1.1 christos { Bad_Opcode },
7961 1.1 christos { Bad_Opcode },
7962 1.1 christos { Bad_Opcode },
7963 1.1 christos { Bad_Opcode },
7964 1.1 christos /* 60 */
7965 1.1 christos { Bad_Opcode },
7966 1.1 christos { Bad_Opcode },
7967 1.1 christos { Bad_Opcode },
7968 1.1 christos { Bad_Opcode },
7969 1.1 christos { Bad_Opcode },
7970 1.1 christos { Bad_Opcode },
7971 1.1 christos { Bad_Opcode },
7972 1.1 christos { Bad_Opcode },
7973 1.1 christos /* 68 */
7974 1.1 christos { Bad_Opcode },
7975 1.1 christos { Bad_Opcode },
7976 1.1 christos { Bad_Opcode },
7977 1.1 christos { Bad_Opcode },
7978 1.1 christos { Bad_Opcode },
7979 1.1 christos { Bad_Opcode },
7980 1.1 christos { Bad_Opcode },
7981 1.1 christos { Bad_Opcode },
7982 1.1 christos /* 70 */
7983 1.1 christos { Bad_Opcode },
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 /* 78 */
7992 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3878) },
7993 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3879) },
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 /* 80 */
8001 1.1 christos { Bad_Opcode },
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 /* 88 */
8010 1.1 christos { Bad_Opcode },
8011 1.1 christos { Bad_Opcode },
8012 1.1 christos { Bad_Opcode },
8013 1.1 christos { Bad_Opcode },
8014 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F388C) },
8015 1.1 christos { Bad_Opcode },
8016 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F388E) },
8017 1.1 christos { Bad_Opcode },
8018 1.1 christos /* 90 */
8019 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3890) },
8020 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3891) },
8021 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3892) },
8022 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3893) },
8023 1.1 christos { Bad_Opcode },
8024 1.1 christos { Bad_Opcode },
8025 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3896) },
8026 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3897) },
8027 1.1 christos /* 98 */
8028 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3898) },
8029 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3899) },
8030 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F389A) },
8031 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F389B) },
8032 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F389C) },
8033 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F389D) },
8034 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F389E) },
8035 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F389F) },
8036 1.1 christos /* a0 */
8037 1.1 christos { Bad_Opcode },
8038 1.1 christos { Bad_Opcode },
8039 1.1 christos { Bad_Opcode },
8040 1.1 christos { Bad_Opcode },
8041 1.1 christos { Bad_Opcode },
8042 1.1 christos { Bad_Opcode },
8043 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38A6) },
8044 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38A7) },
8045 1.1 christos /* a8 */
8046 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38A8) },
8047 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38A9) },
8048 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38AA) },
8049 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38AB) },
8050 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38AC) },
8051 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38AD) },
8052 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38AE) },
8053 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38AF) },
8054 1.1 christos /* b0 */
8055 1.1 christos { Bad_Opcode },
8056 1.1 christos { Bad_Opcode },
8057 1.1 christos { Bad_Opcode },
8058 1.1 christos { Bad_Opcode },
8059 1.1 christos { Bad_Opcode },
8060 1.1 christos { Bad_Opcode },
8061 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38B6) },
8062 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38B7) },
8063 1.1 christos /* b8 */
8064 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38B8) },
8065 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38B9) },
8066 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38BA) },
8067 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38BB) },
8068 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38BC) },
8069 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38BD) },
8070 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38BE) },
8071 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38BF) },
8072 1.1 christos /* c0 */
8073 1.1 christos { Bad_Opcode },
8074 1.1 christos { Bad_Opcode },
8075 1.1 christos { Bad_Opcode },
8076 1.1 christos { Bad_Opcode },
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 /* c8 */
8082 1.1 christos { Bad_Opcode },
8083 1.1 christos { Bad_Opcode },
8084 1.1 christos { Bad_Opcode },
8085 1.1 christos { Bad_Opcode },
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 /* d0 */
8091 1.1 christos { Bad_Opcode },
8092 1.1 christos { Bad_Opcode },
8093 1.1 christos { Bad_Opcode },
8094 1.1 christos { Bad_Opcode },
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 /* d8 */
8100 1.1 christos { Bad_Opcode },
8101 1.1 christos { Bad_Opcode },
8102 1.1 christos { Bad_Opcode },
8103 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38DB) },
8104 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38DC) },
8105 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38DD) },
8106 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38DE) },
8107 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38DF) },
8108 1.1 christos /* e0 */
8109 1.1 christos { Bad_Opcode },
8110 1.1 christos { Bad_Opcode },
8111 1.1 christos { Bad_Opcode },
8112 1.1 christos { Bad_Opcode },
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 /* e8 */
8118 1.1 christos { Bad_Opcode },
8119 1.1 christos { Bad_Opcode },
8120 1.1 christos { Bad_Opcode },
8121 1.1 christos { Bad_Opcode },
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 /* f0 */
8127 1.1 christos { Bad_Opcode },
8128 1.1 christos { Bad_Opcode },
8129 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38F2) },
8130 1.1 christos { REG_TABLE (REG_VEX_0F38F3) },
8131 1.1 christos { Bad_Opcode },
8132 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F38F5) },
8133 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F38F6) },
8134 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F38F7) },
8135 1.1 christos /* f8 */
8136 1.1 christos { Bad_Opcode },
8137 1.1 christos { Bad_Opcode },
8138 1.1 christos { Bad_Opcode },
8139 1.1 christos { Bad_Opcode },
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 },
8145 1.1 christos /* VEX_0F3A */
8146 1.1 christos {
8147 1.1 christos /* 00 */
8148 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3A00) },
8149 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3A01) },
8150 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3A02) },
8151 1.1 christos { Bad_Opcode },
8152 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A04) },
8153 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A05) },
8154 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A06) },
8155 1.1 christos { Bad_Opcode },
8156 1.1 christos /* 08 */
8157 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A08) },
8158 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A09) },
8159 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A0A) },
8160 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A0B) },
8161 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A0C) },
8162 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A0D) },
8163 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A0E) },
8164 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A0F) },
8165 1.1 christos /* 10 */
8166 1.1 christos { Bad_Opcode },
8167 1.1 christos { Bad_Opcode },
8168 1.1 christos { Bad_Opcode },
8169 1.1 christos { Bad_Opcode },
8170 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A14) },
8171 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A15) },
8172 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A16) },
8173 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A17) },
8174 1.1 christos /* 18 */
8175 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A18) },
8176 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A19) },
8177 1.1 christos { Bad_Opcode },
8178 1.1 christos { Bad_Opcode },
8179 1.1 christos { Bad_Opcode },
8180 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A1D) },
8181 1.1 christos { Bad_Opcode },
8182 1.1 christos { Bad_Opcode },
8183 1.1 christos /* 20 */
8184 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A20) },
8185 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A21) },
8186 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A22) },
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 /* 28 */
8193 1.1 christos { Bad_Opcode },
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 /* 30 */
8202 1.1 christos { Bad_Opcode },
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 /* 38 */
8211 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3A38) },
8212 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3A39) },
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 /* 40 */
8220 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A40) },
8221 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A41) },
8222 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A42) },
8223 1.1 christos { Bad_Opcode },
8224 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A44) },
8225 1.1 christos { Bad_Opcode },
8226 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3A46) },
8227 1.1 christos { Bad_Opcode },
8228 1.1 christos /* 48 */
8229 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A48) },
8230 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A49) },
8231 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A4A) },
8232 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A4B) },
8233 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A4C) },
8234 1.1 christos { Bad_Opcode },
8235 1.1 christos { Bad_Opcode },
8236 1.1 christos { Bad_Opcode },
8237 1.1 christos /* 50 */
8238 1.1 christos { Bad_Opcode },
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 /* 58 */
8247 1.1 christos { Bad_Opcode },
8248 1.1 christos { Bad_Opcode },
8249 1.1 christos { Bad_Opcode },
8250 1.1 christos { Bad_Opcode },
8251 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A5C) },
8252 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A5D) },
8253 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A5E) },
8254 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A5F) },
8255 1.1 christos /* 60 */
8256 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A60) },
8257 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A61) },
8258 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A62) },
8259 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A63) },
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 /* 68 */
8265 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A68) },
8266 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A69) },
8267 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A6A) },
8268 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A6B) },
8269 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A6C) },
8270 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A6D) },
8271 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A6E) },
8272 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A6F) },
8273 1.1 christos /* 70 */
8274 1.1 christos { Bad_Opcode },
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 /* 78 */
8283 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A78) },
8284 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A79) },
8285 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A7A) },
8286 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A7B) },
8287 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A7C) },
8288 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A7D) },
8289 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A7E) },
8290 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3A7F) },
8291 1.1 christos /* 80 */
8292 1.1 christos { Bad_Opcode },
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 /* 88 */
8301 1.1 christos { Bad_Opcode },
8302 1.1 christos { Bad_Opcode },
8303 1.1 christos { Bad_Opcode },
8304 1.1 christos { Bad_Opcode },
8305 1.1 christos { Bad_Opcode },
8306 1.1 christos { Bad_Opcode },
8307 1.1 christos { Bad_Opcode },
8308 1.1 christos { Bad_Opcode },
8309 1.1 christos /* 90 */
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 { Bad_Opcode },
8317 1.1 christos { Bad_Opcode },
8318 1.1 christos /* 98 */
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 { Bad_Opcode },
8326 1.1 christos { Bad_Opcode },
8327 1.1 christos /* a0 */
8328 1.1 christos { Bad_Opcode },
8329 1.1 christos { Bad_Opcode },
8330 1.1 christos { Bad_Opcode },
8331 1.1 christos { Bad_Opcode },
8332 1.1 christos { Bad_Opcode },
8333 1.1 christos { Bad_Opcode },
8334 1.1 christos { Bad_Opcode },
8335 1.1 christos { Bad_Opcode },
8336 1.1 christos /* a8 */
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 { Bad_Opcode },
8344 1.1 christos { Bad_Opcode },
8345 1.1 christos /* b0 */
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 { Bad_Opcode },
8353 1.1 christos { Bad_Opcode },
8354 1.1 christos /* b8 */
8355 1.1 christos { Bad_Opcode },
8356 1.1 christos { Bad_Opcode },
8357 1.1 christos { Bad_Opcode },
8358 1.1 christos { Bad_Opcode },
8359 1.1 christos { Bad_Opcode },
8360 1.1 christos { Bad_Opcode },
8361 1.1 christos { Bad_Opcode },
8362 1.1 christos { Bad_Opcode },
8363 1.1 christos /* c0 */
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 { Bad_Opcode },
8371 1.1 christos { Bad_Opcode },
8372 1.1 christos /* c8 */
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 { Bad_Opcode },
8380 1.1 christos { Bad_Opcode },
8381 1.1 christos /* d0 */
8382 1.1 christos { Bad_Opcode },
8383 1.1 christos { Bad_Opcode },
8384 1.1 christos { Bad_Opcode },
8385 1.1 christos { Bad_Opcode },
8386 1.1 christos { Bad_Opcode },
8387 1.1 christos { Bad_Opcode },
8388 1.1 christos { Bad_Opcode },
8389 1.1 christos { Bad_Opcode },
8390 1.1 christos /* d8 */
8391 1.1 christos { Bad_Opcode },
8392 1.1 christos { Bad_Opcode },
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 { Bad_Opcode },
8398 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F3ADF) },
8399 1.1 christos /* e0 */
8400 1.1 christos { Bad_Opcode },
8401 1.1 christos { Bad_Opcode },
8402 1.1 christos { Bad_Opcode },
8403 1.1 christos { Bad_Opcode },
8404 1.1 christos { Bad_Opcode },
8405 1.1 christos { Bad_Opcode },
8406 1.1 christos { Bad_Opcode },
8407 1.1 christos { Bad_Opcode },
8408 1.1 christos /* e8 */
8409 1.1 christos { Bad_Opcode },
8410 1.1 christos { Bad_Opcode },
8411 1.1 christos { Bad_Opcode },
8412 1.1 christos { Bad_Opcode },
8413 1.1 christos { Bad_Opcode },
8414 1.1 christos { Bad_Opcode },
8415 1.1 christos { Bad_Opcode },
8416 1.1 christos { Bad_Opcode },
8417 1.1 christos /* f0 */
8418 1.1.1.2 christos { PREFIX_TABLE (PREFIX_VEX_0F3AF0) },
8419 1.1 christos { Bad_Opcode },
8420 1.1 christos { Bad_Opcode },
8421 1.1 christos { Bad_Opcode },
8422 1.1 christos { Bad_Opcode },
8423 1.1 christos { Bad_Opcode },
8424 1.1 christos { Bad_Opcode },
8425 1.1 christos { Bad_Opcode },
8426 1.1 christos /* f8 */
8427 1.1 christos { Bad_Opcode },
8428 1.1 christos { Bad_Opcode },
8429 1.1 christos { Bad_Opcode },
8430 1.1 christos { Bad_Opcode },
8431 1.1 christos { Bad_Opcode },
8432 1.1 christos { Bad_Opcode },
8433 1.1 christos { Bad_Opcode },
8434 1.1 christos { Bad_Opcode },
8435 1.1 christos },
8436 1.1 christos };
8437 1.1 christos
8438 1.1 christos static const struct dis386 vex_len_table[][2] = {
8439 1.1 christos /* VEX_LEN_0F10_P_1 */
8440 1.1 christos {
8441 1.1 christos { VEX_W_TABLE (VEX_W_0F10_P_1) },
8442 1.1 christos { VEX_W_TABLE (VEX_W_0F10_P_1) },
8443 1.1 christos },
8444 1.1 christos
8445 1.1 christos /* VEX_LEN_0F10_P_3 */
8446 1.1 christos {
8447 1.1 christos { VEX_W_TABLE (VEX_W_0F10_P_3) },
8448 1.1 christos { VEX_W_TABLE (VEX_W_0F10_P_3) },
8449 1.1 christos },
8450 1.1 christos
8451 1.1 christos /* VEX_LEN_0F11_P_1 */
8452 1.1 christos {
8453 1.1 christos { VEX_W_TABLE (VEX_W_0F11_P_1) },
8454 1.1 christos { VEX_W_TABLE (VEX_W_0F11_P_1) },
8455 1.1 christos },
8456 1.1 christos
8457 1.1 christos /* VEX_LEN_0F11_P_3 */
8458 1.1 christos {
8459 1.1 christos { VEX_W_TABLE (VEX_W_0F11_P_3) },
8460 1.1 christos { VEX_W_TABLE (VEX_W_0F11_P_3) },
8461 1.1 christos },
8462 1.1 christos
8463 1.1 christos /* VEX_LEN_0F12_P_0_M_0 */
8464 1.1 christos {
8465 1.1 christos { VEX_W_TABLE (VEX_W_0F12_P_0_M_0) },
8466 1.1 christos },
8467 1.1 christos
8468 1.1 christos /* VEX_LEN_0F12_P_0_M_1 */
8469 1.1 christos {
8470 1.1 christos { VEX_W_TABLE (VEX_W_0F12_P_0_M_1) },
8471 1.1 christos },
8472 1.1 christos
8473 1.1 christos /* VEX_LEN_0F12_P_2 */
8474 1.1 christos {
8475 1.1 christos { VEX_W_TABLE (VEX_W_0F12_P_2) },
8476 1.1 christos },
8477 1.1 christos
8478 1.1 christos /* VEX_LEN_0F13_M_0 */
8479 1.1 christos {
8480 1.1 christos { VEX_W_TABLE (VEX_W_0F13_M_0) },
8481 1.1 christos },
8482 1.1 christos
8483 1.1 christos /* VEX_LEN_0F16_P_0_M_0 */
8484 1.1 christos {
8485 1.1 christos { VEX_W_TABLE (VEX_W_0F16_P_0_M_0) },
8486 1.1 christos },
8487 1.1 christos
8488 1.1 christos /* VEX_LEN_0F16_P_0_M_1 */
8489 1.1 christos {
8490 1.1 christos { VEX_W_TABLE (VEX_W_0F16_P_0_M_1) },
8491 1.1 christos },
8492 1.1 christos
8493 1.1 christos /* VEX_LEN_0F16_P_2 */
8494 1.1 christos {
8495 1.1 christos { VEX_W_TABLE (VEX_W_0F16_P_2) },
8496 1.1 christos },
8497 1.1 christos
8498 1.1 christos /* VEX_LEN_0F17_M_0 */
8499 1.1 christos {
8500 1.1 christos { VEX_W_TABLE (VEX_W_0F17_M_0) },
8501 1.1 christos },
8502 1.1 christos
8503 1.1 christos /* VEX_LEN_0F2A_P_1 */
8504 1.1 christos {
8505 1.1 christos { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
8506 1.1 christos { "vcvtsi2ss%LQ", { XMScalar, VexScalar, Ev } },
8507 1.1 christos },
8508 1.1 christos
8509 1.1 christos /* VEX_LEN_0F2A_P_3 */
8510 1.1 christos {
8511 1.1 christos { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
8512 1.1 christos { "vcvtsi2sd%LQ", { XMScalar, VexScalar, Ev } },
8513 1.1 christos },
8514 1.1 christos
8515 1.1 christos /* VEX_LEN_0F2C_P_1 */
8516 1.1 christos {
8517 1.1 christos { "vcvttss2siY", { Gv, EXdScalar } },
8518 1.1 christos { "vcvttss2siY", { Gv, EXdScalar } },
8519 1.1 christos },
8520 1.1 christos
8521 1.1 christos /* VEX_LEN_0F2C_P_3 */
8522 1.1 christos {
8523 1.1 christos { "vcvttsd2siY", { Gv, EXqScalar } },
8524 1.1 christos { "vcvttsd2siY", { Gv, EXqScalar } },
8525 1.1 christos },
8526 1.1 christos
8527 1.1 christos /* VEX_LEN_0F2D_P_1 */
8528 1.1 christos {
8529 1.1 christos { "vcvtss2siY", { Gv, EXdScalar } },
8530 1.1 christos { "vcvtss2siY", { Gv, EXdScalar } },
8531 1.1 christos },
8532 1.1 christos
8533 1.1 christos /* VEX_LEN_0F2D_P_3 */
8534 1.1 christos {
8535 1.1 christos { "vcvtsd2siY", { Gv, EXqScalar } },
8536 1.1 christos { "vcvtsd2siY", { Gv, EXqScalar } },
8537 1.1 christos },
8538 1.1 christos
8539 1.1 christos /* VEX_LEN_0F2E_P_0 */
8540 1.1 christos {
8541 1.1 christos { VEX_W_TABLE (VEX_W_0F2E_P_0) },
8542 1.1 christos { VEX_W_TABLE (VEX_W_0F2E_P_0) },
8543 1.1 christos },
8544 1.1 christos
8545 1.1 christos /* VEX_LEN_0F2E_P_2 */
8546 1.1 christos {
8547 1.1 christos { VEX_W_TABLE (VEX_W_0F2E_P_2) },
8548 1.1 christos { VEX_W_TABLE (VEX_W_0F2E_P_2) },
8549 1.1 christos },
8550 1.1 christos
8551 1.1 christos /* VEX_LEN_0F2F_P_0 */
8552 1.1 christos {
8553 1.1 christos { VEX_W_TABLE (VEX_W_0F2F_P_0) },
8554 1.1 christos { VEX_W_TABLE (VEX_W_0F2F_P_0) },
8555 1.1 christos },
8556 1.1 christos
8557 1.1 christos /* VEX_LEN_0F2F_P_2 */
8558 1.1 christos {
8559 1.1 christos { VEX_W_TABLE (VEX_W_0F2F_P_2) },
8560 1.1 christos { VEX_W_TABLE (VEX_W_0F2F_P_2) },
8561 1.1 christos },
8562 1.1 christos
8563 1.1 christos /* VEX_LEN_0F51_P_1 */
8564 1.1 christos {
8565 1.1 christos { VEX_W_TABLE (VEX_W_0F51_P_1) },
8566 1.1 christos { VEX_W_TABLE (VEX_W_0F51_P_1) },
8567 1.1 christos },
8568 1.1 christos
8569 1.1 christos /* VEX_LEN_0F51_P_3 */
8570 1.1 christos {
8571 1.1 christos { VEX_W_TABLE (VEX_W_0F51_P_3) },
8572 1.1 christos { VEX_W_TABLE (VEX_W_0F51_P_3) },
8573 1.1 christos },
8574 1.1 christos
8575 1.1 christos /* VEX_LEN_0F52_P_1 */
8576 1.1 christos {
8577 1.1 christos { VEX_W_TABLE (VEX_W_0F52_P_1) },
8578 1.1 christos { VEX_W_TABLE (VEX_W_0F52_P_1) },
8579 1.1 christos },
8580 1.1 christos
8581 1.1 christos /* VEX_LEN_0F53_P_1 */
8582 1.1 christos {
8583 1.1 christos { VEX_W_TABLE (VEX_W_0F53_P_1) },
8584 1.1 christos { VEX_W_TABLE (VEX_W_0F53_P_1) },
8585 1.1 christos },
8586 1.1 christos
8587 1.1 christos /* VEX_LEN_0F58_P_1 */
8588 1.1 christos {
8589 1.1 christos { VEX_W_TABLE (VEX_W_0F58_P_1) },
8590 1.1 christos { VEX_W_TABLE (VEX_W_0F58_P_1) },
8591 1.1 christos },
8592 1.1 christos
8593 1.1 christos /* VEX_LEN_0F58_P_3 */
8594 1.1 christos {
8595 1.1 christos { VEX_W_TABLE (VEX_W_0F58_P_3) },
8596 1.1 christos { VEX_W_TABLE (VEX_W_0F58_P_3) },
8597 1.1 christos },
8598 1.1 christos
8599 1.1 christos /* VEX_LEN_0F59_P_1 */
8600 1.1 christos {
8601 1.1 christos { VEX_W_TABLE (VEX_W_0F59_P_1) },
8602 1.1 christos { VEX_W_TABLE (VEX_W_0F59_P_1) },
8603 1.1 christos },
8604 1.1 christos
8605 1.1 christos /* VEX_LEN_0F59_P_3 */
8606 1.1 christos {
8607 1.1 christos { VEX_W_TABLE (VEX_W_0F59_P_3) },
8608 1.1 christos { VEX_W_TABLE (VEX_W_0F59_P_3) },
8609 1.1 christos },
8610 1.1 christos
8611 1.1 christos /* VEX_LEN_0F5A_P_1 */
8612 1.1 christos {
8613 1.1 christos { VEX_W_TABLE (VEX_W_0F5A_P_1) },
8614 1.1 christos { VEX_W_TABLE (VEX_W_0F5A_P_1) },
8615 1.1 christos },
8616 1.1 christos
8617 1.1 christos /* VEX_LEN_0F5A_P_3 */
8618 1.1 christos {
8619 1.1 christos { VEX_W_TABLE (VEX_W_0F5A_P_3) },
8620 1.1 christos { VEX_W_TABLE (VEX_W_0F5A_P_3) },
8621 1.1 christos },
8622 1.1 christos
8623 1.1 christos /* VEX_LEN_0F5C_P_1 */
8624 1.1 christos {
8625 1.1 christos { VEX_W_TABLE (VEX_W_0F5C_P_1) },
8626 1.1 christos { VEX_W_TABLE (VEX_W_0F5C_P_1) },
8627 1.1 christos },
8628 1.1 christos
8629 1.1 christos /* VEX_LEN_0F5C_P_3 */
8630 1.1 christos {
8631 1.1 christos { VEX_W_TABLE (VEX_W_0F5C_P_3) },
8632 1.1 christos { VEX_W_TABLE (VEX_W_0F5C_P_3) },
8633 1.1 christos },
8634 1.1 christos
8635 1.1 christos /* VEX_LEN_0F5D_P_1 */
8636 1.1 christos {
8637 1.1 christos { VEX_W_TABLE (VEX_W_0F5D_P_1) },
8638 1.1 christos { VEX_W_TABLE (VEX_W_0F5D_P_1) },
8639 1.1 christos },
8640 1.1 christos
8641 1.1 christos /* VEX_LEN_0F5D_P_3 */
8642 1.1 christos {
8643 1.1 christos { VEX_W_TABLE (VEX_W_0F5D_P_3) },
8644 1.1 christos { VEX_W_TABLE (VEX_W_0F5D_P_3) },
8645 1.1 christos },
8646 1.1 christos
8647 1.1 christos /* VEX_LEN_0F5E_P_1 */
8648 1.1 christos {
8649 1.1 christos { VEX_W_TABLE (VEX_W_0F5E_P_1) },
8650 1.1 christos { VEX_W_TABLE (VEX_W_0F5E_P_1) },
8651 1.1 christos },
8652 1.1 christos
8653 1.1 christos /* VEX_LEN_0F5E_P_3 */
8654 1.1 christos {
8655 1.1 christos { VEX_W_TABLE (VEX_W_0F5E_P_3) },
8656 1.1 christos { VEX_W_TABLE (VEX_W_0F5E_P_3) },
8657 1.1 christos },
8658 1.1 christos
8659 1.1 christos /* VEX_LEN_0F5F_P_1 */
8660 1.1 christos {
8661 1.1 christos { VEX_W_TABLE (VEX_W_0F5F_P_1) },
8662 1.1 christos { VEX_W_TABLE (VEX_W_0F5F_P_1) },
8663 1.1 christos },
8664 1.1 christos
8665 1.1 christos /* VEX_LEN_0F5F_P_3 */
8666 1.1 christos {
8667 1.1 christos { VEX_W_TABLE (VEX_W_0F5F_P_3) },
8668 1.1 christos { VEX_W_TABLE (VEX_W_0F5F_P_3) },
8669 1.1 christos },
8670 1.1 christos
8671 1.1.1.2 christos /* VEX_LEN_0F6E_P_2 */
8672 1.1 christos {
8673 1.1.1.2 christos { "vmovK", { XMScalar, Edq } },
8674 1.1.1.2 christos { "vmovK", { XMScalar, Edq } },
8675 1.1 christos },
8676 1.1 christos
8677 1.1.1.2 christos /* VEX_LEN_0F7E_P_1 */
8678 1.1 christos {
8679 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F7E_P_1) },
8680 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F7E_P_1) },
8681 1.1 christos },
8682 1.1 christos
8683 1.1.1.2 christos /* VEX_LEN_0F7E_P_2 */
8684 1.1 christos {
8685 1.1.1.2 christos { "vmovK", { Edq, XMScalar } },
8686 1.1.1.2 christos { "vmovK", { Edq, XMScalar } },
8687 1.1 christos },
8688 1.1 christos
8689 1.1.1.2 christos /* VEX_LEN_0FAE_R_2_M_0 */
8690 1.1 christos {
8691 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FAE_R_2_M_0) },
8692 1.1 christos },
8693 1.1 christos
8694 1.1.1.2 christos /* VEX_LEN_0FAE_R_3_M_0 */
8695 1.1 christos {
8696 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FAE_R_3_M_0) },
8697 1.1 christos },
8698 1.1 christos
8699 1.1.1.2 christos /* VEX_LEN_0FC2_P_1 */
8700 1.1 christos {
8701 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FC2_P_1) },
8702 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FC2_P_1) },
8703 1.1 christos },
8704 1.1 christos
8705 1.1.1.2 christos /* VEX_LEN_0FC2_P_3 */
8706 1.1 christos {
8707 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FC2_P_3) },
8708 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FC2_P_3) },
8709 1.1 christos },
8710 1.1 christos
8711 1.1.1.2 christos /* VEX_LEN_0FC4_P_2 */
8712 1.1 christos {
8713 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FC4_P_2) },
8714 1.1 christos },
8715 1.1 christos
8716 1.1.1.2 christos /* VEX_LEN_0FC5_P_2 */
8717 1.1 christos {
8718 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FC5_P_2) },
8719 1.1 christos },
8720 1.1 christos
8721 1.1.1.2 christos /* VEX_LEN_0FD6_P_2 */
8722 1.1 christos {
8723 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FD6_P_2) },
8724 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FD6_P_2) },
8725 1.1 christos },
8726 1.1 christos
8727 1.1.1.2 christos /* VEX_LEN_0FF7_P_2 */
8728 1.1 christos {
8729 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FF7_P_2) },
8730 1.1 christos },
8731 1.1 christos
8732 1.1.1.2 christos /* VEX_LEN_0F3816_P_2 */
8733 1.1 christos {
8734 1.1.1.2 christos { Bad_Opcode },
8735 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3816_P_2) },
8736 1.1 christos },
8737 1.1 christos
8738 1.1.1.2 christos /* VEX_LEN_0F3819_P_2 */
8739 1.1 christos {
8740 1.1.1.2 christos { Bad_Opcode },
8741 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3819_P_2) },
8742 1.1 christos },
8743 1.1 christos
8744 1.1.1.2 christos /* VEX_LEN_0F381A_P_2_M_0 */
8745 1.1 christos {
8746 1.1.1.2 christos { Bad_Opcode },
8747 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F381A_P_2_M_0) },
8748 1.1 christos },
8749 1.1 christos
8750 1.1.1.2 christos /* VEX_LEN_0F3836_P_2 */
8751 1.1 christos {
8752 1.1.1.2 christos { Bad_Opcode },
8753 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3836_P_2) },
8754 1.1 christos },
8755 1.1 christos
8756 1.1.1.2 christos /* VEX_LEN_0F3841_P_2 */
8757 1.1 christos {
8758 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3841_P_2) },
8759 1.1 christos },
8760 1.1 christos
8761 1.1.1.2 christos /* VEX_LEN_0F385A_P_2_M_0 */
8762 1.1 christos {
8763 1.1.1.2 christos { Bad_Opcode },
8764 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F385A_P_2_M_0) },
8765 1.1 christos },
8766 1.1 christos
8767 1.1.1.2 christos /* VEX_LEN_0F38DB_P_2 */
8768 1.1 christos {
8769 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F38DB_P_2) },
8770 1.1 christos },
8771 1.1 christos
8772 1.1.1.2 christos /* VEX_LEN_0F38DC_P_2 */
8773 1.1 christos {
8774 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F38DC_P_2) },
8775 1.1 christos },
8776 1.1 christos
8777 1.1.1.2 christos /* VEX_LEN_0F38DD_P_2 */
8778 1.1 christos {
8779 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F38DD_P_2) },
8780 1.1 christos },
8781 1.1 christos
8782 1.1.1.2 christos /* VEX_LEN_0F38DE_P_2 */
8783 1.1 christos {
8784 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F38DE_P_2) },
8785 1.1 christos },
8786 1.1 christos
8787 1.1.1.2 christos /* VEX_LEN_0F38DF_P_2 */
8788 1.1 christos {
8789 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F38DF_P_2) },
8790 1.1 christos },
8791 1.1 christos
8792 1.1.1.2 christos /* VEX_LEN_0F38F2_P_0 */
8793 1.1 christos {
8794 1.1.1.2 christos { "andnS", { Gdq, VexGdq, Edq } },
8795 1.1 christos },
8796 1.1 christos
8797 1.1.1.2 christos /* VEX_LEN_0F38F3_R_1_P_0 */
8798 1.1 christos {
8799 1.1.1.2 christos { "blsrS", { VexGdq, Edq } },
8800 1.1 christos },
8801 1.1 christos
8802 1.1.1.2 christos /* VEX_LEN_0F38F3_R_2_P_0 */
8803 1.1 christos {
8804 1.1.1.2 christos { "blsmskS", { VexGdq, Edq } },
8805 1.1 christos },
8806 1.1 christos
8807 1.1.1.2 christos /* VEX_LEN_0F38F3_R_3_P_0 */
8808 1.1 christos {
8809 1.1.1.2 christos { "blsiS", { VexGdq, Edq } },
8810 1.1 christos },
8811 1.1 christos
8812 1.1.1.2 christos /* VEX_LEN_0F38F5_P_0 */
8813 1.1 christos {
8814 1.1.1.2 christos { "bzhiS", { Gdq, Edq, VexGdq } },
8815 1.1 christos },
8816 1.1 christos
8817 1.1.1.2 christos /* VEX_LEN_0F38F5_P_1 */
8818 1.1 christos {
8819 1.1.1.2 christos { "pextS", { Gdq, VexGdq, Edq } },
8820 1.1 christos },
8821 1.1 christos
8822 1.1.1.2 christos /* VEX_LEN_0F38F5_P_3 */
8823 1.1 christos {
8824 1.1.1.2 christos { "pdepS", { Gdq, VexGdq, Edq } },
8825 1.1 christos },
8826 1.1 christos
8827 1.1.1.2 christos /* VEX_LEN_0F38F6_P_3 */
8828 1.1 christos {
8829 1.1.1.2 christos { "mulxS", { Gdq, VexGdq, Edq } },
8830 1.1 christos },
8831 1.1 christos
8832 1.1.1.2 christos /* VEX_LEN_0F38F7_P_0 */
8833 1.1 christos {
8834 1.1.1.2 christos { "bextrS", { Gdq, Edq, VexGdq } },
8835 1.1 christos },
8836 1.1 christos
8837 1.1.1.2 christos /* VEX_LEN_0F38F7_P_1 */
8838 1.1 christos {
8839 1.1.1.2 christos { "sarxS", { Gdq, Edq, VexGdq } },
8840 1.1 christos },
8841 1.1 christos
8842 1.1.1.2 christos /* VEX_LEN_0F38F7_P_2 */
8843 1.1 christos {
8844 1.1.1.2 christos { "shlxS", { Gdq, Edq, VexGdq } },
8845 1.1 christos },
8846 1.1 christos
8847 1.1.1.2 christos /* VEX_LEN_0F38F7_P_3 */
8848 1.1 christos {
8849 1.1.1.2 christos { "shrxS", { Gdq, Edq, VexGdq } },
8850 1.1 christos },
8851 1.1 christos
8852 1.1.1.2 christos /* VEX_LEN_0F3A00_P_2 */
8853 1.1 christos {
8854 1.1.1.2 christos { Bad_Opcode },
8855 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A00_P_2) },
8856 1.1 christos },
8857 1.1 christos
8858 1.1.1.2 christos /* VEX_LEN_0F3A01_P_2 */
8859 1.1 christos {
8860 1.1.1.2 christos { Bad_Opcode },
8861 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A01_P_2) },
8862 1.1 christos },
8863 1.1 christos
8864 1.1.1.2 christos /* VEX_LEN_0F3A06_P_2 */
8865 1.1 christos {
8866 1.1.1.2 christos { Bad_Opcode },
8867 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A06_P_2) },
8868 1.1 christos },
8869 1.1 christos
8870 1.1.1.2 christos /* VEX_LEN_0F3A0A_P_2 */
8871 1.1 christos {
8872 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
8873 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A0A_P_2) },
8874 1.1 christos },
8875 1.1 christos
8876 1.1.1.2 christos /* VEX_LEN_0F3A0B_P_2 */
8877 1.1 christos {
8878 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
8879 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A0B_P_2) },
8880 1.1 christos },
8881 1.1 christos
8882 1.1.1.2 christos /* VEX_LEN_0F3A14_P_2 */
8883 1.1 christos {
8884 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A14_P_2) },
8885 1.1 christos },
8886 1.1 christos
8887 1.1.1.2 christos /* VEX_LEN_0F3A15_P_2 */
8888 1.1 christos {
8889 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A15_P_2) },
8890 1.1 christos },
8891 1.1 christos
8892 1.1.1.2 christos /* VEX_LEN_0F3A16_P_2 */
8893 1.1 christos {
8894 1.1.1.2 christos { "vpextrK", { Edq, XM, Ib } },
8895 1.1 christos },
8896 1.1 christos
8897 1.1.1.2 christos /* VEX_LEN_0F3A17_P_2 */
8898 1.1 christos {
8899 1.1.1.2 christos { "vextractps", { Edqd, XM, Ib } },
8900 1.1 christos },
8901 1.1 christos
8902 1.1.1.2 christos /* VEX_LEN_0F3A18_P_2 */
8903 1.1 christos {
8904 1.1.1.2 christos { Bad_Opcode },
8905 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A18_P_2) },
8906 1.1 christos },
8907 1.1 christos
8908 1.1.1.2 christos /* VEX_LEN_0F3A19_P_2 */
8909 1.1 christos {
8910 1.1.1.2 christos { Bad_Opcode },
8911 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A19_P_2) },
8912 1.1 christos },
8913 1.1 christos
8914 1.1.1.2 christos /* VEX_LEN_0F3A20_P_2 */
8915 1.1 christos {
8916 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A20_P_2) },
8917 1.1 christos },
8918 1.1 christos
8919 1.1.1.2 christos /* VEX_LEN_0F3A21_P_2 */
8920 1.1 christos {
8921 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A21_P_2) },
8922 1.1 christos },
8923 1.1 christos
8924 1.1.1.2 christos /* VEX_LEN_0F3A22_P_2 */
8925 1.1 christos {
8926 1.1.1.2 christos { "vpinsrK", { XM, Vex128, Edq, Ib } },
8927 1.1 christos },
8928 1.1 christos
8929 1.1.1.2 christos /* VEX_LEN_0F3A38_P_2 */
8930 1.1 christos {
8931 1.1.1.2 christos { Bad_Opcode },
8932 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A38_P_2) },
8933 1.1 christos },
8934 1.1 christos
8935 1.1.1.2 christos /* VEX_LEN_0F3A39_P_2 */
8936 1.1 christos {
8937 1.1.1.2 christos { Bad_Opcode },
8938 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A39_P_2) },
8939 1.1 christos },
8940 1.1 christos
8941 1.1.1.2 christos /* VEX_LEN_0F3A41_P_2 */
8942 1.1 christos {
8943 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A41_P_2) },
8944 1.1 christos },
8945 1.1 christos
8946 1.1.1.2 christos /* VEX_LEN_0F3A44_P_2 */
8947 1.1 christos {
8948 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A44_P_2) },
8949 1.1 christos },
8950 1.1 christos
8951 1.1.1.2 christos /* VEX_LEN_0F3A46_P_2 */
8952 1.1 christos {
8953 1.1.1.2 christos { Bad_Opcode },
8954 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A46_P_2) },
8955 1.1 christos },
8956 1.1 christos
8957 1.1.1.2 christos /* VEX_LEN_0F3A60_P_2 */
8958 1.1 christos {
8959 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A60_P_2) },
8960 1.1 christos },
8961 1.1 christos
8962 1.1.1.2 christos /* VEX_LEN_0F3A61_P_2 */
8963 1.1 christos {
8964 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A61_P_2) },
8965 1.1 christos },
8966 1.1 christos
8967 1.1.1.2 christos /* VEX_LEN_0F3A62_P_2 */
8968 1.1 christos {
8969 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A62_P_2) },
8970 1.1 christos },
8971 1.1 christos
8972 1.1.1.2 christos /* VEX_LEN_0F3A63_P_2 */
8973 1.1 christos {
8974 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3A63_P_2) },
8975 1.1 christos },
8976 1.1 christos
8977 1.1.1.2 christos /* VEX_LEN_0F3A6A_P_2 */
8978 1.1 christos {
8979 1.1.1.2 christos { "vfmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
8980 1.1 christos },
8981 1.1 christos
8982 1.1.1.2 christos /* VEX_LEN_0F3A6B_P_2 */
8983 1.1 christos {
8984 1.1.1.2 christos { "vfmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
8985 1.1 christos },
8986 1.1 christos
8987 1.1.1.2 christos /* VEX_LEN_0F3A6E_P_2 */
8988 1.1 christos {
8989 1.1.1.2 christos { "vfmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
8990 1.1 christos },
8991 1.1 christos
8992 1.1.1.2 christos /* VEX_LEN_0F3A6F_P_2 */
8993 1.1 christos {
8994 1.1.1.2 christos { "vfmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
8995 1.1 christos },
8996 1.1 christos
8997 1.1.1.2 christos /* VEX_LEN_0F3A7A_P_2 */
8998 1.1 christos {
8999 1.1.1.2 christos { "vfnmaddss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
9000 1.1 christos },
9001 1.1 christos
9002 1.1.1.2 christos /* VEX_LEN_0F3A7B_P_2 */
9003 1.1 christos {
9004 1.1.1.2 christos { "vfnmaddsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
9005 1.1 christos },
9006 1.1 christos
9007 1.1.1.2 christos /* VEX_LEN_0F3A7E_P_2 */
9008 1.1 christos {
9009 1.1.1.2 christos { "vfnmsubss", { XMVexW, Vex128, EXdVexW, EXdVexW, VexI4 } },
9010 1.1 christos },
9011 1.1 christos
9012 1.1.1.2 christos /* VEX_LEN_0F3A7F_P_2 */
9013 1.1 christos {
9014 1.1.1.2 christos { "vfnmsubsd", { XMVexW, Vex128, EXqVexW, EXqVexW, VexI4 } },
9015 1.1 christos },
9016 1.1 christos
9017 1.1.1.2 christos /* VEX_LEN_0F3ADF_P_2 */
9018 1.1 christos {
9019 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F3ADF_P_2) },
9020 1.1 christos },
9021 1.1 christos
9022 1.1.1.2 christos /* VEX_LEN_0F3AF0_P_3 */
9023 1.1 christos {
9024 1.1.1.2 christos { "rorxS", { Gdq, Edq, Ib } },
9025 1.1 christos },
9026 1.1 christos
9027 1.1.1.2 christos /* VEX_LEN_0FXOP_08_CC */
9028 1.1 christos {
9029 1.1.1.2 christos { "vpcomb", { XM, Vex128, EXx, Ib } },
9030 1.1 christos },
9031 1.1 christos
9032 1.1.1.2 christos /* VEX_LEN_0FXOP_08_CD */
9033 1.1 christos {
9034 1.1.1.2 christos { "vpcomw", { XM, Vex128, EXx, Ib } },
9035 1.1 christos },
9036 1.1 christos
9037 1.1.1.2 christos /* VEX_LEN_0FXOP_08_CE */
9038 1.1 christos {
9039 1.1.1.2 christos { "vpcomd", { XM, Vex128, EXx, Ib } },
9040 1.1 christos },
9041 1.1 christos
9042 1.1.1.2 christos /* VEX_LEN_0FXOP_08_CF */
9043 1.1 christos {
9044 1.1.1.2 christos { "vpcomq", { XM, Vex128, EXx, Ib } },
9045 1.1 christos },
9046 1.1 christos
9047 1.1.1.2 christos /* VEX_LEN_0FXOP_08_EC */
9048 1.1 christos {
9049 1.1.1.2 christos { "vpcomub", { XM, Vex128, EXx, Ib } },
9050 1.1 christos },
9051 1.1 christos
9052 1.1.1.2 christos /* VEX_LEN_0FXOP_08_ED */
9053 1.1 christos {
9054 1.1.1.2 christos { "vpcomuw", { XM, Vex128, EXx, Ib } },
9055 1.1 christos },
9056 1.1 christos
9057 1.1.1.2 christos /* VEX_LEN_0FXOP_08_EE */
9058 1.1 christos {
9059 1.1.1.2 christos { "vpcomud", { XM, Vex128, EXx, Ib } },
9060 1.1 christos },
9061 1.1 christos
9062 1.1.1.2 christos /* VEX_LEN_0FXOP_08_EF */
9063 1.1 christos {
9064 1.1.1.2 christos { "vpcomuq", { XM, Vex128, EXx, Ib } },
9065 1.1 christos },
9066 1.1 christos
9067 1.1 christos /* VEX_LEN_0FXOP_09_80 */
9068 1.1 christos {
9069 1.1 christos { "vfrczps", { XM, EXxmm } },
9070 1.1 christos { "vfrczps", { XM, EXymmq } },
9071 1.1 christos },
9072 1.1 christos
9073 1.1 christos /* VEX_LEN_0FXOP_09_81 */
9074 1.1 christos {
9075 1.1 christos { "vfrczpd", { XM, EXxmm } },
9076 1.1 christos { "vfrczpd", { XM, EXymmq } },
9077 1.1 christos },
9078 1.1 christos };
9079 1.1 christos
9080 1.1 christos static const struct dis386 vex_w_table[][2] = {
9081 1.1 christos {
9082 1.1 christos /* VEX_W_0F10_P_0 */
9083 1.1 christos { "vmovups", { XM, EXx } },
9084 1.1 christos },
9085 1.1 christos {
9086 1.1 christos /* VEX_W_0F10_P_1 */
9087 1.1 christos { "vmovss", { XMVexScalar, VexScalar, EXdScalar } },
9088 1.1 christos },
9089 1.1 christos {
9090 1.1 christos /* VEX_W_0F10_P_2 */
9091 1.1 christos { "vmovupd", { XM, EXx } },
9092 1.1 christos },
9093 1.1 christos {
9094 1.1 christos /* VEX_W_0F10_P_3 */
9095 1.1 christos { "vmovsd", { XMVexScalar, VexScalar, EXqScalar } },
9096 1.1 christos },
9097 1.1 christos {
9098 1.1 christos /* VEX_W_0F11_P_0 */
9099 1.1 christos { "vmovups", { EXxS, XM } },
9100 1.1 christos },
9101 1.1 christos {
9102 1.1 christos /* VEX_W_0F11_P_1 */
9103 1.1 christos { "vmovss", { EXdVexScalarS, VexScalar, XMScalar } },
9104 1.1 christos },
9105 1.1 christos {
9106 1.1 christos /* VEX_W_0F11_P_2 */
9107 1.1 christos { "vmovupd", { EXxS, XM } },
9108 1.1 christos },
9109 1.1 christos {
9110 1.1 christos /* VEX_W_0F11_P_3 */
9111 1.1 christos { "vmovsd", { EXqVexScalarS, VexScalar, XMScalar } },
9112 1.1 christos },
9113 1.1 christos {
9114 1.1 christos /* VEX_W_0F12_P_0_M_0 */
9115 1.1 christos { "vmovlps", { XM, Vex128, EXq } },
9116 1.1 christos },
9117 1.1 christos {
9118 1.1 christos /* VEX_W_0F12_P_0_M_1 */
9119 1.1 christos { "vmovhlps", { XM, Vex128, EXq } },
9120 1.1 christos },
9121 1.1 christos {
9122 1.1 christos /* VEX_W_0F12_P_1 */
9123 1.1 christos { "vmovsldup", { XM, EXx } },
9124 1.1 christos },
9125 1.1 christos {
9126 1.1 christos /* VEX_W_0F12_P_2 */
9127 1.1 christos { "vmovlpd", { XM, Vex128, EXq } },
9128 1.1 christos },
9129 1.1 christos {
9130 1.1 christos /* VEX_W_0F12_P_3 */
9131 1.1 christos { "vmovddup", { XM, EXymmq } },
9132 1.1 christos },
9133 1.1 christos {
9134 1.1 christos /* VEX_W_0F13_M_0 */
9135 1.1 christos { "vmovlpX", { EXq, XM } },
9136 1.1 christos },
9137 1.1 christos {
9138 1.1 christos /* VEX_W_0F14 */
9139 1.1 christos { "vunpcklpX", { XM, Vex, EXx } },
9140 1.1 christos },
9141 1.1 christos {
9142 1.1 christos /* VEX_W_0F15 */
9143 1.1 christos { "vunpckhpX", { XM, Vex, EXx } },
9144 1.1 christos },
9145 1.1 christos {
9146 1.1 christos /* VEX_W_0F16_P_0_M_0 */
9147 1.1 christos { "vmovhps", { XM, Vex128, EXq } },
9148 1.1 christos },
9149 1.1 christos {
9150 1.1 christos /* VEX_W_0F16_P_0_M_1 */
9151 1.1 christos { "vmovlhps", { XM, Vex128, EXq } },
9152 1.1 christos },
9153 1.1 christos {
9154 1.1 christos /* VEX_W_0F16_P_1 */
9155 1.1 christos { "vmovshdup", { XM, EXx } },
9156 1.1 christos },
9157 1.1 christos {
9158 1.1 christos /* VEX_W_0F16_P_2 */
9159 1.1 christos { "vmovhpd", { XM, Vex128, EXq } },
9160 1.1 christos },
9161 1.1 christos {
9162 1.1 christos /* VEX_W_0F17_M_0 */
9163 1.1 christos { "vmovhpX", { EXq, XM } },
9164 1.1 christos },
9165 1.1 christos {
9166 1.1 christos /* VEX_W_0F28 */
9167 1.1 christos { "vmovapX", { XM, EXx } },
9168 1.1 christos },
9169 1.1 christos {
9170 1.1 christos /* VEX_W_0F29 */
9171 1.1 christos { "vmovapX", { EXxS, XM } },
9172 1.1 christos },
9173 1.1 christos {
9174 1.1 christos /* VEX_W_0F2B_M_0 */
9175 1.1 christos { "vmovntpX", { Mx, XM } },
9176 1.1 christos },
9177 1.1 christos {
9178 1.1 christos /* VEX_W_0F2E_P_0 */
9179 1.1.1.2 christos { "vucomiss", { XMScalar, EXdScalar } },
9180 1.1 christos },
9181 1.1 christos {
9182 1.1 christos /* VEX_W_0F2E_P_2 */
9183 1.1.1.2 christos { "vucomisd", { XMScalar, EXqScalar } },
9184 1.1 christos },
9185 1.1 christos {
9186 1.1 christos /* VEX_W_0F2F_P_0 */
9187 1.1 christos { "vcomiss", { XMScalar, EXdScalar } },
9188 1.1 christos },
9189 1.1 christos {
9190 1.1 christos /* VEX_W_0F2F_P_2 */
9191 1.1 christos { "vcomisd", { XMScalar, EXqScalar } },
9192 1.1 christos },
9193 1.1 christos {
9194 1.1 christos /* VEX_W_0F50_M_0 */
9195 1.1 christos { "vmovmskpX", { Gdq, XS } },
9196 1.1 christos },
9197 1.1 christos {
9198 1.1 christos /* VEX_W_0F51_P_0 */
9199 1.1 christos { "vsqrtps", { XM, EXx } },
9200 1.1 christos },
9201 1.1 christos {
9202 1.1 christos /* VEX_W_0F51_P_1 */
9203 1.1 christos { "vsqrtss", { XMScalar, VexScalar, EXdScalar } },
9204 1.1 christos },
9205 1.1 christos {
9206 1.1 christos /* VEX_W_0F51_P_2 */
9207 1.1 christos { "vsqrtpd", { XM, EXx } },
9208 1.1 christos },
9209 1.1 christos {
9210 1.1 christos /* VEX_W_0F51_P_3 */
9211 1.1 christos { "vsqrtsd", { XMScalar, VexScalar, EXqScalar } },
9212 1.1 christos },
9213 1.1 christos {
9214 1.1 christos /* VEX_W_0F52_P_0 */
9215 1.1 christos { "vrsqrtps", { XM, EXx } },
9216 1.1 christos },
9217 1.1 christos {
9218 1.1 christos /* VEX_W_0F52_P_1 */
9219 1.1 christos { "vrsqrtss", { XMScalar, VexScalar, EXdScalar } },
9220 1.1 christos },
9221 1.1 christos {
9222 1.1 christos /* VEX_W_0F53_P_0 */
9223 1.1 christos { "vrcpps", { XM, EXx } },
9224 1.1 christos },
9225 1.1 christos {
9226 1.1 christos /* VEX_W_0F53_P_1 */
9227 1.1 christos { "vrcpss", { XMScalar, VexScalar, EXdScalar } },
9228 1.1 christos },
9229 1.1 christos {
9230 1.1 christos /* VEX_W_0F58_P_0 */
9231 1.1 christos { "vaddps", { XM, Vex, EXx } },
9232 1.1 christos },
9233 1.1 christos {
9234 1.1 christos /* VEX_W_0F58_P_1 */
9235 1.1 christos { "vaddss", { XMScalar, VexScalar, EXdScalar } },
9236 1.1 christos },
9237 1.1 christos {
9238 1.1 christos /* VEX_W_0F58_P_2 */
9239 1.1 christos { "vaddpd", { XM, Vex, EXx } },
9240 1.1 christos },
9241 1.1 christos {
9242 1.1 christos /* VEX_W_0F58_P_3 */
9243 1.1 christos { "vaddsd", { XMScalar, VexScalar, EXqScalar } },
9244 1.1 christos },
9245 1.1 christos {
9246 1.1 christos /* VEX_W_0F59_P_0 */
9247 1.1 christos { "vmulps", { XM, Vex, EXx } },
9248 1.1 christos },
9249 1.1 christos {
9250 1.1 christos /* VEX_W_0F59_P_1 */
9251 1.1 christos { "vmulss", { XMScalar, VexScalar, EXdScalar } },
9252 1.1 christos },
9253 1.1 christos {
9254 1.1 christos /* VEX_W_0F59_P_2 */
9255 1.1 christos { "vmulpd", { XM, Vex, EXx } },
9256 1.1 christos },
9257 1.1 christos {
9258 1.1 christos /* VEX_W_0F59_P_3 */
9259 1.1 christos { "vmulsd", { XMScalar, VexScalar, EXqScalar } },
9260 1.1 christos },
9261 1.1 christos {
9262 1.1 christos /* VEX_W_0F5A_P_0 */
9263 1.1 christos { "vcvtps2pd", { XM, EXxmmq } },
9264 1.1 christos },
9265 1.1 christos {
9266 1.1 christos /* VEX_W_0F5A_P_1 */
9267 1.1 christos { "vcvtss2sd", { XMScalar, VexScalar, EXdScalar } },
9268 1.1 christos },
9269 1.1 christos {
9270 1.1 christos /* VEX_W_0F5A_P_3 */
9271 1.1 christos { "vcvtsd2ss", { XMScalar, VexScalar, EXqScalar } },
9272 1.1 christos },
9273 1.1 christos {
9274 1.1 christos /* VEX_W_0F5B_P_0 */
9275 1.1 christos { "vcvtdq2ps", { XM, EXx } },
9276 1.1 christos },
9277 1.1 christos {
9278 1.1 christos /* VEX_W_0F5B_P_1 */
9279 1.1 christos { "vcvttps2dq", { XM, EXx } },
9280 1.1 christos },
9281 1.1 christos {
9282 1.1 christos /* VEX_W_0F5B_P_2 */
9283 1.1 christos { "vcvtps2dq", { XM, EXx } },
9284 1.1 christos },
9285 1.1 christos {
9286 1.1 christos /* VEX_W_0F5C_P_0 */
9287 1.1 christos { "vsubps", { XM, Vex, EXx } },
9288 1.1 christos },
9289 1.1 christos {
9290 1.1 christos /* VEX_W_0F5C_P_1 */
9291 1.1 christos { "vsubss", { XMScalar, VexScalar, EXdScalar } },
9292 1.1 christos },
9293 1.1 christos {
9294 1.1 christos /* VEX_W_0F5C_P_2 */
9295 1.1 christos { "vsubpd", { XM, Vex, EXx } },
9296 1.1 christos },
9297 1.1 christos {
9298 1.1 christos /* VEX_W_0F5C_P_3 */
9299 1.1 christos { "vsubsd", { XMScalar, VexScalar, EXqScalar } },
9300 1.1 christos },
9301 1.1 christos {
9302 1.1 christos /* VEX_W_0F5D_P_0 */
9303 1.1 christos { "vminps", { XM, Vex, EXx } },
9304 1.1 christos },
9305 1.1 christos {
9306 1.1 christos /* VEX_W_0F5D_P_1 */
9307 1.1 christos { "vminss", { XMScalar, VexScalar, EXdScalar } },
9308 1.1 christos },
9309 1.1 christos {
9310 1.1 christos /* VEX_W_0F5D_P_2 */
9311 1.1 christos { "vminpd", { XM, Vex, EXx } },
9312 1.1 christos },
9313 1.1 christos {
9314 1.1 christos /* VEX_W_0F5D_P_3 */
9315 1.1 christos { "vminsd", { XMScalar, VexScalar, EXqScalar } },
9316 1.1 christos },
9317 1.1 christos {
9318 1.1 christos /* VEX_W_0F5E_P_0 */
9319 1.1 christos { "vdivps", { XM, Vex, EXx } },
9320 1.1 christos },
9321 1.1 christos {
9322 1.1 christos /* VEX_W_0F5E_P_1 */
9323 1.1 christos { "vdivss", { XMScalar, VexScalar, EXdScalar } },
9324 1.1 christos },
9325 1.1 christos {
9326 1.1 christos /* VEX_W_0F5E_P_2 */
9327 1.1 christos { "vdivpd", { XM, Vex, EXx } },
9328 1.1 christos },
9329 1.1 christos {
9330 1.1 christos /* VEX_W_0F5E_P_3 */
9331 1.1 christos { "vdivsd", { XMScalar, VexScalar, EXqScalar } },
9332 1.1 christos },
9333 1.1 christos {
9334 1.1 christos /* VEX_W_0F5F_P_0 */
9335 1.1 christos { "vmaxps", { XM, Vex, EXx } },
9336 1.1 christos },
9337 1.1 christos {
9338 1.1 christos /* VEX_W_0F5F_P_1 */
9339 1.1 christos { "vmaxss", { XMScalar, VexScalar, EXdScalar } },
9340 1.1 christos },
9341 1.1 christos {
9342 1.1 christos /* VEX_W_0F5F_P_2 */
9343 1.1 christos { "vmaxpd", { XM, Vex, EXx } },
9344 1.1 christos },
9345 1.1 christos {
9346 1.1 christos /* VEX_W_0F5F_P_3 */
9347 1.1 christos { "vmaxsd", { XMScalar, VexScalar, EXqScalar } },
9348 1.1 christos },
9349 1.1 christos {
9350 1.1 christos /* VEX_W_0F60_P_2 */
9351 1.1.1.2 christos { "vpunpcklbw", { XM, Vex, EXx } },
9352 1.1 christos },
9353 1.1 christos {
9354 1.1 christos /* VEX_W_0F61_P_2 */
9355 1.1.1.2 christos { "vpunpcklwd", { XM, Vex, EXx } },
9356 1.1 christos },
9357 1.1 christos {
9358 1.1 christos /* VEX_W_0F62_P_2 */
9359 1.1.1.2 christos { "vpunpckldq", { XM, Vex, EXx } },
9360 1.1 christos },
9361 1.1 christos {
9362 1.1 christos /* VEX_W_0F63_P_2 */
9363 1.1.1.2 christos { "vpacksswb", { XM, Vex, EXx } },
9364 1.1 christos },
9365 1.1 christos {
9366 1.1 christos /* VEX_W_0F64_P_2 */
9367 1.1.1.2 christos { "vpcmpgtb", { XM, Vex, EXx } },
9368 1.1 christos },
9369 1.1 christos {
9370 1.1 christos /* VEX_W_0F65_P_2 */
9371 1.1.1.2 christos { "vpcmpgtw", { XM, Vex, EXx } },
9372 1.1 christos },
9373 1.1 christos {
9374 1.1 christos /* VEX_W_0F66_P_2 */
9375 1.1.1.2 christos { "vpcmpgtd", { XM, Vex, EXx } },
9376 1.1 christos },
9377 1.1 christos {
9378 1.1 christos /* VEX_W_0F67_P_2 */
9379 1.1.1.2 christos { "vpackuswb", { XM, Vex, EXx } },
9380 1.1 christos },
9381 1.1 christos {
9382 1.1 christos /* VEX_W_0F68_P_2 */
9383 1.1.1.2 christos { "vpunpckhbw", { XM, Vex, EXx } },
9384 1.1 christos },
9385 1.1 christos {
9386 1.1 christos /* VEX_W_0F69_P_2 */
9387 1.1.1.2 christos { "vpunpckhwd", { XM, Vex, EXx } },
9388 1.1 christos },
9389 1.1 christos {
9390 1.1 christos /* VEX_W_0F6A_P_2 */
9391 1.1.1.2 christos { "vpunpckhdq", { XM, Vex, EXx } },
9392 1.1 christos },
9393 1.1 christos {
9394 1.1 christos /* VEX_W_0F6B_P_2 */
9395 1.1.1.2 christos { "vpackssdw", { XM, Vex, EXx } },
9396 1.1 christos },
9397 1.1 christos {
9398 1.1 christos /* VEX_W_0F6C_P_2 */
9399 1.1.1.2 christos { "vpunpcklqdq", { XM, Vex, EXx } },
9400 1.1 christos },
9401 1.1 christos {
9402 1.1 christos /* VEX_W_0F6D_P_2 */
9403 1.1.1.2 christos { "vpunpckhqdq", { XM, Vex, EXx } },
9404 1.1 christos },
9405 1.1 christos {
9406 1.1 christos /* VEX_W_0F6F_P_1 */
9407 1.1 christos { "vmovdqu", { XM, EXx } },
9408 1.1 christos },
9409 1.1 christos {
9410 1.1 christos /* VEX_W_0F6F_P_2 */
9411 1.1 christos { "vmovdqa", { XM, EXx } },
9412 1.1 christos },
9413 1.1 christos {
9414 1.1 christos /* VEX_W_0F70_P_1 */
9415 1.1 christos { "vpshufhw", { XM, EXx, Ib } },
9416 1.1 christos },
9417 1.1 christos {
9418 1.1 christos /* VEX_W_0F70_P_2 */
9419 1.1 christos { "vpshufd", { XM, EXx, Ib } },
9420 1.1 christos },
9421 1.1 christos {
9422 1.1 christos /* VEX_W_0F70_P_3 */
9423 1.1 christos { "vpshuflw", { XM, EXx, Ib } },
9424 1.1 christos },
9425 1.1 christos {
9426 1.1 christos /* VEX_W_0F71_R_2_P_2 */
9427 1.1.1.2 christos { "vpsrlw", { Vex, XS, Ib } },
9428 1.1 christos },
9429 1.1 christos {
9430 1.1 christos /* VEX_W_0F71_R_4_P_2 */
9431 1.1.1.2 christos { "vpsraw", { Vex, XS, Ib } },
9432 1.1 christos },
9433 1.1 christos {
9434 1.1 christos /* VEX_W_0F71_R_6_P_2 */
9435 1.1.1.2 christos { "vpsllw", { Vex, XS, Ib } },
9436 1.1 christos },
9437 1.1 christos {
9438 1.1 christos /* VEX_W_0F72_R_2_P_2 */
9439 1.1.1.2 christos { "vpsrld", { Vex, XS, Ib } },
9440 1.1 christos },
9441 1.1 christos {
9442 1.1 christos /* VEX_W_0F72_R_4_P_2 */
9443 1.1.1.2 christos { "vpsrad", { Vex, XS, Ib } },
9444 1.1 christos },
9445 1.1 christos {
9446 1.1 christos /* VEX_W_0F72_R_6_P_2 */
9447 1.1.1.2 christos { "vpslld", { Vex, XS, Ib } },
9448 1.1 christos },
9449 1.1 christos {
9450 1.1 christos /* VEX_W_0F73_R_2_P_2 */
9451 1.1.1.2 christos { "vpsrlq", { Vex, XS, Ib } },
9452 1.1 christos },
9453 1.1 christos {
9454 1.1 christos /* VEX_W_0F73_R_3_P_2 */
9455 1.1.1.2 christos { "vpsrldq", { Vex, XS, Ib } },
9456 1.1 christos },
9457 1.1 christos {
9458 1.1 christos /* VEX_W_0F73_R_6_P_2 */
9459 1.1.1.2 christos { "vpsllq", { Vex, XS, Ib } },
9460 1.1 christos },
9461 1.1 christos {
9462 1.1 christos /* VEX_W_0F73_R_7_P_2 */
9463 1.1.1.2 christos { "vpslldq", { Vex, XS, Ib } },
9464 1.1 christos },
9465 1.1 christos {
9466 1.1 christos /* VEX_W_0F74_P_2 */
9467 1.1.1.2 christos { "vpcmpeqb", { XM, Vex, EXx } },
9468 1.1 christos },
9469 1.1 christos {
9470 1.1 christos /* VEX_W_0F75_P_2 */
9471 1.1.1.2 christos { "vpcmpeqw", { XM, Vex, EXx } },
9472 1.1 christos },
9473 1.1 christos {
9474 1.1 christos /* VEX_W_0F76_P_2 */
9475 1.1.1.2 christos { "vpcmpeqd", { XM, Vex, EXx } },
9476 1.1 christos },
9477 1.1 christos {
9478 1.1 christos /* VEX_W_0F77_P_0 */
9479 1.1 christos { "", { VZERO } },
9480 1.1 christos },
9481 1.1 christos {
9482 1.1 christos /* VEX_W_0F7C_P_2 */
9483 1.1 christos { "vhaddpd", { XM, Vex, EXx } },
9484 1.1 christos },
9485 1.1 christos {
9486 1.1 christos /* VEX_W_0F7C_P_3 */
9487 1.1 christos { "vhaddps", { XM, Vex, EXx } },
9488 1.1 christos },
9489 1.1 christos {
9490 1.1 christos /* VEX_W_0F7D_P_2 */
9491 1.1 christos { "vhsubpd", { XM, Vex, EXx } },
9492 1.1 christos },
9493 1.1 christos {
9494 1.1 christos /* VEX_W_0F7D_P_3 */
9495 1.1 christos { "vhsubps", { XM, Vex, EXx } },
9496 1.1 christos },
9497 1.1 christos {
9498 1.1 christos /* VEX_W_0F7E_P_1 */
9499 1.1 christos { "vmovq", { XMScalar, EXqScalar } },
9500 1.1 christos },
9501 1.1 christos {
9502 1.1 christos /* VEX_W_0F7F_P_1 */
9503 1.1 christos { "vmovdqu", { EXxS, XM } },
9504 1.1 christos },
9505 1.1 christos {
9506 1.1 christos /* VEX_W_0F7F_P_2 */
9507 1.1 christos { "vmovdqa", { EXxS, XM } },
9508 1.1 christos },
9509 1.1 christos {
9510 1.1 christos /* VEX_W_0FAE_R_2_M_0 */
9511 1.1 christos { "vldmxcsr", { Md } },
9512 1.1 christos },
9513 1.1 christos {
9514 1.1 christos /* VEX_W_0FAE_R_3_M_0 */
9515 1.1 christos { "vstmxcsr", { Md } },
9516 1.1 christos },
9517 1.1 christos {
9518 1.1 christos /* VEX_W_0FC2_P_0 */
9519 1.1 christos { "vcmpps", { XM, Vex, EXx, VCMP } },
9520 1.1 christos },
9521 1.1 christos {
9522 1.1 christos /* VEX_W_0FC2_P_1 */
9523 1.1 christos { "vcmpss", { XMScalar, VexScalar, EXdScalar, VCMP } },
9524 1.1 christos },
9525 1.1 christos {
9526 1.1 christos /* VEX_W_0FC2_P_2 */
9527 1.1 christos { "vcmppd", { XM, Vex, EXx, VCMP } },
9528 1.1 christos },
9529 1.1 christos {
9530 1.1 christos /* VEX_W_0FC2_P_3 */
9531 1.1 christos { "vcmpsd", { XMScalar, VexScalar, EXqScalar, VCMP } },
9532 1.1 christos },
9533 1.1 christos {
9534 1.1 christos /* VEX_W_0FC4_P_2 */
9535 1.1 christos { "vpinsrw", { XM, Vex128, Edqw, Ib } },
9536 1.1 christos },
9537 1.1 christos {
9538 1.1 christos /* VEX_W_0FC5_P_2 */
9539 1.1 christos { "vpextrw", { Gdq, XS, Ib } },
9540 1.1 christos },
9541 1.1 christos {
9542 1.1 christos /* VEX_W_0FD0_P_2 */
9543 1.1 christos { "vaddsubpd", { XM, Vex, EXx } },
9544 1.1 christos },
9545 1.1 christos {
9546 1.1 christos /* VEX_W_0FD0_P_3 */
9547 1.1 christos { "vaddsubps", { XM, Vex, EXx } },
9548 1.1 christos },
9549 1.1 christos {
9550 1.1 christos /* VEX_W_0FD1_P_2 */
9551 1.1.1.2 christos { "vpsrlw", { XM, Vex, EXxmm } },
9552 1.1 christos },
9553 1.1 christos {
9554 1.1 christos /* VEX_W_0FD2_P_2 */
9555 1.1.1.2 christos { "vpsrld", { XM, Vex, EXxmm } },
9556 1.1 christos },
9557 1.1 christos {
9558 1.1 christos /* VEX_W_0FD3_P_2 */
9559 1.1.1.2 christos { "vpsrlq", { XM, Vex, EXxmm } },
9560 1.1 christos },
9561 1.1 christos {
9562 1.1 christos /* VEX_W_0FD4_P_2 */
9563 1.1.1.2 christos { "vpaddq", { XM, Vex, EXx } },
9564 1.1 christos },
9565 1.1 christos {
9566 1.1 christos /* VEX_W_0FD5_P_2 */
9567 1.1.1.2 christos { "vpmullw", { XM, Vex, EXx } },
9568 1.1 christos },
9569 1.1 christos {
9570 1.1 christos /* VEX_W_0FD6_P_2 */
9571 1.1 christos { "vmovq", { EXqScalarS, XMScalar } },
9572 1.1 christos },
9573 1.1 christos {
9574 1.1 christos /* VEX_W_0FD7_P_2_M_1 */
9575 1.1 christos { "vpmovmskb", { Gdq, XS } },
9576 1.1 christos },
9577 1.1 christos {
9578 1.1 christos /* VEX_W_0FD8_P_2 */
9579 1.1.1.2 christos { "vpsubusb", { XM, Vex, EXx } },
9580 1.1 christos },
9581 1.1 christos {
9582 1.1 christos /* VEX_W_0FD9_P_2 */
9583 1.1.1.2 christos { "vpsubusw", { XM, Vex, EXx } },
9584 1.1 christos },
9585 1.1 christos {
9586 1.1 christos /* VEX_W_0FDA_P_2 */
9587 1.1.1.2 christos { "vpminub", { XM, Vex, EXx } },
9588 1.1 christos },
9589 1.1 christos {
9590 1.1 christos /* VEX_W_0FDB_P_2 */
9591 1.1.1.2 christos { "vpand", { XM, Vex, EXx } },
9592 1.1 christos },
9593 1.1 christos {
9594 1.1 christos /* VEX_W_0FDC_P_2 */
9595 1.1.1.2 christos { "vpaddusb", { XM, Vex, EXx } },
9596 1.1 christos },
9597 1.1 christos {
9598 1.1 christos /* VEX_W_0FDD_P_2 */
9599 1.1.1.2 christos { "vpaddusw", { XM, Vex, EXx } },
9600 1.1 christos },
9601 1.1 christos {
9602 1.1 christos /* VEX_W_0FDE_P_2 */
9603 1.1.1.2 christos { "vpmaxub", { XM, Vex, EXx } },
9604 1.1 christos },
9605 1.1 christos {
9606 1.1 christos /* VEX_W_0FDF_P_2 */
9607 1.1.1.2 christos { "vpandn", { XM, Vex, EXx } },
9608 1.1 christos },
9609 1.1 christos {
9610 1.1 christos /* VEX_W_0FE0_P_2 */
9611 1.1.1.2 christos { "vpavgb", { XM, Vex, EXx } },
9612 1.1 christos },
9613 1.1 christos {
9614 1.1 christos /* VEX_W_0FE1_P_2 */
9615 1.1.1.2 christos { "vpsraw", { XM, Vex, EXxmm } },
9616 1.1 christos },
9617 1.1 christos {
9618 1.1 christos /* VEX_W_0FE2_P_2 */
9619 1.1.1.2 christos { "vpsrad", { XM, Vex, EXxmm } },
9620 1.1 christos },
9621 1.1 christos {
9622 1.1 christos /* VEX_W_0FE3_P_2 */
9623 1.1.1.2 christos { "vpavgw", { XM, Vex, EXx } },
9624 1.1 christos },
9625 1.1 christos {
9626 1.1 christos /* VEX_W_0FE4_P_2 */
9627 1.1.1.2 christos { "vpmulhuw", { XM, Vex, EXx } },
9628 1.1 christos },
9629 1.1 christos {
9630 1.1 christos /* VEX_W_0FE5_P_2 */
9631 1.1.1.2 christos { "vpmulhw", { XM, Vex, EXx } },
9632 1.1 christos },
9633 1.1 christos {
9634 1.1 christos /* VEX_W_0FE6_P_1 */
9635 1.1 christos { "vcvtdq2pd", { XM, EXxmmq } },
9636 1.1 christos },
9637 1.1 christos {
9638 1.1 christos /* VEX_W_0FE6_P_2 */
9639 1.1 christos { "vcvttpd2dq%XY", { XMM, EXx } },
9640 1.1 christos },
9641 1.1 christos {
9642 1.1 christos /* VEX_W_0FE6_P_3 */
9643 1.1 christos { "vcvtpd2dq%XY", { XMM, EXx } },
9644 1.1 christos },
9645 1.1 christos {
9646 1.1 christos /* VEX_W_0FE7_P_2_M_0 */
9647 1.1 christos { "vmovntdq", { Mx, XM } },
9648 1.1 christos },
9649 1.1 christos {
9650 1.1 christos /* VEX_W_0FE8_P_2 */
9651 1.1.1.2 christos { "vpsubsb", { XM, Vex, EXx } },
9652 1.1 christos },
9653 1.1 christos {
9654 1.1 christos /* VEX_W_0FE9_P_2 */
9655 1.1.1.2 christos { "vpsubsw", { XM, Vex, EXx } },
9656 1.1 christos },
9657 1.1 christos {
9658 1.1 christos /* VEX_W_0FEA_P_2 */
9659 1.1.1.2 christos { "vpminsw", { XM, Vex, EXx } },
9660 1.1 christos },
9661 1.1 christos {
9662 1.1 christos /* VEX_W_0FEB_P_2 */
9663 1.1.1.2 christos { "vpor", { XM, Vex, EXx } },
9664 1.1 christos },
9665 1.1 christos {
9666 1.1 christos /* VEX_W_0FEC_P_2 */
9667 1.1.1.2 christos { "vpaddsb", { XM, Vex, EXx } },
9668 1.1 christos },
9669 1.1 christos {
9670 1.1 christos /* VEX_W_0FED_P_2 */
9671 1.1.1.2 christos { "vpaddsw", { XM, Vex, EXx } },
9672 1.1 christos },
9673 1.1 christos {
9674 1.1 christos /* VEX_W_0FEE_P_2 */
9675 1.1.1.2 christos { "vpmaxsw", { XM, Vex, EXx } },
9676 1.1 christos },
9677 1.1 christos {
9678 1.1 christos /* VEX_W_0FEF_P_2 */
9679 1.1.1.2 christos { "vpxor", { XM, Vex, EXx } },
9680 1.1 christos },
9681 1.1 christos {
9682 1.1 christos /* VEX_W_0FF0_P_3_M_0 */
9683 1.1 christos { "vlddqu", { XM, M } },
9684 1.1 christos },
9685 1.1 christos {
9686 1.1 christos /* VEX_W_0FF1_P_2 */
9687 1.1.1.2 christos { "vpsllw", { XM, Vex, EXxmm } },
9688 1.1 christos },
9689 1.1 christos {
9690 1.1 christos /* VEX_W_0FF2_P_2 */
9691 1.1.1.2 christos { "vpslld", { XM, Vex, EXxmm } },
9692 1.1 christos },
9693 1.1 christos {
9694 1.1 christos /* VEX_W_0FF3_P_2 */
9695 1.1.1.2 christos { "vpsllq", { XM, Vex, EXxmm } },
9696 1.1 christos },
9697 1.1 christos {
9698 1.1 christos /* VEX_W_0FF4_P_2 */
9699 1.1.1.2 christos { "vpmuludq", { XM, Vex, EXx } },
9700 1.1 christos },
9701 1.1 christos {
9702 1.1 christos /* VEX_W_0FF5_P_2 */
9703 1.1.1.2 christos { "vpmaddwd", { XM, Vex, EXx } },
9704 1.1 christos },
9705 1.1 christos {
9706 1.1 christos /* VEX_W_0FF6_P_2 */
9707 1.1.1.2 christos { "vpsadbw", { XM, Vex, EXx } },
9708 1.1 christos },
9709 1.1 christos {
9710 1.1 christos /* VEX_W_0FF7_P_2 */
9711 1.1 christos { "vmaskmovdqu", { XM, XS } },
9712 1.1 christos },
9713 1.1 christos {
9714 1.1 christos /* VEX_W_0FF8_P_2 */
9715 1.1.1.2 christos { "vpsubb", { XM, Vex, EXx } },
9716 1.1 christos },
9717 1.1 christos {
9718 1.1 christos /* VEX_W_0FF9_P_2 */
9719 1.1.1.2 christos { "vpsubw", { XM, Vex, EXx } },
9720 1.1 christos },
9721 1.1 christos {
9722 1.1 christos /* VEX_W_0FFA_P_2 */
9723 1.1.1.2 christos { "vpsubd", { XM, Vex, EXx } },
9724 1.1 christos },
9725 1.1 christos {
9726 1.1 christos /* VEX_W_0FFB_P_2 */
9727 1.1.1.2 christos { "vpsubq", { XM, Vex, EXx } },
9728 1.1 christos },
9729 1.1 christos {
9730 1.1 christos /* VEX_W_0FFC_P_2 */
9731 1.1.1.2 christos { "vpaddb", { XM, Vex, EXx } },
9732 1.1 christos },
9733 1.1 christos {
9734 1.1 christos /* VEX_W_0FFD_P_2 */
9735 1.1.1.2 christos { "vpaddw", { XM, Vex, EXx } },
9736 1.1 christos },
9737 1.1 christos {
9738 1.1 christos /* VEX_W_0FFE_P_2 */
9739 1.1.1.2 christos { "vpaddd", { XM, Vex, EXx } },
9740 1.1 christos },
9741 1.1 christos {
9742 1.1 christos /* VEX_W_0F3800_P_2 */
9743 1.1.1.2 christos { "vpshufb", { XM, Vex, EXx } },
9744 1.1 christos },
9745 1.1 christos {
9746 1.1 christos /* VEX_W_0F3801_P_2 */
9747 1.1.1.2 christos { "vphaddw", { XM, Vex, EXx } },
9748 1.1 christos },
9749 1.1 christos {
9750 1.1 christos /* VEX_W_0F3802_P_2 */
9751 1.1.1.2 christos { "vphaddd", { XM, Vex, EXx } },
9752 1.1 christos },
9753 1.1 christos {
9754 1.1 christos /* VEX_W_0F3803_P_2 */
9755 1.1.1.2 christos { "vphaddsw", { XM, Vex, EXx } },
9756 1.1 christos },
9757 1.1 christos {
9758 1.1 christos /* VEX_W_0F3804_P_2 */
9759 1.1.1.2 christos { "vpmaddubsw", { XM, Vex, EXx } },
9760 1.1 christos },
9761 1.1 christos {
9762 1.1 christos /* VEX_W_0F3805_P_2 */
9763 1.1.1.2 christos { "vphsubw", { XM, Vex, EXx } },
9764 1.1 christos },
9765 1.1 christos {
9766 1.1 christos /* VEX_W_0F3806_P_2 */
9767 1.1.1.2 christos { "vphsubd", { XM, Vex, EXx } },
9768 1.1 christos },
9769 1.1 christos {
9770 1.1 christos /* VEX_W_0F3807_P_2 */
9771 1.1.1.2 christos { "vphsubsw", { XM, Vex, EXx } },
9772 1.1 christos },
9773 1.1 christos {
9774 1.1 christos /* VEX_W_0F3808_P_2 */
9775 1.1.1.2 christos { "vpsignb", { XM, Vex, EXx } },
9776 1.1 christos },
9777 1.1 christos {
9778 1.1 christos /* VEX_W_0F3809_P_2 */
9779 1.1.1.2 christos { "vpsignw", { XM, Vex, EXx } },
9780 1.1 christos },
9781 1.1 christos {
9782 1.1 christos /* VEX_W_0F380A_P_2 */
9783 1.1.1.2 christos { "vpsignd", { XM, Vex, EXx } },
9784 1.1 christos },
9785 1.1 christos {
9786 1.1 christos /* VEX_W_0F380B_P_2 */
9787 1.1.1.2 christos { "vpmulhrsw", { XM, Vex, EXx } },
9788 1.1 christos },
9789 1.1 christos {
9790 1.1 christos /* VEX_W_0F380C_P_2 */
9791 1.1 christos { "vpermilps", { XM, Vex, EXx } },
9792 1.1 christos },
9793 1.1 christos {
9794 1.1 christos /* VEX_W_0F380D_P_2 */
9795 1.1 christos { "vpermilpd", { XM, Vex, EXx } },
9796 1.1 christos },
9797 1.1 christos {
9798 1.1 christos /* VEX_W_0F380E_P_2 */
9799 1.1 christos { "vtestps", { XM, EXx } },
9800 1.1 christos },
9801 1.1 christos {
9802 1.1 christos /* VEX_W_0F380F_P_2 */
9803 1.1 christos { "vtestpd", { XM, EXx } },
9804 1.1 christos },
9805 1.1 christos {
9806 1.1.1.2 christos /* VEX_W_0F3816_P_2 */
9807 1.1.1.2 christos { "vpermps", { XM, Vex, EXx } },
9808 1.1.1.2 christos },
9809 1.1.1.2 christos {
9810 1.1 christos /* VEX_W_0F3817_P_2 */
9811 1.1 christos { "vptest", { XM, EXx } },
9812 1.1 christos },
9813 1.1 christos {
9814 1.1.1.2 christos /* VEX_W_0F3818_P_2 */
9815 1.1.1.2 christos { "vbroadcastss", { XM, EXxmm_md } },
9816 1.1 christos },
9817 1.1 christos {
9818 1.1.1.2 christos /* VEX_W_0F3819_P_2 */
9819 1.1.1.2 christos { "vbroadcastsd", { XM, EXxmm_mq } },
9820 1.1 christos },
9821 1.1 christos {
9822 1.1 christos /* VEX_W_0F381A_P_2_M_0 */
9823 1.1 christos { "vbroadcastf128", { XM, Mxmm } },
9824 1.1 christos },
9825 1.1 christos {
9826 1.1 christos /* VEX_W_0F381C_P_2 */
9827 1.1 christos { "vpabsb", { XM, EXx } },
9828 1.1 christos },
9829 1.1 christos {
9830 1.1 christos /* VEX_W_0F381D_P_2 */
9831 1.1 christos { "vpabsw", { XM, EXx } },
9832 1.1 christos },
9833 1.1 christos {
9834 1.1 christos /* VEX_W_0F381E_P_2 */
9835 1.1 christos { "vpabsd", { XM, EXx } },
9836 1.1 christos },
9837 1.1 christos {
9838 1.1 christos /* VEX_W_0F3820_P_2 */
9839 1.1.1.2 christos { "vpmovsxbw", { XM, EXxmmq } },
9840 1.1 christos },
9841 1.1 christos {
9842 1.1 christos /* VEX_W_0F3821_P_2 */
9843 1.1.1.2 christos { "vpmovsxbd", { XM, EXxmmqd } },
9844 1.1 christos },
9845 1.1 christos {
9846 1.1 christos /* VEX_W_0F3822_P_2 */
9847 1.1.1.2 christos { "vpmovsxbq", { XM, EXxmmdw } },
9848 1.1 christos },
9849 1.1 christos {
9850 1.1 christos /* VEX_W_0F3823_P_2 */
9851 1.1.1.2 christos { "vpmovsxwd", { XM, EXxmmq } },
9852 1.1 christos },
9853 1.1 christos {
9854 1.1 christos /* VEX_W_0F3824_P_2 */
9855 1.1.1.2 christos { "vpmovsxwq", { XM, EXxmmqd } },
9856 1.1 christos },
9857 1.1 christos {
9858 1.1 christos /* VEX_W_0F3825_P_2 */
9859 1.1.1.2 christos { "vpmovsxdq", { XM, EXxmmq } },
9860 1.1 christos },
9861 1.1 christos {
9862 1.1 christos /* VEX_W_0F3828_P_2 */
9863 1.1.1.2 christos { "vpmuldq", { XM, Vex, EXx } },
9864 1.1 christos },
9865 1.1 christos {
9866 1.1 christos /* VEX_W_0F3829_P_2 */
9867 1.1.1.2 christos { "vpcmpeqq", { XM, Vex, EXx } },
9868 1.1 christos },
9869 1.1 christos {
9870 1.1 christos /* VEX_W_0F382A_P_2_M_0 */
9871 1.1 christos { "vmovntdqa", { XM, Mx } },
9872 1.1 christos },
9873 1.1 christos {
9874 1.1 christos /* VEX_W_0F382B_P_2 */
9875 1.1.1.2 christos { "vpackusdw", { XM, Vex, EXx } },
9876 1.1 christos },
9877 1.1 christos {
9878 1.1 christos /* VEX_W_0F382C_P_2_M_0 */
9879 1.1 christos { "vmaskmovps", { XM, Vex, Mx } },
9880 1.1 christos },
9881 1.1 christos {
9882 1.1 christos /* VEX_W_0F382D_P_2_M_0 */
9883 1.1 christos { "vmaskmovpd", { XM, Vex, Mx } },
9884 1.1 christos },
9885 1.1 christos {
9886 1.1 christos /* VEX_W_0F382E_P_2_M_0 */
9887 1.1 christos { "vmaskmovps", { Mx, Vex, XM } },
9888 1.1 christos },
9889 1.1 christos {
9890 1.1 christos /* VEX_W_0F382F_P_2_M_0 */
9891 1.1 christos { "vmaskmovpd", { Mx, Vex, XM } },
9892 1.1 christos },
9893 1.1 christos {
9894 1.1 christos /* VEX_W_0F3830_P_2 */
9895 1.1.1.2 christos { "vpmovzxbw", { XM, EXxmmq } },
9896 1.1 christos },
9897 1.1 christos {
9898 1.1 christos /* VEX_W_0F3831_P_2 */
9899 1.1.1.2 christos { "vpmovzxbd", { XM, EXxmmqd } },
9900 1.1 christos },
9901 1.1 christos {
9902 1.1 christos /* VEX_W_0F3832_P_2 */
9903 1.1.1.2 christos { "vpmovzxbq", { XM, EXxmmdw } },
9904 1.1 christos },
9905 1.1 christos {
9906 1.1 christos /* VEX_W_0F3833_P_2 */
9907 1.1.1.2 christos { "vpmovzxwd", { XM, EXxmmq } },
9908 1.1 christos },
9909 1.1 christos {
9910 1.1 christos /* VEX_W_0F3834_P_2 */
9911 1.1.1.2 christos { "vpmovzxwq", { XM, EXxmmqd } },
9912 1.1 christos },
9913 1.1 christos {
9914 1.1 christos /* VEX_W_0F3835_P_2 */
9915 1.1.1.2 christos { "vpmovzxdq", { XM, EXxmmq } },
9916 1.1.1.2 christos },
9917 1.1.1.2 christos {
9918 1.1.1.2 christos /* VEX_W_0F3836_P_2 */
9919 1.1.1.2 christos { "vpermd", { XM, Vex, EXx } },
9920 1.1 christos },
9921 1.1 christos {
9922 1.1 christos /* VEX_W_0F3837_P_2 */
9923 1.1.1.2 christos { "vpcmpgtq", { XM, Vex, EXx } },
9924 1.1 christos },
9925 1.1 christos {
9926 1.1 christos /* VEX_W_0F3838_P_2 */
9927 1.1.1.2 christos { "vpminsb", { XM, Vex, EXx } },
9928 1.1 christos },
9929 1.1 christos {
9930 1.1 christos /* VEX_W_0F3839_P_2 */
9931 1.1.1.2 christos { "vpminsd", { XM, Vex, EXx } },
9932 1.1 christos },
9933 1.1 christos {
9934 1.1 christos /* VEX_W_0F383A_P_2 */
9935 1.1.1.2 christos { "vpminuw", { XM, Vex, EXx } },
9936 1.1.1.2 christos },
9937 1.1.1.2 christos {
9938 1.1.1.2 christos /* VEX_W_0F383B_P_2 */
9939 1.1.1.2 christos { "vpminud", { XM, Vex, EXx } },
9940 1.1.1.2 christos },
9941 1.1.1.2 christos {
9942 1.1.1.2 christos /* VEX_W_0F383C_P_2 */
9943 1.1.1.2 christos { "vpmaxsb", { XM, Vex, EXx } },
9944 1.1.1.2 christos },
9945 1.1.1.2 christos {
9946 1.1.1.2 christos /* VEX_W_0F383D_P_2 */
9947 1.1.1.2 christos { "vpmaxsd", { XM, Vex, EXx } },
9948 1.1.1.2 christos },
9949 1.1.1.2 christos {
9950 1.1.1.2 christos /* VEX_W_0F383E_P_2 */
9951 1.1.1.2 christos { "vpmaxuw", { XM, Vex, EXx } },
9952 1.1.1.2 christos },
9953 1.1.1.2 christos {
9954 1.1.1.2 christos /* VEX_W_0F383F_P_2 */
9955 1.1.1.2 christos { "vpmaxud", { XM, Vex, EXx } },
9956 1.1.1.2 christos },
9957 1.1.1.2 christos {
9958 1.1.1.2 christos /* VEX_W_0F3840_P_2 */
9959 1.1.1.2 christos { "vpmulld", { XM, Vex, EXx } },
9960 1.1 christos },
9961 1.1 christos {
9962 1.1.1.2 christos /* VEX_W_0F3841_P_2 */
9963 1.1.1.2 christos { "vphminposuw", { XM, EXx } },
9964 1.1 christos },
9965 1.1 christos {
9966 1.1.1.2 christos /* VEX_W_0F3846_P_2 */
9967 1.1.1.2 christos { "vpsravd", { XM, Vex, EXx } },
9968 1.1 christos },
9969 1.1 christos {
9970 1.1.1.2 christos /* VEX_W_0F3858_P_2 */
9971 1.1.1.2 christos { "vpbroadcastd", { XM, EXxmm_md } },
9972 1.1 christos },
9973 1.1 christos {
9974 1.1.1.2 christos /* VEX_W_0F3859_P_2 */
9975 1.1.1.2 christos { "vpbroadcastq", { XM, EXxmm_mq } },
9976 1.1 christos },
9977 1.1 christos {
9978 1.1.1.2 christos /* VEX_W_0F385A_P_2_M_0 */
9979 1.1.1.2 christos { "vbroadcasti128", { XM, Mxmm } },
9980 1.1 christos },
9981 1.1 christos {
9982 1.1.1.2 christos /* VEX_W_0F3878_P_2 */
9983 1.1.1.2 christos { "vpbroadcastb", { XM, EXxmm_mb } },
9984 1.1 christos },
9985 1.1 christos {
9986 1.1.1.2 christos /* VEX_W_0F3879_P_2 */
9987 1.1.1.2 christos { "vpbroadcastw", { XM, EXxmm_mw } },
9988 1.1 christos },
9989 1.1 christos {
9990 1.1 christos /* VEX_W_0F38DB_P_2 */
9991 1.1 christos { "vaesimc", { XM, EXx } },
9992 1.1 christos },
9993 1.1 christos {
9994 1.1 christos /* VEX_W_0F38DC_P_2 */
9995 1.1 christos { "vaesenc", { XM, Vex128, EXx } },
9996 1.1 christos },
9997 1.1 christos {
9998 1.1 christos /* VEX_W_0F38DD_P_2 */
9999 1.1 christos { "vaesenclast", { XM, Vex128, EXx } },
10000 1.1 christos },
10001 1.1 christos {
10002 1.1 christos /* VEX_W_0F38DE_P_2 */
10003 1.1 christos { "vaesdec", { XM, Vex128, EXx } },
10004 1.1 christos },
10005 1.1 christos {
10006 1.1 christos /* VEX_W_0F38DF_P_2 */
10007 1.1 christos { "vaesdeclast", { XM, Vex128, EXx } },
10008 1.1 christos },
10009 1.1 christos {
10010 1.1.1.2 christos /* VEX_W_0F3A00_P_2 */
10011 1.1.1.2 christos { Bad_Opcode },
10012 1.1.1.2 christos { "vpermq", { XM, EXx, Ib } },
10013 1.1.1.2 christos },
10014 1.1.1.2 christos {
10015 1.1.1.2 christos /* VEX_W_0F3A01_P_2 */
10016 1.1.1.2 christos { Bad_Opcode },
10017 1.1.1.2 christos { "vpermpd", { XM, EXx, Ib } },
10018 1.1.1.2 christos },
10019 1.1.1.2 christos {
10020 1.1.1.2 christos /* VEX_W_0F3A02_P_2 */
10021 1.1.1.2 christos { "vpblendd", { XM, Vex, EXx, Ib } },
10022 1.1.1.2 christos },
10023 1.1.1.2 christos {
10024 1.1 christos /* VEX_W_0F3A04_P_2 */
10025 1.1 christos { "vpermilps", { XM, EXx, Ib } },
10026 1.1 christos },
10027 1.1 christos {
10028 1.1 christos /* VEX_W_0F3A05_P_2 */
10029 1.1 christos { "vpermilpd", { XM, EXx, Ib } },
10030 1.1 christos },
10031 1.1 christos {
10032 1.1 christos /* VEX_W_0F3A06_P_2 */
10033 1.1 christos { "vperm2f128", { XM, Vex256, EXx, Ib } },
10034 1.1 christos },
10035 1.1 christos {
10036 1.1 christos /* VEX_W_0F3A08_P_2 */
10037 1.1 christos { "vroundps", { XM, EXx, Ib } },
10038 1.1 christos },
10039 1.1 christos {
10040 1.1 christos /* VEX_W_0F3A09_P_2 */
10041 1.1 christos { "vroundpd", { XM, EXx, Ib } },
10042 1.1 christos },
10043 1.1 christos {
10044 1.1 christos /* VEX_W_0F3A0A_P_2 */
10045 1.1 christos { "vroundss", { XMScalar, VexScalar, EXdScalar, Ib } },
10046 1.1 christos },
10047 1.1 christos {
10048 1.1 christos /* VEX_W_0F3A0B_P_2 */
10049 1.1 christos { "vroundsd", { XMScalar, VexScalar, EXqScalar, Ib } },
10050 1.1 christos },
10051 1.1 christos {
10052 1.1 christos /* VEX_W_0F3A0C_P_2 */
10053 1.1 christos { "vblendps", { XM, Vex, EXx, Ib } },
10054 1.1 christos },
10055 1.1 christos {
10056 1.1 christos /* VEX_W_0F3A0D_P_2 */
10057 1.1 christos { "vblendpd", { XM, Vex, EXx, Ib } },
10058 1.1 christos },
10059 1.1 christos {
10060 1.1 christos /* VEX_W_0F3A0E_P_2 */
10061 1.1.1.2 christos { "vpblendw", { XM, Vex, EXx, Ib } },
10062 1.1 christos },
10063 1.1 christos {
10064 1.1 christos /* VEX_W_0F3A0F_P_2 */
10065 1.1.1.2 christos { "vpalignr", { XM, Vex, EXx, Ib } },
10066 1.1 christos },
10067 1.1 christos {
10068 1.1 christos /* VEX_W_0F3A14_P_2 */
10069 1.1 christos { "vpextrb", { Edqb, XM, Ib } },
10070 1.1 christos },
10071 1.1 christos {
10072 1.1 christos /* VEX_W_0F3A15_P_2 */
10073 1.1 christos { "vpextrw", { Edqw, XM, Ib } },
10074 1.1 christos },
10075 1.1 christos {
10076 1.1 christos /* VEX_W_0F3A18_P_2 */
10077 1.1 christos { "vinsertf128", { XM, Vex256, EXxmm, Ib } },
10078 1.1 christos },
10079 1.1 christos {
10080 1.1 christos /* VEX_W_0F3A19_P_2 */
10081 1.1 christos { "vextractf128", { EXxmm, XM, Ib } },
10082 1.1 christos },
10083 1.1 christos {
10084 1.1 christos /* VEX_W_0F3A20_P_2 */
10085 1.1 christos { "vpinsrb", { XM, Vex128, Edqb, Ib } },
10086 1.1 christos },
10087 1.1 christos {
10088 1.1 christos /* VEX_W_0F3A21_P_2 */
10089 1.1 christos { "vinsertps", { XM, Vex128, EXd, Ib } },
10090 1.1 christos },
10091 1.1 christos {
10092 1.1.1.2 christos /* VEX_W_0F3A38_P_2 */
10093 1.1.1.2 christos { "vinserti128", { XM, Vex256, EXxmm, Ib } },
10094 1.1.1.2 christos },
10095 1.1.1.2 christos {
10096 1.1.1.2 christos /* VEX_W_0F3A39_P_2 */
10097 1.1.1.2 christos { "vextracti128", { EXxmm, XM, Ib } },
10098 1.1.1.2 christos },
10099 1.1.1.2 christos {
10100 1.1 christos /* VEX_W_0F3A40_P_2 */
10101 1.1 christos { "vdpps", { XM, Vex, EXx, Ib } },
10102 1.1 christos },
10103 1.1 christos {
10104 1.1 christos /* VEX_W_0F3A41_P_2 */
10105 1.1 christos { "vdppd", { XM, Vex128, EXx, Ib } },
10106 1.1 christos },
10107 1.1 christos {
10108 1.1 christos /* VEX_W_0F3A42_P_2 */
10109 1.1.1.2 christos { "vmpsadbw", { XM, Vex, EXx, Ib } },
10110 1.1 christos },
10111 1.1 christos {
10112 1.1 christos /* VEX_W_0F3A44_P_2 */
10113 1.1 christos { "vpclmulqdq", { XM, Vex128, EXx, PCLMUL } },
10114 1.1 christos },
10115 1.1 christos {
10116 1.1.1.2 christos /* VEX_W_0F3A46_P_2 */
10117 1.1.1.2 christos { "vperm2i128", { XM, Vex256, EXx, Ib } },
10118 1.1.1.2 christos },
10119 1.1.1.2 christos {
10120 1.1 christos /* VEX_W_0F3A48_P_2 */
10121 1.1 christos { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10122 1.1 christos { "vpermil2ps", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10123 1.1 christos },
10124 1.1 christos {
10125 1.1 christos /* VEX_W_0F3A49_P_2 */
10126 1.1 christos { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10127 1.1 christos { "vpermil2pd", { XMVexW, Vex, EXVexImmW, EXVexImmW, EXVexImmW } },
10128 1.1 christos },
10129 1.1 christos {
10130 1.1 christos /* VEX_W_0F3A4A_P_2 */
10131 1.1 christos { "vblendvps", { XM, Vex, EXx, XMVexI4 } },
10132 1.1 christos },
10133 1.1 christos {
10134 1.1 christos /* VEX_W_0F3A4B_P_2 */
10135 1.1 christos { "vblendvpd", { XM, Vex, EXx, XMVexI4 } },
10136 1.1 christos },
10137 1.1 christos {
10138 1.1 christos /* VEX_W_0F3A4C_P_2 */
10139 1.1.1.2 christos { "vpblendvb", { XM, Vex, EXx, XMVexI4 } },
10140 1.1 christos },
10141 1.1 christos {
10142 1.1 christos /* VEX_W_0F3A60_P_2 */
10143 1.1 christos { "vpcmpestrm", { XM, EXx, Ib } },
10144 1.1 christos },
10145 1.1 christos {
10146 1.1 christos /* VEX_W_0F3A61_P_2 */
10147 1.1 christos { "vpcmpestri", { XM, EXx, Ib } },
10148 1.1 christos },
10149 1.1 christos {
10150 1.1 christos /* VEX_W_0F3A62_P_2 */
10151 1.1 christos { "vpcmpistrm", { XM, EXx, Ib } },
10152 1.1 christos },
10153 1.1 christos {
10154 1.1 christos /* VEX_W_0F3A63_P_2 */
10155 1.1 christos { "vpcmpistri", { XM, EXx, Ib } },
10156 1.1 christos },
10157 1.1 christos {
10158 1.1 christos /* VEX_W_0F3ADF_P_2 */
10159 1.1 christos { "vaeskeygenassist", { XM, EXx, Ib } },
10160 1.1 christos },
10161 1.1 christos };
10162 1.1 christos
10163 1.1 christos static const struct dis386 mod_table[][2] = {
10164 1.1 christos {
10165 1.1 christos /* MOD_8D */
10166 1.1 christos { "leaS", { Gv, M } },
10167 1.1 christos },
10168 1.1 christos {
10169 1.1.1.2 christos /* MOD_C6_REG_7 */
10170 1.1.1.2 christos { Bad_Opcode },
10171 1.1.1.2 christos { RM_TABLE (RM_C6_REG_7) },
10172 1.1.1.2 christos },
10173 1.1.1.2 christos {
10174 1.1.1.2 christos /* MOD_C7_REG_7 */
10175 1.1.1.2 christos { Bad_Opcode },
10176 1.1.1.2 christos { RM_TABLE (RM_C7_REG_7) },
10177 1.1.1.2 christos },
10178 1.1.1.2 christos {
10179 1.1 christos /* MOD_0F01_REG_0 */
10180 1.1 christos { X86_64_TABLE (X86_64_0F01_REG_0) },
10181 1.1 christos { RM_TABLE (RM_0F01_REG_0) },
10182 1.1 christos },
10183 1.1 christos {
10184 1.1 christos /* MOD_0F01_REG_1 */
10185 1.1 christos { X86_64_TABLE (X86_64_0F01_REG_1) },
10186 1.1 christos { RM_TABLE (RM_0F01_REG_1) },
10187 1.1 christos },
10188 1.1 christos {
10189 1.1 christos /* MOD_0F01_REG_2 */
10190 1.1 christos { X86_64_TABLE (X86_64_0F01_REG_2) },
10191 1.1 christos { RM_TABLE (RM_0F01_REG_2) },
10192 1.1 christos },
10193 1.1 christos {
10194 1.1 christos /* MOD_0F01_REG_3 */
10195 1.1 christos { X86_64_TABLE (X86_64_0F01_REG_3) },
10196 1.1 christos { RM_TABLE (RM_0F01_REG_3) },
10197 1.1 christos },
10198 1.1 christos {
10199 1.1 christos /* MOD_0F01_REG_7 */
10200 1.1 christos { "invlpg", { Mb } },
10201 1.1 christos { RM_TABLE (RM_0F01_REG_7) },
10202 1.1 christos },
10203 1.1 christos {
10204 1.1 christos /* MOD_0F12_PREFIX_0 */
10205 1.1 christos { "movlps", { XM, EXq } },
10206 1.1 christos { "movhlps", { XM, EXq } },
10207 1.1 christos },
10208 1.1 christos {
10209 1.1 christos /* MOD_0F13 */
10210 1.1 christos { "movlpX", { EXq, XM } },
10211 1.1 christos },
10212 1.1 christos {
10213 1.1 christos /* MOD_0F16_PREFIX_0 */
10214 1.1 christos { "movhps", { XM, EXq } },
10215 1.1 christos { "movlhps", { XM, EXq } },
10216 1.1 christos },
10217 1.1 christos {
10218 1.1 christos /* MOD_0F17 */
10219 1.1 christos { "movhpX", { EXq, XM } },
10220 1.1 christos },
10221 1.1 christos {
10222 1.1 christos /* MOD_0F18_REG_0 */
10223 1.1 christos { "prefetchnta", { Mb } },
10224 1.1 christos },
10225 1.1 christos {
10226 1.1 christos /* MOD_0F18_REG_1 */
10227 1.1 christos { "prefetcht0", { Mb } },
10228 1.1 christos },
10229 1.1 christos {
10230 1.1 christos /* MOD_0F18_REG_2 */
10231 1.1 christos { "prefetcht1", { Mb } },
10232 1.1 christos },
10233 1.1 christos {
10234 1.1 christos /* MOD_0F18_REG_3 */
10235 1.1 christos { "prefetcht2", { Mb } },
10236 1.1 christos },
10237 1.1 christos {
10238 1.1.1.2 christos /* MOD_0F18_REG_4 */
10239 1.1.1.2 christos { "nop/reserved", { Mb } },
10240 1.1.1.2 christos },
10241 1.1.1.2 christos {
10242 1.1.1.2 christos /* MOD_0F18_REG_5 */
10243 1.1.1.2 christos { "nop/reserved", { Mb } },
10244 1.1.1.2 christos },
10245 1.1.1.2 christos {
10246 1.1.1.2 christos /* MOD_0F18_REG_6 */
10247 1.1.1.2 christos { "nop/reserved", { Mb } },
10248 1.1.1.2 christos },
10249 1.1.1.2 christos {
10250 1.1.1.2 christos /* MOD_0F18_REG_7 */
10251 1.1.1.2 christos { "nop/reserved", { Mb } },
10252 1.1.1.2 christos },
10253 1.1.1.2 christos {
10254 1.1 christos /* MOD_0F20 */
10255 1.1 christos { Bad_Opcode },
10256 1.1 christos { "movZ", { Rm, Cm } },
10257 1.1 christos },
10258 1.1 christos {
10259 1.1 christos /* MOD_0F21 */
10260 1.1 christos { Bad_Opcode },
10261 1.1 christos { "movZ", { Rm, Dm } },
10262 1.1 christos },
10263 1.1 christos {
10264 1.1 christos /* MOD_0F22 */
10265 1.1 christos { Bad_Opcode },
10266 1.1 christos { "movZ", { Cm, Rm } },
10267 1.1 christos },
10268 1.1 christos {
10269 1.1 christos /* MOD_0F23 */
10270 1.1 christos { Bad_Opcode },
10271 1.1 christos { "movZ", { Dm, Rm } },
10272 1.1 christos },
10273 1.1 christos {
10274 1.1 christos /* MOD_0F24 */
10275 1.1.1.2 christos { Bad_Opcode },
10276 1.1 christos { "movL", { Rd, Td } },
10277 1.1 christos },
10278 1.1 christos {
10279 1.1 christos /* MOD_0F26 */
10280 1.1 christos { Bad_Opcode },
10281 1.1 christos { "movL", { Td, Rd } },
10282 1.1 christos },
10283 1.1 christos {
10284 1.1 christos /* MOD_0F2B_PREFIX_0 */
10285 1.1 christos {"movntps", { Mx, XM } },
10286 1.1 christos },
10287 1.1 christos {
10288 1.1 christos /* MOD_0F2B_PREFIX_1 */
10289 1.1 christos {"movntss", { Md, XM } },
10290 1.1 christos },
10291 1.1 christos {
10292 1.1 christos /* MOD_0F2B_PREFIX_2 */
10293 1.1 christos {"movntpd", { Mx, XM } },
10294 1.1 christos },
10295 1.1 christos {
10296 1.1 christos /* MOD_0F2B_PREFIX_3 */
10297 1.1 christos {"movntsd", { Mq, XM } },
10298 1.1 christos },
10299 1.1 christos {
10300 1.1 christos /* MOD_0F51 */
10301 1.1 christos { Bad_Opcode },
10302 1.1 christos { "movmskpX", { Gdq, XS } },
10303 1.1 christos },
10304 1.1 christos {
10305 1.1 christos /* MOD_0F71_REG_2 */
10306 1.1 christos { Bad_Opcode },
10307 1.1 christos { "psrlw", { MS, Ib } },
10308 1.1 christos },
10309 1.1 christos {
10310 1.1 christos /* MOD_0F71_REG_4 */
10311 1.1 christos { Bad_Opcode },
10312 1.1 christos { "psraw", { MS, Ib } },
10313 1.1 christos },
10314 1.1 christos {
10315 1.1 christos /* MOD_0F71_REG_6 */
10316 1.1 christos { Bad_Opcode },
10317 1.1 christos { "psllw", { MS, Ib } },
10318 1.1 christos },
10319 1.1 christos {
10320 1.1 christos /* MOD_0F72_REG_2 */
10321 1.1 christos { Bad_Opcode },
10322 1.1 christos { "psrld", { MS, Ib } },
10323 1.1 christos },
10324 1.1 christos {
10325 1.1 christos /* MOD_0F72_REG_4 */
10326 1.1 christos { Bad_Opcode },
10327 1.1 christos { "psrad", { MS, Ib } },
10328 1.1 christos },
10329 1.1 christos {
10330 1.1 christos /* MOD_0F72_REG_6 */
10331 1.1 christos { Bad_Opcode },
10332 1.1 christos { "pslld", { MS, Ib } },
10333 1.1 christos },
10334 1.1 christos {
10335 1.1 christos /* MOD_0F73_REG_2 */
10336 1.1 christos { Bad_Opcode },
10337 1.1 christos { "psrlq", { MS, Ib } },
10338 1.1 christos },
10339 1.1 christos {
10340 1.1 christos /* MOD_0F73_REG_3 */
10341 1.1 christos { Bad_Opcode },
10342 1.1 christos { PREFIX_TABLE (PREFIX_0F73_REG_3) },
10343 1.1 christos },
10344 1.1 christos {
10345 1.1 christos /* MOD_0F73_REG_6 */
10346 1.1 christos { Bad_Opcode },
10347 1.1 christos { "psllq", { MS, Ib } },
10348 1.1 christos },
10349 1.1 christos {
10350 1.1 christos /* MOD_0F73_REG_7 */
10351 1.1 christos { Bad_Opcode },
10352 1.1 christos { PREFIX_TABLE (PREFIX_0F73_REG_7) },
10353 1.1 christos },
10354 1.1 christos {
10355 1.1 christos /* MOD_0FAE_REG_0 */
10356 1.1 christos { "fxsave", { FXSAVE } },
10357 1.1 christos { PREFIX_TABLE (PREFIX_0FAE_REG_0) },
10358 1.1 christos },
10359 1.1 christos {
10360 1.1 christos /* MOD_0FAE_REG_1 */
10361 1.1 christos { "fxrstor", { FXSAVE } },
10362 1.1 christos { PREFIX_TABLE (PREFIX_0FAE_REG_1) },
10363 1.1 christos },
10364 1.1 christos {
10365 1.1 christos /* MOD_0FAE_REG_2 */
10366 1.1 christos { "ldmxcsr", { Md } },
10367 1.1 christos { PREFIX_TABLE (PREFIX_0FAE_REG_2) },
10368 1.1 christos },
10369 1.1 christos {
10370 1.1 christos /* MOD_0FAE_REG_3 */
10371 1.1 christos { "stmxcsr", { Md } },
10372 1.1 christos { PREFIX_TABLE (PREFIX_0FAE_REG_3) },
10373 1.1 christos },
10374 1.1 christos {
10375 1.1 christos /* MOD_0FAE_REG_4 */
10376 1.1 christos { "xsave", { FXSAVE } },
10377 1.1 christos },
10378 1.1 christos {
10379 1.1 christos /* MOD_0FAE_REG_5 */
10380 1.1 christos { "xrstor", { FXSAVE } },
10381 1.1 christos { RM_TABLE (RM_0FAE_REG_5) },
10382 1.1 christos },
10383 1.1 christos {
10384 1.1 christos /* MOD_0FAE_REG_6 */
10385 1.1 christos { "xsaveopt", { FXSAVE } },
10386 1.1 christos { RM_TABLE (RM_0FAE_REG_6) },
10387 1.1 christos },
10388 1.1 christos {
10389 1.1 christos /* MOD_0FAE_REG_7 */
10390 1.1 christos { "clflush", { Mb } },
10391 1.1 christos { RM_TABLE (RM_0FAE_REG_7) },
10392 1.1 christos },
10393 1.1 christos {
10394 1.1 christos /* MOD_0FB2 */
10395 1.1 christos { "lssS", { Gv, Mp } },
10396 1.1 christos },
10397 1.1 christos {
10398 1.1 christos /* MOD_0FB4 */
10399 1.1 christos { "lfsS", { Gv, Mp } },
10400 1.1 christos },
10401 1.1 christos {
10402 1.1 christos /* MOD_0FB5 */
10403 1.1 christos { "lgsS", { Gv, Mp } },
10404 1.1 christos },
10405 1.1 christos {
10406 1.1 christos /* MOD_0FC7_REG_6 */
10407 1.1 christos { PREFIX_TABLE (PREFIX_0FC7_REG_6) },
10408 1.1 christos { "rdrand", { Ev } },
10409 1.1 christos },
10410 1.1 christos {
10411 1.1 christos /* MOD_0FC7_REG_7 */
10412 1.1 christos { "vmptrst", { Mq } },
10413 1.1.1.2 christos { "rdseed", { Ev } },
10414 1.1 christos },
10415 1.1 christos {
10416 1.1 christos /* MOD_0FD7 */
10417 1.1 christos { Bad_Opcode },
10418 1.1 christos { "pmovmskb", { Gdq, MS } },
10419 1.1 christos },
10420 1.1 christos {
10421 1.1 christos /* MOD_0FE7_PREFIX_2 */
10422 1.1 christos { "movntdq", { Mx, XM } },
10423 1.1 christos },
10424 1.1 christos {
10425 1.1 christos /* MOD_0FF0_PREFIX_3 */
10426 1.1 christos { "lddqu", { XM, M } },
10427 1.1 christos },
10428 1.1 christos {
10429 1.1 christos /* MOD_0F382A_PREFIX_2 */
10430 1.1 christos { "movntdqa", { XM, Mx } },
10431 1.1 christos },
10432 1.1 christos {
10433 1.1 christos /* MOD_62_32BIT */
10434 1.1 christos { "bound{S|}", { Gv, Ma } },
10435 1.1 christos },
10436 1.1 christos {
10437 1.1 christos /* MOD_C4_32BIT */
10438 1.1 christos { "lesS", { Gv, Mp } },
10439 1.1 christos { VEX_C4_TABLE (VEX_0F) },
10440 1.1 christos },
10441 1.1 christos {
10442 1.1 christos /* MOD_C5_32BIT */
10443 1.1 christos { "ldsS", { Gv, Mp } },
10444 1.1 christos { VEX_C5_TABLE (VEX_0F) },
10445 1.1 christos },
10446 1.1 christos {
10447 1.1 christos /* MOD_VEX_0F12_PREFIX_0 */
10448 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_0) },
10449 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F12_P_0_M_1) },
10450 1.1 christos },
10451 1.1 christos {
10452 1.1 christos /* MOD_VEX_0F13 */
10453 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F13_M_0) },
10454 1.1 christos },
10455 1.1 christos {
10456 1.1 christos /* MOD_VEX_0F16_PREFIX_0 */
10457 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_0) },
10458 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F16_P_0_M_1) },
10459 1.1 christos },
10460 1.1 christos {
10461 1.1 christos /* MOD_VEX_0F17 */
10462 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F17_M_0) },
10463 1.1 christos },
10464 1.1 christos {
10465 1.1 christos /* MOD_VEX_0F2B */
10466 1.1 christos { VEX_W_TABLE (VEX_W_0F2B_M_0) },
10467 1.1 christos },
10468 1.1 christos {
10469 1.1 christos /* MOD_VEX_0F50 */
10470 1.1 christos { Bad_Opcode },
10471 1.1 christos { VEX_W_TABLE (VEX_W_0F50_M_0) },
10472 1.1 christos },
10473 1.1 christos {
10474 1.1 christos /* MOD_VEX_0F71_REG_2 */
10475 1.1 christos { Bad_Opcode },
10476 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F71_REG_2) },
10477 1.1 christos },
10478 1.1 christos {
10479 1.1 christos /* MOD_VEX_0F71_REG_4 */
10480 1.1 christos { Bad_Opcode },
10481 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F71_REG_4) },
10482 1.1 christos },
10483 1.1 christos {
10484 1.1 christos /* MOD_VEX_0F71_REG_6 */
10485 1.1 christos { Bad_Opcode },
10486 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F71_REG_6) },
10487 1.1 christos },
10488 1.1 christos {
10489 1.1 christos /* MOD_VEX_0F72_REG_2 */
10490 1.1 christos { Bad_Opcode },
10491 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F72_REG_2) },
10492 1.1 christos },
10493 1.1 christos {
10494 1.1 christos /* MOD_VEX_0F72_REG_4 */
10495 1.1 christos { Bad_Opcode },
10496 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F72_REG_4) },
10497 1.1 christos },
10498 1.1 christos {
10499 1.1 christos /* MOD_VEX_0F72_REG_6 */
10500 1.1 christos { Bad_Opcode },
10501 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F72_REG_6) },
10502 1.1 christos },
10503 1.1 christos {
10504 1.1 christos /* MOD_VEX_0F73_REG_2 */
10505 1.1 christos { Bad_Opcode },
10506 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F73_REG_2) },
10507 1.1 christos },
10508 1.1 christos {
10509 1.1 christos /* MOD_VEX_0F73_REG_3 */
10510 1.1 christos { Bad_Opcode },
10511 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F73_REG_3) },
10512 1.1 christos },
10513 1.1 christos {
10514 1.1 christos /* MOD_VEX_0F73_REG_6 */
10515 1.1 christos { Bad_Opcode },
10516 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F73_REG_6) },
10517 1.1 christos },
10518 1.1 christos {
10519 1.1 christos /* MOD_VEX_0F73_REG_7 */
10520 1.1 christos { Bad_Opcode },
10521 1.1 christos { PREFIX_TABLE (PREFIX_VEX_0F73_REG_7) },
10522 1.1 christos },
10523 1.1 christos {
10524 1.1 christos /* MOD_VEX_0FAE_REG_2 */
10525 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FAE_R_2_M_0) },
10526 1.1 christos },
10527 1.1 christos {
10528 1.1 christos /* MOD_VEX_0FAE_REG_3 */
10529 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0FAE_R_3_M_0) },
10530 1.1 christos },
10531 1.1 christos {
10532 1.1 christos /* MOD_VEX_0FD7_PREFIX_2 */
10533 1.1 christos { Bad_Opcode },
10534 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0FD7_P_2_M_1) },
10535 1.1 christos },
10536 1.1 christos {
10537 1.1 christos /* MOD_VEX_0FE7_PREFIX_2 */
10538 1.1 christos { VEX_W_TABLE (VEX_W_0FE7_P_2_M_0) },
10539 1.1 christos },
10540 1.1 christos {
10541 1.1 christos /* MOD_VEX_0FF0_PREFIX_3 */
10542 1.1 christos { VEX_W_TABLE (VEX_W_0FF0_P_3_M_0) },
10543 1.1 christos },
10544 1.1 christos {
10545 1.1 christos /* MOD_VEX_0F381A_PREFIX_2 */
10546 1.1 christos { VEX_LEN_TABLE (VEX_LEN_0F381A_P_2_M_0) },
10547 1.1 christos },
10548 1.1 christos {
10549 1.1 christos /* MOD_VEX_0F382A_PREFIX_2 */
10550 1.1.1.2 christos { VEX_W_TABLE (VEX_W_0F382A_P_2_M_0) },
10551 1.1 christos },
10552 1.1 christos {
10553 1.1 christos /* MOD_VEX_0F382C_PREFIX_2 */
10554 1.1 christos { VEX_W_TABLE (VEX_W_0F382C_P_2_M_0) },
10555 1.1 christos },
10556 1.1 christos {
10557 1.1 christos /* MOD_VEX_0F382D_PREFIX_2 */
10558 1.1 christos { VEX_W_TABLE (VEX_W_0F382D_P_2_M_0) },
10559 1.1 christos },
10560 1.1 christos {
10561 1.1 christos /* MOD_VEX_0F382E_PREFIX_2 */
10562 1.1 christos { VEX_W_TABLE (VEX_W_0F382E_P_2_M_0) },
10563 1.1 christos },
10564 1.1 christos {
10565 1.1 christos /* MOD_VEX_0F382F_PREFIX_2 */
10566 1.1 christos { VEX_W_TABLE (VEX_W_0F382F_P_2_M_0) },
10567 1.1 christos },
10568 1.1.1.2 christos {
10569 1.1.1.2 christos /* MOD_VEX_0F385A_PREFIX_2 */
10570 1.1.1.2 christos { VEX_LEN_TABLE (VEX_LEN_0F385A_P_2_M_0) },
10571 1.1.1.2 christos },
10572 1.1.1.2 christos {
10573 1.1.1.2 christos /* MOD_VEX_0F388C_PREFIX_2 */
10574 1.1.1.2 christos { "vpmaskmov%LW", { XM, Vex, Mx } },
10575 1.1.1.2 christos },
10576 1.1.1.2 christos {
10577 1.1.1.2 christos /* MOD_VEX_0F388E_PREFIX_2 */
10578 1.1.1.2 christos { "vpmaskmov%LW", { Mx, Vex, XM } },
10579 1.1.1.2 christos },
10580 1.1 christos };
10581 1.1 christos
10582 1.1 christos static const struct dis386 rm_table[][8] = {
10583 1.1 christos {
10584 1.1.1.2 christos /* RM_C6_REG_7 */
10585 1.1.1.2 christos { "xabort", { Skip_MODRM, Ib } },
10586 1.1.1.2 christos },
10587 1.1.1.2 christos {
10588 1.1.1.2 christos /* RM_C7_REG_7 */
10589 1.1.1.2 christos { "xbeginT", { Skip_MODRM, Jv } },
10590 1.1.1.2 christos },
10591 1.1.1.2 christos {
10592 1.1 christos /* RM_0F01_REG_0 */
10593 1.1 christos { Bad_Opcode },
10594 1.1 christos { "vmcall", { Skip_MODRM } },
10595 1.1 christos { "vmlaunch", { Skip_MODRM } },
10596 1.1 christos { "vmresume", { Skip_MODRM } },
10597 1.1 christos { "vmxoff", { Skip_MODRM } },
10598 1.1 christos },
10599 1.1 christos {
10600 1.1 christos /* RM_0F01_REG_1 */
10601 1.1 christos { "monitor", { { OP_Monitor, 0 } } },
10602 1.1 christos { "mwait", { { OP_Mwait, 0 } } },
10603 1.1.1.2 christos { "clac", { Skip_MODRM } },
10604 1.1.1.2 christos { "stac", { Skip_MODRM } },
10605 1.1 christos },
10606 1.1 christos {
10607 1.1 christos /* RM_0F01_REG_2 */
10608 1.1 christos { "xgetbv", { Skip_MODRM } },
10609 1.1 christos { "xsetbv", { Skip_MODRM } },
10610 1.1.1.2 christos { Bad_Opcode },
10611 1.1.1.2 christos { Bad_Opcode },
10612 1.1.1.2 christos { "vmfunc", { Skip_MODRM } },
10613 1.1.1.2 christos { "xend", { Skip_MODRM } },
10614 1.1.1.2 christos { "xtest", { Skip_MODRM } },
10615 1.1.1.2 christos { Bad_Opcode },
10616 1.1 christos },
10617 1.1 christos {
10618 1.1 christos /* RM_0F01_REG_3 */
10619 1.1 christos { "vmrun", { Skip_MODRM } },
10620 1.1 christos { "vmmcall", { Skip_MODRM } },
10621 1.1 christos { "vmload", { Skip_MODRM } },
10622 1.1 christos { "vmsave", { Skip_MODRM } },
10623 1.1 christos { "stgi", { Skip_MODRM } },
10624 1.1 christos { "clgi", { Skip_MODRM } },
10625 1.1 christos { "skinit", { Skip_MODRM } },
10626 1.1 christos { "invlpga", { Skip_MODRM } },
10627 1.1 christos },
10628 1.1 christos {
10629 1.1 christos /* RM_0F01_REG_7 */
10630 1.1 christos { "swapgs", { Skip_MODRM } },
10631 1.1 christos { "rdtscp", { Skip_MODRM } },
10632 1.1 christos },
10633 1.1 christos {
10634 1.1 christos /* RM_0FAE_REG_5 */
10635 1.1 christos { "lfence", { Skip_MODRM } },
10636 1.1 christos },
10637 1.1 christos {
10638 1.1 christos /* RM_0FAE_REG_6 */
10639 1.1 christos { "mfence", { Skip_MODRM } },
10640 1.1 christos },
10641 1.1 christos {
10642 1.1 christos /* RM_0FAE_REG_7 */
10643 1.1 christos { "sfence", { Skip_MODRM } },
10644 1.1 christos },
10645 1.1 christos };
10646 1.1 christos
10647 1.1 christos #define INTERNAL_DISASSEMBLER_ERROR _("<internal disassembler error>")
10648 1.1 christos
10649 1.1 christos /* We use the high bit to indicate different name for the same
10650 1.1 christos prefix. */
10651 1.1 christos #define ADDR16_PREFIX (0x67 | 0x100)
10652 1.1 christos #define ADDR32_PREFIX (0x67 | 0x200)
10653 1.1 christos #define DATA16_PREFIX (0x66 | 0x100)
10654 1.1 christos #define DATA32_PREFIX (0x66 | 0x200)
10655 1.1 christos #define REP_PREFIX (0xf3 | 0x100)
10656 1.1.1.2 christos #define XACQUIRE_PREFIX (0xf2 | 0x200)
10657 1.1.1.2 christos #define XRELEASE_PREFIX (0xf3 | 0x400)
10658 1.1 christos
10659 1.1 christos static int
10660 1.1 christos ckprefix (void)
10661 1.1 christos {
10662 1.1 christos int newrex, i, length;
10663 1.1 christos rex = 0;
10664 1.1 christos rex_ignored = 0;
10665 1.1 christos prefixes = 0;
10666 1.1 christos used_prefixes = 0;
10667 1.1 christos rex_used = 0;
10668 1.1 christos last_lock_prefix = -1;
10669 1.1 christos last_repz_prefix = -1;
10670 1.1 christos last_repnz_prefix = -1;
10671 1.1 christos last_data_prefix = -1;
10672 1.1 christos last_addr_prefix = -1;
10673 1.1 christos last_rex_prefix = -1;
10674 1.1 christos last_seg_prefix = -1;
10675 1.1 christos for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
10676 1.1 christos all_prefixes[i] = 0;
10677 1.1 christos i = 0;
10678 1.1 christos length = 0;
10679 1.1 christos /* The maximum instruction length is 15bytes. */
10680 1.1 christos while (length < MAX_CODE_LENGTH - 1)
10681 1.1 christos {
10682 1.1 christos FETCH_DATA (the_info, codep + 1);
10683 1.1 christos newrex = 0;
10684 1.1 christos switch (*codep)
10685 1.1 christos {
10686 1.1 christos /* REX prefixes family. */
10687 1.1 christos case 0x40:
10688 1.1 christos case 0x41:
10689 1.1 christos case 0x42:
10690 1.1 christos case 0x43:
10691 1.1 christos case 0x44:
10692 1.1 christos case 0x45:
10693 1.1 christos case 0x46:
10694 1.1 christos case 0x47:
10695 1.1 christos case 0x48:
10696 1.1 christos case 0x49:
10697 1.1 christos case 0x4a:
10698 1.1 christos case 0x4b:
10699 1.1 christos case 0x4c:
10700 1.1 christos case 0x4d:
10701 1.1 christos case 0x4e:
10702 1.1 christos case 0x4f:
10703 1.1 christos if (address_mode == mode_64bit)
10704 1.1 christos newrex = *codep;
10705 1.1 christos else
10706 1.1 christos return 1;
10707 1.1 christos last_rex_prefix = i;
10708 1.1 christos break;
10709 1.1 christos case 0xf3:
10710 1.1 christos prefixes |= PREFIX_REPZ;
10711 1.1 christos last_repz_prefix = i;
10712 1.1 christos break;
10713 1.1 christos case 0xf2:
10714 1.1 christos prefixes |= PREFIX_REPNZ;
10715 1.1 christos last_repnz_prefix = i;
10716 1.1 christos break;
10717 1.1 christos case 0xf0:
10718 1.1 christos prefixes |= PREFIX_LOCK;
10719 1.1 christos last_lock_prefix = i;
10720 1.1 christos break;
10721 1.1 christos case 0x2e:
10722 1.1 christos prefixes |= PREFIX_CS;
10723 1.1 christos last_seg_prefix = i;
10724 1.1 christos break;
10725 1.1 christos case 0x36:
10726 1.1 christos prefixes |= PREFIX_SS;
10727 1.1 christos last_seg_prefix = i;
10728 1.1 christos break;
10729 1.1 christos case 0x3e:
10730 1.1 christos prefixes |= PREFIX_DS;
10731 1.1 christos last_seg_prefix = i;
10732 1.1 christos break;
10733 1.1 christos case 0x26:
10734 1.1 christos prefixes |= PREFIX_ES;
10735 1.1 christos last_seg_prefix = i;
10736 1.1 christos break;
10737 1.1 christos case 0x64:
10738 1.1 christos prefixes |= PREFIX_FS;
10739 1.1 christos last_seg_prefix = i;
10740 1.1 christos break;
10741 1.1 christos case 0x65:
10742 1.1 christos prefixes |= PREFIX_GS;
10743 1.1 christos last_seg_prefix = i;
10744 1.1 christos break;
10745 1.1 christos case 0x66:
10746 1.1 christos prefixes |= PREFIX_DATA;
10747 1.1 christos last_data_prefix = i;
10748 1.1 christos break;
10749 1.1 christos case 0x67:
10750 1.1 christos prefixes |= PREFIX_ADDR;
10751 1.1 christos last_addr_prefix = i;
10752 1.1 christos break;
10753 1.1 christos case FWAIT_OPCODE:
10754 1.1 christos /* fwait is really an instruction. If there are prefixes
10755 1.1 christos before the fwait, they belong to the fwait, *not* to the
10756 1.1 christos following instruction. */
10757 1.1 christos if (prefixes || rex)
10758 1.1 christos {
10759 1.1 christos prefixes |= PREFIX_FWAIT;
10760 1.1 christos codep++;
10761 1.1.1.2 christos /* This ensures that the previous REX prefixes are noticed
10762 1.1.1.2 christos as unused prefixes, as in the return case below. */
10763 1.1.1.2 christos rex_used = rex;
10764 1.1 christos return 1;
10765 1.1 christos }
10766 1.1 christos prefixes = PREFIX_FWAIT;
10767 1.1 christos break;
10768 1.1 christos default:
10769 1.1 christos return 1;
10770 1.1 christos }
10771 1.1 christos /* Rex is ignored when followed by another prefix. */
10772 1.1 christos if (rex)
10773 1.1 christos {
10774 1.1 christos rex_used = rex;
10775 1.1 christos return 1;
10776 1.1 christos }
10777 1.1 christos if (*codep != FWAIT_OPCODE)
10778 1.1 christos all_prefixes[i++] = *codep;
10779 1.1 christos rex = newrex;
10780 1.1 christos codep++;
10781 1.1 christos length++;
10782 1.1 christos }
10783 1.1 christos return 0;
10784 1.1 christos }
10785 1.1 christos
10786 1.1 christos static int
10787 1.1 christos seg_prefix (int pref)
10788 1.1 christos {
10789 1.1 christos switch (pref)
10790 1.1 christos {
10791 1.1 christos case 0x2e:
10792 1.1 christos return PREFIX_CS;
10793 1.1 christos case 0x36:
10794 1.1 christos return PREFIX_SS;
10795 1.1 christos case 0x3e:
10796 1.1 christos return PREFIX_DS;
10797 1.1 christos case 0x26:
10798 1.1 christos return PREFIX_ES;
10799 1.1 christos case 0x64:
10800 1.1 christos return PREFIX_FS;
10801 1.1 christos case 0x65:
10802 1.1 christos return PREFIX_GS;
10803 1.1 christos default:
10804 1.1 christos return 0;
10805 1.1 christos }
10806 1.1 christos }
10807 1.1 christos
10808 1.1 christos /* Return the name of the prefix byte PREF, or NULL if PREF is not a
10809 1.1 christos prefix byte. */
10810 1.1 christos
10811 1.1 christos static const char *
10812 1.1 christos prefix_name (int pref, int sizeflag)
10813 1.1 christos {
10814 1.1 christos static const char *rexes [16] =
10815 1.1 christos {
10816 1.1 christos "rex", /* 0x40 */
10817 1.1 christos "rex.B", /* 0x41 */
10818 1.1 christos "rex.X", /* 0x42 */
10819 1.1 christos "rex.XB", /* 0x43 */
10820 1.1 christos "rex.R", /* 0x44 */
10821 1.1 christos "rex.RB", /* 0x45 */
10822 1.1 christos "rex.RX", /* 0x46 */
10823 1.1 christos "rex.RXB", /* 0x47 */
10824 1.1 christos "rex.W", /* 0x48 */
10825 1.1 christos "rex.WB", /* 0x49 */
10826 1.1 christos "rex.WX", /* 0x4a */
10827 1.1 christos "rex.WXB", /* 0x4b */
10828 1.1 christos "rex.WR", /* 0x4c */
10829 1.1 christos "rex.WRB", /* 0x4d */
10830 1.1 christos "rex.WRX", /* 0x4e */
10831 1.1 christos "rex.WRXB", /* 0x4f */
10832 1.1 christos };
10833 1.1 christos
10834 1.1 christos switch (pref)
10835 1.1 christos {
10836 1.1 christos /* REX prefixes family. */
10837 1.1 christos case 0x40:
10838 1.1 christos case 0x41:
10839 1.1 christos case 0x42:
10840 1.1 christos case 0x43:
10841 1.1 christos case 0x44:
10842 1.1 christos case 0x45:
10843 1.1 christos case 0x46:
10844 1.1 christos case 0x47:
10845 1.1 christos case 0x48:
10846 1.1 christos case 0x49:
10847 1.1 christos case 0x4a:
10848 1.1 christos case 0x4b:
10849 1.1 christos case 0x4c:
10850 1.1 christos case 0x4d:
10851 1.1 christos case 0x4e:
10852 1.1 christos case 0x4f:
10853 1.1 christos return rexes [pref - 0x40];
10854 1.1 christos case 0xf3:
10855 1.1 christos return "repz";
10856 1.1 christos case 0xf2:
10857 1.1 christos return "repnz";
10858 1.1 christos case 0xf0:
10859 1.1 christos return "lock";
10860 1.1 christos case 0x2e:
10861 1.1 christos return "cs";
10862 1.1 christos case 0x36:
10863 1.1 christos return "ss";
10864 1.1 christos case 0x3e:
10865 1.1 christos return "ds";
10866 1.1 christos case 0x26:
10867 1.1 christos return "es";
10868 1.1 christos case 0x64:
10869 1.1 christos return "fs";
10870 1.1 christos case 0x65:
10871 1.1 christos return "gs";
10872 1.1 christos case 0x66:
10873 1.1 christos return (sizeflag & DFLAG) ? "data16" : "data32";
10874 1.1 christos case 0x67:
10875 1.1 christos if (address_mode == mode_64bit)
10876 1.1 christos return (sizeflag & AFLAG) ? "addr32" : "addr64";
10877 1.1 christos else
10878 1.1 christos return (sizeflag & AFLAG) ? "addr16" : "addr32";
10879 1.1 christos case FWAIT_OPCODE:
10880 1.1 christos return "fwait";
10881 1.1 christos case ADDR16_PREFIX:
10882 1.1 christos return "addr16";
10883 1.1 christos case ADDR32_PREFIX:
10884 1.1 christos return "addr32";
10885 1.1 christos case DATA16_PREFIX:
10886 1.1 christos return "data16";
10887 1.1 christos case DATA32_PREFIX:
10888 1.1 christos return "data32";
10889 1.1 christos case REP_PREFIX:
10890 1.1 christos return "rep";
10891 1.1.1.2 christos case XACQUIRE_PREFIX:
10892 1.1.1.2 christos return "xacquire";
10893 1.1.1.2 christos case XRELEASE_PREFIX:
10894 1.1.1.2 christos return "xrelease";
10895 1.1 christos default:
10896 1.1 christos return NULL;
10897 1.1 christos }
10898 1.1 christos }
10899 1.1 christos
10900 1.1 christos static char op_out[MAX_OPERANDS][100];
10901 1.1 christos static int op_ad, op_index[MAX_OPERANDS];
10902 1.1 christos static int two_source_ops;
10903 1.1 christos static bfd_vma op_address[MAX_OPERANDS];
10904 1.1 christos static bfd_vma op_riprel[MAX_OPERANDS];
10905 1.1 christos static bfd_vma start_pc;
10906 1.1 christos
10907 1.1 christos /*
10908 1.1 christos * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
10909 1.1 christos * (see topic "Redundant prefixes" in the "Differences from 8086"
10910 1.1 christos * section of the "Virtual 8086 Mode" chapter.)
10911 1.1 christos * 'pc' should be the address of this instruction, it will
10912 1.1 christos * be used to print the target address if this is a relative jump or call
10913 1.1 christos * The function returns the length of this instruction in bytes.
10914 1.1 christos */
10915 1.1 christos
10916 1.1 christos static char intel_syntax;
10917 1.1 christos static char intel_mnemonic = !SYSV386_COMPAT;
10918 1.1 christos static char open_char;
10919 1.1 christos static char close_char;
10920 1.1 christos static char separator_char;
10921 1.1 christos static char scale_char;
10922 1.1 christos
10923 1.1 christos /* Here for backwards compatibility. When gdb stops using
10924 1.1 christos print_insn_i386_att and print_insn_i386_intel these functions can
10925 1.1 christos disappear, and print_insn_i386 be merged into print_insn. */
10926 1.1 christos int
10927 1.1 christos print_insn_i386_att (bfd_vma pc, disassemble_info *info)
10928 1.1 christos {
10929 1.1 christos intel_syntax = 0;
10930 1.1 christos
10931 1.1 christos return print_insn (pc, info);
10932 1.1 christos }
10933 1.1 christos
10934 1.1 christos int
10935 1.1 christos print_insn_i386_intel (bfd_vma pc, disassemble_info *info)
10936 1.1 christos {
10937 1.1 christos intel_syntax = 1;
10938 1.1 christos
10939 1.1 christos return print_insn (pc, info);
10940 1.1 christos }
10941 1.1 christos
10942 1.1 christos int
10943 1.1 christos print_insn_i386 (bfd_vma pc, disassemble_info *info)
10944 1.1 christos {
10945 1.1 christos intel_syntax = -1;
10946 1.1 christos
10947 1.1 christos return print_insn (pc, info);
10948 1.1 christos }
10949 1.1 christos
10950 1.1 christos void
10951 1.1 christos print_i386_disassembler_options (FILE *stream)
10952 1.1 christos {
10953 1.1 christos fprintf (stream, _("\n\
10954 1.1 christos The following i386/x86-64 specific disassembler options are supported for use\n\
10955 1.1 christos with the -M switch (multiple options should be separated by commas):\n"));
10956 1.1 christos
10957 1.1 christos fprintf (stream, _(" x86-64 Disassemble in 64bit mode\n"));
10958 1.1 christos fprintf (stream, _(" i386 Disassemble in 32bit mode\n"));
10959 1.1 christos fprintf (stream, _(" i8086 Disassemble in 16bit mode\n"));
10960 1.1 christos fprintf (stream, _(" att Display instruction in AT&T syntax\n"));
10961 1.1 christos fprintf (stream, _(" intel Display instruction in Intel syntax\n"));
10962 1.1 christos fprintf (stream, _(" att-mnemonic\n"
10963 1.1 christos " Display instruction in AT&T mnemonic\n"));
10964 1.1 christos fprintf (stream, _(" intel-mnemonic\n"
10965 1.1 christos " Display instruction in Intel mnemonic\n"));
10966 1.1 christos fprintf (stream, _(" addr64 Assume 64bit address size\n"));
10967 1.1 christos fprintf (stream, _(" addr32 Assume 32bit address size\n"));
10968 1.1 christos fprintf (stream, _(" addr16 Assume 16bit address size\n"));
10969 1.1 christos fprintf (stream, _(" data32 Assume 32bit data size\n"));
10970 1.1 christos fprintf (stream, _(" data16 Assume 16bit data size\n"));
10971 1.1 christos fprintf (stream, _(" suffix Always display instruction suffix in AT&T syntax\n"));
10972 1.1 christos }
10973 1.1 christos
10974 1.1 christos /* Bad opcode. */
10975 1.1 christos static const struct dis386 bad_opcode = { "(bad)", { XX } };
10976 1.1 christos
10977 1.1 christos /* Get a pointer to struct dis386 with a valid name. */
10978 1.1 christos
10979 1.1 christos static const struct dis386 *
10980 1.1 christos get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
10981 1.1 christos {
10982 1.1 christos int vindex, vex_table_index;
10983 1.1 christos
10984 1.1 christos if (dp->name != NULL)
10985 1.1 christos return dp;
10986 1.1 christos
10987 1.1 christos switch (dp->op[0].bytemode)
10988 1.1 christos {
10989 1.1 christos case USE_REG_TABLE:
10990 1.1 christos dp = ®_table[dp->op[1].bytemode][modrm.reg];
10991 1.1 christos break;
10992 1.1 christos
10993 1.1 christos case USE_MOD_TABLE:
10994 1.1 christos vindex = modrm.mod == 0x3 ? 1 : 0;
10995 1.1 christos dp = &mod_table[dp->op[1].bytemode][vindex];
10996 1.1 christos break;
10997 1.1 christos
10998 1.1 christos case USE_RM_TABLE:
10999 1.1 christos dp = &rm_table[dp->op[1].bytemode][modrm.rm];
11000 1.1 christos break;
11001 1.1 christos
11002 1.1 christos case USE_PREFIX_TABLE:
11003 1.1 christos if (need_vex)
11004 1.1 christos {
11005 1.1 christos /* The prefix in VEX is implicit. */
11006 1.1 christos switch (vex.prefix)
11007 1.1 christos {
11008 1.1 christos case 0:
11009 1.1 christos vindex = 0;
11010 1.1 christos break;
11011 1.1 christos case REPE_PREFIX_OPCODE:
11012 1.1 christos vindex = 1;
11013 1.1 christos break;
11014 1.1 christos case DATA_PREFIX_OPCODE:
11015 1.1 christos vindex = 2;
11016 1.1 christos break;
11017 1.1 christos case REPNE_PREFIX_OPCODE:
11018 1.1 christos vindex = 3;
11019 1.1 christos break;
11020 1.1 christos default:
11021 1.1 christos abort ();
11022 1.1 christos break;
11023 1.1 christos }
11024 1.1 christos }
11025 1.1.1.2 christos else
11026 1.1 christos {
11027 1.1 christos vindex = 0;
11028 1.1 christos used_prefixes |= (prefixes & PREFIX_REPZ);
11029 1.1 christos if (prefixes & PREFIX_REPZ)
11030 1.1 christos {
11031 1.1 christos vindex = 1;
11032 1.1 christos all_prefixes[last_repz_prefix] = 0;
11033 1.1 christos }
11034 1.1 christos else
11035 1.1 christos {
11036 1.1 christos /* We should check PREFIX_REPNZ and PREFIX_REPZ before
11037 1.1 christos PREFIX_DATA. */
11038 1.1 christos used_prefixes |= (prefixes & PREFIX_REPNZ);
11039 1.1 christos if (prefixes & PREFIX_REPNZ)
11040 1.1 christos {
11041 1.1 christos vindex = 3;
11042 1.1 christos all_prefixes[last_repnz_prefix] = 0;
11043 1.1 christos }
11044 1.1 christos else
11045 1.1 christos {
11046 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
11047 1.1 christos if (prefixes & PREFIX_DATA)
11048 1.1 christos {
11049 1.1 christos vindex = 2;
11050 1.1 christos all_prefixes[last_data_prefix] = 0;
11051 1.1 christos }
11052 1.1 christos }
11053 1.1 christos }
11054 1.1 christos }
11055 1.1 christos dp = &prefix_table[dp->op[1].bytemode][vindex];
11056 1.1 christos break;
11057 1.1 christos
11058 1.1 christos case USE_X86_64_TABLE:
11059 1.1 christos vindex = address_mode == mode_64bit ? 1 : 0;
11060 1.1 christos dp = &x86_64_table[dp->op[1].bytemode][vindex];
11061 1.1 christos break;
11062 1.1 christos
11063 1.1 christos case USE_3BYTE_TABLE:
11064 1.1 christos FETCH_DATA (info, codep + 2);
11065 1.1 christos vindex = *codep++;
11066 1.1 christos dp = &three_byte_table[dp->op[1].bytemode][vindex];
11067 1.1 christos modrm.mod = (*codep >> 6) & 3;
11068 1.1 christos modrm.reg = (*codep >> 3) & 7;
11069 1.1 christos modrm.rm = *codep & 7;
11070 1.1 christos break;
11071 1.1 christos
11072 1.1 christos case USE_VEX_LEN_TABLE:
11073 1.1 christos if (!need_vex)
11074 1.1 christos abort ();
11075 1.1 christos
11076 1.1 christos switch (vex.length)
11077 1.1 christos {
11078 1.1 christos case 128:
11079 1.1 christos vindex = 0;
11080 1.1 christos break;
11081 1.1 christos case 256:
11082 1.1 christos vindex = 1;
11083 1.1 christos break;
11084 1.1 christos default:
11085 1.1 christos abort ();
11086 1.1 christos break;
11087 1.1 christos }
11088 1.1 christos
11089 1.1 christos dp = &vex_len_table[dp->op[1].bytemode][vindex];
11090 1.1 christos break;
11091 1.1 christos
11092 1.1 christos case USE_XOP_8F_TABLE:
11093 1.1 christos FETCH_DATA (info, codep + 3);
11094 1.1 christos /* All bits in the REX prefix are ignored. */
11095 1.1 christos rex_ignored = rex;
11096 1.1 christos rex = ~(*codep >> 5) & 0x7;
11097 1.1 christos
11098 1.1 christos /* VEX_TABLE_INDEX is the mmmmm part of the XOP byte 1 "RCB.mmmmm". */
11099 1.1 christos switch ((*codep & 0x1f))
11100 1.1 christos {
11101 1.1 christos default:
11102 1.1 christos dp = &bad_opcode;
11103 1.1 christos return dp;
11104 1.1 christos case 0x8:
11105 1.1 christos vex_table_index = XOP_08;
11106 1.1 christos break;
11107 1.1 christos case 0x9:
11108 1.1 christos vex_table_index = XOP_09;
11109 1.1 christos break;
11110 1.1 christos case 0xa:
11111 1.1 christos vex_table_index = XOP_0A;
11112 1.1 christos break;
11113 1.1 christos }
11114 1.1 christos codep++;
11115 1.1 christos vex.w = *codep & 0x80;
11116 1.1 christos if (vex.w && address_mode == mode_64bit)
11117 1.1 christos rex |= REX_W;
11118 1.1 christos
11119 1.1 christos vex.register_specifier = (~(*codep >> 3)) & 0xf;
11120 1.1 christos if (address_mode != mode_64bit
11121 1.1 christos && vex.register_specifier > 0x7)
11122 1.1 christos {
11123 1.1 christos dp = &bad_opcode;
11124 1.1 christos return dp;
11125 1.1 christos }
11126 1.1 christos
11127 1.1 christos vex.length = (*codep & 0x4) ? 256 : 128;
11128 1.1 christos switch ((*codep & 0x3))
11129 1.1 christos {
11130 1.1 christos case 0:
11131 1.1 christos vex.prefix = 0;
11132 1.1 christos break;
11133 1.1 christos case 1:
11134 1.1 christos vex.prefix = DATA_PREFIX_OPCODE;
11135 1.1 christos break;
11136 1.1 christos case 2:
11137 1.1 christos vex.prefix = REPE_PREFIX_OPCODE;
11138 1.1 christos break;
11139 1.1 christos case 3:
11140 1.1 christos vex.prefix = REPNE_PREFIX_OPCODE;
11141 1.1 christos break;
11142 1.1 christos }
11143 1.1 christos need_vex = 1;
11144 1.1 christos need_vex_reg = 1;
11145 1.1 christos codep++;
11146 1.1 christos vindex = *codep++;
11147 1.1 christos dp = &xop_table[vex_table_index][vindex];
11148 1.1 christos
11149 1.1 christos FETCH_DATA (info, codep + 1);
11150 1.1 christos modrm.mod = (*codep >> 6) & 3;
11151 1.1 christos modrm.reg = (*codep >> 3) & 7;
11152 1.1 christos modrm.rm = *codep & 7;
11153 1.1 christos break;
11154 1.1 christos
11155 1.1 christos case USE_VEX_C4_TABLE:
11156 1.1 christos FETCH_DATA (info, codep + 3);
11157 1.1 christos /* All bits in the REX prefix are ignored. */
11158 1.1 christos rex_ignored = rex;
11159 1.1 christos rex = ~(*codep >> 5) & 0x7;
11160 1.1 christos switch ((*codep & 0x1f))
11161 1.1 christos {
11162 1.1 christos default:
11163 1.1 christos dp = &bad_opcode;
11164 1.1 christos return dp;
11165 1.1 christos case 0x1:
11166 1.1 christos vex_table_index = VEX_0F;
11167 1.1 christos break;
11168 1.1 christos case 0x2:
11169 1.1 christos vex_table_index = VEX_0F38;
11170 1.1 christos break;
11171 1.1 christos case 0x3:
11172 1.1 christos vex_table_index = VEX_0F3A;
11173 1.1 christos break;
11174 1.1 christos }
11175 1.1 christos codep++;
11176 1.1 christos vex.w = *codep & 0x80;
11177 1.1 christos if (vex.w && address_mode == mode_64bit)
11178 1.1 christos rex |= REX_W;
11179 1.1 christos
11180 1.1 christos vex.register_specifier = (~(*codep >> 3)) & 0xf;
11181 1.1 christos if (address_mode != mode_64bit
11182 1.1 christos && vex.register_specifier > 0x7)
11183 1.1 christos {
11184 1.1 christos dp = &bad_opcode;
11185 1.1 christos return dp;
11186 1.1 christos }
11187 1.1 christos
11188 1.1 christos vex.length = (*codep & 0x4) ? 256 : 128;
11189 1.1 christos switch ((*codep & 0x3))
11190 1.1 christos {
11191 1.1 christos case 0:
11192 1.1 christos vex.prefix = 0;
11193 1.1 christos break;
11194 1.1 christos case 1:
11195 1.1 christos vex.prefix = DATA_PREFIX_OPCODE;
11196 1.1 christos break;
11197 1.1 christos case 2:
11198 1.1 christos vex.prefix = REPE_PREFIX_OPCODE;
11199 1.1 christos break;
11200 1.1 christos case 3:
11201 1.1 christos vex.prefix = REPNE_PREFIX_OPCODE;
11202 1.1 christos break;
11203 1.1 christos }
11204 1.1 christos need_vex = 1;
11205 1.1 christos need_vex_reg = 1;
11206 1.1 christos codep++;
11207 1.1 christos vindex = *codep++;
11208 1.1 christos dp = &vex_table[vex_table_index][vindex];
11209 1.1 christos /* There is no MODRM byte for VEX [82|77]. */
11210 1.1 christos if (vindex != 0x77 && vindex != 0x82)
11211 1.1 christos {
11212 1.1 christos FETCH_DATA (info, codep + 1);
11213 1.1 christos modrm.mod = (*codep >> 6) & 3;
11214 1.1 christos modrm.reg = (*codep >> 3) & 7;
11215 1.1 christos modrm.rm = *codep & 7;
11216 1.1 christos }
11217 1.1 christos break;
11218 1.1 christos
11219 1.1 christos case USE_VEX_C5_TABLE:
11220 1.1 christos FETCH_DATA (info, codep + 2);
11221 1.1 christos /* All bits in the REX prefix are ignored. */
11222 1.1 christos rex_ignored = rex;
11223 1.1 christos rex = (*codep & 0x80) ? 0 : REX_R;
11224 1.1 christos
11225 1.1 christos vex.register_specifier = (~(*codep >> 3)) & 0xf;
11226 1.1 christos if (address_mode != mode_64bit
11227 1.1 christos && vex.register_specifier > 0x7)
11228 1.1 christos {
11229 1.1 christos dp = &bad_opcode;
11230 1.1 christos return dp;
11231 1.1 christos }
11232 1.1 christos
11233 1.1 christos vex.w = 0;
11234 1.1 christos
11235 1.1 christos vex.length = (*codep & 0x4) ? 256 : 128;
11236 1.1 christos switch ((*codep & 0x3))
11237 1.1 christos {
11238 1.1 christos case 0:
11239 1.1 christos vex.prefix = 0;
11240 1.1 christos break;
11241 1.1 christos case 1:
11242 1.1 christos vex.prefix = DATA_PREFIX_OPCODE;
11243 1.1 christos break;
11244 1.1 christos case 2:
11245 1.1 christos vex.prefix = REPE_PREFIX_OPCODE;
11246 1.1 christos break;
11247 1.1 christos case 3:
11248 1.1 christos vex.prefix = REPNE_PREFIX_OPCODE;
11249 1.1 christos break;
11250 1.1 christos }
11251 1.1 christos need_vex = 1;
11252 1.1 christos need_vex_reg = 1;
11253 1.1 christos codep++;
11254 1.1 christos vindex = *codep++;
11255 1.1 christos dp = &vex_table[dp->op[1].bytemode][vindex];
11256 1.1 christos /* There is no MODRM byte for VEX [82|77]. */
11257 1.1 christos if (vindex != 0x77 && vindex != 0x82)
11258 1.1 christos {
11259 1.1 christos FETCH_DATA (info, codep + 1);
11260 1.1 christos modrm.mod = (*codep >> 6) & 3;
11261 1.1 christos modrm.reg = (*codep >> 3) & 7;
11262 1.1 christos modrm.rm = *codep & 7;
11263 1.1 christos }
11264 1.1 christos break;
11265 1.1 christos
11266 1.1 christos case USE_VEX_W_TABLE:
11267 1.1 christos if (!need_vex)
11268 1.1 christos abort ();
11269 1.1 christos
11270 1.1 christos dp = &vex_w_table[dp->op[1].bytemode][vex.w ? 1 : 0];
11271 1.1 christos break;
11272 1.1 christos
11273 1.1 christos case 0:
11274 1.1 christos dp = &bad_opcode;
11275 1.1 christos break;
11276 1.1 christos
11277 1.1 christos default:
11278 1.1 christos abort ();
11279 1.1 christos }
11280 1.1 christos
11281 1.1 christos if (dp->name != NULL)
11282 1.1 christos return dp;
11283 1.1 christos else
11284 1.1 christos return get_valid_dis386 (dp, info);
11285 1.1 christos }
11286 1.1 christos
11287 1.1 christos static void
11288 1.1 christos get_sib (disassemble_info *info)
11289 1.1 christos {
11290 1.1 christos /* If modrm.mod == 3, operand must be register. */
11291 1.1 christos if (need_modrm
11292 1.1 christos && address_mode != mode_16bit
11293 1.1 christos && modrm.mod != 3
11294 1.1 christos && modrm.rm == 4)
11295 1.1 christos {
11296 1.1 christos FETCH_DATA (info, codep + 2);
11297 1.1 christos sib.index = (codep [1] >> 3) & 7;
11298 1.1 christos sib.scale = (codep [1] >> 6) & 3;
11299 1.1 christos sib.base = codep [1] & 7;
11300 1.1 christos }
11301 1.1 christos }
11302 1.1 christos
11303 1.1 christos static int
11304 1.1 christos print_insn (bfd_vma pc, disassemble_info *info)
11305 1.1 christos {
11306 1.1 christos const struct dis386 *dp;
11307 1.1 christos int i;
11308 1.1 christos char *op_txt[MAX_OPERANDS];
11309 1.1 christos int needcomma;
11310 1.1 christos int sizeflag;
11311 1.1 christos const char *p;
11312 1.1 christos struct dis_private priv;
11313 1.1 christos int prefix_length;
11314 1.1 christos int default_prefixes;
11315 1.1 christos
11316 1.1.1.2 christos priv.orig_sizeflag = AFLAG | DFLAG;
11317 1.1.1.2 christos if ((info->mach & bfd_mach_i386_i386) != 0)
11318 1.1 christos address_mode = mode_32bit;
11319 1.1 christos else if (info->mach == bfd_mach_i386_i8086)
11320 1.1.1.2 christos {
11321 1.1.1.2 christos address_mode = mode_16bit;
11322 1.1.1.2 christos priv.orig_sizeflag = 0;
11323 1.1.1.2 christos }
11324 1.1 christos else
11325 1.1.1.2 christos address_mode = mode_64bit;
11326 1.1.1.2 christos
11327 1.1.1.2 christos if (intel_syntax == (char) -1)
11328 1.1.1.2 christos intel_syntax = (info->mach & bfd_mach_i386_intel_syntax) != 0;
11329 1.1 christos
11330 1.1 christos for (p = info->disassembler_options; p != NULL; )
11331 1.1 christos {
11332 1.1 christos if (CONST_STRNEQ (p, "x86-64"))
11333 1.1 christos {
11334 1.1 christos address_mode = mode_64bit;
11335 1.1 christos priv.orig_sizeflag = AFLAG | DFLAG;
11336 1.1 christos }
11337 1.1 christos else if (CONST_STRNEQ (p, "i386"))
11338 1.1 christos {
11339 1.1 christos address_mode = mode_32bit;
11340 1.1 christos priv.orig_sizeflag = AFLAG | DFLAG;
11341 1.1 christos }
11342 1.1 christos else if (CONST_STRNEQ (p, "i8086"))
11343 1.1 christos {
11344 1.1 christos address_mode = mode_16bit;
11345 1.1 christos priv.orig_sizeflag = 0;
11346 1.1 christos }
11347 1.1 christos else if (CONST_STRNEQ (p, "intel"))
11348 1.1 christos {
11349 1.1 christos intel_syntax = 1;
11350 1.1 christos if (CONST_STRNEQ (p + 5, "-mnemonic"))
11351 1.1 christos intel_mnemonic = 1;
11352 1.1 christos }
11353 1.1 christos else if (CONST_STRNEQ (p, "att"))
11354 1.1 christos {
11355 1.1 christos intel_syntax = 0;
11356 1.1 christos if (CONST_STRNEQ (p + 3, "-mnemonic"))
11357 1.1 christos intel_mnemonic = 0;
11358 1.1 christos }
11359 1.1 christos else if (CONST_STRNEQ (p, "addr"))
11360 1.1 christos {
11361 1.1 christos if (address_mode == mode_64bit)
11362 1.1 christos {
11363 1.1 christos if (p[4] == '3' && p[5] == '2')
11364 1.1 christos priv.orig_sizeflag &= ~AFLAG;
11365 1.1 christos else if (p[4] == '6' && p[5] == '4')
11366 1.1 christos priv.orig_sizeflag |= AFLAG;
11367 1.1 christos }
11368 1.1 christos else
11369 1.1 christos {
11370 1.1 christos if (p[4] == '1' && p[5] == '6')
11371 1.1 christos priv.orig_sizeflag &= ~AFLAG;
11372 1.1 christos else if (p[4] == '3' && p[5] == '2')
11373 1.1 christos priv.orig_sizeflag |= AFLAG;
11374 1.1 christos }
11375 1.1 christos }
11376 1.1 christos else if (CONST_STRNEQ (p, "data"))
11377 1.1 christos {
11378 1.1 christos if (p[4] == '1' && p[5] == '6')
11379 1.1 christos priv.orig_sizeflag &= ~DFLAG;
11380 1.1 christos else if (p[4] == '3' && p[5] == '2')
11381 1.1 christos priv.orig_sizeflag |= DFLAG;
11382 1.1 christos }
11383 1.1 christos else if (CONST_STRNEQ (p, "suffix"))
11384 1.1 christos priv.orig_sizeflag |= SUFFIX_ALWAYS;
11385 1.1 christos
11386 1.1 christos p = strchr (p, ',');
11387 1.1 christos if (p != NULL)
11388 1.1 christos p++;
11389 1.1 christos }
11390 1.1 christos
11391 1.1 christos if (intel_syntax)
11392 1.1 christos {
11393 1.1 christos names64 = intel_names64;
11394 1.1 christos names32 = intel_names32;
11395 1.1 christos names16 = intel_names16;
11396 1.1 christos names8 = intel_names8;
11397 1.1 christos names8rex = intel_names8rex;
11398 1.1 christos names_seg = intel_names_seg;
11399 1.1 christos names_mm = intel_names_mm;
11400 1.1 christos names_xmm = intel_names_xmm;
11401 1.1 christos names_ymm = intel_names_ymm;
11402 1.1 christos index64 = intel_index64;
11403 1.1 christos index32 = intel_index32;
11404 1.1 christos index16 = intel_index16;
11405 1.1 christos open_char = '[';
11406 1.1 christos close_char = ']';
11407 1.1 christos separator_char = '+';
11408 1.1 christos scale_char = '*';
11409 1.1 christos }
11410 1.1 christos else
11411 1.1 christos {
11412 1.1 christos names64 = att_names64;
11413 1.1 christos names32 = att_names32;
11414 1.1 christos names16 = att_names16;
11415 1.1 christos names8 = att_names8;
11416 1.1 christos names8rex = att_names8rex;
11417 1.1 christos names_seg = att_names_seg;
11418 1.1 christos names_mm = att_names_mm;
11419 1.1 christos names_xmm = att_names_xmm;
11420 1.1 christos names_ymm = att_names_ymm;
11421 1.1 christos index64 = att_index64;
11422 1.1 christos index32 = att_index32;
11423 1.1 christos index16 = att_index16;
11424 1.1 christos open_char = '(';
11425 1.1 christos close_char = ')';
11426 1.1 christos separator_char = ',';
11427 1.1 christos scale_char = ',';
11428 1.1 christos }
11429 1.1 christos
11430 1.1 christos /* The output looks better if we put 7 bytes on a line, since that
11431 1.1 christos puts most long word instructions on a single line. Use 8 bytes
11432 1.1 christos for Intel L1OM. */
11433 1.1.1.2 christos if ((info->mach & bfd_mach_l1om) != 0)
11434 1.1 christos info->bytes_per_line = 8;
11435 1.1 christos else
11436 1.1 christos info->bytes_per_line = 7;
11437 1.1 christos
11438 1.1 christos info->private_data = &priv;
11439 1.1 christos priv.max_fetched = priv.the_buffer;
11440 1.1 christos priv.insn_start = pc;
11441 1.1 christos
11442 1.1 christos obuf[0] = 0;
11443 1.1 christos for (i = 0; i < MAX_OPERANDS; ++i)
11444 1.1 christos {
11445 1.1 christos op_out[i][0] = 0;
11446 1.1 christos op_index[i] = -1;
11447 1.1 christos }
11448 1.1 christos
11449 1.1 christos the_info = info;
11450 1.1 christos start_pc = pc;
11451 1.1 christos start_codep = priv.the_buffer;
11452 1.1 christos codep = priv.the_buffer;
11453 1.1 christos
11454 1.1 christos if (setjmp (priv.bailout) != 0)
11455 1.1 christos {
11456 1.1 christos const char *name;
11457 1.1 christos
11458 1.1 christos /* Getting here means we tried for data but didn't get it. That
11459 1.1 christos means we have an incomplete instruction of some sort. Just
11460 1.1 christos print the first byte as a prefix or a .byte pseudo-op. */
11461 1.1 christos if (codep > priv.the_buffer)
11462 1.1 christos {
11463 1.1 christos name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag);
11464 1.1 christos if (name != NULL)
11465 1.1 christos (*info->fprintf_func) (info->stream, "%s", name);
11466 1.1 christos else
11467 1.1 christos {
11468 1.1 christos /* Just print the first byte as a .byte instruction. */
11469 1.1 christos (*info->fprintf_func) (info->stream, ".byte 0x%x",
11470 1.1 christos (unsigned int) priv.the_buffer[0]);
11471 1.1 christos }
11472 1.1 christos
11473 1.1 christos return 1;
11474 1.1 christos }
11475 1.1 christos
11476 1.1 christos return -1;
11477 1.1 christos }
11478 1.1 christos
11479 1.1 christos obufp = obuf;
11480 1.1 christos sizeflag = priv.orig_sizeflag;
11481 1.1 christos
11482 1.1 christos if (!ckprefix () || rex_used)
11483 1.1 christos {
11484 1.1 christos /* Too many prefixes or unused REX prefixes. */
11485 1.1 christos for (i = 0;
11486 1.1.1.2 christos i < (int) ARRAY_SIZE (all_prefixes) && all_prefixes[i];
11487 1.1 christos i++)
11488 1.1.1.2 christos (*info->fprintf_func) (info->stream, "%s%s",
11489 1.1.1.2 christos i == 0 ? "" : " ",
11490 1.1 christos prefix_name (all_prefixes[i], sizeflag));
11491 1.1.1.2 christos return i;
11492 1.1 christos }
11493 1.1 christos
11494 1.1 christos insn_codep = codep;
11495 1.1 christos
11496 1.1 christos FETCH_DATA (info, codep + 1);
11497 1.1 christos two_source_ops = (*codep == 0x62) || (*codep == 0xc8);
11498 1.1 christos
11499 1.1 christos if (((prefixes & PREFIX_FWAIT)
11500 1.1 christos && ((*codep < 0xd8) || (*codep > 0xdf))))
11501 1.1 christos {
11502 1.1 christos (*info->fprintf_func) (info->stream, "fwait");
11503 1.1 christos return 1;
11504 1.1 christos }
11505 1.1 christos
11506 1.1 christos if (*codep == 0x0f)
11507 1.1 christos {
11508 1.1 christos unsigned char threebyte;
11509 1.1 christos FETCH_DATA (info, codep + 2);
11510 1.1 christos threebyte = *++codep;
11511 1.1 christos dp = &dis386_twobyte[threebyte];
11512 1.1 christos need_modrm = twobyte_has_modrm[*codep];
11513 1.1 christos codep++;
11514 1.1 christos }
11515 1.1 christos else
11516 1.1 christos {
11517 1.1 christos dp = &dis386[*codep];
11518 1.1 christos need_modrm = onebyte_has_modrm[*codep];
11519 1.1 christos codep++;
11520 1.1 christos }
11521 1.1 christos
11522 1.1 christos if ((prefixes & PREFIX_REPZ))
11523 1.1 christos used_prefixes |= PREFIX_REPZ;
11524 1.1 christos if ((prefixes & PREFIX_REPNZ))
11525 1.1 christos used_prefixes |= PREFIX_REPNZ;
11526 1.1 christos if ((prefixes & PREFIX_LOCK))
11527 1.1 christos used_prefixes |= PREFIX_LOCK;
11528 1.1 christos
11529 1.1 christos default_prefixes = 0;
11530 1.1 christos if (prefixes & PREFIX_ADDR)
11531 1.1 christos {
11532 1.1 christos sizeflag ^= AFLAG;
11533 1.1 christos if (dp->op[2].bytemode != loop_jcxz_mode || intel_syntax)
11534 1.1 christos {
11535 1.1 christos if ((sizeflag & AFLAG) || address_mode == mode_64bit)
11536 1.1 christos all_prefixes[last_addr_prefix] = ADDR32_PREFIX;
11537 1.1 christos else
11538 1.1 christos all_prefixes[last_addr_prefix] = ADDR16_PREFIX;
11539 1.1 christos default_prefixes |= PREFIX_ADDR;
11540 1.1 christos }
11541 1.1 christos }
11542 1.1 christos
11543 1.1 christos if ((prefixes & PREFIX_DATA))
11544 1.1 christos {
11545 1.1 christos sizeflag ^= DFLAG;
11546 1.1 christos if (dp->op[2].bytemode == cond_jump_mode
11547 1.1 christos && dp->op[0].bytemode == v_mode
11548 1.1 christos && !intel_syntax)
11549 1.1 christos {
11550 1.1 christos if (sizeflag & DFLAG)
11551 1.1 christos all_prefixes[last_data_prefix] = DATA32_PREFIX;
11552 1.1 christos else
11553 1.1 christos all_prefixes[last_data_prefix] = DATA16_PREFIX;
11554 1.1 christos default_prefixes |= PREFIX_DATA;
11555 1.1 christos }
11556 1.1 christos else if (rex & REX_W)
11557 1.1 christos {
11558 1.1 christos /* REX_W will override PREFIX_DATA. */
11559 1.1 christos default_prefixes |= PREFIX_DATA;
11560 1.1 christos }
11561 1.1 christos }
11562 1.1 christos
11563 1.1 christos if (need_modrm)
11564 1.1 christos {
11565 1.1 christos FETCH_DATA (info, codep + 1);
11566 1.1 christos modrm.mod = (*codep >> 6) & 3;
11567 1.1 christos modrm.reg = (*codep >> 3) & 7;
11568 1.1 christos modrm.rm = *codep & 7;
11569 1.1 christos }
11570 1.1 christos
11571 1.1 christos need_vex = 0;
11572 1.1 christos need_vex_reg = 0;
11573 1.1 christos vex_w_done = 0;
11574 1.1 christos
11575 1.1 christos if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
11576 1.1 christos {
11577 1.1 christos get_sib (info);
11578 1.1 christos dofloat (sizeflag);
11579 1.1 christos }
11580 1.1 christos else
11581 1.1 christos {
11582 1.1 christos dp = get_valid_dis386 (dp, info);
11583 1.1 christos if (dp != NULL && putop (dp->name, sizeflag) == 0)
11584 1.1.1.2 christos {
11585 1.1 christos get_sib (info);
11586 1.1 christos for (i = 0; i < MAX_OPERANDS; ++i)
11587 1.1 christos {
11588 1.1 christos obufp = op_out[i];
11589 1.1 christos op_ad = MAX_OPERANDS - 1 - i;
11590 1.1 christos if (dp->op[i].rtn)
11591 1.1 christos (*dp->op[i].rtn) (dp->op[i].bytemode, sizeflag);
11592 1.1 christos }
11593 1.1 christos }
11594 1.1 christos }
11595 1.1 christos
11596 1.1 christos /* See if any prefixes were not used. If so, print the first one
11597 1.1 christos separately. If we don't do this, we'll wind up printing an
11598 1.1 christos instruction stream which does not precisely correspond to the
11599 1.1 christos bytes we are disassembling. */
11600 1.1 christos if ((prefixes & ~(used_prefixes | default_prefixes)) != 0)
11601 1.1 christos {
11602 1.1 christos for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11603 1.1 christos if (all_prefixes[i])
11604 1.1 christos {
11605 1.1 christos const char *name;
11606 1.1 christos name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
11607 1.1 christos if (name == NULL)
11608 1.1 christos name = INTERNAL_DISASSEMBLER_ERROR;
11609 1.1 christos (*info->fprintf_func) (info->stream, "%s", name);
11610 1.1 christos return 1;
11611 1.1 christos }
11612 1.1 christos }
11613 1.1 christos
11614 1.1 christos /* Check if the REX prefix is used. */
11615 1.1 christos if (rex_ignored == 0 && (rex ^ rex_used) == 0)
11616 1.1 christos all_prefixes[last_rex_prefix] = 0;
11617 1.1 christos
11618 1.1 christos /* Check if the SEG prefix is used. */
11619 1.1 christos if ((prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS | PREFIX_ES
11620 1.1 christos | PREFIX_FS | PREFIX_GS)) != 0
11621 1.1 christos && (used_prefixes
11622 1.1 christos & seg_prefix (all_prefixes[last_seg_prefix])) != 0)
11623 1.1 christos all_prefixes[last_seg_prefix] = 0;
11624 1.1 christos
11625 1.1 christos /* Check if the ADDR prefix is used. */
11626 1.1 christos if ((prefixes & PREFIX_ADDR) != 0
11627 1.1 christos && (used_prefixes & PREFIX_ADDR) != 0)
11628 1.1 christos all_prefixes[last_addr_prefix] = 0;
11629 1.1 christos
11630 1.1 christos /* Check if the DATA prefix is used. */
11631 1.1 christos if ((prefixes & PREFIX_DATA) != 0
11632 1.1 christos && (used_prefixes & PREFIX_DATA) != 0)
11633 1.1 christos all_prefixes[last_data_prefix] = 0;
11634 1.1 christos
11635 1.1 christos prefix_length = 0;
11636 1.1 christos for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
11637 1.1 christos if (all_prefixes[i])
11638 1.1 christos {
11639 1.1 christos const char *name;
11640 1.1 christos name = prefix_name (all_prefixes[i], sizeflag);
11641 1.1 christos if (name == NULL)
11642 1.1 christos abort ();
11643 1.1 christos prefix_length += strlen (name) + 1;
11644 1.1 christos (*info->fprintf_func) (info->stream, "%s ", name);
11645 1.1 christos }
11646 1.1 christos
11647 1.1 christos /* Check maximum code length. */
11648 1.1 christos if ((codep - start_codep) > MAX_CODE_LENGTH)
11649 1.1 christos {
11650 1.1 christos (*info->fprintf_func) (info->stream, "(bad)");
11651 1.1 christos return MAX_CODE_LENGTH;
11652 1.1 christos }
11653 1.1 christos
11654 1.1 christos obufp = mnemonicendp;
11655 1.1 christos for (i = strlen (obuf) + prefix_length; i < 6; i++)
11656 1.1 christos oappend (" ");
11657 1.1 christos oappend (" ");
11658 1.1 christos (*info->fprintf_func) (info->stream, "%s", obuf);
11659 1.1 christos
11660 1.1 christos /* The enter and bound instructions are printed with operands in the same
11661 1.1 christos order as the intel book; everything else is printed in reverse order. */
11662 1.1 christos if (intel_syntax || two_source_ops)
11663 1.1 christos {
11664 1.1 christos bfd_vma riprel;
11665 1.1 christos
11666 1.1 christos for (i = 0; i < MAX_OPERANDS; ++i)
11667 1.1.1.2 christos op_txt[i] = op_out[i];
11668 1.1 christos
11669 1.1 christos for (i = 0; i < (MAX_OPERANDS >> 1); ++i)
11670 1.1 christos {
11671 1.1.1.2 christos op_ad = op_index[i];
11672 1.1.1.2 christos op_index[i] = op_index[MAX_OPERANDS - 1 - i];
11673 1.1.1.2 christos op_index[MAX_OPERANDS - 1 - i] = op_ad;
11674 1.1 christos riprel = op_riprel[i];
11675 1.1 christos op_riprel[i] = op_riprel [MAX_OPERANDS - 1 - i];
11676 1.1 christos op_riprel[MAX_OPERANDS - 1 - i] = riprel;
11677 1.1 christos }
11678 1.1 christos }
11679 1.1 christos else
11680 1.1 christos {
11681 1.1 christos for (i = 0; i < MAX_OPERANDS; ++i)
11682 1.1.1.2 christos op_txt[MAX_OPERANDS - 1 - i] = op_out[i];
11683 1.1 christos }
11684 1.1 christos
11685 1.1 christos needcomma = 0;
11686 1.1 christos for (i = 0; i < MAX_OPERANDS; ++i)
11687 1.1 christos if (*op_txt[i])
11688 1.1 christos {
11689 1.1 christos if (needcomma)
11690 1.1 christos (*info->fprintf_func) (info->stream, ",");
11691 1.1 christos if (op_index[i] != -1 && !op_riprel[i])
11692 1.1 christos (*info->print_address_func) ((bfd_vma) op_address[op_index[i]], info);
11693 1.1 christos else
11694 1.1 christos (*info->fprintf_func) (info->stream, "%s", op_txt[i]);
11695 1.1 christos needcomma = 1;
11696 1.1 christos }
11697 1.1 christos
11698 1.1 christos for (i = 0; i < MAX_OPERANDS; i++)
11699 1.1 christos if (op_index[i] != -1 && op_riprel[i])
11700 1.1 christos {
11701 1.1 christos (*info->fprintf_func) (info->stream, " # ");
11702 1.1 christos (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep
11703 1.1 christos + op_address[op_index[i]]), info);
11704 1.1 christos break;
11705 1.1 christos }
11706 1.1 christos return codep - priv.the_buffer;
11707 1.1 christos }
11708 1.1 christos
11709 1.1 christos static const char *float_mem[] = {
11710 1.1 christos /* d8 */
11711 1.1 christos "fadd{s|}",
11712 1.1 christos "fmul{s|}",
11713 1.1 christos "fcom{s|}",
11714 1.1 christos "fcomp{s|}",
11715 1.1 christos "fsub{s|}",
11716 1.1 christos "fsubr{s|}",
11717 1.1 christos "fdiv{s|}",
11718 1.1 christos "fdivr{s|}",
11719 1.1 christos /* d9 */
11720 1.1 christos "fld{s|}",
11721 1.1 christos "(bad)",
11722 1.1 christos "fst{s|}",
11723 1.1 christos "fstp{s|}",
11724 1.1 christos "fldenvIC",
11725 1.1 christos "fldcw",
11726 1.1 christos "fNstenvIC",
11727 1.1 christos "fNstcw",
11728 1.1 christos /* da */
11729 1.1 christos "fiadd{l|}",
11730 1.1 christos "fimul{l|}",
11731 1.1 christos "ficom{l|}",
11732 1.1 christos "ficomp{l|}",
11733 1.1 christos "fisub{l|}",
11734 1.1 christos "fisubr{l|}",
11735 1.1 christos "fidiv{l|}",
11736 1.1 christos "fidivr{l|}",
11737 1.1 christos /* db */
11738 1.1 christos "fild{l|}",
11739 1.1 christos "fisttp{l|}",
11740 1.1 christos "fist{l|}",
11741 1.1 christos "fistp{l|}",
11742 1.1 christos "(bad)",
11743 1.1 christos "fld{t||t|}",
11744 1.1 christos "(bad)",
11745 1.1 christos "fstp{t||t|}",
11746 1.1 christos /* dc */
11747 1.1 christos "fadd{l|}",
11748 1.1 christos "fmul{l|}",
11749 1.1 christos "fcom{l|}",
11750 1.1 christos "fcomp{l|}",
11751 1.1 christos "fsub{l|}",
11752 1.1 christos "fsubr{l|}",
11753 1.1 christos "fdiv{l|}",
11754 1.1 christos "fdivr{l|}",
11755 1.1 christos /* dd */
11756 1.1 christos "fld{l|}",
11757 1.1 christos "fisttp{ll|}",
11758 1.1 christos "fst{l||}",
11759 1.1 christos "fstp{l|}",
11760 1.1 christos "frstorIC",
11761 1.1 christos "(bad)",
11762 1.1 christos "fNsaveIC",
11763 1.1 christos "fNstsw",
11764 1.1 christos /* de */
11765 1.1 christos "fiadd",
11766 1.1 christos "fimul",
11767 1.1 christos "ficom",
11768 1.1 christos "ficomp",
11769 1.1 christos "fisub",
11770 1.1 christos "fisubr",
11771 1.1 christos "fidiv",
11772 1.1 christos "fidivr",
11773 1.1 christos /* df */
11774 1.1 christos "fild",
11775 1.1 christos "fisttp",
11776 1.1 christos "fist",
11777 1.1 christos "fistp",
11778 1.1 christos "fbld",
11779 1.1 christos "fild{ll|}",
11780 1.1 christos "fbstp",
11781 1.1 christos "fistp{ll|}",
11782 1.1 christos };
11783 1.1 christos
11784 1.1 christos static const unsigned char float_mem_mode[] = {
11785 1.1 christos /* d8 */
11786 1.1 christos d_mode,
11787 1.1 christos d_mode,
11788 1.1 christos d_mode,
11789 1.1 christos d_mode,
11790 1.1 christos d_mode,
11791 1.1 christos d_mode,
11792 1.1 christos d_mode,
11793 1.1 christos d_mode,
11794 1.1 christos /* d9 */
11795 1.1 christos d_mode,
11796 1.1 christos 0,
11797 1.1 christos d_mode,
11798 1.1 christos d_mode,
11799 1.1 christos 0,
11800 1.1 christos w_mode,
11801 1.1 christos 0,
11802 1.1 christos w_mode,
11803 1.1 christos /* da */
11804 1.1 christos d_mode,
11805 1.1 christos d_mode,
11806 1.1 christos d_mode,
11807 1.1 christos d_mode,
11808 1.1 christos d_mode,
11809 1.1 christos d_mode,
11810 1.1 christos d_mode,
11811 1.1 christos d_mode,
11812 1.1 christos /* db */
11813 1.1 christos d_mode,
11814 1.1 christos d_mode,
11815 1.1 christos d_mode,
11816 1.1 christos d_mode,
11817 1.1 christos 0,
11818 1.1 christos t_mode,
11819 1.1 christos 0,
11820 1.1 christos t_mode,
11821 1.1 christos /* dc */
11822 1.1 christos q_mode,
11823 1.1 christos q_mode,
11824 1.1 christos q_mode,
11825 1.1 christos q_mode,
11826 1.1 christos q_mode,
11827 1.1 christos q_mode,
11828 1.1 christos q_mode,
11829 1.1 christos q_mode,
11830 1.1 christos /* dd */
11831 1.1 christos q_mode,
11832 1.1 christos q_mode,
11833 1.1 christos q_mode,
11834 1.1 christos q_mode,
11835 1.1 christos 0,
11836 1.1 christos 0,
11837 1.1 christos 0,
11838 1.1 christos w_mode,
11839 1.1 christos /* de */
11840 1.1 christos w_mode,
11841 1.1 christos w_mode,
11842 1.1 christos w_mode,
11843 1.1 christos w_mode,
11844 1.1 christos w_mode,
11845 1.1 christos w_mode,
11846 1.1 christos w_mode,
11847 1.1 christos w_mode,
11848 1.1 christos /* df */
11849 1.1 christos w_mode,
11850 1.1 christos w_mode,
11851 1.1 christos w_mode,
11852 1.1 christos w_mode,
11853 1.1 christos t_mode,
11854 1.1 christos q_mode,
11855 1.1 christos t_mode,
11856 1.1 christos q_mode
11857 1.1 christos };
11858 1.1 christos
11859 1.1 christos #define ST { OP_ST, 0 }
11860 1.1 christos #define STi { OP_STi, 0 }
11861 1.1 christos
11862 1.1 christos #define FGRPd9_2 NULL, { { NULL, 0 } }
11863 1.1 christos #define FGRPd9_4 NULL, { { NULL, 1 } }
11864 1.1 christos #define FGRPd9_5 NULL, { { NULL, 2 } }
11865 1.1 christos #define FGRPd9_6 NULL, { { NULL, 3 } }
11866 1.1 christos #define FGRPd9_7 NULL, { { NULL, 4 } }
11867 1.1 christos #define FGRPda_5 NULL, { { NULL, 5 } }
11868 1.1 christos #define FGRPdb_4 NULL, { { NULL, 6 } }
11869 1.1 christos #define FGRPde_3 NULL, { { NULL, 7 } }
11870 1.1 christos #define FGRPdf_4 NULL, { { NULL, 8 } }
11871 1.1 christos
11872 1.1 christos static const struct dis386 float_reg[][8] = {
11873 1.1 christos /* d8 */
11874 1.1 christos {
11875 1.1 christos { "fadd", { ST, STi } },
11876 1.1 christos { "fmul", { ST, STi } },
11877 1.1 christos { "fcom", { STi } },
11878 1.1 christos { "fcomp", { STi } },
11879 1.1 christos { "fsub", { ST, STi } },
11880 1.1 christos { "fsubr", { ST, STi } },
11881 1.1 christos { "fdiv", { ST, STi } },
11882 1.1 christos { "fdivr", { ST, STi } },
11883 1.1 christos },
11884 1.1 christos /* d9 */
11885 1.1 christos {
11886 1.1 christos { "fld", { STi } },
11887 1.1 christos { "fxch", { STi } },
11888 1.1 christos { FGRPd9_2 },
11889 1.1 christos { Bad_Opcode },
11890 1.1 christos { FGRPd9_4 },
11891 1.1 christos { FGRPd9_5 },
11892 1.1 christos { FGRPd9_6 },
11893 1.1 christos { FGRPd9_7 },
11894 1.1 christos },
11895 1.1 christos /* da */
11896 1.1 christos {
11897 1.1 christos { "fcmovb", { ST, STi } },
11898 1.1 christos { "fcmove", { ST, STi } },
11899 1.1 christos { "fcmovbe",{ ST, STi } },
11900 1.1 christos { "fcmovu", { ST, STi } },
11901 1.1 christos { Bad_Opcode },
11902 1.1 christos { FGRPda_5 },
11903 1.1 christos { Bad_Opcode },
11904 1.1 christos { Bad_Opcode },
11905 1.1 christos },
11906 1.1 christos /* db */
11907 1.1 christos {
11908 1.1 christos { "fcmovnb",{ ST, STi } },
11909 1.1 christos { "fcmovne",{ ST, STi } },
11910 1.1 christos { "fcmovnbe",{ ST, STi } },
11911 1.1 christos { "fcmovnu",{ ST, STi } },
11912 1.1 christos { FGRPdb_4 },
11913 1.1 christos { "fucomi", { ST, STi } },
11914 1.1 christos { "fcomi", { ST, STi } },
11915 1.1 christos { Bad_Opcode },
11916 1.1 christos },
11917 1.1 christos /* dc */
11918 1.1 christos {
11919 1.1 christos { "fadd", { STi, ST } },
11920 1.1 christos { "fmul", { STi, ST } },
11921 1.1 christos { Bad_Opcode },
11922 1.1 christos { Bad_Opcode },
11923 1.1 christos { "fsub!M", { STi, ST } },
11924 1.1 christos { "fsubM", { STi, ST } },
11925 1.1 christos { "fdiv!M", { STi, ST } },
11926 1.1 christos { "fdivM", { STi, ST } },
11927 1.1 christos },
11928 1.1 christos /* dd */
11929 1.1 christos {
11930 1.1 christos { "ffree", { STi } },
11931 1.1 christos { Bad_Opcode },
11932 1.1 christos { "fst", { STi } },
11933 1.1 christos { "fstp", { STi } },
11934 1.1 christos { "fucom", { STi } },
11935 1.1 christos { "fucomp", { STi } },
11936 1.1 christos { Bad_Opcode },
11937 1.1 christos { Bad_Opcode },
11938 1.1 christos },
11939 1.1 christos /* de */
11940 1.1 christos {
11941 1.1 christos { "faddp", { STi, ST } },
11942 1.1 christos { "fmulp", { STi, ST } },
11943 1.1 christos { Bad_Opcode },
11944 1.1 christos { FGRPde_3 },
11945 1.1 christos { "fsub!Mp", { STi, ST } },
11946 1.1 christos { "fsubMp", { STi, ST } },
11947 1.1 christos { "fdiv!Mp", { STi, ST } },
11948 1.1 christos { "fdivMp", { STi, ST } },
11949 1.1 christos },
11950 1.1 christos /* df */
11951 1.1 christos {
11952 1.1 christos { "ffreep", { STi } },
11953 1.1 christos { Bad_Opcode },
11954 1.1 christos { Bad_Opcode },
11955 1.1 christos { Bad_Opcode },
11956 1.1 christos { FGRPdf_4 },
11957 1.1 christos { "fucomip", { ST, STi } },
11958 1.1 christos { "fcomip", { ST, STi } },
11959 1.1 christos { Bad_Opcode },
11960 1.1 christos },
11961 1.1 christos };
11962 1.1 christos
11963 1.1 christos static char *fgrps[][8] = {
11964 1.1 christos /* d9_2 0 */
11965 1.1 christos {
11966 1.1 christos "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11967 1.1 christos },
11968 1.1 christos
11969 1.1 christos /* d9_4 1 */
11970 1.1 christos {
11971 1.1 christos "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)",
11972 1.1 christos },
11973 1.1 christos
11974 1.1 christos /* d9_5 2 */
11975 1.1 christos {
11976 1.1 christos "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)",
11977 1.1 christos },
11978 1.1 christos
11979 1.1 christos /* d9_6 3 */
11980 1.1 christos {
11981 1.1 christos "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp",
11982 1.1 christos },
11983 1.1 christos
11984 1.1 christos /* d9_7 4 */
11985 1.1 christos {
11986 1.1 christos "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos",
11987 1.1 christos },
11988 1.1 christos
11989 1.1 christos /* da_5 5 */
11990 1.1 christos {
11991 1.1 christos "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
11992 1.1 christos },
11993 1.1 christos
11994 1.1 christos /* db_4 6 */
11995 1.1 christos {
11996 1.1 christos "fNeni(8087 only)","fNdisi(8087 only)","fNclex","fNinit",
11997 1.1 christos "fNsetpm(287 only)","frstpm(287 only)","(bad)","(bad)",
11998 1.1 christos },
11999 1.1 christos
12000 1.1 christos /* de_3 7 */
12001 1.1 christos {
12002 1.1 christos "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12003 1.1 christos },
12004 1.1 christos
12005 1.1 christos /* df_4 8 */
12006 1.1 christos {
12007 1.1 christos "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)",
12008 1.1 christos },
12009 1.1 christos };
12010 1.1 christos
12011 1.1 christos static void
12012 1.1 christos swap_operand (void)
12013 1.1 christos {
12014 1.1 christos mnemonicendp[0] = '.';
12015 1.1 christos mnemonicendp[1] = 's';
12016 1.1 christos mnemonicendp += 2;
12017 1.1 christos }
12018 1.1 christos
12019 1.1 christos static void
12020 1.1 christos OP_Skip_MODRM (int bytemode ATTRIBUTE_UNUSED,
12021 1.1 christos int sizeflag ATTRIBUTE_UNUSED)
12022 1.1 christos {
12023 1.1 christos /* Skip mod/rm byte. */
12024 1.1 christos MODRM_CHECK;
12025 1.1 christos codep++;
12026 1.1 christos }
12027 1.1 christos
12028 1.1 christos static void
12029 1.1 christos dofloat (int sizeflag)
12030 1.1 christos {
12031 1.1 christos const struct dis386 *dp;
12032 1.1 christos unsigned char floatop;
12033 1.1 christos
12034 1.1 christos floatop = codep[-1];
12035 1.1 christos
12036 1.1 christos if (modrm.mod != 3)
12037 1.1 christos {
12038 1.1 christos int fp_indx = (floatop - 0xd8) * 8 + modrm.reg;
12039 1.1 christos
12040 1.1 christos putop (float_mem[fp_indx], sizeflag);
12041 1.1 christos obufp = op_out[0];
12042 1.1 christos op_ad = 2;
12043 1.1 christos OP_E (float_mem_mode[fp_indx], sizeflag);
12044 1.1 christos return;
12045 1.1 christos }
12046 1.1 christos /* Skip mod/rm byte. */
12047 1.1 christos MODRM_CHECK;
12048 1.1 christos codep++;
12049 1.1 christos
12050 1.1 christos dp = &float_reg[floatop - 0xd8][modrm.reg];
12051 1.1 christos if (dp->name == NULL)
12052 1.1 christos {
12053 1.1 christos putop (fgrps[dp->op[0].bytemode][modrm.rm], sizeflag);
12054 1.1 christos
12055 1.1 christos /* Instruction fnstsw is only one with strange arg. */
12056 1.1 christos if (floatop == 0xdf && codep[-1] == 0xe0)
12057 1.1 christos strcpy (op_out[0], names16[0]);
12058 1.1 christos }
12059 1.1 christos else
12060 1.1 christos {
12061 1.1 christos putop (dp->name, sizeflag);
12062 1.1 christos
12063 1.1 christos obufp = op_out[0];
12064 1.1 christos op_ad = 2;
12065 1.1 christos if (dp->op[0].rtn)
12066 1.1 christos (*dp->op[0].rtn) (dp->op[0].bytemode, sizeflag);
12067 1.1 christos
12068 1.1 christos obufp = op_out[1];
12069 1.1 christos op_ad = 1;
12070 1.1 christos if (dp->op[1].rtn)
12071 1.1 christos (*dp->op[1].rtn) (dp->op[1].bytemode, sizeflag);
12072 1.1 christos }
12073 1.1 christos }
12074 1.1 christos
12075 1.1 christos static void
12076 1.1 christos OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
12077 1.1 christos {
12078 1.1 christos oappend ("%st" + intel_syntax);
12079 1.1 christos }
12080 1.1 christos
12081 1.1 christos static void
12082 1.1 christos OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
12083 1.1 christos {
12084 1.1 christos sprintf (scratchbuf, "%%st(%d)", modrm.rm);
12085 1.1 christos oappend (scratchbuf + intel_syntax);
12086 1.1 christos }
12087 1.1 christos
12088 1.1 christos /* Capital letters in template are macros. */
12089 1.1 christos static int
12090 1.1 christos putop (const char *in_template, int sizeflag)
12091 1.1 christos {
12092 1.1 christos const char *p;
12093 1.1 christos int alt = 0;
12094 1.1 christos int cond = 1;
12095 1.1 christos unsigned int l = 0, len = 1;
12096 1.1 christos char last[4];
12097 1.1 christos
12098 1.1 christos #define SAVE_LAST(c) \
12099 1.1 christos if (l < len && l < sizeof (last)) \
12100 1.1 christos last[l++] = c; \
12101 1.1 christos else \
12102 1.1 christos abort ();
12103 1.1 christos
12104 1.1 christos for (p = in_template; *p; p++)
12105 1.1 christos {
12106 1.1 christos switch (*p)
12107 1.1 christos {
12108 1.1 christos default:
12109 1.1 christos *obufp++ = *p;
12110 1.1 christos break;
12111 1.1 christos case '%':
12112 1.1 christos len++;
12113 1.1 christos break;
12114 1.1 christos case '!':
12115 1.1 christos cond = 0;
12116 1.1 christos break;
12117 1.1 christos case '{':
12118 1.1 christos alt = 0;
12119 1.1 christos if (intel_syntax)
12120 1.1 christos {
12121 1.1 christos while (*++p != '|')
12122 1.1 christos if (*p == '}' || *p == '\0')
12123 1.1 christos abort ();
12124 1.1 christos }
12125 1.1 christos /* Fall through. */
12126 1.1 christos case 'I':
12127 1.1 christos alt = 1;
12128 1.1 christos continue;
12129 1.1 christos case '|':
12130 1.1 christos while (*++p != '}')
12131 1.1 christos {
12132 1.1 christos if (*p == '\0')
12133 1.1 christos abort ();
12134 1.1 christos }
12135 1.1 christos break;
12136 1.1 christos case '}':
12137 1.1 christos break;
12138 1.1 christos case 'A':
12139 1.1 christos if (intel_syntax)
12140 1.1 christos break;
12141 1.1 christos if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
12142 1.1 christos *obufp++ = 'b';
12143 1.1 christos break;
12144 1.1 christos case 'B':
12145 1.1 christos if (l == 0 && len == 1)
12146 1.1 christos {
12147 1.1 christos case_B:
12148 1.1 christos if (intel_syntax)
12149 1.1 christos break;
12150 1.1 christos if (sizeflag & SUFFIX_ALWAYS)
12151 1.1 christos *obufp++ = 'b';
12152 1.1 christos }
12153 1.1 christos else
12154 1.1 christos {
12155 1.1 christos if (l != 1
12156 1.1 christos || len != 2
12157 1.1 christos || last[0] != 'L')
12158 1.1 christos {
12159 1.1 christos SAVE_LAST (*p);
12160 1.1 christos break;
12161 1.1 christos }
12162 1.1 christos
12163 1.1 christos if (address_mode == mode_64bit
12164 1.1 christos && !(prefixes & PREFIX_ADDR))
12165 1.1 christos {
12166 1.1 christos *obufp++ = 'a';
12167 1.1 christos *obufp++ = 'b';
12168 1.1 christos *obufp++ = 's';
12169 1.1 christos }
12170 1.1 christos
12171 1.1 christos goto case_B;
12172 1.1 christos }
12173 1.1 christos break;
12174 1.1 christos case 'C':
12175 1.1 christos if (intel_syntax && !alt)
12176 1.1 christos break;
12177 1.1 christos if ((prefixes & PREFIX_DATA) || (sizeflag & SUFFIX_ALWAYS))
12178 1.1 christos {
12179 1.1 christos if (sizeflag & DFLAG)
12180 1.1 christos *obufp++ = intel_syntax ? 'd' : 'l';
12181 1.1 christos else
12182 1.1 christos *obufp++ = intel_syntax ? 'w' : 's';
12183 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12184 1.1 christos }
12185 1.1 christos break;
12186 1.1 christos case 'D':
12187 1.1 christos if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12188 1.1 christos break;
12189 1.1 christos USED_REX (REX_W);
12190 1.1 christos if (modrm.mod == 3)
12191 1.1 christos {
12192 1.1 christos if (rex & REX_W)
12193 1.1 christos *obufp++ = 'q';
12194 1.1 christos else
12195 1.1 christos {
12196 1.1 christos if (sizeflag & DFLAG)
12197 1.1 christos *obufp++ = intel_syntax ? 'd' : 'l';
12198 1.1 christos else
12199 1.1 christos *obufp++ = 'w';
12200 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12201 1.1 christos }
12202 1.1 christos }
12203 1.1 christos else
12204 1.1 christos *obufp++ = 'w';
12205 1.1 christos break;
12206 1.1 christos case 'E': /* For jcxz/jecxz */
12207 1.1 christos if (address_mode == mode_64bit)
12208 1.1 christos {
12209 1.1 christos if (sizeflag & AFLAG)
12210 1.1 christos *obufp++ = 'r';
12211 1.1 christos else
12212 1.1 christos *obufp++ = 'e';
12213 1.1 christos }
12214 1.1 christos else
12215 1.1 christos if (sizeflag & AFLAG)
12216 1.1 christos *obufp++ = 'e';
12217 1.1 christos used_prefixes |= (prefixes & PREFIX_ADDR);
12218 1.1 christos break;
12219 1.1 christos case 'F':
12220 1.1 christos if (intel_syntax)
12221 1.1 christos break;
12222 1.1 christos if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS))
12223 1.1 christos {
12224 1.1 christos if (sizeflag & AFLAG)
12225 1.1 christos *obufp++ = address_mode == mode_64bit ? 'q' : 'l';
12226 1.1 christos else
12227 1.1 christos *obufp++ = address_mode == mode_64bit ? 'l' : 'w';
12228 1.1 christos used_prefixes |= (prefixes & PREFIX_ADDR);
12229 1.1 christos }
12230 1.1 christos break;
12231 1.1 christos case 'G':
12232 1.1 christos if (intel_syntax || (obufp[-1] != 's' && !(sizeflag & SUFFIX_ALWAYS)))
12233 1.1 christos break;
12234 1.1 christos if ((rex & REX_W) || (sizeflag & DFLAG))
12235 1.1 christos *obufp++ = 'l';
12236 1.1 christos else
12237 1.1 christos *obufp++ = 'w';
12238 1.1 christos if (!(rex & REX_W))
12239 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12240 1.1 christos break;
12241 1.1 christos case 'H':
12242 1.1 christos if (intel_syntax)
12243 1.1 christos break;
12244 1.1 christos if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS
12245 1.1 christos || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS)
12246 1.1 christos {
12247 1.1 christos used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
12248 1.1 christos *obufp++ = ',';
12249 1.1 christos *obufp++ = 'p';
12250 1.1 christos if (prefixes & PREFIX_DS)
12251 1.1 christos *obufp++ = 't';
12252 1.1 christos else
12253 1.1 christos *obufp++ = 'n';
12254 1.1 christos }
12255 1.1 christos break;
12256 1.1 christos case 'J':
12257 1.1 christos if (intel_syntax)
12258 1.1 christos break;
12259 1.1 christos *obufp++ = 'l';
12260 1.1 christos break;
12261 1.1 christos case 'K':
12262 1.1 christos USED_REX (REX_W);
12263 1.1 christos if (rex & REX_W)
12264 1.1 christos *obufp++ = 'q';
12265 1.1 christos else
12266 1.1 christos *obufp++ = 'd';
12267 1.1 christos break;
12268 1.1 christos case 'Z':
12269 1.1 christos if (intel_syntax)
12270 1.1 christos break;
12271 1.1 christos if (address_mode == mode_64bit && (sizeflag & SUFFIX_ALWAYS))
12272 1.1 christos {
12273 1.1 christos *obufp++ = 'q';
12274 1.1 christos break;
12275 1.1 christos }
12276 1.1 christos /* Fall through. */
12277 1.1 christos goto case_L;
12278 1.1 christos case 'L':
12279 1.1 christos if (l != 0 || len != 1)
12280 1.1 christos {
12281 1.1 christos SAVE_LAST (*p);
12282 1.1 christos break;
12283 1.1 christos }
12284 1.1 christos case_L:
12285 1.1 christos if (intel_syntax)
12286 1.1 christos break;
12287 1.1 christos if (sizeflag & SUFFIX_ALWAYS)
12288 1.1 christos *obufp++ = 'l';
12289 1.1 christos break;
12290 1.1 christos case 'M':
12291 1.1 christos if (intel_mnemonic != cond)
12292 1.1 christos *obufp++ = 'r';
12293 1.1 christos break;
12294 1.1 christos case 'N':
12295 1.1 christos if ((prefixes & PREFIX_FWAIT) == 0)
12296 1.1 christos *obufp++ = 'n';
12297 1.1 christos else
12298 1.1 christos used_prefixes |= PREFIX_FWAIT;
12299 1.1 christos break;
12300 1.1 christos case 'O':
12301 1.1 christos USED_REX (REX_W);
12302 1.1 christos if (rex & REX_W)
12303 1.1 christos *obufp++ = 'o';
12304 1.1 christos else if (intel_syntax && (sizeflag & DFLAG))
12305 1.1 christos *obufp++ = 'q';
12306 1.1 christos else
12307 1.1 christos *obufp++ = 'd';
12308 1.1 christos if (!(rex & REX_W))
12309 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12310 1.1 christos break;
12311 1.1 christos case 'T':
12312 1.1 christos if (!intel_syntax
12313 1.1 christos && address_mode == mode_64bit
12314 1.1.1.2 christos && ((sizeflag & DFLAG) || (rex & REX_W)))
12315 1.1 christos {
12316 1.1 christos *obufp++ = 'q';
12317 1.1 christos break;
12318 1.1 christos }
12319 1.1 christos /* Fall through. */
12320 1.1 christos case 'P':
12321 1.1 christos if (intel_syntax)
12322 1.1 christos {
12323 1.1 christos if ((rex & REX_W) == 0
12324 1.1 christos && (prefixes & PREFIX_DATA))
12325 1.1 christos {
12326 1.1 christos if ((sizeflag & DFLAG) == 0)
12327 1.1 christos *obufp++ = 'w';
12328 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12329 1.1 christos }
12330 1.1 christos break;
12331 1.1 christos }
12332 1.1 christos if ((prefixes & PREFIX_DATA)
12333 1.1 christos || (rex & REX_W)
12334 1.1 christos || (sizeflag & SUFFIX_ALWAYS))
12335 1.1 christos {
12336 1.1 christos USED_REX (REX_W);
12337 1.1 christos if (rex & REX_W)
12338 1.1 christos *obufp++ = 'q';
12339 1.1 christos else
12340 1.1 christos {
12341 1.1 christos if (sizeflag & DFLAG)
12342 1.1 christos *obufp++ = 'l';
12343 1.1 christos else
12344 1.1 christos *obufp++ = 'w';
12345 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12346 1.1 christos }
12347 1.1 christos }
12348 1.1 christos break;
12349 1.1 christos case 'U':
12350 1.1 christos if (intel_syntax)
12351 1.1 christos break;
12352 1.1.1.2 christos if (address_mode == mode_64bit
12353 1.1.1.2 christos && ((sizeflag & DFLAG) || (rex & REX_W)))
12354 1.1 christos {
12355 1.1 christos if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
12356 1.1 christos *obufp++ = 'q';
12357 1.1 christos break;
12358 1.1 christos }
12359 1.1 christos /* Fall through. */
12360 1.1 christos goto case_Q;
12361 1.1 christos case 'Q':
12362 1.1 christos if (l == 0 && len == 1)
12363 1.1 christos {
12364 1.1 christos case_Q:
12365 1.1 christos if (intel_syntax && !alt)
12366 1.1 christos break;
12367 1.1 christos USED_REX (REX_W);
12368 1.1 christos if (modrm.mod != 3 || (sizeflag & SUFFIX_ALWAYS))
12369 1.1 christos {
12370 1.1 christos if (rex & REX_W)
12371 1.1 christos *obufp++ = 'q';
12372 1.1 christos else
12373 1.1 christos {
12374 1.1 christos if (sizeflag & DFLAG)
12375 1.1 christos *obufp++ = intel_syntax ? 'd' : 'l';
12376 1.1 christos else
12377 1.1 christos *obufp++ = 'w';
12378 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12379 1.1 christos }
12380 1.1 christos }
12381 1.1 christos }
12382 1.1 christos else
12383 1.1 christos {
12384 1.1 christos if (l != 1 || len != 2 || last[0] != 'L')
12385 1.1 christos {
12386 1.1 christos SAVE_LAST (*p);
12387 1.1 christos break;
12388 1.1 christos }
12389 1.1 christos if (intel_syntax
12390 1.1 christos || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12391 1.1 christos break;
12392 1.1 christos if ((rex & REX_W))
12393 1.1 christos {
12394 1.1 christos USED_REX (REX_W);
12395 1.1 christos *obufp++ = 'q';
12396 1.1 christos }
12397 1.1 christos else
12398 1.1 christos *obufp++ = 'l';
12399 1.1 christos }
12400 1.1 christos break;
12401 1.1 christos case 'R':
12402 1.1 christos USED_REX (REX_W);
12403 1.1 christos if (rex & REX_W)
12404 1.1 christos *obufp++ = 'q';
12405 1.1 christos else if (sizeflag & DFLAG)
12406 1.1 christos {
12407 1.1 christos if (intel_syntax)
12408 1.1 christos *obufp++ = 'd';
12409 1.1 christos else
12410 1.1 christos *obufp++ = 'l';
12411 1.1 christos }
12412 1.1 christos else
12413 1.1 christos *obufp++ = 'w';
12414 1.1 christos if (intel_syntax && !p[1]
12415 1.1 christos && ((rex & REX_W) || (sizeflag & DFLAG)))
12416 1.1 christos *obufp++ = 'e';
12417 1.1 christos if (!(rex & REX_W))
12418 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12419 1.1 christos break;
12420 1.1 christos case 'V':
12421 1.1 christos if (l == 0 && len == 1)
12422 1.1 christos {
12423 1.1 christos if (intel_syntax)
12424 1.1 christos break;
12425 1.1.1.2 christos if (address_mode == mode_64bit
12426 1.1.1.2 christos && ((sizeflag & DFLAG) || (rex & REX_W)))
12427 1.1 christos {
12428 1.1 christos if (sizeflag & SUFFIX_ALWAYS)
12429 1.1 christos *obufp++ = 'q';
12430 1.1 christos break;
12431 1.1 christos }
12432 1.1 christos }
12433 1.1 christos else
12434 1.1 christos {
12435 1.1 christos if (l != 1
12436 1.1 christos || len != 2
12437 1.1 christos || last[0] != 'L')
12438 1.1 christos {
12439 1.1 christos SAVE_LAST (*p);
12440 1.1 christos break;
12441 1.1 christos }
12442 1.1 christos
12443 1.1 christos if (rex & REX_W)
12444 1.1 christos {
12445 1.1 christos *obufp++ = 'a';
12446 1.1 christos *obufp++ = 'b';
12447 1.1 christos *obufp++ = 's';
12448 1.1 christos }
12449 1.1 christos }
12450 1.1 christos /* Fall through. */
12451 1.1 christos goto case_S;
12452 1.1 christos case 'S':
12453 1.1 christos if (l == 0 && len == 1)
12454 1.1 christos {
12455 1.1 christos case_S:
12456 1.1 christos if (intel_syntax)
12457 1.1 christos break;
12458 1.1 christos if (sizeflag & SUFFIX_ALWAYS)
12459 1.1 christos {
12460 1.1 christos if (rex & REX_W)
12461 1.1 christos *obufp++ = 'q';
12462 1.1 christos else
12463 1.1 christos {
12464 1.1 christos if (sizeflag & DFLAG)
12465 1.1 christos *obufp++ = 'l';
12466 1.1 christos else
12467 1.1 christos *obufp++ = 'w';
12468 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12469 1.1 christos }
12470 1.1 christos }
12471 1.1 christos }
12472 1.1 christos else
12473 1.1 christos {
12474 1.1 christos if (l != 1
12475 1.1 christos || len != 2
12476 1.1 christos || last[0] != 'L')
12477 1.1 christos {
12478 1.1 christos SAVE_LAST (*p);
12479 1.1 christos break;
12480 1.1 christos }
12481 1.1 christos
12482 1.1 christos if (address_mode == mode_64bit
12483 1.1 christos && !(prefixes & PREFIX_ADDR))
12484 1.1 christos {
12485 1.1 christos *obufp++ = 'a';
12486 1.1 christos *obufp++ = 'b';
12487 1.1 christos *obufp++ = 's';
12488 1.1 christos }
12489 1.1 christos
12490 1.1 christos goto case_S;
12491 1.1 christos }
12492 1.1 christos break;
12493 1.1 christos case 'X':
12494 1.1 christos if (l != 0 || len != 1)
12495 1.1 christos {
12496 1.1 christos SAVE_LAST (*p);
12497 1.1 christos break;
12498 1.1 christos }
12499 1.1 christos if (need_vex && vex.prefix)
12500 1.1 christos {
12501 1.1 christos if (vex.prefix == DATA_PREFIX_OPCODE)
12502 1.1 christos *obufp++ = 'd';
12503 1.1 christos else
12504 1.1 christos *obufp++ = 's';
12505 1.1 christos }
12506 1.1 christos else
12507 1.1 christos {
12508 1.1 christos if (prefixes & PREFIX_DATA)
12509 1.1 christos *obufp++ = 'd';
12510 1.1 christos else
12511 1.1 christos *obufp++ = 's';
12512 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12513 1.1 christos }
12514 1.1 christos break;
12515 1.1 christos case 'Y':
12516 1.1 christos if (l == 0 && len == 1)
12517 1.1 christos {
12518 1.1 christos if (intel_syntax || !(sizeflag & SUFFIX_ALWAYS))
12519 1.1 christos break;
12520 1.1 christos if (rex & REX_W)
12521 1.1 christos {
12522 1.1 christos USED_REX (REX_W);
12523 1.1 christos *obufp++ = 'q';
12524 1.1 christos }
12525 1.1 christos break;
12526 1.1 christos }
12527 1.1 christos else
12528 1.1 christos {
12529 1.1 christos if (l != 1 || len != 2 || last[0] != 'X')
12530 1.1 christos {
12531 1.1 christos SAVE_LAST (*p);
12532 1.1 christos break;
12533 1.1 christos }
12534 1.1 christos if (!need_vex)
12535 1.1 christos abort ();
12536 1.1 christos if (intel_syntax
12537 1.1 christos || (modrm.mod == 3 && !(sizeflag & SUFFIX_ALWAYS)))
12538 1.1 christos break;
12539 1.1 christos switch (vex.length)
12540 1.1 christos {
12541 1.1 christos case 128:
12542 1.1 christos *obufp++ = 'x';
12543 1.1 christos break;
12544 1.1 christos case 256:
12545 1.1 christos *obufp++ = 'y';
12546 1.1 christos break;
12547 1.1 christos default:
12548 1.1 christos abort ();
12549 1.1 christos }
12550 1.1 christos }
12551 1.1 christos break;
12552 1.1 christos case 'W':
12553 1.1 christos if (l == 0 && len == 1)
12554 1.1 christos {
12555 1.1 christos /* operand size flag for cwtl, cbtw */
12556 1.1 christos USED_REX (REX_W);
12557 1.1 christos if (rex & REX_W)
12558 1.1 christos {
12559 1.1 christos if (intel_syntax)
12560 1.1 christos *obufp++ = 'd';
12561 1.1 christos else
12562 1.1 christos *obufp++ = 'l';
12563 1.1 christos }
12564 1.1 christos else if (sizeflag & DFLAG)
12565 1.1 christos *obufp++ = 'w';
12566 1.1 christos else
12567 1.1 christos *obufp++ = 'b';
12568 1.1 christos if (!(rex & REX_W))
12569 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12570 1.1 christos }
12571 1.1 christos else
12572 1.1 christos {
12573 1.1.1.2 christos if (l != 1
12574 1.1.1.2 christos || len != 2
12575 1.1.1.2 christos || (last[0] != 'X'
12576 1.1.1.2 christos && last[0] != 'L'))
12577 1.1 christos {
12578 1.1 christos SAVE_LAST (*p);
12579 1.1 christos break;
12580 1.1 christos }
12581 1.1 christos if (!need_vex)
12582 1.1 christos abort ();
12583 1.1.1.2 christos if (last[0] == 'X')
12584 1.1.1.2 christos *obufp++ = vex.w ? 'd': 's';
12585 1.1.1.2 christos else
12586 1.1.1.2 christos *obufp++ = vex.w ? 'q': 'd';
12587 1.1 christos }
12588 1.1 christos break;
12589 1.1 christos }
12590 1.1 christos alt = 0;
12591 1.1 christos }
12592 1.1 christos *obufp = 0;
12593 1.1 christos mnemonicendp = obufp;
12594 1.1 christos return 0;
12595 1.1 christos }
12596 1.1 christos
12597 1.1 christos static void
12598 1.1 christos oappend (const char *s)
12599 1.1 christos {
12600 1.1 christos obufp = stpcpy (obufp, s);
12601 1.1 christos }
12602 1.1 christos
12603 1.1 christos static void
12604 1.1 christos append_seg (void)
12605 1.1 christos {
12606 1.1 christos if (prefixes & PREFIX_CS)
12607 1.1 christos {
12608 1.1 christos used_prefixes |= PREFIX_CS;
12609 1.1 christos oappend ("%cs:" + intel_syntax);
12610 1.1 christos }
12611 1.1 christos if (prefixes & PREFIX_DS)
12612 1.1 christos {
12613 1.1 christos used_prefixes |= PREFIX_DS;
12614 1.1 christos oappend ("%ds:" + intel_syntax);
12615 1.1 christos }
12616 1.1 christos if (prefixes & PREFIX_SS)
12617 1.1 christos {
12618 1.1 christos used_prefixes |= PREFIX_SS;
12619 1.1 christos oappend ("%ss:" + intel_syntax);
12620 1.1 christos }
12621 1.1 christos if (prefixes & PREFIX_ES)
12622 1.1 christos {
12623 1.1 christos used_prefixes |= PREFIX_ES;
12624 1.1 christos oappend ("%es:" + intel_syntax);
12625 1.1 christos }
12626 1.1 christos if (prefixes & PREFIX_FS)
12627 1.1 christos {
12628 1.1 christos used_prefixes |= PREFIX_FS;
12629 1.1 christos oappend ("%fs:" + intel_syntax);
12630 1.1 christos }
12631 1.1 christos if (prefixes & PREFIX_GS)
12632 1.1 christos {
12633 1.1 christos used_prefixes |= PREFIX_GS;
12634 1.1 christos oappend ("%gs:" + intel_syntax);
12635 1.1 christos }
12636 1.1 christos }
12637 1.1 christos
12638 1.1 christos static void
12639 1.1 christos OP_indirE (int bytemode, int sizeflag)
12640 1.1 christos {
12641 1.1 christos if (!intel_syntax)
12642 1.1 christos oappend ("*");
12643 1.1 christos OP_E (bytemode, sizeflag);
12644 1.1 christos }
12645 1.1 christos
12646 1.1 christos static void
12647 1.1 christos print_operand_value (char *buf, int hex, bfd_vma disp)
12648 1.1 christos {
12649 1.1 christos if (address_mode == mode_64bit)
12650 1.1 christos {
12651 1.1 christos if (hex)
12652 1.1 christos {
12653 1.1 christos char tmp[30];
12654 1.1 christos int i;
12655 1.1 christos buf[0] = '0';
12656 1.1 christos buf[1] = 'x';
12657 1.1 christos sprintf_vma (tmp, disp);
12658 1.1 christos for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
12659 1.1 christos strcpy (buf + 2, tmp + i);
12660 1.1 christos }
12661 1.1 christos else
12662 1.1 christos {
12663 1.1 christos bfd_signed_vma v = disp;
12664 1.1 christos char tmp[30];
12665 1.1 christos int i;
12666 1.1 christos if (v < 0)
12667 1.1 christos {
12668 1.1 christos *(buf++) = '-';
12669 1.1 christos v = -disp;
12670 1.1 christos /* Check for possible overflow on 0x8000000000000000. */
12671 1.1 christos if (v < 0)
12672 1.1 christos {
12673 1.1 christos strcpy (buf, "9223372036854775808");
12674 1.1 christos return;
12675 1.1 christos }
12676 1.1 christos }
12677 1.1 christos if (!v)
12678 1.1 christos {
12679 1.1 christos strcpy (buf, "0");
12680 1.1 christos return;
12681 1.1 christos }
12682 1.1 christos
12683 1.1 christos i = 0;
12684 1.1 christos tmp[29] = 0;
12685 1.1 christos while (v)
12686 1.1 christos {
12687 1.1 christos tmp[28 - i] = (v % 10) + '0';
12688 1.1 christos v /= 10;
12689 1.1 christos i++;
12690 1.1 christos }
12691 1.1 christos strcpy (buf, tmp + 29 - i);
12692 1.1 christos }
12693 1.1 christos }
12694 1.1 christos else
12695 1.1 christos {
12696 1.1 christos if (hex)
12697 1.1 christos sprintf (buf, "0x%x", (unsigned int) disp);
12698 1.1 christos else
12699 1.1 christos sprintf (buf, "%d", (int) disp);
12700 1.1 christos }
12701 1.1 christos }
12702 1.1 christos
12703 1.1 christos /* Put DISP in BUF as signed hex number. */
12704 1.1 christos
12705 1.1 christos static void
12706 1.1 christos print_displacement (char *buf, bfd_vma disp)
12707 1.1 christos {
12708 1.1 christos bfd_signed_vma val = disp;
12709 1.1 christos char tmp[30];
12710 1.1 christos int i, j = 0;
12711 1.1 christos
12712 1.1 christos if (val < 0)
12713 1.1 christos {
12714 1.1 christos buf[j++] = '-';
12715 1.1 christos val = -disp;
12716 1.1 christos
12717 1.1 christos /* Check for possible overflow. */
12718 1.1 christos if (val < 0)
12719 1.1 christos {
12720 1.1 christos switch (address_mode)
12721 1.1 christos {
12722 1.1 christos case mode_64bit:
12723 1.1 christos strcpy (buf + j, "0x8000000000000000");
12724 1.1 christos break;
12725 1.1 christos case mode_32bit:
12726 1.1 christos strcpy (buf + j, "0x80000000");
12727 1.1 christos break;
12728 1.1 christos case mode_16bit:
12729 1.1 christos strcpy (buf + j, "0x8000");
12730 1.1 christos break;
12731 1.1 christos }
12732 1.1 christos return;
12733 1.1 christos }
12734 1.1 christos }
12735 1.1 christos
12736 1.1 christos buf[j++] = '0';
12737 1.1 christos buf[j++] = 'x';
12738 1.1 christos
12739 1.1 christos sprintf_vma (tmp, (bfd_vma) val);
12740 1.1 christos for (i = 0; tmp[i] == '0'; i++)
12741 1.1 christos continue;
12742 1.1 christos if (tmp[i] == '\0')
12743 1.1 christos i--;
12744 1.1 christos strcpy (buf + j, tmp + i);
12745 1.1 christos }
12746 1.1 christos
12747 1.1 christos static void
12748 1.1 christos intel_operand_size (int bytemode, int sizeflag)
12749 1.1 christos {
12750 1.1 christos switch (bytemode)
12751 1.1 christos {
12752 1.1 christos case b_mode:
12753 1.1 christos case b_swap_mode:
12754 1.1 christos case dqb_mode:
12755 1.1 christos oappend ("BYTE PTR ");
12756 1.1 christos break;
12757 1.1 christos case w_mode:
12758 1.1 christos case dqw_mode:
12759 1.1 christos oappend ("WORD PTR ");
12760 1.1 christos break;
12761 1.1 christos case stack_v_mode:
12762 1.1.1.2 christos if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
12763 1.1 christos {
12764 1.1 christos oappend ("QWORD PTR ");
12765 1.1 christos break;
12766 1.1 christos }
12767 1.1 christos /* FALLTHRU */
12768 1.1 christos case v_mode:
12769 1.1 christos case v_swap_mode:
12770 1.1 christos case dq_mode:
12771 1.1 christos USED_REX (REX_W);
12772 1.1 christos if (rex & REX_W)
12773 1.1 christos oappend ("QWORD PTR ");
12774 1.1 christos else
12775 1.1 christos {
12776 1.1 christos if ((sizeflag & DFLAG) || bytemode == dq_mode)
12777 1.1 christos oappend ("DWORD PTR ");
12778 1.1 christos else
12779 1.1 christos oappend ("WORD PTR ");
12780 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12781 1.1 christos }
12782 1.1 christos break;
12783 1.1 christos case z_mode:
12784 1.1 christos if ((rex & REX_W) || (sizeflag & DFLAG))
12785 1.1 christos *obufp++ = 'D';
12786 1.1 christos oappend ("WORD PTR ");
12787 1.1 christos if (!(rex & REX_W))
12788 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12789 1.1 christos break;
12790 1.1 christos case a_mode:
12791 1.1 christos if (sizeflag & DFLAG)
12792 1.1 christos oappend ("QWORD PTR ");
12793 1.1 christos else
12794 1.1 christos oappend ("DWORD PTR ");
12795 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12796 1.1 christos break;
12797 1.1 christos case d_mode:
12798 1.1 christos case d_scalar_mode:
12799 1.1 christos case d_scalar_swap_mode:
12800 1.1 christos case d_swap_mode:
12801 1.1 christos case dqd_mode:
12802 1.1 christos oappend ("DWORD PTR ");
12803 1.1 christos break;
12804 1.1 christos case q_mode:
12805 1.1 christos case q_scalar_mode:
12806 1.1 christos case q_scalar_swap_mode:
12807 1.1 christos case q_swap_mode:
12808 1.1 christos oappend ("QWORD PTR ");
12809 1.1 christos break;
12810 1.1 christos case m_mode:
12811 1.1 christos if (address_mode == mode_64bit)
12812 1.1 christos oappend ("QWORD PTR ");
12813 1.1 christos else
12814 1.1 christos oappend ("DWORD PTR ");
12815 1.1 christos break;
12816 1.1 christos case f_mode:
12817 1.1 christos if (sizeflag & DFLAG)
12818 1.1 christos oappend ("FWORD PTR ");
12819 1.1 christos else
12820 1.1 christos oappend ("DWORD PTR ");
12821 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
12822 1.1 christos break;
12823 1.1 christos case t_mode:
12824 1.1 christos oappend ("TBYTE PTR ");
12825 1.1 christos break;
12826 1.1 christos case x_mode:
12827 1.1 christos case x_swap_mode:
12828 1.1 christos if (need_vex)
12829 1.1 christos {
12830 1.1 christos switch (vex.length)
12831 1.1 christos {
12832 1.1 christos case 128:
12833 1.1 christos oappend ("XMMWORD PTR ");
12834 1.1 christos break;
12835 1.1 christos case 256:
12836 1.1 christos oappend ("YMMWORD PTR ");
12837 1.1 christos break;
12838 1.1 christos default:
12839 1.1 christos abort ();
12840 1.1 christos }
12841 1.1 christos }
12842 1.1 christos else
12843 1.1 christos oappend ("XMMWORD PTR ");
12844 1.1 christos break;
12845 1.1 christos case xmm_mode:
12846 1.1 christos oappend ("XMMWORD PTR ");
12847 1.1 christos break;
12848 1.1 christos case xmmq_mode:
12849 1.1 christos if (!need_vex)
12850 1.1 christos abort ();
12851 1.1 christos
12852 1.1 christos switch (vex.length)
12853 1.1 christos {
12854 1.1 christos case 128:
12855 1.1 christos oappend ("QWORD PTR ");
12856 1.1 christos break;
12857 1.1 christos case 256:
12858 1.1 christos oappend ("XMMWORD PTR ");
12859 1.1 christos break;
12860 1.1 christos default:
12861 1.1 christos abort ();
12862 1.1 christos }
12863 1.1 christos break;
12864 1.1.1.2 christos case xmm_mb_mode:
12865 1.1.1.2 christos if (!need_vex)
12866 1.1.1.2 christos abort ();
12867 1.1.1.2 christos
12868 1.1.1.2 christos switch (vex.length)
12869 1.1.1.2 christos {
12870 1.1.1.2 christos case 128:
12871 1.1.1.2 christos case 256:
12872 1.1.1.2 christos oappend ("BYTE PTR ");
12873 1.1.1.2 christos break;
12874 1.1.1.2 christos default:
12875 1.1.1.2 christos abort ();
12876 1.1.1.2 christos }
12877 1.1.1.2 christos break;
12878 1.1.1.2 christos case xmm_mw_mode:
12879 1.1.1.2 christos if (!need_vex)
12880 1.1.1.2 christos abort ();
12881 1.1.1.2 christos
12882 1.1.1.2 christos switch (vex.length)
12883 1.1.1.2 christos {
12884 1.1.1.2 christos case 128:
12885 1.1.1.2 christos case 256:
12886 1.1.1.2 christos oappend ("WORD PTR ");
12887 1.1.1.2 christos break;
12888 1.1.1.2 christos default:
12889 1.1.1.2 christos abort ();
12890 1.1.1.2 christos }
12891 1.1.1.2 christos break;
12892 1.1.1.2 christos case xmm_md_mode:
12893 1.1.1.2 christos if (!need_vex)
12894 1.1.1.2 christos abort ();
12895 1.1.1.2 christos
12896 1.1.1.2 christos switch (vex.length)
12897 1.1.1.2 christos {
12898 1.1.1.2 christos case 128:
12899 1.1.1.2 christos case 256:
12900 1.1.1.2 christos oappend ("DWORD PTR ");
12901 1.1.1.2 christos break;
12902 1.1.1.2 christos default:
12903 1.1.1.2 christos abort ();
12904 1.1.1.2 christos }
12905 1.1.1.2 christos break;
12906 1.1.1.2 christos case xmm_mq_mode:
12907 1.1.1.2 christos if (!need_vex)
12908 1.1.1.2 christos abort ();
12909 1.1.1.2 christos
12910 1.1.1.2 christos switch (vex.length)
12911 1.1.1.2 christos {
12912 1.1.1.2 christos case 128:
12913 1.1.1.2 christos case 256:
12914 1.1.1.2 christos oappend ("QWORD PTR ");
12915 1.1.1.2 christos break;
12916 1.1.1.2 christos default:
12917 1.1.1.2 christos abort ();
12918 1.1.1.2 christos }
12919 1.1.1.2 christos break;
12920 1.1.1.2 christos case xmmdw_mode:
12921 1.1.1.2 christos if (!need_vex)
12922 1.1.1.2 christos abort ();
12923 1.1.1.2 christos
12924 1.1.1.2 christos switch (vex.length)
12925 1.1.1.2 christos {
12926 1.1.1.2 christos case 128:
12927 1.1.1.2 christos oappend ("WORD PTR ");
12928 1.1.1.2 christos break;
12929 1.1.1.2 christos case 256:
12930 1.1.1.2 christos oappend ("DWORD PTR ");
12931 1.1.1.2 christos break;
12932 1.1.1.2 christos default:
12933 1.1.1.2 christos abort ();
12934 1.1.1.2 christos }
12935 1.1.1.2 christos break;
12936 1.1.1.2 christos case xmmqd_mode:
12937 1.1.1.2 christos if (!need_vex)
12938 1.1.1.2 christos abort ();
12939 1.1.1.2 christos
12940 1.1.1.2 christos switch (vex.length)
12941 1.1.1.2 christos {
12942 1.1.1.2 christos case 128:
12943 1.1.1.2 christos oappend ("DWORD PTR ");
12944 1.1.1.2 christos break;
12945 1.1.1.2 christos case 256:
12946 1.1.1.2 christos oappend ("QWORD PTR ");
12947 1.1.1.2 christos break;
12948 1.1.1.2 christos default:
12949 1.1.1.2 christos abort ();
12950 1.1.1.2 christos }
12951 1.1.1.2 christos break;
12952 1.1 christos case ymmq_mode:
12953 1.1 christos if (!need_vex)
12954 1.1 christos abort ();
12955 1.1 christos
12956 1.1 christos switch (vex.length)
12957 1.1 christos {
12958 1.1 christos case 128:
12959 1.1 christos oappend ("QWORD PTR ");
12960 1.1 christos break;
12961 1.1 christos case 256:
12962 1.1 christos oappend ("YMMWORD PTR ");
12963 1.1 christos break;
12964 1.1 christos default:
12965 1.1 christos abort ();
12966 1.1 christos }
12967 1.1 christos break;
12968 1.1.1.2 christos case ymmxmm_mode:
12969 1.1.1.2 christos if (!need_vex)
12970 1.1.1.2 christos abort ();
12971 1.1.1.2 christos
12972 1.1.1.2 christos switch (vex.length)
12973 1.1.1.2 christos {
12974 1.1.1.2 christos case 128:
12975 1.1.1.2 christos case 256:
12976 1.1.1.2 christos oappend ("XMMWORD PTR ");
12977 1.1.1.2 christos break;
12978 1.1.1.2 christos default:
12979 1.1.1.2 christos abort ();
12980 1.1.1.2 christos }
12981 1.1.1.2 christos break;
12982 1.1 christos case o_mode:
12983 1.1 christos oappend ("OWORD PTR ");
12984 1.1 christos break;
12985 1.1 christos case vex_w_dq_mode:
12986 1.1 christos case vex_scalar_w_dq_mode:
12987 1.1.1.2 christos case vex_vsib_d_w_dq_mode:
12988 1.1.1.2 christos case vex_vsib_q_w_dq_mode:
12989 1.1 christos if (!need_vex)
12990 1.1 christos abort ();
12991 1.1 christos
12992 1.1 christos if (vex.w)
12993 1.1 christos oappend ("QWORD PTR ");
12994 1.1 christos else
12995 1.1 christos oappend ("DWORD PTR ");
12996 1.1 christos break;
12997 1.1 christos default:
12998 1.1 christos break;
12999 1.1 christos }
13000 1.1 christos }
13001 1.1 christos
13002 1.1 christos static void
13003 1.1 christos OP_E_register (int bytemode, int sizeflag)
13004 1.1 christos {
13005 1.1 christos int reg = modrm.rm;
13006 1.1 christos const char **names;
13007 1.1 christos
13008 1.1 christos USED_REX (REX_B);
13009 1.1 christos if ((rex & REX_B))
13010 1.1 christos reg += 8;
13011 1.1 christos
13012 1.1 christos if ((sizeflag & SUFFIX_ALWAYS)
13013 1.1 christos && (bytemode == b_swap_mode || bytemode == v_swap_mode))
13014 1.1 christos swap_operand ();
13015 1.1 christos
13016 1.1 christos switch (bytemode)
13017 1.1 christos {
13018 1.1 christos case b_mode:
13019 1.1 christos case b_swap_mode:
13020 1.1 christos USED_REX (0);
13021 1.1 christos if (rex)
13022 1.1 christos names = names8rex;
13023 1.1 christos else
13024 1.1 christos names = names8;
13025 1.1 christos break;
13026 1.1 christos case w_mode:
13027 1.1 christos names = names16;
13028 1.1 christos break;
13029 1.1 christos case d_mode:
13030 1.1 christos names = names32;
13031 1.1 christos break;
13032 1.1 christos case q_mode:
13033 1.1 christos names = names64;
13034 1.1 christos break;
13035 1.1 christos case m_mode:
13036 1.1 christos names = address_mode == mode_64bit ? names64 : names32;
13037 1.1 christos break;
13038 1.1 christos case stack_v_mode:
13039 1.1.1.2 christos if (address_mode == mode_64bit && ((sizeflag & DFLAG) || (rex & REX_W)))
13040 1.1 christos {
13041 1.1 christos names = names64;
13042 1.1 christos break;
13043 1.1 christos }
13044 1.1 christos bytemode = v_mode;
13045 1.1 christos /* FALLTHRU */
13046 1.1 christos case v_mode:
13047 1.1 christos case v_swap_mode:
13048 1.1 christos case dq_mode:
13049 1.1 christos case dqb_mode:
13050 1.1 christos case dqd_mode:
13051 1.1 christos case dqw_mode:
13052 1.1 christos USED_REX (REX_W);
13053 1.1 christos if (rex & REX_W)
13054 1.1 christos names = names64;
13055 1.1 christos else
13056 1.1 christos {
13057 1.1.1.2 christos if ((sizeflag & DFLAG)
13058 1.1 christos || (bytemode != v_mode
13059 1.1 christos && bytemode != v_swap_mode))
13060 1.1 christos names = names32;
13061 1.1 christos else
13062 1.1 christos names = names16;
13063 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13064 1.1 christos }
13065 1.1 christos break;
13066 1.1 christos case 0:
13067 1.1 christos return;
13068 1.1 christos default:
13069 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
13070 1.1 christos return;
13071 1.1 christos }
13072 1.1 christos oappend (names[reg]);
13073 1.1 christos }
13074 1.1 christos
13075 1.1 christos static void
13076 1.1 christos OP_E_memory (int bytemode, int sizeflag)
13077 1.1 christos {
13078 1.1 christos bfd_vma disp = 0;
13079 1.1 christos int add = (rex & REX_B) ? 8 : 0;
13080 1.1 christos int riprel = 0;
13081 1.1 christos
13082 1.1 christos USED_REX (REX_B);
13083 1.1 christos if (intel_syntax)
13084 1.1 christos intel_operand_size (bytemode, sizeflag);
13085 1.1 christos append_seg ();
13086 1.1 christos
13087 1.1 christos if ((sizeflag & AFLAG) || address_mode == mode_64bit)
13088 1.1 christos {
13089 1.1 christos /* 32/64 bit address mode */
13090 1.1 christos int havedisp;
13091 1.1 christos int havesib;
13092 1.1 christos int havebase;
13093 1.1 christos int haveindex;
13094 1.1 christos int needindex;
13095 1.1 christos int base, rbase;
13096 1.1 christos int vindex = 0;
13097 1.1 christos int scale = 0;
13098 1.1.1.2 christos const char **indexes64 = names64;
13099 1.1.1.2 christos const char **indexes32 = names32;
13100 1.1 christos
13101 1.1 christos havesib = 0;
13102 1.1 christos havebase = 1;
13103 1.1 christos haveindex = 0;
13104 1.1 christos base = modrm.rm;
13105 1.1 christos
13106 1.1 christos if (base == 4)
13107 1.1 christos {
13108 1.1 christos havesib = 1;
13109 1.1 christos vindex = sib.index;
13110 1.1 christos USED_REX (REX_X);
13111 1.1 christos if (rex & REX_X)
13112 1.1 christos vindex += 8;
13113 1.1.1.2 christos switch (bytemode)
13114 1.1.1.2 christos {
13115 1.1.1.2 christos case vex_vsib_d_w_dq_mode:
13116 1.1.1.2 christos case vex_vsib_q_w_dq_mode:
13117 1.1.1.2 christos if (!need_vex)
13118 1.1.1.2 christos abort ();
13119 1.1.1.2 christos
13120 1.1.1.2 christos haveindex = 1;
13121 1.1.1.2 christos switch (vex.length)
13122 1.1.1.2 christos {
13123 1.1.1.2 christos case 128:
13124 1.1.1.2 christos indexes64 = indexes32 = names_xmm;
13125 1.1.1.2 christos break;
13126 1.1.1.2 christos case 256:
13127 1.1.1.2 christos if (!vex.w || bytemode == vex_vsib_q_w_dq_mode)
13128 1.1.1.2 christos indexes64 = indexes32 = names_ymm;
13129 1.1.1.2 christos else
13130 1.1.1.2 christos indexes64 = indexes32 = names_xmm;
13131 1.1.1.2 christos break;
13132 1.1.1.2 christos default:
13133 1.1.1.2 christos abort ();
13134 1.1.1.2 christos }
13135 1.1.1.2 christos break;
13136 1.1.1.2 christos default:
13137 1.1.1.2 christos haveindex = vindex != 4;
13138 1.1.1.2 christos break;
13139 1.1.1.2 christos }
13140 1.1.1.2 christos scale = sib.scale;
13141 1.1.1.2 christos base = sib.base;
13142 1.1 christos codep++;
13143 1.1 christos }
13144 1.1 christos rbase = base + add;
13145 1.1 christos
13146 1.1 christos switch (modrm.mod)
13147 1.1 christos {
13148 1.1 christos case 0:
13149 1.1 christos if (base == 5)
13150 1.1 christos {
13151 1.1 christos havebase = 0;
13152 1.1 christos if (address_mode == mode_64bit && !havesib)
13153 1.1 christos riprel = 1;
13154 1.1 christos disp = get32s ();
13155 1.1 christos }
13156 1.1 christos break;
13157 1.1 christos case 1:
13158 1.1 christos FETCH_DATA (the_info, codep + 1);
13159 1.1 christos disp = *codep++;
13160 1.1 christos if ((disp & 0x80) != 0)
13161 1.1 christos disp -= 0x100;
13162 1.1 christos break;
13163 1.1 christos case 2:
13164 1.1 christos disp = get32s ();
13165 1.1 christos break;
13166 1.1 christos }
13167 1.1 christos
13168 1.1 christos /* In 32bit mode, we need index register to tell [offset] from
13169 1.1 christos [eiz*1 + offset]. */
13170 1.1 christos needindex = (havesib
13171 1.1 christos && !havebase
13172 1.1 christos && !haveindex
13173 1.1 christos && address_mode == mode_32bit);
13174 1.1 christos havedisp = (havebase
13175 1.1 christos || needindex
13176 1.1 christos || (havesib && (haveindex || scale != 0)));
13177 1.1 christos
13178 1.1 christos if (!intel_syntax)
13179 1.1 christos if (modrm.mod != 0 || base == 5)
13180 1.1 christos {
13181 1.1 christos if (havedisp || riprel)
13182 1.1 christos print_displacement (scratchbuf, disp);
13183 1.1 christos else
13184 1.1 christos print_operand_value (scratchbuf, 1, disp);
13185 1.1 christos oappend (scratchbuf);
13186 1.1 christos if (riprel)
13187 1.1 christos {
13188 1.1 christos set_op (disp, 1);
13189 1.1 christos oappend (sizeflag & AFLAG ? "(%rip)" : "(%eip)");
13190 1.1 christos }
13191 1.1 christos }
13192 1.1 christos
13193 1.1 christos if (havebase || haveindex || riprel)
13194 1.1 christos used_prefixes |= PREFIX_ADDR;
13195 1.1 christos
13196 1.1 christos if (havedisp || (intel_syntax && riprel))
13197 1.1 christos {
13198 1.1 christos *obufp++ = open_char;
13199 1.1 christos if (intel_syntax && riprel)
13200 1.1 christos {
13201 1.1 christos set_op (disp, 1);
13202 1.1 christos oappend (sizeflag & AFLAG ? "rip" : "eip");
13203 1.1 christos }
13204 1.1 christos *obufp = '\0';
13205 1.1 christos if (havebase)
13206 1.1 christos oappend (address_mode == mode_64bit && (sizeflag & AFLAG)
13207 1.1 christos ? names64[rbase] : names32[rbase]);
13208 1.1 christos if (havesib)
13209 1.1 christos {
13210 1.1 christos /* ESP/RSP won't allow index. If base isn't ESP/RSP,
13211 1.1 christos print index to tell base + index from base. */
13212 1.1 christos if (scale != 0
13213 1.1 christos || needindex
13214 1.1 christos || haveindex
13215 1.1 christos || (havebase && base != ESP_REG_NUM))
13216 1.1 christos {
13217 1.1 christos if (!intel_syntax || havebase)
13218 1.1 christos {
13219 1.1 christos *obufp++ = separator_char;
13220 1.1 christos *obufp = '\0';
13221 1.1 christos }
13222 1.1 christos if (haveindex)
13223 1.1.1.2 christos oappend (address_mode == mode_64bit
13224 1.1 christos && (sizeflag & AFLAG)
13225 1.1.1.2 christos ? indexes64[vindex] : indexes32[vindex]);
13226 1.1 christos else
13227 1.1.1.2 christos oappend (address_mode == mode_64bit
13228 1.1 christos && (sizeflag & AFLAG)
13229 1.1 christos ? index64 : index32);
13230 1.1 christos
13231 1.1 christos *obufp++ = scale_char;
13232 1.1 christos *obufp = '\0';
13233 1.1 christos sprintf (scratchbuf, "%d", 1 << scale);
13234 1.1 christos oappend (scratchbuf);
13235 1.1 christos }
13236 1.1 christos }
13237 1.1 christos if (intel_syntax
13238 1.1 christos && (disp || modrm.mod != 0 || base == 5))
13239 1.1 christos {
13240 1.1 christos if (!havedisp || (bfd_signed_vma) disp >= 0)
13241 1.1 christos {
13242 1.1 christos *obufp++ = '+';
13243 1.1 christos *obufp = '\0';
13244 1.1 christos }
13245 1.1 christos else if (modrm.mod != 1 && disp != -disp)
13246 1.1 christos {
13247 1.1 christos *obufp++ = '-';
13248 1.1 christos *obufp = '\0';
13249 1.1 christos disp = - (bfd_signed_vma) disp;
13250 1.1 christos }
13251 1.1 christos
13252 1.1 christos if (havedisp)
13253 1.1 christos print_displacement (scratchbuf, disp);
13254 1.1 christos else
13255 1.1 christos print_operand_value (scratchbuf, 1, disp);
13256 1.1 christos oappend (scratchbuf);
13257 1.1 christos }
13258 1.1 christos
13259 1.1 christos *obufp++ = close_char;
13260 1.1 christos *obufp = '\0';
13261 1.1 christos }
13262 1.1 christos else if (intel_syntax)
13263 1.1 christos {
13264 1.1 christos if (modrm.mod != 0 || base == 5)
13265 1.1 christos {
13266 1.1 christos if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13267 1.1 christos | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13268 1.1 christos ;
13269 1.1 christos else
13270 1.1 christos {
13271 1.1 christos oappend (names_seg[ds_reg - es_reg]);
13272 1.1 christos oappend (":");
13273 1.1 christos }
13274 1.1 christos print_operand_value (scratchbuf, 1, disp);
13275 1.1 christos oappend (scratchbuf);
13276 1.1 christos }
13277 1.1 christos }
13278 1.1 christos }
13279 1.1 christos else
13280 1.1 christos {
13281 1.1 christos /* 16 bit address mode */
13282 1.1 christos used_prefixes |= prefixes & PREFIX_ADDR;
13283 1.1 christos switch (modrm.mod)
13284 1.1 christos {
13285 1.1 christos case 0:
13286 1.1 christos if (modrm.rm == 6)
13287 1.1 christos {
13288 1.1 christos disp = get16 ();
13289 1.1 christos if ((disp & 0x8000) != 0)
13290 1.1 christos disp -= 0x10000;
13291 1.1 christos }
13292 1.1 christos break;
13293 1.1 christos case 1:
13294 1.1 christos FETCH_DATA (the_info, codep + 1);
13295 1.1 christos disp = *codep++;
13296 1.1 christos if ((disp & 0x80) != 0)
13297 1.1 christos disp -= 0x100;
13298 1.1 christos break;
13299 1.1 christos case 2:
13300 1.1 christos disp = get16 ();
13301 1.1 christos if ((disp & 0x8000) != 0)
13302 1.1 christos disp -= 0x10000;
13303 1.1 christos break;
13304 1.1 christos }
13305 1.1 christos
13306 1.1 christos if (!intel_syntax)
13307 1.1 christos if (modrm.mod != 0 || modrm.rm == 6)
13308 1.1 christos {
13309 1.1 christos print_displacement (scratchbuf, disp);
13310 1.1 christos oappend (scratchbuf);
13311 1.1 christos }
13312 1.1 christos
13313 1.1 christos if (modrm.mod != 0 || modrm.rm != 6)
13314 1.1 christos {
13315 1.1 christos *obufp++ = open_char;
13316 1.1 christos *obufp = '\0';
13317 1.1 christos oappend (index16[modrm.rm]);
13318 1.1 christos if (intel_syntax
13319 1.1 christos && (disp || modrm.mod != 0 || modrm.rm == 6))
13320 1.1 christos {
13321 1.1 christos if ((bfd_signed_vma) disp >= 0)
13322 1.1 christos {
13323 1.1 christos *obufp++ = '+';
13324 1.1 christos *obufp = '\0';
13325 1.1 christos }
13326 1.1 christos else if (modrm.mod != 1)
13327 1.1 christos {
13328 1.1 christos *obufp++ = '-';
13329 1.1 christos *obufp = '\0';
13330 1.1 christos disp = - (bfd_signed_vma) disp;
13331 1.1 christos }
13332 1.1 christos
13333 1.1 christos print_displacement (scratchbuf, disp);
13334 1.1 christos oappend (scratchbuf);
13335 1.1 christos }
13336 1.1 christos
13337 1.1 christos *obufp++ = close_char;
13338 1.1 christos *obufp = '\0';
13339 1.1 christos }
13340 1.1 christos else if (intel_syntax)
13341 1.1 christos {
13342 1.1 christos if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13343 1.1 christos | PREFIX_ES | PREFIX_FS | PREFIX_GS))
13344 1.1 christos ;
13345 1.1 christos else
13346 1.1 christos {
13347 1.1 christos oappend (names_seg[ds_reg - es_reg]);
13348 1.1 christos oappend (":");
13349 1.1 christos }
13350 1.1 christos print_operand_value (scratchbuf, 1, disp & 0xffff);
13351 1.1 christos oappend (scratchbuf);
13352 1.1 christos }
13353 1.1 christos }
13354 1.1 christos }
13355 1.1 christos
13356 1.1 christos static void
13357 1.1 christos OP_E (int bytemode, int sizeflag)
13358 1.1 christos {
13359 1.1 christos /* Skip mod/rm byte. */
13360 1.1 christos MODRM_CHECK;
13361 1.1 christos codep++;
13362 1.1 christos
13363 1.1 christos if (modrm.mod == 3)
13364 1.1 christos OP_E_register (bytemode, sizeflag);
13365 1.1 christos else
13366 1.1 christos OP_E_memory (bytemode, sizeflag);
13367 1.1 christos }
13368 1.1 christos
13369 1.1 christos static void
13370 1.1 christos OP_G (int bytemode, int sizeflag)
13371 1.1 christos {
13372 1.1 christos int add = 0;
13373 1.1 christos USED_REX (REX_R);
13374 1.1 christos if (rex & REX_R)
13375 1.1 christos add += 8;
13376 1.1 christos switch (bytemode)
13377 1.1 christos {
13378 1.1 christos case b_mode:
13379 1.1 christos USED_REX (0);
13380 1.1 christos if (rex)
13381 1.1 christos oappend (names8rex[modrm.reg + add]);
13382 1.1 christos else
13383 1.1 christos oappend (names8[modrm.reg + add]);
13384 1.1 christos break;
13385 1.1 christos case w_mode:
13386 1.1 christos oappend (names16[modrm.reg + add]);
13387 1.1 christos break;
13388 1.1 christos case d_mode:
13389 1.1 christos oappend (names32[modrm.reg + add]);
13390 1.1 christos break;
13391 1.1 christos case q_mode:
13392 1.1 christos oappend (names64[modrm.reg + add]);
13393 1.1 christos break;
13394 1.1 christos case v_mode:
13395 1.1 christos case dq_mode:
13396 1.1 christos case dqb_mode:
13397 1.1 christos case dqd_mode:
13398 1.1 christos case dqw_mode:
13399 1.1 christos USED_REX (REX_W);
13400 1.1 christos if (rex & REX_W)
13401 1.1 christos oappend (names64[modrm.reg + add]);
13402 1.1 christos else
13403 1.1 christos {
13404 1.1 christos if ((sizeflag & DFLAG) || bytemode != v_mode)
13405 1.1 christos oappend (names32[modrm.reg + add]);
13406 1.1 christos else
13407 1.1 christos oappend (names16[modrm.reg + add]);
13408 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13409 1.1 christos }
13410 1.1 christos break;
13411 1.1 christos case m_mode:
13412 1.1 christos if (address_mode == mode_64bit)
13413 1.1 christos oappend (names64[modrm.reg + add]);
13414 1.1 christos else
13415 1.1 christos oappend (names32[modrm.reg + add]);
13416 1.1 christos break;
13417 1.1 christos default:
13418 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
13419 1.1 christos break;
13420 1.1 christos }
13421 1.1 christos }
13422 1.1 christos
13423 1.1 christos static bfd_vma
13424 1.1 christos get64 (void)
13425 1.1 christos {
13426 1.1 christos bfd_vma x;
13427 1.1 christos #ifdef BFD64
13428 1.1 christos unsigned int a;
13429 1.1 christos unsigned int b;
13430 1.1 christos
13431 1.1 christos FETCH_DATA (the_info, codep + 8);
13432 1.1 christos a = *codep++ & 0xff;
13433 1.1 christos a |= (*codep++ & 0xff) << 8;
13434 1.1 christos a |= (*codep++ & 0xff) << 16;
13435 1.1 christos a |= (*codep++ & 0xff) << 24;
13436 1.1 christos b = *codep++ & 0xff;
13437 1.1 christos b |= (*codep++ & 0xff) << 8;
13438 1.1 christos b |= (*codep++ & 0xff) << 16;
13439 1.1 christos b |= (*codep++ & 0xff) << 24;
13440 1.1 christos x = a + ((bfd_vma) b << 32);
13441 1.1 christos #else
13442 1.1 christos abort ();
13443 1.1 christos x = 0;
13444 1.1 christos #endif
13445 1.1 christos return x;
13446 1.1 christos }
13447 1.1 christos
13448 1.1 christos static bfd_signed_vma
13449 1.1 christos get32 (void)
13450 1.1 christos {
13451 1.1 christos bfd_signed_vma x = 0;
13452 1.1 christos
13453 1.1 christos FETCH_DATA (the_info, codep + 4);
13454 1.1 christos x = *codep++ & (bfd_signed_vma) 0xff;
13455 1.1 christos x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13456 1.1 christos x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13457 1.1 christos x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13458 1.1 christos return x;
13459 1.1 christos }
13460 1.1 christos
13461 1.1 christos static bfd_signed_vma
13462 1.1 christos get32s (void)
13463 1.1 christos {
13464 1.1 christos bfd_signed_vma x = 0;
13465 1.1 christos
13466 1.1 christos FETCH_DATA (the_info, codep + 4);
13467 1.1 christos x = *codep++ & (bfd_signed_vma) 0xff;
13468 1.1 christos x |= (*codep++ & (bfd_signed_vma) 0xff) << 8;
13469 1.1 christos x |= (*codep++ & (bfd_signed_vma) 0xff) << 16;
13470 1.1 christos x |= (*codep++ & (bfd_signed_vma) 0xff) << 24;
13471 1.1 christos
13472 1.1 christos x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31);
13473 1.1 christos
13474 1.1 christos return x;
13475 1.1 christos }
13476 1.1 christos
13477 1.1 christos static int
13478 1.1 christos get16 (void)
13479 1.1 christos {
13480 1.1 christos int x = 0;
13481 1.1 christos
13482 1.1 christos FETCH_DATA (the_info, codep + 2);
13483 1.1 christos x = *codep++ & 0xff;
13484 1.1 christos x |= (*codep++ & 0xff) << 8;
13485 1.1 christos return x;
13486 1.1 christos }
13487 1.1 christos
13488 1.1 christos static void
13489 1.1 christos set_op (bfd_vma op, int riprel)
13490 1.1 christos {
13491 1.1 christos op_index[op_ad] = op_ad;
13492 1.1 christos if (address_mode == mode_64bit)
13493 1.1 christos {
13494 1.1 christos op_address[op_ad] = op;
13495 1.1 christos op_riprel[op_ad] = riprel;
13496 1.1 christos }
13497 1.1 christos else
13498 1.1 christos {
13499 1.1 christos /* Mask to get a 32-bit address. */
13500 1.1 christos op_address[op_ad] = op & 0xffffffff;
13501 1.1 christos op_riprel[op_ad] = riprel & 0xffffffff;
13502 1.1 christos }
13503 1.1 christos }
13504 1.1 christos
13505 1.1 christos static void
13506 1.1 christos OP_REG (int code, int sizeflag)
13507 1.1 christos {
13508 1.1 christos const char *s;
13509 1.1 christos int add;
13510 1.1.1.2 christos
13511 1.1.1.2 christos switch (code)
13512 1.1.1.2 christos {
13513 1.1.1.2 christos case es_reg: case ss_reg: case cs_reg:
13514 1.1.1.2 christos case ds_reg: case fs_reg: case gs_reg:
13515 1.1.1.2 christos oappend (names_seg[code - es_reg]);
13516 1.1.1.2 christos return;
13517 1.1.1.2 christos }
13518 1.1.1.2 christos
13519 1.1 christos USED_REX (REX_B);
13520 1.1 christos if (rex & REX_B)
13521 1.1 christos add = 8;
13522 1.1 christos else
13523 1.1 christos add = 0;
13524 1.1 christos
13525 1.1 christos switch (code)
13526 1.1 christos {
13527 1.1 christos case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13528 1.1 christos case sp_reg: case bp_reg: case si_reg: case di_reg:
13529 1.1 christos s = names16[code - ax_reg + add];
13530 1.1 christos break;
13531 1.1 christos case al_reg: case ah_reg: case cl_reg: case ch_reg:
13532 1.1 christos case dl_reg: case dh_reg: case bl_reg: case bh_reg:
13533 1.1 christos USED_REX (0);
13534 1.1 christos if (rex)
13535 1.1 christos s = names8rex[code - al_reg + add];
13536 1.1 christos else
13537 1.1 christos s = names8[code - al_reg];
13538 1.1 christos break;
13539 1.1 christos case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg:
13540 1.1 christos case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg:
13541 1.1.1.2 christos if (address_mode == mode_64bit
13542 1.1.1.2 christos && ((sizeflag & DFLAG) || (rex & REX_W)))
13543 1.1 christos {
13544 1.1 christos s = names64[code - rAX_reg + add];
13545 1.1 christos break;
13546 1.1 christos }
13547 1.1 christos code += eAX_reg - rAX_reg;
13548 1.1 christos /* Fall through. */
13549 1.1 christos case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13550 1.1 christos case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
13551 1.1 christos USED_REX (REX_W);
13552 1.1 christos if (rex & REX_W)
13553 1.1 christos s = names64[code - eAX_reg + add];
13554 1.1 christos else
13555 1.1 christos {
13556 1.1 christos if (sizeflag & DFLAG)
13557 1.1 christos s = names32[code - eAX_reg + add];
13558 1.1 christos else
13559 1.1 christos s = names16[code - eAX_reg + add];
13560 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13561 1.1 christos }
13562 1.1 christos break;
13563 1.1 christos default:
13564 1.1 christos s = INTERNAL_DISASSEMBLER_ERROR;
13565 1.1 christos break;
13566 1.1 christos }
13567 1.1 christos oappend (s);
13568 1.1 christos }
13569 1.1 christos
13570 1.1 christos static void
13571 1.1 christos OP_IMREG (int code, int sizeflag)
13572 1.1 christos {
13573 1.1 christos const char *s;
13574 1.1 christos
13575 1.1 christos switch (code)
13576 1.1 christos {
13577 1.1 christos case indir_dx_reg:
13578 1.1 christos if (intel_syntax)
13579 1.1 christos s = "dx";
13580 1.1 christos else
13581 1.1 christos s = "(%dx)";
13582 1.1 christos break;
13583 1.1 christos case ax_reg: case cx_reg: case dx_reg: case bx_reg:
13584 1.1 christos case sp_reg: case bp_reg: case si_reg: case di_reg:
13585 1.1 christos s = names16[code - ax_reg];
13586 1.1 christos break;
13587 1.1 christos case es_reg: case ss_reg: case cs_reg:
13588 1.1 christos case ds_reg: case fs_reg: case gs_reg:
13589 1.1 christos s = names_seg[code - es_reg];
13590 1.1 christos break;
13591 1.1 christos case al_reg: case ah_reg: case cl_reg: case ch_reg:
13592 1.1 christos case dl_reg: case dh_reg: case bl_reg: case bh_reg:
13593 1.1 christos USED_REX (0);
13594 1.1 christos if (rex)
13595 1.1 christos s = names8rex[code - al_reg];
13596 1.1 christos else
13597 1.1 christos s = names8[code - al_reg];
13598 1.1 christos break;
13599 1.1 christos case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg:
13600 1.1 christos case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg:
13601 1.1 christos USED_REX (REX_W);
13602 1.1 christos if (rex & REX_W)
13603 1.1 christos s = names64[code - eAX_reg];
13604 1.1 christos else
13605 1.1 christos {
13606 1.1 christos if (sizeflag & DFLAG)
13607 1.1 christos s = names32[code - eAX_reg];
13608 1.1 christos else
13609 1.1 christos s = names16[code - eAX_reg];
13610 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13611 1.1 christos }
13612 1.1 christos break;
13613 1.1 christos case z_mode_ax_reg:
13614 1.1 christos if ((rex & REX_W) || (sizeflag & DFLAG))
13615 1.1 christos s = *names32;
13616 1.1 christos else
13617 1.1 christos s = *names16;
13618 1.1 christos if (!(rex & REX_W))
13619 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13620 1.1 christos break;
13621 1.1 christos default:
13622 1.1 christos s = INTERNAL_DISASSEMBLER_ERROR;
13623 1.1 christos break;
13624 1.1 christos }
13625 1.1 christos oappend (s);
13626 1.1 christos }
13627 1.1 christos
13628 1.1 christos static void
13629 1.1 christos OP_I (int bytemode, int sizeflag)
13630 1.1 christos {
13631 1.1 christos bfd_signed_vma op;
13632 1.1 christos bfd_signed_vma mask = -1;
13633 1.1 christos
13634 1.1 christos switch (bytemode)
13635 1.1 christos {
13636 1.1 christos case b_mode:
13637 1.1 christos FETCH_DATA (the_info, codep + 1);
13638 1.1 christos op = *codep++;
13639 1.1 christos mask = 0xff;
13640 1.1 christos break;
13641 1.1 christos case q_mode:
13642 1.1 christos if (address_mode == mode_64bit)
13643 1.1 christos {
13644 1.1 christos op = get32s ();
13645 1.1 christos break;
13646 1.1 christos }
13647 1.1 christos /* Fall through. */
13648 1.1 christos case v_mode:
13649 1.1 christos USED_REX (REX_W);
13650 1.1 christos if (rex & REX_W)
13651 1.1 christos op = get32s ();
13652 1.1 christos else
13653 1.1 christos {
13654 1.1 christos if (sizeflag & DFLAG)
13655 1.1 christos {
13656 1.1 christos op = get32 ();
13657 1.1 christos mask = 0xffffffff;
13658 1.1 christos }
13659 1.1 christos else
13660 1.1 christos {
13661 1.1 christos op = get16 ();
13662 1.1 christos mask = 0xfffff;
13663 1.1 christos }
13664 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13665 1.1 christos }
13666 1.1 christos break;
13667 1.1 christos case w_mode:
13668 1.1 christos mask = 0xfffff;
13669 1.1 christos op = get16 ();
13670 1.1 christos break;
13671 1.1 christos case const_1_mode:
13672 1.1 christos if (intel_syntax)
13673 1.1.1.2 christos oappend ("1");
13674 1.1 christos return;
13675 1.1 christos default:
13676 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
13677 1.1 christos return;
13678 1.1 christos }
13679 1.1 christos
13680 1.1 christos op &= mask;
13681 1.1 christos scratchbuf[0] = '$';
13682 1.1 christos print_operand_value (scratchbuf + 1, 1, op);
13683 1.1 christos oappend (scratchbuf + intel_syntax);
13684 1.1 christos scratchbuf[0] = '\0';
13685 1.1 christos }
13686 1.1 christos
13687 1.1 christos static void
13688 1.1 christos OP_I64 (int bytemode, int sizeflag)
13689 1.1 christos {
13690 1.1 christos bfd_signed_vma op;
13691 1.1 christos bfd_signed_vma mask = -1;
13692 1.1 christos
13693 1.1 christos if (address_mode != mode_64bit)
13694 1.1 christos {
13695 1.1 christos OP_I (bytemode, sizeflag);
13696 1.1 christos return;
13697 1.1 christos }
13698 1.1 christos
13699 1.1 christos switch (bytemode)
13700 1.1 christos {
13701 1.1 christos case b_mode:
13702 1.1 christos FETCH_DATA (the_info, codep + 1);
13703 1.1 christos op = *codep++;
13704 1.1 christos mask = 0xff;
13705 1.1 christos break;
13706 1.1 christos case v_mode:
13707 1.1 christos USED_REX (REX_W);
13708 1.1 christos if (rex & REX_W)
13709 1.1 christos op = get64 ();
13710 1.1 christos else
13711 1.1 christos {
13712 1.1 christos if (sizeflag & DFLAG)
13713 1.1 christos {
13714 1.1 christos op = get32 ();
13715 1.1 christos mask = 0xffffffff;
13716 1.1 christos }
13717 1.1 christos else
13718 1.1 christos {
13719 1.1 christos op = get16 ();
13720 1.1 christos mask = 0xfffff;
13721 1.1 christos }
13722 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13723 1.1 christos }
13724 1.1 christos break;
13725 1.1 christos case w_mode:
13726 1.1 christos mask = 0xfffff;
13727 1.1 christos op = get16 ();
13728 1.1 christos break;
13729 1.1 christos default:
13730 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
13731 1.1 christos return;
13732 1.1 christos }
13733 1.1 christos
13734 1.1 christos op &= mask;
13735 1.1 christos scratchbuf[0] = '$';
13736 1.1 christos print_operand_value (scratchbuf + 1, 1, op);
13737 1.1 christos oappend (scratchbuf + intel_syntax);
13738 1.1 christos scratchbuf[0] = '\0';
13739 1.1 christos }
13740 1.1 christos
13741 1.1 christos static void
13742 1.1 christos OP_sI (int bytemode, int sizeflag)
13743 1.1 christos {
13744 1.1 christos bfd_signed_vma op;
13745 1.1 christos
13746 1.1 christos switch (bytemode)
13747 1.1 christos {
13748 1.1 christos case b_mode:
13749 1.1 christos case b_T_mode:
13750 1.1 christos FETCH_DATA (the_info, codep + 1);
13751 1.1 christos op = *codep++;
13752 1.1 christos if ((op & 0x80) != 0)
13753 1.1 christos op -= 0x100;
13754 1.1 christos if (bytemode == b_T_mode)
13755 1.1 christos {
13756 1.1 christos if (address_mode != mode_64bit
13757 1.1.1.2 christos || !((sizeflag & DFLAG) || (rex & REX_W)))
13758 1.1 christos {
13759 1.1.1.2 christos /* The operand-size prefix is overridden by a REX prefix. */
13760 1.1.1.2 christos if ((sizeflag & DFLAG) || (rex & REX_W))
13761 1.1 christos op &= 0xffffffff;
13762 1.1 christos else
13763 1.1 christos op &= 0xffff;
13764 1.1 christos }
13765 1.1 christos }
13766 1.1 christos else
13767 1.1 christos {
13768 1.1 christos if (!(rex & REX_W))
13769 1.1 christos {
13770 1.1 christos if (sizeflag & DFLAG)
13771 1.1 christos op &= 0xffffffff;
13772 1.1 christos else
13773 1.1 christos op &= 0xffff;
13774 1.1 christos }
13775 1.1 christos }
13776 1.1 christos break;
13777 1.1 christos case v_mode:
13778 1.1.1.2 christos /* The operand-size prefix is overridden by a REX prefix. */
13779 1.1.1.2 christos if ((sizeflag & DFLAG) || (rex & REX_W))
13780 1.1 christos op = get32s ();
13781 1.1 christos else
13782 1.1 christos op = get16 ();
13783 1.1 christos break;
13784 1.1 christos default:
13785 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
13786 1.1 christos return;
13787 1.1 christos }
13788 1.1 christos
13789 1.1 christos scratchbuf[0] = '$';
13790 1.1 christos print_operand_value (scratchbuf + 1, 1, op);
13791 1.1 christos oappend (scratchbuf + intel_syntax);
13792 1.1 christos }
13793 1.1 christos
13794 1.1 christos static void
13795 1.1 christos OP_J (int bytemode, int sizeflag)
13796 1.1 christos {
13797 1.1 christos bfd_vma disp;
13798 1.1 christos bfd_vma mask = -1;
13799 1.1 christos bfd_vma segment = 0;
13800 1.1 christos
13801 1.1 christos switch (bytemode)
13802 1.1 christos {
13803 1.1 christos case b_mode:
13804 1.1 christos FETCH_DATA (the_info, codep + 1);
13805 1.1 christos disp = *codep++;
13806 1.1 christos if ((disp & 0x80) != 0)
13807 1.1 christos disp -= 0x100;
13808 1.1 christos break;
13809 1.1 christos case v_mode:
13810 1.1 christos USED_REX (REX_W);
13811 1.1 christos if ((sizeflag & DFLAG) || (rex & REX_W))
13812 1.1 christos disp = get32s ();
13813 1.1 christos else
13814 1.1 christos {
13815 1.1 christos disp = get16 ();
13816 1.1 christos if ((disp & 0x8000) != 0)
13817 1.1 christos disp -= 0x10000;
13818 1.1 christos /* In 16bit mode, address is wrapped around at 64k within
13819 1.1 christos the same segment. Otherwise, a data16 prefix on a jump
13820 1.1 christos instruction means that the pc is masked to 16 bits after
13821 1.1 christos the displacement is added! */
13822 1.1 christos mask = 0xffff;
13823 1.1 christos if ((prefixes & PREFIX_DATA) == 0)
13824 1.1 christos segment = ((start_pc + codep - start_codep)
13825 1.1 christos & ~((bfd_vma) 0xffff));
13826 1.1 christos }
13827 1.1 christos if (!(rex & REX_W))
13828 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13829 1.1 christos break;
13830 1.1 christos default:
13831 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
13832 1.1 christos return;
13833 1.1 christos }
13834 1.1 christos disp = ((start_pc + (codep - start_codep) + disp) & mask) | segment;
13835 1.1 christos set_op (disp, 0);
13836 1.1 christos print_operand_value (scratchbuf, 1, disp);
13837 1.1 christos oappend (scratchbuf);
13838 1.1 christos }
13839 1.1 christos
13840 1.1 christos static void
13841 1.1 christos OP_SEG (int bytemode, int sizeflag)
13842 1.1 christos {
13843 1.1 christos if (bytemode == w_mode)
13844 1.1 christos oappend (names_seg[modrm.reg]);
13845 1.1 christos else
13846 1.1 christos OP_E (modrm.mod == 3 ? bytemode : w_mode, sizeflag);
13847 1.1 christos }
13848 1.1 christos
13849 1.1 christos static void
13850 1.1 christos OP_DIR (int dummy ATTRIBUTE_UNUSED, int sizeflag)
13851 1.1 christos {
13852 1.1 christos int seg, offset;
13853 1.1 christos
13854 1.1 christos if (sizeflag & DFLAG)
13855 1.1 christos {
13856 1.1 christos offset = get32 ();
13857 1.1 christos seg = get16 ();
13858 1.1 christos }
13859 1.1 christos else
13860 1.1 christos {
13861 1.1 christos offset = get16 ();
13862 1.1 christos seg = get16 ();
13863 1.1 christos }
13864 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
13865 1.1 christos if (intel_syntax)
13866 1.1 christos sprintf (scratchbuf, "0x%x:0x%x", seg, offset);
13867 1.1 christos else
13868 1.1 christos sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset);
13869 1.1 christos oappend (scratchbuf);
13870 1.1 christos }
13871 1.1 christos
13872 1.1 christos static void
13873 1.1 christos OP_OFF (int bytemode, int sizeflag)
13874 1.1 christos {
13875 1.1 christos bfd_vma off;
13876 1.1 christos
13877 1.1 christos if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13878 1.1 christos intel_operand_size (bytemode, sizeflag);
13879 1.1 christos append_seg ();
13880 1.1 christos
13881 1.1 christos if ((sizeflag & AFLAG) || address_mode == mode_64bit)
13882 1.1 christos off = get32 ();
13883 1.1 christos else
13884 1.1 christos off = get16 ();
13885 1.1 christos
13886 1.1 christos if (intel_syntax)
13887 1.1 christos {
13888 1.1 christos if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13889 1.1 christos | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
13890 1.1 christos {
13891 1.1 christos oappend (names_seg[ds_reg - es_reg]);
13892 1.1 christos oappend (":");
13893 1.1 christos }
13894 1.1 christos }
13895 1.1 christos print_operand_value (scratchbuf, 1, off);
13896 1.1 christos oappend (scratchbuf);
13897 1.1 christos }
13898 1.1 christos
13899 1.1 christos static void
13900 1.1 christos OP_OFF64 (int bytemode, int sizeflag)
13901 1.1 christos {
13902 1.1 christos bfd_vma off;
13903 1.1 christos
13904 1.1 christos if (address_mode != mode_64bit
13905 1.1 christos || (prefixes & PREFIX_ADDR))
13906 1.1 christos {
13907 1.1 christos OP_OFF (bytemode, sizeflag);
13908 1.1 christos return;
13909 1.1 christos }
13910 1.1 christos
13911 1.1 christos if (intel_syntax && (sizeflag & SUFFIX_ALWAYS))
13912 1.1 christos intel_operand_size (bytemode, sizeflag);
13913 1.1 christos append_seg ();
13914 1.1 christos
13915 1.1 christos off = get64 ();
13916 1.1 christos
13917 1.1 christos if (intel_syntax)
13918 1.1 christos {
13919 1.1 christos if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS
13920 1.1 christos | PREFIX_ES | PREFIX_FS | PREFIX_GS)))
13921 1.1 christos {
13922 1.1 christos oappend (names_seg[ds_reg - es_reg]);
13923 1.1 christos oappend (":");
13924 1.1 christos }
13925 1.1 christos }
13926 1.1 christos print_operand_value (scratchbuf, 1, off);
13927 1.1 christos oappend (scratchbuf);
13928 1.1 christos }
13929 1.1 christos
13930 1.1 christos static void
13931 1.1 christos ptr_reg (int code, int sizeflag)
13932 1.1 christos {
13933 1.1 christos const char *s;
13934 1.1 christos
13935 1.1 christos *obufp++ = open_char;
13936 1.1 christos used_prefixes |= (prefixes & PREFIX_ADDR);
13937 1.1 christos if (address_mode == mode_64bit)
13938 1.1 christos {
13939 1.1 christos if (!(sizeflag & AFLAG))
13940 1.1 christos s = names32[code - eAX_reg];
13941 1.1 christos else
13942 1.1 christos s = names64[code - eAX_reg];
13943 1.1 christos }
13944 1.1 christos else if (sizeflag & AFLAG)
13945 1.1 christos s = names32[code - eAX_reg];
13946 1.1 christos else
13947 1.1 christos s = names16[code - eAX_reg];
13948 1.1 christos oappend (s);
13949 1.1 christos *obufp++ = close_char;
13950 1.1 christos *obufp = 0;
13951 1.1 christos }
13952 1.1 christos
13953 1.1 christos static void
13954 1.1 christos OP_ESreg (int code, int sizeflag)
13955 1.1 christos {
13956 1.1 christos if (intel_syntax)
13957 1.1 christos {
13958 1.1 christos switch (codep[-1])
13959 1.1 christos {
13960 1.1 christos case 0x6d: /* insw/insl */
13961 1.1 christos intel_operand_size (z_mode, sizeflag);
13962 1.1 christos break;
13963 1.1 christos case 0xa5: /* movsw/movsl/movsq */
13964 1.1 christos case 0xa7: /* cmpsw/cmpsl/cmpsq */
13965 1.1 christos case 0xab: /* stosw/stosl */
13966 1.1 christos case 0xaf: /* scasw/scasl */
13967 1.1 christos intel_operand_size (v_mode, sizeflag);
13968 1.1 christos break;
13969 1.1 christos default:
13970 1.1 christos intel_operand_size (b_mode, sizeflag);
13971 1.1 christos }
13972 1.1 christos }
13973 1.1 christos oappend ("%es:" + intel_syntax);
13974 1.1 christos ptr_reg (code, sizeflag);
13975 1.1 christos }
13976 1.1 christos
13977 1.1 christos static void
13978 1.1 christos OP_DSreg (int code, int sizeflag)
13979 1.1 christos {
13980 1.1 christos if (intel_syntax)
13981 1.1 christos {
13982 1.1 christos switch (codep[-1])
13983 1.1 christos {
13984 1.1 christos case 0x6f: /* outsw/outsl */
13985 1.1 christos intel_operand_size (z_mode, sizeflag);
13986 1.1 christos break;
13987 1.1 christos case 0xa5: /* movsw/movsl/movsq */
13988 1.1 christos case 0xa7: /* cmpsw/cmpsl/cmpsq */
13989 1.1 christos case 0xad: /* lodsw/lodsl/lodsq */
13990 1.1 christos intel_operand_size (v_mode, sizeflag);
13991 1.1 christos break;
13992 1.1 christos default:
13993 1.1 christos intel_operand_size (b_mode, sizeflag);
13994 1.1 christos }
13995 1.1 christos }
13996 1.1 christos if ((prefixes
13997 1.1 christos & (PREFIX_CS
13998 1.1 christos | PREFIX_DS
13999 1.1 christos | PREFIX_SS
14000 1.1 christos | PREFIX_ES
14001 1.1 christos | PREFIX_FS
14002 1.1 christos | PREFIX_GS)) == 0)
14003 1.1 christos prefixes |= PREFIX_DS;
14004 1.1 christos append_seg ();
14005 1.1 christos ptr_reg (code, sizeflag);
14006 1.1 christos }
14007 1.1 christos
14008 1.1 christos static void
14009 1.1 christos OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14010 1.1 christos {
14011 1.1 christos int add;
14012 1.1 christos if (rex & REX_R)
14013 1.1 christos {
14014 1.1 christos USED_REX (REX_R);
14015 1.1 christos add = 8;
14016 1.1 christos }
14017 1.1 christos else if (address_mode != mode_64bit && (prefixes & PREFIX_LOCK))
14018 1.1 christos {
14019 1.1 christos all_prefixes[last_lock_prefix] = 0;
14020 1.1 christos used_prefixes |= PREFIX_LOCK;
14021 1.1 christos add = 8;
14022 1.1 christos }
14023 1.1 christos else
14024 1.1 christos add = 0;
14025 1.1 christos sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
14026 1.1 christos oappend (scratchbuf + intel_syntax);
14027 1.1 christos }
14028 1.1 christos
14029 1.1 christos static void
14030 1.1 christos OP_D (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14031 1.1 christos {
14032 1.1 christos int add;
14033 1.1 christos USED_REX (REX_R);
14034 1.1 christos if (rex & REX_R)
14035 1.1 christos add = 8;
14036 1.1 christos else
14037 1.1 christos add = 0;
14038 1.1 christos if (intel_syntax)
14039 1.1 christos sprintf (scratchbuf, "db%d", modrm.reg + add);
14040 1.1 christos else
14041 1.1 christos sprintf (scratchbuf, "%%db%d", modrm.reg + add);
14042 1.1 christos oappend (scratchbuf);
14043 1.1 christos }
14044 1.1 christos
14045 1.1 christos static void
14046 1.1 christos OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14047 1.1 christos {
14048 1.1 christos sprintf (scratchbuf, "%%tr%d", modrm.reg);
14049 1.1 christos oappend (scratchbuf + intel_syntax);
14050 1.1 christos }
14051 1.1 christos
14052 1.1 christos static void
14053 1.1 christos OP_R (int bytemode, int sizeflag)
14054 1.1 christos {
14055 1.1 christos if (modrm.mod == 3)
14056 1.1 christos OP_E (bytemode, sizeflag);
14057 1.1 christos else
14058 1.1 christos BadOp ();
14059 1.1 christos }
14060 1.1 christos
14061 1.1 christos static void
14062 1.1 christos OP_MMX (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14063 1.1 christos {
14064 1.1 christos int reg = modrm.reg;
14065 1.1 christos const char **names;
14066 1.1 christos
14067 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14068 1.1 christos if (prefixes & PREFIX_DATA)
14069 1.1 christos {
14070 1.1 christos names = names_xmm;
14071 1.1 christos USED_REX (REX_R);
14072 1.1 christos if (rex & REX_R)
14073 1.1 christos reg += 8;
14074 1.1 christos }
14075 1.1 christos else
14076 1.1 christos names = names_mm;
14077 1.1 christos oappend (names[reg]);
14078 1.1 christos }
14079 1.1 christos
14080 1.1 christos static void
14081 1.1 christos OP_XMM (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14082 1.1 christos {
14083 1.1 christos int reg = modrm.reg;
14084 1.1 christos const char **names;
14085 1.1 christos
14086 1.1 christos USED_REX (REX_R);
14087 1.1 christos if (rex & REX_R)
14088 1.1 christos reg += 8;
14089 1.1 christos if (need_vex
14090 1.1 christos && bytemode != xmm_mode
14091 1.1 christos && bytemode != scalar_mode)
14092 1.1 christos {
14093 1.1 christos switch (vex.length)
14094 1.1 christos {
14095 1.1 christos case 128:
14096 1.1 christos names = names_xmm;
14097 1.1 christos break;
14098 1.1 christos case 256:
14099 1.1.1.2 christos if (vex.w || bytemode != vex_vsib_q_w_dq_mode)
14100 1.1.1.2 christos names = names_ymm;
14101 1.1.1.2 christos else
14102 1.1.1.2 christos names = names_xmm;
14103 1.1 christos break;
14104 1.1 christos default:
14105 1.1 christos abort ();
14106 1.1 christos }
14107 1.1 christos }
14108 1.1 christos else
14109 1.1 christos names = names_xmm;
14110 1.1 christos oappend (names[reg]);
14111 1.1 christos }
14112 1.1 christos
14113 1.1 christos static void
14114 1.1 christos OP_EM (int bytemode, int sizeflag)
14115 1.1 christos {
14116 1.1 christos int reg;
14117 1.1 christos const char **names;
14118 1.1 christos
14119 1.1 christos if (modrm.mod != 3)
14120 1.1 christos {
14121 1.1 christos if (intel_syntax
14122 1.1 christos && (bytemode == v_mode || bytemode == v_swap_mode))
14123 1.1 christos {
14124 1.1 christos bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14125 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14126 1.1.1.2 christos }
14127 1.1 christos OP_E (bytemode, sizeflag);
14128 1.1 christos return;
14129 1.1 christos }
14130 1.1 christos
14131 1.1 christos if ((sizeflag & SUFFIX_ALWAYS) && bytemode == v_swap_mode)
14132 1.1 christos swap_operand ();
14133 1.1 christos
14134 1.1 christos /* Skip mod/rm byte. */
14135 1.1 christos MODRM_CHECK;
14136 1.1 christos codep++;
14137 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14138 1.1 christos reg = modrm.rm;
14139 1.1 christos if (prefixes & PREFIX_DATA)
14140 1.1 christos {
14141 1.1 christos names = names_xmm;
14142 1.1 christos USED_REX (REX_B);
14143 1.1 christos if (rex & REX_B)
14144 1.1 christos reg += 8;
14145 1.1 christos }
14146 1.1 christos else
14147 1.1 christos names = names_mm;
14148 1.1 christos oappend (names[reg]);
14149 1.1 christos }
14150 1.1 christos
14151 1.1 christos /* cvt* are the only instructions in sse2 which have
14152 1.1 christos both SSE and MMX operands and also have 0x66 prefix
14153 1.1 christos in their opcode. 0x66 was originally used to differentiate
14154 1.1 christos between SSE and MMX instruction(operands). So we have to handle the
14155 1.1 christos cvt* separately using OP_EMC and OP_MXC */
14156 1.1 christos static void
14157 1.1 christos OP_EMC (int bytemode, int sizeflag)
14158 1.1 christos {
14159 1.1 christos if (modrm.mod != 3)
14160 1.1 christos {
14161 1.1 christos if (intel_syntax && bytemode == v_mode)
14162 1.1 christos {
14163 1.1 christos bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14164 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14165 1.1.1.2 christos }
14166 1.1 christos OP_E (bytemode, sizeflag);
14167 1.1 christos return;
14168 1.1 christos }
14169 1.1 christos
14170 1.1 christos /* Skip mod/rm byte. */
14171 1.1 christos MODRM_CHECK;
14172 1.1 christos codep++;
14173 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14174 1.1 christos oappend (names_mm[modrm.rm]);
14175 1.1 christos }
14176 1.1 christos
14177 1.1 christos static void
14178 1.1 christos OP_MXC (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14179 1.1 christos {
14180 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14181 1.1 christos oappend (names_mm[modrm.reg]);
14182 1.1 christos }
14183 1.1 christos
14184 1.1 christos static void
14185 1.1 christos OP_EX (int bytemode, int sizeflag)
14186 1.1 christos {
14187 1.1 christos int reg;
14188 1.1 christos const char **names;
14189 1.1 christos
14190 1.1 christos /* Skip mod/rm byte. */
14191 1.1 christos MODRM_CHECK;
14192 1.1 christos codep++;
14193 1.1 christos
14194 1.1 christos if (modrm.mod != 3)
14195 1.1 christos {
14196 1.1 christos OP_E_memory (bytemode, sizeflag);
14197 1.1 christos return;
14198 1.1 christos }
14199 1.1 christos
14200 1.1 christos reg = modrm.rm;
14201 1.1 christos USED_REX (REX_B);
14202 1.1 christos if (rex & REX_B)
14203 1.1 christos reg += 8;
14204 1.1 christos
14205 1.1 christos if ((sizeflag & SUFFIX_ALWAYS)
14206 1.1 christos && (bytemode == x_swap_mode
14207 1.1 christos || bytemode == d_swap_mode
14208 1.1.1.2 christos || bytemode == d_scalar_swap_mode
14209 1.1 christos || bytemode == q_swap_mode
14210 1.1 christos || bytemode == q_scalar_swap_mode))
14211 1.1 christos swap_operand ();
14212 1.1 christos
14213 1.1 christos if (need_vex
14214 1.1 christos && bytemode != xmm_mode
14215 1.1.1.2 christos && bytemode != xmmdw_mode
14216 1.1.1.2 christos && bytemode != xmmqd_mode
14217 1.1.1.2 christos && bytemode != xmm_mb_mode
14218 1.1.1.2 christos && bytemode != xmm_mw_mode
14219 1.1.1.2 christos && bytemode != xmm_md_mode
14220 1.1.1.2 christos && bytemode != xmm_mq_mode
14221 1.1 christos && bytemode != xmmq_mode
14222 1.1 christos && bytemode != d_scalar_mode
14223 1.1.1.2 christos && bytemode != d_scalar_swap_mode
14224 1.1 christos && bytemode != q_scalar_mode
14225 1.1 christos && bytemode != q_scalar_swap_mode
14226 1.1 christos && bytemode != vex_scalar_w_dq_mode)
14227 1.1 christos {
14228 1.1 christos switch (vex.length)
14229 1.1 christos {
14230 1.1 christos case 128:
14231 1.1 christos names = names_xmm;
14232 1.1 christos break;
14233 1.1 christos case 256:
14234 1.1 christos names = names_ymm;
14235 1.1 christos break;
14236 1.1 christos default:
14237 1.1 christos abort ();
14238 1.1 christos }
14239 1.1 christos }
14240 1.1 christos else
14241 1.1 christos names = names_xmm;
14242 1.1 christos oappend (names[reg]);
14243 1.1 christos }
14244 1.1 christos
14245 1.1 christos static void
14246 1.1 christos OP_MS (int bytemode, int sizeflag)
14247 1.1 christos {
14248 1.1 christos if (modrm.mod == 3)
14249 1.1 christos OP_EM (bytemode, sizeflag);
14250 1.1 christos else
14251 1.1 christos BadOp ();
14252 1.1 christos }
14253 1.1 christos
14254 1.1 christos static void
14255 1.1 christos OP_XS (int bytemode, int sizeflag)
14256 1.1 christos {
14257 1.1 christos if (modrm.mod == 3)
14258 1.1 christos OP_EX (bytemode, sizeflag);
14259 1.1 christos else
14260 1.1 christos BadOp ();
14261 1.1 christos }
14262 1.1 christos
14263 1.1 christos static void
14264 1.1 christos OP_M (int bytemode, int sizeflag)
14265 1.1 christos {
14266 1.1 christos if (modrm.mod == 3)
14267 1.1 christos /* bad bound,lea,lds,les,lfs,lgs,lss,cmpxchg8b,vmptrst modrm */
14268 1.1 christos BadOp ();
14269 1.1 christos else
14270 1.1 christos OP_E (bytemode, sizeflag);
14271 1.1 christos }
14272 1.1 christos
14273 1.1 christos static void
14274 1.1 christos OP_0f07 (int bytemode, int sizeflag)
14275 1.1 christos {
14276 1.1 christos if (modrm.mod != 3 || modrm.rm != 0)
14277 1.1 christos BadOp ();
14278 1.1 christos else
14279 1.1 christos OP_E (bytemode, sizeflag);
14280 1.1 christos }
14281 1.1 christos
14282 1.1 christos /* NOP is an alias of "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in
14283 1.1 christos 32bit mode and "xchg %rax,%rax" in 64bit mode. */
14284 1.1 christos
14285 1.1 christos static void
14286 1.1 christos NOP_Fixup1 (int bytemode, int sizeflag)
14287 1.1 christos {
14288 1.1 christos if ((prefixes & PREFIX_DATA) != 0
14289 1.1 christos || (rex != 0
14290 1.1 christos && rex != 0x48
14291 1.1 christos && address_mode == mode_64bit))
14292 1.1 christos OP_REG (bytemode, sizeflag);
14293 1.1 christos else
14294 1.1 christos strcpy (obuf, "nop");
14295 1.1 christos }
14296 1.1 christos
14297 1.1 christos static void
14298 1.1 christos NOP_Fixup2 (int bytemode, int sizeflag)
14299 1.1 christos {
14300 1.1 christos if ((prefixes & PREFIX_DATA) != 0
14301 1.1 christos || (rex != 0
14302 1.1 christos && rex != 0x48
14303 1.1 christos && address_mode == mode_64bit))
14304 1.1 christos OP_IMREG (bytemode, sizeflag);
14305 1.1 christos }
14306 1.1 christos
14307 1.1 christos static const char *const Suffix3DNow[] = {
14308 1.1 christos /* 00 */ NULL, NULL, NULL, NULL,
14309 1.1 christos /* 04 */ NULL, NULL, NULL, NULL,
14310 1.1 christos /* 08 */ NULL, NULL, NULL, NULL,
14311 1.1 christos /* 0C */ "pi2fw", "pi2fd", NULL, NULL,
14312 1.1 christos /* 10 */ NULL, NULL, NULL, NULL,
14313 1.1 christos /* 14 */ NULL, NULL, NULL, NULL,
14314 1.1 christos /* 18 */ NULL, NULL, NULL, NULL,
14315 1.1 christos /* 1C */ "pf2iw", "pf2id", NULL, NULL,
14316 1.1 christos /* 20 */ NULL, NULL, NULL, NULL,
14317 1.1 christos /* 24 */ NULL, NULL, NULL, NULL,
14318 1.1 christos /* 28 */ NULL, NULL, NULL, NULL,
14319 1.1 christos /* 2C */ NULL, NULL, NULL, NULL,
14320 1.1 christos /* 30 */ NULL, NULL, NULL, NULL,
14321 1.1 christos /* 34 */ NULL, NULL, NULL, NULL,
14322 1.1 christos /* 38 */ NULL, NULL, NULL, NULL,
14323 1.1 christos /* 3C */ NULL, NULL, NULL, NULL,
14324 1.1 christos /* 40 */ NULL, NULL, NULL, NULL,
14325 1.1 christos /* 44 */ NULL, NULL, NULL, NULL,
14326 1.1 christos /* 48 */ NULL, NULL, NULL, NULL,
14327 1.1 christos /* 4C */ NULL, NULL, NULL, NULL,
14328 1.1 christos /* 50 */ NULL, NULL, NULL, NULL,
14329 1.1 christos /* 54 */ NULL, NULL, NULL, NULL,
14330 1.1 christos /* 58 */ NULL, NULL, NULL, NULL,
14331 1.1 christos /* 5C */ NULL, NULL, NULL, NULL,
14332 1.1 christos /* 60 */ NULL, NULL, NULL, NULL,
14333 1.1 christos /* 64 */ NULL, NULL, NULL, NULL,
14334 1.1 christos /* 68 */ NULL, NULL, NULL, NULL,
14335 1.1 christos /* 6C */ NULL, NULL, NULL, NULL,
14336 1.1 christos /* 70 */ NULL, NULL, NULL, NULL,
14337 1.1 christos /* 74 */ NULL, NULL, NULL, NULL,
14338 1.1 christos /* 78 */ NULL, NULL, NULL, NULL,
14339 1.1 christos /* 7C */ NULL, NULL, NULL, NULL,
14340 1.1 christos /* 80 */ NULL, NULL, NULL, NULL,
14341 1.1 christos /* 84 */ NULL, NULL, NULL, NULL,
14342 1.1 christos /* 88 */ NULL, NULL, "pfnacc", NULL,
14343 1.1 christos /* 8C */ NULL, NULL, "pfpnacc", NULL,
14344 1.1 christos /* 90 */ "pfcmpge", NULL, NULL, NULL,
14345 1.1 christos /* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt",
14346 1.1 christos /* 98 */ NULL, NULL, "pfsub", NULL,
14347 1.1 christos /* 9C */ NULL, NULL, "pfadd", NULL,
14348 1.1 christos /* A0 */ "pfcmpgt", NULL, NULL, NULL,
14349 1.1 christos /* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1",
14350 1.1 christos /* A8 */ NULL, NULL, "pfsubr", NULL,
14351 1.1 christos /* AC */ NULL, NULL, "pfacc", NULL,
14352 1.1 christos /* B0 */ "pfcmpeq", NULL, NULL, NULL,
14353 1.1 christos /* B4 */ "pfmul", NULL, "pfrcpit2", "pmulhrw",
14354 1.1 christos /* B8 */ NULL, NULL, NULL, "pswapd",
14355 1.1 christos /* BC */ NULL, NULL, NULL, "pavgusb",
14356 1.1 christos /* C0 */ NULL, NULL, NULL, NULL,
14357 1.1 christos /* C4 */ NULL, NULL, NULL, NULL,
14358 1.1 christos /* C8 */ NULL, NULL, NULL, NULL,
14359 1.1 christos /* CC */ NULL, NULL, NULL, NULL,
14360 1.1 christos /* D0 */ NULL, NULL, NULL, NULL,
14361 1.1 christos /* D4 */ NULL, NULL, NULL, NULL,
14362 1.1 christos /* D8 */ NULL, NULL, NULL, NULL,
14363 1.1 christos /* DC */ NULL, NULL, NULL, NULL,
14364 1.1 christos /* E0 */ NULL, NULL, NULL, NULL,
14365 1.1 christos /* E4 */ NULL, NULL, NULL, NULL,
14366 1.1 christos /* E8 */ NULL, NULL, NULL, NULL,
14367 1.1 christos /* EC */ NULL, NULL, NULL, NULL,
14368 1.1 christos /* F0 */ NULL, NULL, NULL, NULL,
14369 1.1 christos /* F4 */ NULL, NULL, NULL, NULL,
14370 1.1 christos /* F8 */ NULL, NULL, NULL, NULL,
14371 1.1 christos /* FC */ NULL, NULL, NULL, NULL,
14372 1.1 christos };
14373 1.1 christos
14374 1.1 christos static void
14375 1.1 christos OP_3DNowSuffix (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14376 1.1 christos {
14377 1.1 christos const char *mnemonic;
14378 1.1 christos
14379 1.1 christos FETCH_DATA (the_info, codep + 1);
14380 1.1 christos /* AMD 3DNow! instructions are specified by an opcode suffix in the
14381 1.1 christos place where an 8-bit immediate would normally go. ie. the last
14382 1.1 christos byte of the instruction. */
14383 1.1 christos obufp = mnemonicendp;
14384 1.1 christos mnemonic = Suffix3DNow[*codep++ & 0xff];
14385 1.1 christos if (mnemonic)
14386 1.1 christos oappend (mnemonic);
14387 1.1 christos else
14388 1.1 christos {
14389 1.1 christos /* Since a variable sized modrm/sib chunk is between the start
14390 1.1 christos of the opcode (0x0f0f) and the opcode suffix, we need to do
14391 1.1 christos all the modrm processing first, and don't know until now that
14392 1.1 christos we have a bad opcode. This necessitates some cleaning up. */
14393 1.1 christos op_out[0][0] = '\0';
14394 1.1 christos op_out[1][0] = '\0';
14395 1.1 christos BadOp ();
14396 1.1 christos }
14397 1.1 christos mnemonicendp = obufp;
14398 1.1 christos }
14399 1.1 christos
14400 1.1 christos static struct op simd_cmp_op[] =
14401 1.1 christos {
14402 1.1 christos { STRING_COMMA_LEN ("eq") },
14403 1.1 christos { STRING_COMMA_LEN ("lt") },
14404 1.1 christos { STRING_COMMA_LEN ("le") },
14405 1.1 christos { STRING_COMMA_LEN ("unord") },
14406 1.1 christos { STRING_COMMA_LEN ("neq") },
14407 1.1 christos { STRING_COMMA_LEN ("nlt") },
14408 1.1 christos { STRING_COMMA_LEN ("nle") },
14409 1.1 christos { STRING_COMMA_LEN ("ord") }
14410 1.1 christos };
14411 1.1 christos
14412 1.1 christos static void
14413 1.1 christos CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
14414 1.1 christos {
14415 1.1 christos unsigned int cmp_type;
14416 1.1 christos
14417 1.1 christos FETCH_DATA (the_info, codep + 1);
14418 1.1 christos cmp_type = *codep++ & 0xff;
14419 1.1 christos if (cmp_type < ARRAY_SIZE (simd_cmp_op))
14420 1.1 christos {
14421 1.1 christos char suffix [3];
14422 1.1 christos char *p = mnemonicendp - 2;
14423 1.1 christos suffix[0] = p[0];
14424 1.1 christos suffix[1] = p[1];
14425 1.1 christos suffix[2] = '\0';
14426 1.1 christos sprintf (p, "%s%s", simd_cmp_op[cmp_type].name, suffix);
14427 1.1 christos mnemonicendp += simd_cmp_op[cmp_type].len;
14428 1.1 christos }
14429 1.1 christos else
14430 1.1 christos {
14431 1.1 christos /* We have a reserved extension byte. Output it directly. */
14432 1.1 christos scratchbuf[0] = '$';
14433 1.1 christos print_operand_value (scratchbuf + 1, 1, cmp_type);
14434 1.1 christos oappend (scratchbuf + intel_syntax);
14435 1.1 christos scratchbuf[0] = '\0';
14436 1.1 christos }
14437 1.1 christos }
14438 1.1 christos
14439 1.1 christos static void
14440 1.1 christos OP_Mwait (int bytemode ATTRIBUTE_UNUSED,
14441 1.1 christos int sizeflag ATTRIBUTE_UNUSED)
14442 1.1 christos {
14443 1.1 christos /* mwait %eax,%ecx */
14444 1.1 christos if (!intel_syntax)
14445 1.1 christos {
14446 1.1 christos const char **names = (address_mode == mode_64bit
14447 1.1 christos ? names64 : names32);
14448 1.1 christos strcpy (op_out[0], names[0]);
14449 1.1 christos strcpy (op_out[1], names[1]);
14450 1.1 christos two_source_ops = 1;
14451 1.1 christos }
14452 1.1 christos /* Skip mod/rm byte. */
14453 1.1 christos MODRM_CHECK;
14454 1.1 christos codep++;
14455 1.1 christos }
14456 1.1 christos
14457 1.1 christos static void
14458 1.1 christos OP_Monitor (int bytemode ATTRIBUTE_UNUSED,
14459 1.1 christos int sizeflag ATTRIBUTE_UNUSED)
14460 1.1 christos {
14461 1.1 christos /* monitor %eax,%ecx,%edx" */
14462 1.1 christos if (!intel_syntax)
14463 1.1 christos {
14464 1.1 christos const char **op1_names;
14465 1.1 christos const char **names = (address_mode == mode_64bit
14466 1.1 christos ? names64 : names32);
14467 1.1 christos
14468 1.1 christos if (!(prefixes & PREFIX_ADDR))
14469 1.1 christos op1_names = (address_mode == mode_16bit
14470 1.1 christos ? names16 : names);
14471 1.1 christos else
14472 1.1 christos {
14473 1.1 christos /* Remove "addr16/addr32". */
14474 1.1 christos all_prefixes[last_addr_prefix] = 0;
14475 1.1 christos op1_names = (address_mode != mode_32bit
14476 1.1 christos ? names32 : names16);
14477 1.1 christos used_prefixes |= PREFIX_ADDR;
14478 1.1 christos }
14479 1.1 christos strcpy (op_out[0], op1_names[0]);
14480 1.1 christos strcpy (op_out[1], names[1]);
14481 1.1 christos strcpy (op_out[2], names[2]);
14482 1.1 christos two_source_ops = 1;
14483 1.1 christos }
14484 1.1 christos /* Skip mod/rm byte. */
14485 1.1 christos MODRM_CHECK;
14486 1.1 christos codep++;
14487 1.1 christos }
14488 1.1 christos
14489 1.1 christos static void
14490 1.1 christos BadOp (void)
14491 1.1 christos {
14492 1.1 christos /* Throw away prefixes and 1st. opcode byte. */
14493 1.1 christos codep = insn_codep + 1;
14494 1.1 christos oappend ("(bad)");
14495 1.1 christos }
14496 1.1 christos
14497 1.1 christos static void
14498 1.1 christos REP_Fixup (int bytemode, int sizeflag)
14499 1.1 christos {
14500 1.1 christos /* The 0xf3 prefix should be displayed as "rep" for ins, outs, movs,
14501 1.1 christos lods and stos. */
14502 1.1 christos if (prefixes & PREFIX_REPZ)
14503 1.1 christos all_prefixes[last_repz_prefix] = REP_PREFIX;
14504 1.1 christos
14505 1.1 christos switch (bytemode)
14506 1.1 christos {
14507 1.1 christos case al_reg:
14508 1.1 christos case eAX_reg:
14509 1.1 christos case indir_dx_reg:
14510 1.1 christos OP_IMREG (bytemode, sizeflag);
14511 1.1 christos break;
14512 1.1 christos case eDI_reg:
14513 1.1 christos OP_ESreg (bytemode, sizeflag);
14514 1.1 christos break;
14515 1.1 christos case eSI_reg:
14516 1.1 christos OP_DSreg (bytemode, sizeflag);
14517 1.1 christos break;
14518 1.1 christos default:
14519 1.1 christos abort ();
14520 1.1 christos break;
14521 1.1 christos }
14522 1.1 christos }
14523 1.1 christos
14524 1.1.1.2 christos /* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
14525 1.1.1.2 christos "xacquire"/"xrelease" for memory operand if there is a LOCK prefix.
14526 1.1.1.2 christos */
14527 1.1.1.2 christos
14528 1.1.1.2 christos static void
14529 1.1.1.2 christos HLE_Fixup1 (int bytemode, int sizeflag)
14530 1.1.1.2 christos {
14531 1.1.1.2 christos if (modrm.mod != 3
14532 1.1.1.2 christos && (prefixes & PREFIX_LOCK) != 0)
14533 1.1.1.2 christos {
14534 1.1.1.2 christos if (prefixes & PREFIX_REPZ)
14535 1.1.1.2 christos all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14536 1.1.1.2 christos if (prefixes & PREFIX_REPNZ)
14537 1.1.1.2 christos all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
14538 1.1.1.2 christos }
14539 1.1.1.2 christos
14540 1.1.1.2 christos OP_E (bytemode, sizeflag);
14541 1.1.1.2 christos }
14542 1.1.1.2 christos
14543 1.1.1.2 christos /* Similar to OP_E. But the 0xf2/0xf3 prefixes should be displayed as
14544 1.1.1.2 christos "xacquire"/"xrelease" for memory operand. No check for LOCK prefix.
14545 1.1.1.2 christos */
14546 1.1.1.2 christos
14547 1.1.1.2 christos static void
14548 1.1.1.2 christos HLE_Fixup2 (int bytemode, int sizeflag)
14549 1.1.1.2 christos {
14550 1.1.1.2 christos if (modrm.mod != 3)
14551 1.1.1.2 christos {
14552 1.1.1.2 christos if (prefixes & PREFIX_REPZ)
14553 1.1.1.2 christos all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14554 1.1.1.2 christos if (prefixes & PREFIX_REPNZ)
14555 1.1.1.2 christos all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
14556 1.1.1.2 christos }
14557 1.1.1.2 christos
14558 1.1.1.2 christos OP_E (bytemode, sizeflag);
14559 1.1.1.2 christos }
14560 1.1.1.2 christos
14561 1.1.1.2 christos /* Similar to OP_E. But the 0xf3 prefixes should be displayed as
14562 1.1.1.2 christos "xrelease" for memory operand. No check for LOCK prefix. */
14563 1.1.1.2 christos
14564 1.1.1.2 christos static void
14565 1.1.1.2 christos HLE_Fixup3 (int bytemode, int sizeflag)
14566 1.1.1.2 christos {
14567 1.1.1.2 christos if (modrm.mod != 3
14568 1.1.1.2 christos && last_repz_prefix > last_repnz_prefix
14569 1.1.1.2 christos && (prefixes & PREFIX_REPZ) != 0)
14570 1.1.1.2 christos all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14571 1.1.1.2 christos
14572 1.1.1.2 christos OP_E (bytemode, sizeflag);
14573 1.1.1.2 christos }
14574 1.1.1.2 christos
14575 1.1 christos static void
14576 1.1 christos CMPXCHG8B_Fixup (int bytemode, int sizeflag)
14577 1.1 christos {
14578 1.1 christos USED_REX (REX_W);
14579 1.1 christos if (rex & REX_W)
14580 1.1 christos {
14581 1.1 christos /* Change cmpxchg8b to cmpxchg16b. */
14582 1.1 christos char *p = mnemonicendp - 2;
14583 1.1 christos mnemonicendp = stpcpy (p, "16b");
14584 1.1 christos bytemode = o_mode;
14585 1.1 christos }
14586 1.1.1.2 christos else if ((prefixes & PREFIX_LOCK) != 0)
14587 1.1.1.2 christos {
14588 1.1.1.2 christos if (prefixes & PREFIX_REPZ)
14589 1.1.1.2 christos all_prefixes[last_repz_prefix] = XRELEASE_PREFIX;
14590 1.1.1.2 christos if (prefixes & PREFIX_REPNZ)
14591 1.1.1.2 christos all_prefixes[last_repnz_prefix] = XACQUIRE_PREFIX;
14592 1.1.1.2 christos }
14593 1.1.1.2 christos
14594 1.1 christos OP_M (bytemode, sizeflag);
14595 1.1 christos }
14596 1.1 christos
14597 1.1 christos static void
14598 1.1 christos XMM_Fixup (int reg, int sizeflag ATTRIBUTE_UNUSED)
14599 1.1 christos {
14600 1.1 christos const char **names;
14601 1.1 christos
14602 1.1 christos if (need_vex)
14603 1.1 christos {
14604 1.1 christos switch (vex.length)
14605 1.1 christos {
14606 1.1 christos case 128:
14607 1.1 christos names = names_xmm;
14608 1.1 christos break;
14609 1.1 christos case 256:
14610 1.1 christos names = names_ymm;
14611 1.1 christos break;
14612 1.1 christos default:
14613 1.1 christos abort ();
14614 1.1 christos }
14615 1.1 christos }
14616 1.1 christos else
14617 1.1 christos names = names_xmm;
14618 1.1 christos oappend (names[reg]);
14619 1.1 christos }
14620 1.1 christos
14621 1.1 christos static void
14622 1.1 christos CRC32_Fixup (int bytemode, int sizeflag)
14623 1.1 christos {
14624 1.1 christos /* Add proper suffix to "crc32". */
14625 1.1 christos char *p = mnemonicendp;
14626 1.1 christos
14627 1.1 christos switch (bytemode)
14628 1.1 christos {
14629 1.1 christos case b_mode:
14630 1.1 christos if (intel_syntax)
14631 1.1 christos goto skip;
14632 1.1 christos
14633 1.1 christos *p++ = 'b';
14634 1.1 christos break;
14635 1.1 christos case v_mode:
14636 1.1 christos if (intel_syntax)
14637 1.1 christos goto skip;
14638 1.1 christos
14639 1.1 christos USED_REX (REX_W);
14640 1.1 christos if (rex & REX_W)
14641 1.1 christos *p++ = 'q';
14642 1.1.1.2 christos else
14643 1.1 christos {
14644 1.1 christos if (sizeflag & DFLAG)
14645 1.1 christos *p++ = 'l';
14646 1.1 christos else
14647 1.1 christos *p++ = 'w';
14648 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14649 1.1 christos }
14650 1.1 christos break;
14651 1.1 christos default:
14652 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
14653 1.1 christos break;
14654 1.1 christos }
14655 1.1 christos mnemonicendp = p;
14656 1.1 christos *p = '\0';
14657 1.1 christos
14658 1.1 christos skip:
14659 1.1 christos if (modrm.mod == 3)
14660 1.1 christos {
14661 1.1 christos int add;
14662 1.1 christos
14663 1.1 christos /* Skip mod/rm byte. */
14664 1.1 christos MODRM_CHECK;
14665 1.1 christos codep++;
14666 1.1 christos
14667 1.1 christos USED_REX (REX_B);
14668 1.1 christos add = (rex & REX_B) ? 8 : 0;
14669 1.1 christos if (bytemode == b_mode)
14670 1.1 christos {
14671 1.1 christos USED_REX (0);
14672 1.1 christos if (rex)
14673 1.1 christos oappend (names8rex[modrm.rm + add]);
14674 1.1 christos else
14675 1.1 christos oappend (names8[modrm.rm + add]);
14676 1.1 christos }
14677 1.1 christos else
14678 1.1 christos {
14679 1.1 christos USED_REX (REX_W);
14680 1.1 christos if (rex & REX_W)
14681 1.1 christos oappend (names64[modrm.rm + add]);
14682 1.1 christos else if ((prefixes & PREFIX_DATA))
14683 1.1 christos oappend (names16[modrm.rm + add]);
14684 1.1 christos else
14685 1.1 christos oappend (names32[modrm.rm + add]);
14686 1.1 christos }
14687 1.1 christos }
14688 1.1 christos else
14689 1.1 christos OP_E (bytemode, sizeflag);
14690 1.1 christos }
14691 1.1 christos
14692 1.1 christos static void
14693 1.1 christos FXSAVE_Fixup (int bytemode, int sizeflag)
14694 1.1 christos {
14695 1.1 christos /* Add proper suffix to "fxsave" and "fxrstor". */
14696 1.1 christos USED_REX (REX_W);
14697 1.1 christos if (rex & REX_W)
14698 1.1 christos {
14699 1.1 christos char *p = mnemonicendp;
14700 1.1 christos *p++ = '6';
14701 1.1 christos *p++ = '4';
14702 1.1 christos *p = '\0';
14703 1.1 christos mnemonicendp = p;
14704 1.1 christos }
14705 1.1 christos OP_M (bytemode, sizeflag);
14706 1.1 christos }
14707 1.1 christos
14708 1.1 christos /* Display the destination register operand for instructions with
14709 1.1 christos VEX. */
14710 1.1 christos
14711 1.1 christos static void
14712 1.1 christos OP_VEX (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
14713 1.1 christos {
14714 1.1 christos int reg;
14715 1.1 christos const char **names;
14716 1.1 christos
14717 1.1 christos if (!need_vex)
14718 1.1 christos abort ();
14719 1.1 christos
14720 1.1 christos if (!need_vex_reg)
14721 1.1 christos return;
14722 1.1 christos
14723 1.1 christos reg = vex.register_specifier;
14724 1.1 christos if (bytemode == vex_scalar_mode)
14725 1.1 christos {
14726 1.1 christos oappend (names_xmm[reg]);
14727 1.1 christos return;
14728 1.1 christos }
14729 1.1 christos
14730 1.1 christos switch (vex.length)
14731 1.1 christos {
14732 1.1 christos case 128:
14733 1.1 christos switch (bytemode)
14734 1.1 christos {
14735 1.1 christos case vex_mode:
14736 1.1 christos case vex128_mode:
14737 1.1.1.2 christos case vex_vsib_q_w_dq_mode:
14738 1.1 christos names = names_xmm;
14739 1.1 christos break;
14740 1.1 christos case dq_mode:
14741 1.1 christos if (vex.w)
14742 1.1 christos names = names64;
14743 1.1 christos else
14744 1.1 christos names = names32;
14745 1.1 christos break;
14746 1.1 christos default:
14747 1.1 christos abort ();
14748 1.1 christos return;
14749 1.1 christos }
14750 1.1 christos break;
14751 1.1 christos case 256:
14752 1.1 christos switch (bytemode)
14753 1.1 christos {
14754 1.1 christos case vex_mode:
14755 1.1 christos case vex256_mode:
14756 1.1.1.2 christos names = names_ymm;
14757 1.1.1.2 christos break;
14758 1.1.1.2 christos case vex_vsib_q_w_dq_mode:
14759 1.1.1.2 christos names = vex.w ? names_ymm : names_xmm;
14760 1.1 christos break;
14761 1.1 christos default:
14762 1.1 christos abort ();
14763 1.1 christos return;
14764 1.1 christos }
14765 1.1 christos break;
14766 1.1 christos default:
14767 1.1 christos abort ();
14768 1.1 christos break;
14769 1.1 christos }
14770 1.1 christos oappend (names[reg]);
14771 1.1 christos }
14772 1.1 christos
14773 1.1 christos /* Get the VEX immediate byte without moving codep. */
14774 1.1 christos
14775 1.1 christos static unsigned char
14776 1.1 christos get_vex_imm8 (int sizeflag, int opnum)
14777 1.1 christos {
14778 1.1 christos int bytes_before_imm = 0;
14779 1.1 christos
14780 1.1 christos if (modrm.mod != 3)
14781 1.1 christos {
14782 1.1 christos /* There are SIB/displacement bytes. */
14783 1.1 christos if ((sizeflag & AFLAG) || address_mode == mode_64bit)
14784 1.1.1.2 christos {
14785 1.1 christos /* 32/64 bit address mode */
14786 1.1.1.2 christos int base = modrm.rm;
14787 1.1 christos
14788 1.1 christos /* Check SIB byte. */
14789 1.1.1.2 christos if (base == 4)
14790 1.1.1.2 christos {
14791 1.1.1.2 christos FETCH_DATA (the_info, codep + 1);
14792 1.1.1.2 christos base = *codep & 7;
14793 1.1.1.2 christos /* When decoding the third source, don't increase
14794 1.1.1.2 christos bytes_before_imm as this has already been incremented
14795 1.1.1.2 christos by one in OP_E_memory while decoding the second
14796 1.1.1.2 christos source operand. */
14797 1.1.1.2 christos if (opnum == 0)
14798 1.1.1.2 christos bytes_before_imm++;
14799 1.1.1.2 christos }
14800 1.1.1.2 christos
14801 1.1.1.2 christos /* Don't increase bytes_before_imm when decoding the third source,
14802 1.1.1.2 christos it has already been incremented by OP_E_memory while decoding
14803 1.1.1.2 christos the second source operand. */
14804 1.1.1.2 christos if (opnum == 0)
14805 1.1.1.2 christos {
14806 1.1.1.2 christos switch (modrm.mod)
14807 1.1.1.2 christos {
14808 1.1.1.2 christos case 0:
14809 1.1.1.2 christos /* When modrm.rm == 5 or modrm.rm == 4 and base in
14810 1.1.1.2 christos SIB == 5, there is a 4 byte displacement. */
14811 1.1.1.2 christos if (base != 5)
14812 1.1.1.2 christos /* No displacement. */
14813 1.1.1.2 christos break;
14814 1.1.1.2 christos case 2:
14815 1.1.1.2 christos /* 4 byte displacement. */
14816 1.1.1.2 christos bytes_before_imm += 4;
14817 1.1.1.2 christos break;
14818 1.1.1.2 christos case 1:
14819 1.1.1.2 christos /* 1 byte displacement. */
14820 1.1.1.2 christos bytes_before_imm++;
14821 1.1.1.2 christos break;
14822 1.1.1.2 christos }
14823 1.1.1.2 christos }
14824 1.1.1.2 christos }
14825 1.1 christos else
14826 1.1 christos {
14827 1.1 christos /* 16 bit address mode */
14828 1.1.1.2 christos /* Don't increase bytes_before_imm when decoding the third source,
14829 1.1.1.2 christos it has already been incremented by OP_E_memory while decoding
14830 1.1.1.2 christos the second source operand. */
14831 1.1.1.2 christos if (opnum == 0)
14832 1.1.1.2 christos {
14833 1.1 christos switch (modrm.mod)
14834 1.1 christos {
14835 1.1 christos case 0:
14836 1.1 christos /* When modrm.rm == 6, there is a 2 byte displacement. */
14837 1.1 christos if (modrm.rm != 6)
14838 1.1 christos /* No displacement. */
14839 1.1 christos break;
14840 1.1 christos case 2:
14841 1.1 christos /* 2 byte displacement. */
14842 1.1 christos bytes_before_imm += 2;
14843 1.1 christos break;
14844 1.1 christos case 1:
14845 1.1 christos /* 1 byte displacement: when decoding the third source,
14846 1.1 christos don't increase bytes_before_imm as this has already
14847 1.1 christos been incremented by one in OP_E_memory while decoding
14848 1.1 christos the second source operand. */
14849 1.1 christos if (opnum == 0)
14850 1.1 christos bytes_before_imm++;
14851 1.1 christos
14852 1.1 christos break;
14853 1.1 christos }
14854 1.1 christos }
14855 1.1 christos }
14856 1.1 christos }
14857 1.1 christos
14858 1.1 christos FETCH_DATA (the_info, codep + bytes_before_imm + 1);
14859 1.1 christos return codep [bytes_before_imm];
14860 1.1 christos }
14861 1.1 christos
14862 1.1 christos static void
14863 1.1 christos OP_EX_VexReg (int bytemode, int sizeflag, int reg)
14864 1.1 christos {
14865 1.1 christos const char **names;
14866 1.1 christos
14867 1.1 christos if (reg == -1 && modrm.mod != 3)
14868 1.1 christos {
14869 1.1 christos OP_E_memory (bytemode, sizeflag);
14870 1.1 christos return;
14871 1.1 christos }
14872 1.1 christos else
14873 1.1 christos {
14874 1.1 christos if (reg == -1)
14875 1.1 christos {
14876 1.1 christos reg = modrm.rm;
14877 1.1 christos USED_REX (REX_B);
14878 1.1 christos if (rex & REX_B)
14879 1.1 christos reg += 8;
14880 1.1 christos }
14881 1.1 christos else if (reg > 7 && address_mode != mode_64bit)
14882 1.1 christos BadOp ();
14883 1.1 christos }
14884 1.1 christos
14885 1.1 christos switch (vex.length)
14886 1.1 christos {
14887 1.1 christos case 128:
14888 1.1 christos names = names_xmm;
14889 1.1 christos break;
14890 1.1 christos case 256:
14891 1.1 christos names = names_ymm;
14892 1.1 christos break;
14893 1.1 christos default:
14894 1.1 christos abort ();
14895 1.1 christos }
14896 1.1 christos oappend (names[reg]);
14897 1.1 christos }
14898 1.1 christos
14899 1.1 christos static void
14900 1.1 christos OP_EX_VexImmW (int bytemode, int sizeflag)
14901 1.1 christos {
14902 1.1 christos int reg = -1;
14903 1.1 christos static unsigned char vex_imm8;
14904 1.1 christos
14905 1.1 christos if (vex_w_done == 0)
14906 1.1 christos {
14907 1.1 christos vex_w_done = 1;
14908 1.1 christos
14909 1.1 christos /* Skip mod/rm byte. */
14910 1.1 christos MODRM_CHECK;
14911 1.1 christos codep++;
14912 1.1 christos
14913 1.1 christos vex_imm8 = get_vex_imm8 (sizeflag, 0);
14914 1.1 christos
14915 1.1 christos if (vex.w)
14916 1.1 christos reg = vex_imm8 >> 4;
14917 1.1 christos
14918 1.1 christos OP_EX_VexReg (bytemode, sizeflag, reg);
14919 1.1 christos }
14920 1.1 christos else if (vex_w_done == 1)
14921 1.1 christos {
14922 1.1 christos vex_w_done = 2;
14923 1.1 christos
14924 1.1 christos if (!vex.w)
14925 1.1 christos reg = vex_imm8 >> 4;
14926 1.1 christos
14927 1.1 christos OP_EX_VexReg (bytemode, sizeflag, reg);
14928 1.1 christos }
14929 1.1 christos else
14930 1.1 christos {
14931 1.1 christos /* Output the imm8 directly. */
14932 1.1 christos scratchbuf[0] = '$';
14933 1.1 christos print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
14934 1.1 christos oappend (scratchbuf + intel_syntax);
14935 1.1 christos scratchbuf[0] = '\0';
14936 1.1 christos codep++;
14937 1.1 christos }
14938 1.1 christos }
14939 1.1 christos
14940 1.1 christos static void
14941 1.1 christos OP_Vex_2src (int bytemode, int sizeflag)
14942 1.1 christos {
14943 1.1 christos if (modrm.mod == 3)
14944 1.1 christos {
14945 1.1 christos int reg = modrm.rm;
14946 1.1 christos USED_REX (REX_B);
14947 1.1 christos if (rex & REX_B)
14948 1.1 christos reg += 8;
14949 1.1 christos oappend (names_xmm[reg]);
14950 1.1 christos }
14951 1.1 christos else
14952 1.1 christos {
14953 1.1 christos if (intel_syntax
14954 1.1 christos && (bytemode == v_mode || bytemode == v_swap_mode))
14955 1.1 christos {
14956 1.1 christos bytemode = (prefixes & PREFIX_DATA) ? x_mode : q_mode;
14957 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
14958 1.1 christos }
14959 1.1 christos OP_E (bytemode, sizeflag);
14960 1.1 christos }
14961 1.1 christos }
14962 1.1 christos
14963 1.1 christos static void
14964 1.1 christos OP_Vex_2src_1 (int bytemode, int sizeflag)
14965 1.1 christos {
14966 1.1 christos if (modrm.mod == 3)
14967 1.1 christos {
14968 1.1 christos /* Skip mod/rm byte. */
14969 1.1 christos MODRM_CHECK;
14970 1.1 christos codep++;
14971 1.1 christos }
14972 1.1 christos
14973 1.1 christos if (vex.w)
14974 1.1 christos oappend (names_xmm[vex.register_specifier]);
14975 1.1 christos else
14976 1.1 christos OP_Vex_2src (bytemode, sizeflag);
14977 1.1 christos }
14978 1.1 christos
14979 1.1 christos static void
14980 1.1 christos OP_Vex_2src_2 (int bytemode, int sizeflag)
14981 1.1 christos {
14982 1.1 christos if (vex.w)
14983 1.1 christos OP_Vex_2src (bytemode, sizeflag);
14984 1.1 christos else
14985 1.1 christos oappend (names_xmm[vex.register_specifier]);
14986 1.1 christos }
14987 1.1 christos
14988 1.1 christos static void
14989 1.1 christos OP_EX_VexW (int bytemode, int sizeflag)
14990 1.1 christos {
14991 1.1 christos int reg = -1;
14992 1.1 christos
14993 1.1 christos if (!vex_w_done)
14994 1.1 christos {
14995 1.1 christos vex_w_done = 1;
14996 1.1 christos
14997 1.1 christos /* Skip mod/rm byte. */
14998 1.1 christos MODRM_CHECK;
14999 1.1 christos codep++;
15000 1.1 christos
15001 1.1 christos if (vex.w)
15002 1.1 christos reg = get_vex_imm8 (sizeflag, 0) >> 4;
15003 1.1 christos }
15004 1.1 christos else
15005 1.1 christos {
15006 1.1 christos if (!vex.w)
15007 1.1 christos reg = get_vex_imm8 (sizeflag, 1) >> 4;
15008 1.1 christos }
15009 1.1 christos
15010 1.1 christos OP_EX_VexReg (bytemode, sizeflag, reg);
15011 1.1 christos }
15012 1.1 christos
15013 1.1 christos static void
15014 1.1 christos VEXI4_Fixup (int bytemode ATTRIBUTE_UNUSED,
15015 1.1 christos int sizeflag ATTRIBUTE_UNUSED)
15016 1.1 christos {
15017 1.1 christos /* Skip the immediate byte and check for invalid bits. */
15018 1.1 christos FETCH_DATA (the_info, codep + 1);
15019 1.1 christos if (*codep++ & 0xf)
15020 1.1 christos BadOp ();
15021 1.1 christos }
15022 1.1 christos
15023 1.1 christos static void
15024 1.1 christos OP_REG_VexI4 (int bytemode, int sizeflag ATTRIBUTE_UNUSED)
15025 1.1 christos {
15026 1.1 christos int reg;
15027 1.1 christos const char **names;
15028 1.1 christos
15029 1.1 christos FETCH_DATA (the_info, codep + 1);
15030 1.1 christos reg = *codep++;
15031 1.1 christos
15032 1.1 christos if (bytemode != x_mode)
15033 1.1 christos abort ();
15034 1.1 christos
15035 1.1 christos if (reg & 0xf)
15036 1.1 christos BadOp ();
15037 1.1 christos
15038 1.1 christos reg >>= 4;
15039 1.1 christos if (reg > 7 && address_mode != mode_64bit)
15040 1.1 christos BadOp ();
15041 1.1 christos
15042 1.1 christos switch (vex.length)
15043 1.1 christos {
15044 1.1 christos case 128:
15045 1.1 christos names = names_xmm;
15046 1.1 christos break;
15047 1.1 christos case 256:
15048 1.1 christos names = names_ymm;
15049 1.1 christos break;
15050 1.1 christos default:
15051 1.1 christos abort ();
15052 1.1 christos }
15053 1.1 christos oappend (names[reg]);
15054 1.1 christos }
15055 1.1 christos
15056 1.1 christos static void
15057 1.1 christos OP_XMM_VexW (int bytemode, int sizeflag)
15058 1.1 christos {
15059 1.1 christos /* Turn off the REX.W bit since it is used for swapping operands
15060 1.1 christos now. */
15061 1.1 christos rex &= ~REX_W;
15062 1.1 christos OP_XMM (bytemode, sizeflag);
15063 1.1 christos }
15064 1.1 christos
15065 1.1 christos static void
15066 1.1 christos OP_EX_Vex (int bytemode, int sizeflag)
15067 1.1 christos {
15068 1.1 christos if (modrm.mod != 3)
15069 1.1 christos {
15070 1.1 christos if (vex.register_specifier != 0)
15071 1.1 christos BadOp ();
15072 1.1 christos need_vex_reg = 0;
15073 1.1 christos }
15074 1.1 christos OP_EX (bytemode, sizeflag);
15075 1.1 christos }
15076 1.1 christos
15077 1.1 christos static void
15078 1.1 christos OP_XMM_Vex (int bytemode, int sizeflag)
15079 1.1 christos {
15080 1.1 christos if (modrm.mod != 3)
15081 1.1 christos {
15082 1.1 christos if (vex.register_specifier != 0)
15083 1.1 christos BadOp ();
15084 1.1 christos need_vex_reg = 0;
15085 1.1 christos }
15086 1.1 christos OP_XMM (bytemode, sizeflag);
15087 1.1 christos }
15088 1.1 christos
15089 1.1 christos static void
15090 1.1 christos VZERO_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15091 1.1 christos {
15092 1.1 christos switch (vex.length)
15093 1.1 christos {
15094 1.1 christos case 128:
15095 1.1 christos mnemonicendp = stpcpy (obuf, "vzeroupper");
15096 1.1 christos break;
15097 1.1 christos case 256:
15098 1.1 christos mnemonicendp = stpcpy (obuf, "vzeroall");
15099 1.1 christos break;
15100 1.1 christos default:
15101 1.1 christos abort ();
15102 1.1 christos }
15103 1.1 christos }
15104 1.1 christos
15105 1.1 christos static struct op vex_cmp_op[] =
15106 1.1 christos {
15107 1.1 christos { STRING_COMMA_LEN ("eq") },
15108 1.1 christos { STRING_COMMA_LEN ("lt") },
15109 1.1 christos { STRING_COMMA_LEN ("le") },
15110 1.1 christos { STRING_COMMA_LEN ("unord") },
15111 1.1 christos { STRING_COMMA_LEN ("neq") },
15112 1.1 christos { STRING_COMMA_LEN ("nlt") },
15113 1.1 christos { STRING_COMMA_LEN ("nle") },
15114 1.1 christos { STRING_COMMA_LEN ("ord") },
15115 1.1 christos { STRING_COMMA_LEN ("eq_uq") },
15116 1.1 christos { STRING_COMMA_LEN ("nge") },
15117 1.1 christos { STRING_COMMA_LEN ("ngt") },
15118 1.1 christos { STRING_COMMA_LEN ("false") },
15119 1.1 christos { STRING_COMMA_LEN ("neq_oq") },
15120 1.1 christos { STRING_COMMA_LEN ("ge") },
15121 1.1 christos { STRING_COMMA_LEN ("gt") },
15122 1.1 christos { STRING_COMMA_LEN ("true") },
15123 1.1 christos { STRING_COMMA_LEN ("eq_os") },
15124 1.1 christos { STRING_COMMA_LEN ("lt_oq") },
15125 1.1 christos { STRING_COMMA_LEN ("le_oq") },
15126 1.1 christos { STRING_COMMA_LEN ("unord_s") },
15127 1.1 christos { STRING_COMMA_LEN ("neq_us") },
15128 1.1 christos { STRING_COMMA_LEN ("nlt_uq") },
15129 1.1 christos { STRING_COMMA_LEN ("nle_uq") },
15130 1.1 christos { STRING_COMMA_LEN ("ord_s") },
15131 1.1 christos { STRING_COMMA_LEN ("eq_us") },
15132 1.1 christos { STRING_COMMA_LEN ("nge_uq") },
15133 1.1 christos { STRING_COMMA_LEN ("ngt_uq") },
15134 1.1 christos { STRING_COMMA_LEN ("false_os") },
15135 1.1 christos { STRING_COMMA_LEN ("neq_os") },
15136 1.1 christos { STRING_COMMA_LEN ("ge_oq") },
15137 1.1 christos { STRING_COMMA_LEN ("gt_oq") },
15138 1.1 christos { STRING_COMMA_LEN ("true_us") },
15139 1.1 christos };
15140 1.1 christos
15141 1.1 christos static void
15142 1.1 christos VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15143 1.1 christos {
15144 1.1 christos unsigned int cmp_type;
15145 1.1 christos
15146 1.1 christos FETCH_DATA (the_info, codep + 1);
15147 1.1 christos cmp_type = *codep++ & 0xff;
15148 1.1 christos if (cmp_type < ARRAY_SIZE (vex_cmp_op))
15149 1.1 christos {
15150 1.1 christos char suffix [3];
15151 1.1 christos char *p = mnemonicendp - 2;
15152 1.1 christos suffix[0] = p[0];
15153 1.1 christos suffix[1] = p[1];
15154 1.1 christos suffix[2] = '\0';
15155 1.1 christos sprintf (p, "%s%s", vex_cmp_op[cmp_type].name, suffix);
15156 1.1 christos mnemonicendp += vex_cmp_op[cmp_type].len;
15157 1.1 christos }
15158 1.1 christos else
15159 1.1 christos {
15160 1.1 christos /* We have a reserved extension byte. Output it directly. */
15161 1.1 christos scratchbuf[0] = '$';
15162 1.1 christos print_operand_value (scratchbuf + 1, 1, cmp_type);
15163 1.1 christos oappend (scratchbuf + intel_syntax);
15164 1.1 christos scratchbuf[0] = '\0';
15165 1.1 christos }
15166 1.1 christos }
15167 1.1 christos
15168 1.1 christos static const struct op pclmul_op[] =
15169 1.1 christos {
15170 1.1 christos { STRING_COMMA_LEN ("lql") },
15171 1.1 christos { STRING_COMMA_LEN ("hql") },
15172 1.1 christos { STRING_COMMA_LEN ("lqh") },
15173 1.1 christos { STRING_COMMA_LEN ("hqh") }
15174 1.1 christos };
15175 1.1 christos
15176 1.1 christos static void
15177 1.1 christos PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
15178 1.1 christos int sizeflag ATTRIBUTE_UNUSED)
15179 1.1 christos {
15180 1.1 christos unsigned int pclmul_type;
15181 1.1 christos
15182 1.1 christos FETCH_DATA (the_info, codep + 1);
15183 1.1 christos pclmul_type = *codep++ & 0xff;
15184 1.1 christos switch (pclmul_type)
15185 1.1 christos {
15186 1.1 christos case 0x10:
15187 1.1 christos pclmul_type = 2;
15188 1.1 christos break;
15189 1.1 christos case 0x11:
15190 1.1 christos pclmul_type = 3;
15191 1.1 christos break;
15192 1.1 christos default:
15193 1.1 christos break;
15194 1.1.1.2 christos }
15195 1.1 christos if (pclmul_type < ARRAY_SIZE (pclmul_op))
15196 1.1 christos {
15197 1.1 christos char suffix [4];
15198 1.1 christos char *p = mnemonicendp - 3;
15199 1.1 christos suffix[0] = p[0];
15200 1.1 christos suffix[1] = p[1];
15201 1.1 christos suffix[2] = p[2];
15202 1.1 christos suffix[3] = '\0';
15203 1.1 christos sprintf (p, "%s%s", pclmul_op[pclmul_type].name, suffix);
15204 1.1 christos mnemonicendp += pclmul_op[pclmul_type].len;
15205 1.1 christos }
15206 1.1 christos else
15207 1.1 christos {
15208 1.1 christos /* We have a reserved extension byte. Output it directly. */
15209 1.1 christos scratchbuf[0] = '$';
15210 1.1 christos print_operand_value (scratchbuf + 1, 1, pclmul_type);
15211 1.1 christos oappend (scratchbuf + intel_syntax);
15212 1.1 christos scratchbuf[0] = '\0';
15213 1.1 christos }
15214 1.1 christos }
15215 1.1 christos
15216 1.1 christos static void
15217 1.1 christos MOVBE_Fixup (int bytemode, int sizeflag)
15218 1.1 christos {
15219 1.1 christos /* Add proper suffix to "movbe". */
15220 1.1 christos char *p = mnemonicendp;
15221 1.1 christos
15222 1.1 christos switch (bytemode)
15223 1.1 christos {
15224 1.1 christos case v_mode:
15225 1.1 christos if (intel_syntax)
15226 1.1 christos goto skip;
15227 1.1 christos
15228 1.1 christos USED_REX (REX_W);
15229 1.1 christos if (sizeflag & SUFFIX_ALWAYS)
15230 1.1 christos {
15231 1.1 christos if (rex & REX_W)
15232 1.1 christos *p++ = 'q';
15233 1.1 christos else
15234 1.1 christos {
15235 1.1 christos if (sizeflag & DFLAG)
15236 1.1 christos *p++ = 'l';
15237 1.1 christos else
15238 1.1 christos *p++ = 'w';
15239 1.1 christos used_prefixes |= (prefixes & PREFIX_DATA);
15240 1.1 christos }
15241 1.1 christos }
15242 1.1 christos break;
15243 1.1 christos default:
15244 1.1 christos oappend (INTERNAL_DISASSEMBLER_ERROR);
15245 1.1 christos break;
15246 1.1 christos }
15247 1.1 christos mnemonicendp = p;
15248 1.1 christos *p = '\0';
15249 1.1 christos
15250 1.1 christos skip:
15251 1.1 christos OP_M (bytemode, sizeflag);
15252 1.1 christos }
15253 1.1 christos
15254 1.1 christos static void
15255 1.1 christos OP_LWPCB_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15256 1.1 christos {
15257 1.1 christos int reg;
15258 1.1 christos const char **names;
15259 1.1 christos
15260 1.1 christos /* Skip mod/rm byte. */
15261 1.1 christos MODRM_CHECK;
15262 1.1 christos codep++;
15263 1.1 christos
15264 1.1 christos if (vex.w)
15265 1.1 christos names = names64;
15266 1.1 christos else
15267 1.1 christos names = names32;
15268 1.1 christos
15269 1.1 christos reg = modrm.rm;
15270 1.1 christos USED_REX (REX_B);
15271 1.1 christos if (rex & REX_B)
15272 1.1 christos reg += 8;
15273 1.1 christos
15274 1.1 christos oappend (names[reg]);
15275 1.1 christos }
15276 1.1 christos
15277 1.1 christos static void
15278 1.1 christos OP_LWP_E (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
15279 1.1 christos {
15280 1.1 christos const char **names;
15281 1.1 christos
15282 1.1 christos if (vex.w)
15283 1.1 christos names = names64;
15284 1.1 christos else
15285 1.1 christos names = names32;
15286 1.1 christos
15287 1.1 christos oappend (names[vex.register_specifier]);
15288 1.1 christos }
15289