xref: /openbsd-src/gnu/usr.bin/binutils/include/opcode/i386.h (revision c035e4894690be4ca08c96e8872dddf0c5082aef)
1b305b0f1Sespie /* opcode/i386.h -- Intel 80386 opcode table
2b55d4692Sfgsch    Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3007c2a45Smiod    2000, 2001, 2002, 2003, 2004
4b55d4692Sfgsch    Free Software Foundation, Inc.
52159047fSniklas 
62159047fSniklas This file is part of GAS, the GNU Assembler, and GDB, the GNU Debugger.
72159047fSniklas 
82159047fSniklas This program is free software; you can redistribute it and/or modify
92159047fSniklas it under the terms of the GNU General Public License as published by
102159047fSniklas the Free Software Foundation; either version 2 of the License, or
112159047fSniklas (at your option) any later version.
122159047fSniklas 
132159047fSniklas This program is distributed in the hope that it will be useful,
142159047fSniklas but WITHOUT ANY WARRANTY; without even the implied warranty of
152159047fSniklas MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
162159047fSniklas GNU General Public License for more details.
172159047fSniklas 
182159047fSniklas You should have received a copy of the GNU General Public License
192159047fSniklas along with this program; if not, write to the Free Software
202159047fSniklas Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
212159047fSniklas 
22b305b0f1Sespie /* The SystemV/386 SVR3.2 assembler, and probably all AT&T derived
23b305b0f1Sespie    ix86 Unix assemblers, generate floating point instructions with
24b305b0f1Sespie    reversed source and destination registers in certain cases.
25b305b0f1Sespie    Unfortunately, gcc and possibly many other programs use this
26b305b0f1Sespie    reversed syntax, so we're stuck with it.
27b305b0f1Sespie 
28b305b0f1Sespie    eg. `fsub %st(3),%st' results in st = st - st(3) as expected, but
29b305b0f1Sespie    `fsub %st,%st(3)' results in st(3) = st - st(3), rather than
30b305b0f1Sespie    the expected st(3) = st(3) - st
31b305b0f1Sespie 
32b305b0f1Sespie    This happens with all the non-commutative arithmetic floating point
33b305b0f1Sespie    operations with two register operands, where the source register is
34b305b0f1Sespie    %st, and destination register is %st(i).  See FloatDR below.
35b305b0f1Sespie 
36b305b0f1Sespie    The affected opcode map is dceX, dcfX, deeX, defX.  */
37b305b0f1Sespie 
38b305b0f1Sespie #ifndef SYSV386_COMPAT
39b305b0f1Sespie /* Set non-zero for broken, compatible instructions.  Set to zero for
40b305b0f1Sespie    non-broken opcodes at your peril.  gcc generates SystemV/386
41b305b0f1Sespie    compatible instructions.  */
42b305b0f1Sespie #define SYSV386_COMPAT 1
43b305b0f1Sespie #endif
44b305b0f1Sespie #ifndef OLDGCC_COMPAT
45b305b0f1Sespie /* Set non-zero to cater for old (<= 2.8.1) versions of gcc that could
46b305b0f1Sespie    generate nonsense fsubp, fsubrp, fdivp and fdivrp with operands
47b305b0f1Sespie    reversed.  */
48b305b0f1Sespie #define OLDGCC_COMPAT SYSV386_COMPAT
49b305b0f1Sespie #endif
50b305b0f1Sespie 
512159047fSniklas static const template i386_optab[] = {
522159047fSniklas 
53b305b0f1Sespie #define X None
54b55d4692Sfgsch #define NoSuf (No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf)
55b55d4692Sfgsch #define b_Suf (No_wSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf)
56b55d4692Sfgsch #define w_Suf (No_bSuf|No_lSuf|No_sSuf|No_xSuf|No_qSuf)
57b55d4692Sfgsch #define l_Suf (No_bSuf|No_wSuf|No_sSuf|No_xSuf|No_qSuf)
58b55d4692Sfgsch #define q_Suf (No_bSuf|No_wSuf|No_sSuf|No_lSuf|No_xSuf)
59b55d4692Sfgsch #define x_Suf (No_bSuf|No_wSuf|No_sSuf|No_lSuf|No_qSuf)
60b55d4692Sfgsch #define bw_Suf (No_lSuf|No_sSuf|No_xSuf|No_qSuf)
61b55d4692Sfgsch #define bl_Suf (No_wSuf|No_sSuf|No_xSuf|No_qSuf)
62b55d4692Sfgsch #define wl_Suf (No_bSuf|No_sSuf|No_xSuf|No_qSuf)
63b55d4692Sfgsch #define wlq_Suf (No_bSuf|No_sSuf|No_xSuf)
64b55d4692Sfgsch #define lq_Suf (No_bSuf|No_wSuf|No_sSuf|No_xSuf)
65c074d1c9Sdrahn #define wq_Suf (No_bSuf|No_lSuf|No_sSuf|No_xSuf)
66b55d4692Sfgsch #define sl_Suf (No_bSuf|No_wSuf|No_xSuf|No_qSuf)
67b55d4692Sfgsch #define sldx_Suf (No_bSuf|No_wSuf|No_qSuf)
68b55d4692Sfgsch #define bwl_Suf (No_sSuf|No_xSuf|No_qSuf)
69b55d4692Sfgsch #define bwlq_Suf (No_sSuf|No_xSuf)
70b305b0f1Sespie #define FP (NoSuf|IgnoreSize)
71b305b0f1Sespie #define l_FP (l_Suf|IgnoreSize)
72b305b0f1Sespie #define x_FP (x_Suf|IgnoreSize)
73b305b0f1Sespie #define sl_FP (sl_Suf|IgnoreSize)
74b305b0f1Sespie #if SYSV386_COMPAT
75b305b0f1Sespie /* Someone forgot that the FloatR bit reverses the operation when not
76b305b0f1Sespie    equal to the FloatD bit.  ie. Changing only FloatD results in the
77b305b0f1Sespie    destination being swapped *and* the direction being reversed.  */
78b305b0f1Sespie #define FloatDR FloatD
79b305b0f1Sespie #else
80b305b0f1Sespie #define FloatDR (FloatD|FloatR)
81b305b0f1Sespie #endif
82b305b0f1Sespie 
83b305b0f1Sespie /* Move instructions.  */
842159047fSniklas #define MOV_AX_DISP32 0xa0
85b55d4692Sfgsch /* In the 64bit mode the short form mov immediate is redefined to have
86b55d4692Sfgsch    64bit displacement value.  */
87b55d4692Sfgsch { "mov",   2,	0xa0, X, CpuNo64,bwlq_Suf|D|W,			{ Disp16|Disp32, Acc, 0 } },
88b55d4692Sfgsch { "mov",   2,	0x88, X, 0,	 bwlq_Suf|D|W|Modrm,		{ Reg, Reg|AnyMem, 0} },
89b55d4692Sfgsch /* In the 64bit mode the short form mov immediate is redefined to have
90b55d4692Sfgsch    64bit displacement value.  */
91b55d4692Sfgsch { "mov",   2,	0xb0, X, 0,	 bwl_Suf|W|ShortForm,		{ EncImm, Reg8|Reg16|Reg32, 0 } },
92b55d4692Sfgsch { "mov",   2,	0xc6, 0, 0,	 bwlq_Suf|W|Modrm,		{ EncImm, Reg|AnyMem, 0 } },
93b55d4692Sfgsch { "mov",   2,	0xb0, X, Cpu64,	 q_Suf|W|ShortForm,		{ Imm64, Reg64, 0 } },
94b55d4692Sfgsch /* The segment register moves accept WordReg so that a segment register
95b305b0f1Sespie    can be copied to a 32 bit register, and vice versa, without using a
96b305b0f1Sespie    size prefix.  When moving to a 32 bit register, the upper 16 bits
97b305b0f1Sespie    are set to an implementation defined value (on the Pentium Pro,
98b305b0f1Sespie    the implementation defined value is zero).  */
99b55d4692Sfgsch { "mov",   2,	0x8c, X, 0,	 wl_Suf|Modrm,			{ SReg2, WordReg|WordMem, 0 } },
100b55d4692Sfgsch { "mov",   2,	0x8c, X, Cpu386, wl_Suf|Modrm,			{ SReg3, WordReg|WordMem, 0 } },
101b55d4692Sfgsch { "mov",   2,	0x8e, X, 0,	 wl_Suf|Modrm|IgnoreSize,	{ WordReg|WordMem, SReg2, 0 } },
102b55d4692Sfgsch { "mov",   2,	0x8e, X, Cpu386, wl_Suf|Modrm|IgnoreSize,	{ WordReg|WordMem, SReg3, 0 } },
103b55d4692Sfgsch /* Move to/from control debug registers.  In the 16 or 32bit modes they are 32bit.  In the 64bit
104b55d4692Sfgsch    mode they are 64bit.*/
105b55d4692Sfgsch { "mov",   2, 0x0f20, X, Cpu386|CpuNo64, l_Suf|D|Modrm|IgnoreSize,{ Control, Reg32|InvMem, 0} },
106b55d4692Sfgsch { "mov",   2, 0x0f20, X, Cpu64,	 q_Suf|D|Modrm|IgnoreSize|NoRex64,{ Control, Reg64|InvMem, 0} },
107b55d4692Sfgsch { "mov",   2, 0x0f21, X, Cpu386|CpuNo64, l_Suf|D|Modrm|IgnoreSize,{ Debug, Reg32|InvMem, 0} },
108b55d4692Sfgsch { "mov",   2, 0x0f21, X, Cpu64,	 q_Suf|D|Modrm|IgnoreSize|NoRex64,{ Debug, Reg64|InvMem, 0} },
109b55d4692Sfgsch { "mov",   2, 0x0f24, X, Cpu386, l_Suf|D|Modrm|IgnoreSize,	{ Test, Reg32|InvMem, 0} },
110b55d4692Sfgsch { "movabs",2,	0xa0, X, Cpu64, bwlq_Suf|D|W,			{ Disp64, Acc, 0 } },
111b55d4692Sfgsch { "movabs",2,	0xb0, X, Cpu64,	q_Suf|W|ShortForm,		{ Imm64, Reg64, 0 } },
1122159047fSniklas 
113b305b0f1Sespie /* Move with sign extend.  */
1142159047fSniklas /* "movsbl" & "movsbw" must not be unified into "movsb" to avoid
115b305b0f1Sespie    conflict with the "movs" string move instruction.  */
116b55d4692Sfgsch {"movsbl", 2, 0x0fbe, X, Cpu386, NoSuf|Modrm,			{ Reg8|ByteMem, Reg32, 0} },
117b55d4692Sfgsch {"movsbw", 2, 0x0fbe, X, Cpu386, NoSuf|Modrm,			{ Reg8|ByteMem, Reg16, 0} },
118b55d4692Sfgsch {"movswl", 2, 0x0fbf, X, Cpu386, NoSuf|Modrm,			{ Reg16|ShortMem,Reg32, 0} },
119b55d4692Sfgsch {"movsbq", 2, 0x0fbe, X, Cpu64,  NoSuf|Modrm|Rex64,		{ Reg8|ByteMem, Reg64, 0} },
120b55d4692Sfgsch {"movswq", 2, 0x0fbf, X, Cpu64,  NoSuf|Modrm|Rex64,		{ Reg16|ShortMem,Reg64, 0} },
121b55d4692Sfgsch {"movslq", 2,   0x63, X, Cpu64,  NoSuf|Modrm|Rex64,		{ Reg32|WordMem, Reg64, 0} },
122b55d4692Sfgsch /* Intel Syntax next 5 insns */
123b55d4692Sfgsch {"movsx",  2, 0x0fbe, X, Cpu386, b_Suf|Modrm,			{ Reg8|ByteMem, WordReg, 0} },
124c074d1c9Sdrahn {"movsx",  2, 0x0fbf, X, Cpu386, w_Suf|Modrm,			{ Reg16|ShortMem, Reg32, 0} },
125b55d4692Sfgsch {"movsx",  2, 0x0fbe, X, Cpu64,  b_Suf|Modrm|Rex64,		{ Reg8|ByteMem, Reg64, 0} },
126c074d1c9Sdrahn {"movsx",  2, 0x0fbf, X, Cpu64,  w_Suf|Modrm|Rex64,		{ Reg16|ShortMem, Reg64, 0} },
127b55d4692Sfgsch {"movsx",  2,   0x63, X, Cpu64,  l_Suf|Modrm|Rex64,		{ Reg32|WordMem, Reg64, 0} },
1282159047fSniklas 
129b305b0f1Sespie /* Move with zero extend.  */
130b55d4692Sfgsch {"movzb",  2, 0x0fb6, X, Cpu386, wl_Suf|Modrm,			{ Reg8|ByteMem, WordReg, 0} },
131b55d4692Sfgsch {"movzwl", 2, 0x0fb7, X, Cpu386, NoSuf|Modrm,			{ Reg16|ShortMem, Reg32, 0} },
132b55d4692Sfgsch /* These instructions are not particulary usefull, since the zero extend
133b55d4692Sfgsch    32->64 is implicit, but we can encode them.  */
134b55d4692Sfgsch {"movzbq", 2, 0x0fb6, X, Cpu64,  NoSuf|Modrm|Rex64,		{ Reg8|ByteMem,   Reg64, 0} },
135b55d4692Sfgsch {"movzwq", 2, 0x0fb7, X, Cpu64,  NoSuf|Modrm|Rex64,		{ Reg16|ShortMem, Reg64, 0} },
136b55d4692Sfgsch /* Intel Syntax next 4 insns */
137b55d4692Sfgsch {"movzx",  2, 0x0fb6, X, Cpu386, b_Suf|Modrm,			{ Reg8|ByteMem, WordReg, 0} },
138c074d1c9Sdrahn {"movzx",  2, 0x0fb7, X, Cpu386, w_Suf|Modrm,			{ Reg16|ShortMem, Reg32, 0} },
139b55d4692Sfgsch /* These instructions are not particulary usefull, since the zero extend
140b55d4692Sfgsch    32->64 is implicit, but we can encode them.  */
141b55d4692Sfgsch {"movzx",  2, 0x0fb6, X, Cpu386, b_Suf|Modrm|Rex64,		{ Reg8|ByteMem, Reg64, 0} },
142c074d1c9Sdrahn {"movzx",  2, 0x0fb7, X, Cpu386, w_Suf|Modrm|Rex64,		{ Reg16|ShortMem, Reg64, 0} },
1432159047fSniklas 
144b305b0f1Sespie /* Push instructions.  */
145b55d4692Sfgsch {"push",   1,	0x50, X, CpuNo64, wl_Suf|ShortForm|DefaultSize,	{ WordReg, 0, 0 } },
146b55d4692Sfgsch {"push",   1,	0xff, 6, CpuNo64, wl_Suf|Modrm|DefaultSize,	{ WordReg|WordMem, 0, 0 } },
147b55d4692Sfgsch {"push",   1,	0x6a, X, Cpu186|CpuNo64, wl_Suf|DefaultSize,	{ Imm8S, 0, 0} },
148b55d4692Sfgsch {"push",   1,	0x68, X, Cpu186|CpuNo64, wl_Suf|DefaultSize,	{ Imm16|Imm32, 0, 0} },
149b55d4692Sfgsch {"push",   1,	0x06, X, 0|CpuNo64, wl_Suf|Seg2ShortForm|DefaultSize, { SReg2, 0, 0 } },
150b55d4692Sfgsch {"push",   1, 0x0fa0, X, Cpu386|CpuNo64, wl_Suf|Seg3ShortForm|DefaultSize, { SReg3, 0, 0 } },
151b55d4692Sfgsch /* In 64bit mode, the operand size is implicitly 64bit.  */
152c074d1c9Sdrahn {"push",   1,	0x50, X, Cpu64,	wq_Suf|ShortForm|DefaultSize|NoRex64, { WordReg, 0, 0 } },
153c074d1c9Sdrahn {"push",   1,	0xff, 6, Cpu64,	wq_Suf|Modrm|DefaultSize|NoRex64, { WordReg|WordMem, 0, 0 } },
154c074d1c9Sdrahn {"push",   1,	0x6a, X, Cpu186|Cpu64, wq_Suf|DefaultSize|NoRex64, { Imm8S, 0, 0} },
155c074d1c9Sdrahn {"push",   1,	0x68, X, Cpu186|Cpu64, wq_Suf|DefaultSize|NoRex64, { Imm32S|Imm16, 0, 0} },
156c074d1c9Sdrahn {"push",   1,	0x06, X, Cpu64,	wq_Suf|Seg2ShortForm|DefaultSize|NoRex64, { SReg2, 0, 0 } },
157c074d1c9Sdrahn {"push",   1, 0x0fa0, X, Cpu386|Cpu64, wq_Suf|Seg3ShortForm|DefaultSize|NoRex64, { SReg3, 0, 0 } },
158b55d4692Sfgsch 
159b55d4692Sfgsch {"pusha",  0,	0x60, X, Cpu186|CpuNo64, wl_Suf|DefaultSize,	{ 0, 0, 0 } },
1602159047fSniklas 
161b305b0f1Sespie /* Pop instructions.  */
162b55d4692Sfgsch {"pop",	   1,	0x58, X, CpuNo64,	 wl_Suf|ShortForm|DefaultSize,	{ WordReg, 0, 0 } },
163b55d4692Sfgsch {"pop",	   1,	0x8f, 0, CpuNo64,	 wl_Suf|Modrm|DefaultSize,	{ WordReg|WordMem, 0, 0 } },
164b305b0f1Sespie #define POP_SEG_SHORT 0x07
165b55d4692Sfgsch {"pop",	   1,	0x07, X, CpuNo64,	 wl_Suf|Seg2ShortForm|DefaultSize, { SReg2, 0, 0 } },
166b55d4692Sfgsch {"pop",	   1, 0x0fa1, X, Cpu386|CpuNo64, wl_Suf|Seg3ShortForm|DefaultSize, { SReg3, 0, 0 } },
167b55d4692Sfgsch /* In 64bit mode, the operand size is implicitly 64bit.  */
168c074d1c9Sdrahn {"pop",	   1,	0x58, X, Cpu64,	 wq_Suf|ShortForm|DefaultSize|NoRex64,	{ WordReg, 0, 0 } },
169c074d1c9Sdrahn {"pop",	   1,	0x8f, 0, Cpu64,	 wq_Suf|Modrm|DefaultSize|NoRex64,	{ WordReg|WordMem, 0, 0 } },
170c074d1c9Sdrahn {"pop",	   1,	0x07, X, Cpu64,	 wq_Suf|Seg2ShortForm|DefaultSize|NoRex64, { SReg2, 0, 0 } },
171c074d1c9Sdrahn {"pop",	   1, 0x0fa1, X, Cpu64,  wq_Suf|Seg3ShortForm|DefaultSize|NoRex64, { SReg3, 0, 0 } },
172b55d4692Sfgsch 
173b55d4692Sfgsch {"popa",   0,	0x61, X, Cpu186|CpuNo64, wl_Suf|DefaultSize,		{ 0, 0, 0 } },
1742159047fSniklas 
175b305b0f1Sespie /* Exchange instructions.
176b55d4692Sfgsch    xchg commutes:  we allow both operand orders.
177b55d4692Sfgsch 
178b55d4692Sfgsch    In the 64bit code, xchg eax, eax is reused for new nop instruction.
179b55d4692Sfgsch  */
180c074d1c9Sdrahn {"xchg",   2,	0x90, X, 0,	 wlq_Suf|ShortForm,	{ WordReg, Acc, 0 } },
181c074d1c9Sdrahn {"xchg",   2,	0x90, X, 0,	 wlq_Suf|ShortForm,	{ Acc, WordReg, 0 } },
182b55d4692Sfgsch {"xchg",   2,	0x86, X, 0,	 bwlq_Suf|W|Modrm,	{ Reg, Reg|AnyMem, 0 } },
183b55d4692Sfgsch {"xchg",   2,	0x86, X, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, Reg, 0 } },
1842159047fSniklas 
185b305b0f1Sespie /* In/out from ports.  */
186c074d1c9Sdrahn {"in",	   2,	0xe4, X, 0,	 bwl_Suf|W,		{ Imm8, Acc, 0 } },
187c074d1c9Sdrahn {"in",	   2,	0xec, X, 0,	 bwl_Suf|W,		{ InOutPortReg, Acc, 0 } },
188c074d1c9Sdrahn {"in",	   1,	0xe4, X, 0,	 bwl_Suf|W,		{ Imm8, 0, 0 } },
189c074d1c9Sdrahn {"in",	   1,	0xec, X, 0,	 bwl_Suf|W,		{ InOutPortReg, 0, 0 } },
190c074d1c9Sdrahn {"out",	   2,	0xe6, X, 0,	 bwl_Suf|W,		{ Acc, Imm8, 0 } },
191c074d1c9Sdrahn {"out",	   2,	0xee, X, 0,	 bwl_Suf|W,		{ Acc, InOutPortReg, 0 } },
192c074d1c9Sdrahn {"out",	   1,	0xe6, X, 0,	 bwl_Suf|W,		{ Imm8, 0, 0 } },
193c074d1c9Sdrahn {"out",	   1,	0xee, X, 0,	 bwl_Suf|W,		{ InOutPortReg, 0, 0 } },
1942159047fSniklas 
195b305b0f1Sespie /* Load effective address.  */
196b55d4692Sfgsch {"lea",	   2, 0x8d,   X, 0,	 wlq_Suf|Modrm,		{ WordMem, WordReg, 0 } },
1972159047fSniklas 
198b305b0f1Sespie /* Load segment registers from memory.  */
199b55d4692Sfgsch {"lds",	   2,	0xc5, X, CpuNo64, wlq_Suf|Modrm,	{ WordMem, WordReg, 0} },
200b55d4692Sfgsch {"les",	   2,	0xc4, X, CpuNo64, wlq_Suf|Modrm,	{ WordMem, WordReg, 0} },
201b55d4692Sfgsch {"lfs",	   2, 0x0fb4, X, Cpu386, wlq_Suf|Modrm,		{ WordMem, WordReg, 0} },
202b55d4692Sfgsch {"lgs",	   2, 0x0fb5, X, Cpu386, wlq_Suf|Modrm,		{ WordMem, WordReg, 0} },
203b55d4692Sfgsch {"lss",	   2, 0x0fb2, X, Cpu386, wlq_Suf|Modrm,		{ WordMem, WordReg, 0} },
2042159047fSniklas 
205b305b0f1Sespie /* Flags register instructions.  */
206b55d4692Sfgsch {"clc",	   0,	0xf8, X, 0,	 NoSuf,			{ 0, 0, 0} },
207b55d4692Sfgsch {"cld",	   0,	0xfc, X, 0,	 NoSuf,			{ 0, 0, 0} },
208b55d4692Sfgsch {"cli",	   0,	0xfa, X, 0,	 NoSuf,			{ 0, 0, 0} },
209b55d4692Sfgsch {"clts",   0, 0x0f06, X, Cpu286, NoSuf,			{ 0, 0, 0} },
210b55d4692Sfgsch {"cmc",	   0,	0xf5, X, 0,	 NoSuf,			{ 0, 0, 0} },
211e92ccebbSjsg {"lahf",   0,	0x9f, X, 0,	 NoSuf,			{ 0, 0, 0} },
212e92ccebbSjsg {"sahf",   0,	0x9e, X, 0,	 NoSuf,			{ 0, 0, 0} },
213b55d4692Sfgsch {"pushf",  0,	0x9c, X, CpuNo64,wlq_Suf|DefaultSize,	{ 0, 0, 0} },
214c074d1c9Sdrahn {"pushf",  0,	0x9c, X, Cpu64,	 wq_Suf|DefaultSize|NoRex64,{ 0, 0, 0} },
215b55d4692Sfgsch {"popf",   0,	0x9d, X, CpuNo64,wlq_Suf|DefaultSize,	{ 0, 0, 0} },
216c074d1c9Sdrahn {"popf",   0,	0x9d, X, Cpu64,	 wq_Suf|DefaultSize|NoRex64,{ 0, 0, 0} },
217b55d4692Sfgsch {"stc",	   0,	0xf9, X, 0,	 NoSuf,			{ 0, 0, 0} },
218b55d4692Sfgsch {"std",	   0,	0xfd, X, 0,	 NoSuf,			{ 0, 0, 0} },
219b55d4692Sfgsch {"sti",	   0,	0xfb, X, 0,	 NoSuf,			{ 0, 0, 0} },
2202159047fSniklas 
221b305b0f1Sespie /* Arithmetic.  */
222b55d4692Sfgsch {"add",	   2,	0x00, X, 0,	 bwlq_Suf|D|W|Modrm,	{ Reg, Reg|AnyMem, 0} },
223b55d4692Sfgsch {"add",	   2,	0x83, 0, 0,	 wlq_Suf|Modrm,		{ Imm8S, WordReg|WordMem, 0} },
224b55d4692Sfgsch {"add",	   2,	0x04, X, 0,	 bwlq_Suf|W,		{ EncImm, Acc, 0} },
225b55d4692Sfgsch {"add",	   2,	0x80, 0, 0,	 bwlq_Suf|W|Modrm,	{ EncImm, Reg|AnyMem, 0} },
2262159047fSniklas 
227b55d4692Sfgsch {"inc",	   1,	0x40, X, CpuNo64,wl_Suf|ShortForm,	{ WordReg, 0, 0} },
228b55d4692Sfgsch {"inc",	   1,	0xfe, 0, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
2292159047fSniklas 
230b55d4692Sfgsch {"sub",	   2,	0x28, X, 0,	 bwlq_Suf|D|W|Modrm,	{ Reg, Reg|AnyMem, 0} },
231b55d4692Sfgsch {"sub",	   2,	0x83, 5, 0,	 wlq_Suf|Modrm,		{ Imm8S, WordReg|WordMem, 0} },
232b55d4692Sfgsch {"sub",	   2,	0x2c, X, 0,	 bwlq_Suf|W,		{ EncImm, Acc, 0} },
233b55d4692Sfgsch {"sub",	   2,	0x80, 5, 0,	 bwlq_Suf|W|Modrm,	{ EncImm, Reg|AnyMem, 0} },
2342159047fSniklas 
235b55d4692Sfgsch {"dec",	   1,	0x48, X, CpuNo64, wl_Suf|ShortForm,	{ WordReg, 0, 0} },
236b55d4692Sfgsch {"dec",	   1,	0xfe, 1, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
2372159047fSniklas 
238b55d4692Sfgsch {"sbb",	   2,	0x18, X, 0,	 bwlq_Suf|D|W|Modrm,	{ Reg, Reg|AnyMem, 0} },
239b55d4692Sfgsch {"sbb",	   2,	0x83, 3, 0,	 wlq_Suf|Modrm,		{ Imm8S, WordReg|WordMem, 0} },
240b55d4692Sfgsch {"sbb",	   2,	0x1c, X, 0,	 bwlq_Suf|W,		{ EncImm, Acc, 0} },
241b55d4692Sfgsch {"sbb",	   2,	0x80, 3, 0,	 bwlq_Suf|W|Modrm,	{ EncImm, Reg|AnyMem, 0} },
2422159047fSniklas 
243b55d4692Sfgsch {"cmp",	   2,	0x38, X, 0,	 bwlq_Suf|D|W|Modrm,	{ Reg, Reg|AnyMem, 0} },
244b55d4692Sfgsch {"cmp",	   2,	0x83, 7, 0,	 wlq_Suf|Modrm,		{ Imm8S, WordReg|WordMem, 0} },
245b55d4692Sfgsch {"cmp",	   2,	0x3c, X, 0,	 bwlq_Suf|W,		{ EncImm, Acc, 0} },
246b55d4692Sfgsch {"cmp",	   2,	0x80, 7, 0,	 bwlq_Suf|W|Modrm,	{ EncImm, Reg|AnyMem, 0} },
2472159047fSniklas 
248b55d4692Sfgsch {"test",   2,	0x84, X, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, Reg, 0} },
249b55d4692Sfgsch {"test",   2,	0x84, X, 0,	 bwlq_Suf|W|Modrm,	{ Reg, Reg|AnyMem, 0} },
250b55d4692Sfgsch {"test",   2,	0xa8, X, 0,	 bwlq_Suf|W,		{ EncImm, Acc, 0} },
251b55d4692Sfgsch {"test",   2,	0xf6, 0, 0,	 bwlq_Suf|W|Modrm,	{ EncImm, Reg|AnyMem, 0} },
2522159047fSniklas 
253b55d4692Sfgsch {"and",	   2,	0x20, X, 0,	 bwlq_Suf|D|W|Modrm,	{ Reg, Reg|AnyMem, 0} },
254b55d4692Sfgsch {"and",	   2,	0x83, 4, 0,	 wlq_Suf|Modrm,		{ Imm8S, WordReg|WordMem, 0} },
255b55d4692Sfgsch {"and",	   2,	0x24, X, 0,	 bwlq_Suf|W,		{ EncImm, Acc, 0} },
256b55d4692Sfgsch {"and",	   2,	0x80, 4, 0,	 bwlq_Suf|W|Modrm,	{ EncImm, Reg|AnyMem, 0} },
2572159047fSniklas 
258b55d4692Sfgsch {"or",	   2,	0x08, X, 0,	 bwlq_Suf|D|W|Modrm,	{ Reg, Reg|AnyMem, 0} },
259b55d4692Sfgsch {"or",	   2,	0x83, 1, 0,	 wlq_Suf|Modrm,		{ Imm8S, WordReg|WordMem, 0} },
260b55d4692Sfgsch {"or",	   2,	0x0c, X, 0,	 bwlq_Suf|W,		{ EncImm, Acc, 0} },
261b55d4692Sfgsch {"or",	   2,	0x80, 1, 0,	 bwlq_Suf|W|Modrm,	{ EncImm, Reg|AnyMem, 0} },
2622159047fSniklas 
263b55d4692Sfgsch {"xor",	   2,	0x30, X, 0,	 bwlq_Suf|D|W|Modrm,	{ Reg, Reg|AnyMem, 0} },
264b55d4692Sfgsch {"xor",	   2,	0x83, 6, 0,	 wlq_Suf|Modrm,		{ Imm8S, WordReg|WordMem, 0} },
265b55d4692Sfgsch {"xor",	   2,	0x34, X, 0,	 bwlq_Suf|W,		{ EncImm, Acc, 0} },
266b55d4692Sfgsch {"xor",	   2,	0x80, 6, 0,	 bwlq_Suf|W|Modrm,	{ EncImm, Reg|AnyMem, 0} },
2672159047fSniklas 
268b305b0f1Sespie /* clr with 1 operand is really xor with 2 operands.  */
269b55d4692Sfgsch {"clr",	   1,	0x30, X, 0,	 bwlq_Suf|W|Modrm|regKludge,	{ Reg, 0, 0 } },
2702159047fSniklas 
271b55d4692Sfgsch {"adc",	   2,	0x10, X, 0,	 bwlq_Suf|D|W|Modrm,	{ Reg, Reg|AnyMem, 0} },
272b55d4692Sfgsch {"adc",	   2,	0x83, 2, 0,	 wlq_Suf|Modrm,		{ Imm8S, WordReg|WordMem, 0} },
273b55d4692Sfgsch {"adc",	   2,	0x14, X, 0,	 bwlq_Suf|W,		{ EncImm, Acc, 0} },
274b55d4692Sfgsch {"adc",	   2,	0x80, 2, 0,	 bwlq_Suf|W|Modrm,	{ EncImm, Reg|AnyMem, 0} },
2752159047fSniklas 
276b55d4692Sfgsch {"neg",	   1,	0xf6, 3, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
277b55d4692Sfgsch {"not",	   1,	0xf6, 2, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
2782159047fSniklas 
279b55d4692Sfgsch {"aaa",	   0,	0x37, X, 0,	 NoSuf,			{ 0, 0, 0} },
280b55d4692Sfgsch {"aas",	   0,	0x3f, X, 0,	 NoSuf,			{ 0, 0, 0} },
281b55d4692Sfgsch {"daa",	   0,	0x27, X, 0,	 NoSuf,			{ 0, 0, 0} },
282b55d4692Sfgsch {"das",	   0,	0x2f, X, 0,	 NoSuf,			{ 0, 0, 0} },
283b55d4692Sfgsch {"aad",	   0, 0xd50a, X, 0,	 NoSuf,			{ 0, 0, 0} },
284b55d4692Sfgsch {"aad",	   1,   0xd5, X, 0,	 NoSuf,			{ Imm8S, 0, 0} },
285b55d4692Sfgsch {"aam",	   0, 0xd40a, X, 0,	 NoSuf,			{ 0, 0, 0} },
286b55d4692Sfgsch {"aam",	   1,   0xd4, X, 0,	 NoSuf,			{ Imm8S, 0, 0} },
287b305b0f1Sespie 
288b305b0f1Sespie /* Conversion insns.  */
289b305b0f1Sespie /* Intel naming */
290b55d4692Sfgsch {"cbw",	   0,	0x98, X, 0,	 NoSuf|Size16,		{ 0, 0, 0} },
291b55d4692Sfgsch {"cdqe",   0,	0x98, X, Cpu64,	 NoSuf|Size64,		{ 0, 0, 0} },
292b55d4692Sfgsch {"cwde",   0,	0x98, X, 0,	 NoSuf|Size32,		{ 0, 0, 0} },
293b55d4692Sfgsch {"cwd",	   0,	0x99, X, 0,	 NoSuf|Size16,		{ 0, 0, 0} },
294b55d4692Sfgsch {"cdq",	   0,	0x99, X, 0,	 NoSuf|Size32,		{ 0, 0, 0} },
295b55d4692Sfgsch {"cqo",	   0,	0x99, X, Cpu64,	 NoSuf|Size64,		{ 0, 0, 0} },
296b305b0f1Sespie /* AT&T naming */
297b55d4692Sfgsch {"cbtw",   0,	0x98, X, 0,	 NoSuf|Size16,		{ 0, 0, 0} },
298b55d4692Sfgsch {"cltq",   0,	0x98, X, Cpu64,	 NoSuf|Size64,		{ 0, 0, 0} },
299b55d4692Sfgsch {"cwtl",   0,	0x98, X, 0,	 NoSuf|Size32,		{ 0, 0, 0} },
300b55d4692Sfgsch {"cwtd",   0,	0x99, X, 0,	 NoSuf|Size16,		{ 0, 0, 0} },
301b55d4692Sfgsch {"cltd",   0,	0x99, X, 0,	 NoSuf|Size32,		{ 0, 0, 0} },
302b55d4692Sfgsch {"cqto",   0,	0x99, X, Cpu64,	 NoSuf|Size64,		{ 0, 0, 0} },
3032159047fSniklas 
3042159047fSniklas /* Warning! the mul/imul (opcode 0xf6) must only have 1 operand!  They are
3052159047fSniklas    expanding 64-bit multiplies, and *cannot* be selected to accomplish
3062159047fSniklas    'imul %ebx, %eax' (opcode 0x0faf must be used in this case)
3072159047fSniklas    These multiplies can only be selected with single operand forms.  */
308b55d4692Sfgsch {"mul",	   1,	0xf6, 4, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
309b55d4692Sfgsch {"imul",   1,	0xf6, 5, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
310b55d4692Sfgsch {"imul",   2, 0x0faf, X, Cpu386, wlq_Suf|Modrm,		{ WordReg|WordMem, WordReg, 0} },
311b55d4692Sfgsch {"imul",   3,	0x6b, X, Cpu186, wlq_Suf|Modrm,		{ Imm8S, WordReg|WordMem, WordReg} },
312b55d4692Sfgsch {"imul",   3,	0x69, X, Cpu186, wlq_Suf|Modrm,		{ Imm16|Imm32S|Imm32, WordReg|WordMem, WordReg} },
313b305b0f1Sespie /* imul with 2 operands mimics imul with 3 by putting the register in
314b305b0f1Sespie    both i.rm.reg & i.rm.regmem fields.  regKludge enables this
315b305b0f1Sespie    transformation.  */
316b55d4692Sfgsch {"imul",   2,	0x6b, X, Cpu186, wlq_Suf|Modrm|regKludge,{ Imm8S, WordReg, 0} },
317b55d4692Sfgsch {"imul",   2,	0x69, X, Cpu186, wlq_Suf|Modrm|regKludge,{ Imm16|Imm32S|Imm32, WordReg, 0} },
3182159047fSniklas 
319b55d4692Sfgsch {"div",	   1,	0xf6, 6, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
320b55d4692Sfgsch {"div",	   2,	0xf6, 6, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, Acc, 0} },
321b55d4692Sfgsch {"idiv",   1,	0xf6, 7, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
322b55d4692Sfgsch {"idiv",   2,	0xf6, 7, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, Acc, 0} },
3232159047fSniklas 
324b55d4692Sfgsch {"rol",	   2,	0xd0, 0, 0,	 bwlq_Suf|W|Modrm,	{ Imm1, Reg|AnyMem, 0} },
325b55d4692Sfgsch {"rol",	   2,	0xc0, 0, Cpu186, bwlq_Suf|W|Modrm,	{ Imm8, Reg|AnyMem, 0} },
326b55d4692Sfgsch {"rol",	   2,	0xd2, 0, 0,	 bwlq_Suf|W|Modrm,	{ ShiftCount, Reg|AnyMem, 0} },
327b55d4692Sfgsch {"rol",	   1,	0xd0, 0, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
3282159047fSniklas 
329b55d4692Sfgsch {"ror",	   2,	0xd0, 1, 0,	 bwlq_Suf|W|Modrm,	{ Imm1, Reg|AnyMem, 0} },
330b55d4692Sfgsch {"ror",	   2,	0xc0, 1, Cpu186, bwlq_Suf|W|Modrm,	{ Imm8, Reg|AnyMem, 0} },
331b55d4692Sfgsch {"ror",	   2,	0xd2, 1, 0,	 bwlq_Suf|W|Modrm,	{ ShiftCount, Reg|AnyMem, 0} },
332b55d4692Sfgsch {"ror",	   1,	0xd0, 1, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
3332159047fSniklas 
334b55d4692Sfgsch {"rcl",	   2,	0xd0, 2, 0,	 bwlq_Suf|W|Modrm,	{ Imm1, Reg|AnyMem, 0} },
335b55d4692Sfgsch {"rcl",	   2,	0xc0, 2, Cpu186, bwlq_Suf|W|Modrm,	{ Imm8, Reg|AnyMem, 0} },
336b55d4692Sfgsch {"rcl",	   2,	0xd2, 2, 0,	 bwlq_Suf|W|Modrm,	{ ShiftCount, Reg|AnyMem, 0} },
337b55d4692Sfgsch {"rcl",	   1,	0xd0, 2, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
3382159047fSniklas 
339b55d4692Sfgsch {"rcr",	   2,	0xd0, 3, 0,	 bwlq_Suf|W|Modrm,	{ Imm1, Reg|AnyMem, 0} },
340b55d4692Sfgsch {"rcr",	   2,	0xc0, 3, Cpu186, bwlq_Suf|W|Modrm,	{ Imm8, Reg|AnyMem, 0} },
341b55d4692Sfgsch {"rcr",	   2,	0xd2, 3, 0,	 bwlq_Suf|W|Modrm,	{ ShiftCount, Reg|AnyMem, 0} },
342b55d4692Sfgsch {"rcr",	   1,	0xd0, 3, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
3432159047fSniklas 
344b55d4692Sfgsch {"sal",	   2,	0xd0, 4, 0,	 bwlq_Suf|W|Modrm,	{ Imm1, Reg|AnyMem, 0} },
345b55d4692Sfgsch {"sal",	   2,	0xc0, 4, Cpu186, bwlq_Suf|W|Modrm,	{ Imm8, Reg|AnyMem, 0} },
346b55d4692Sfgsch {"sal",	   2,	0xd2, 4, 0,	 bwlq_Suf|W|Modrm,	{ ShiftCount, Reg|AnyMem, 0} },
347b55d4692Sfgsch {"sal",	   1,	0xd0, 4, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
3482159047fSniklas 
349b55d4692Sfgsch {"shl",	   2,	0xd0, 4, 0,	 bwlq_Suf|W|Modrm,	{ Imm1, Reg|AnyMem, 0} },
350b55d4692Sfgsch {"shl",	   2,	0xc0, 4, Cpu186, bwlq_Suf|W|Modrm,	{ Imm8, Reg|AnyMem, 0} },
351b55d4692Sfgsch {"shl",	   2,	0xd2, 4, 0,	 bwlq_Suf|W|Modrm,	{ ShiftCount, Reg|AnyMem, 0} },
352b55d4692Sfgsch {"shl",	   1,	0xd0, 4, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
3532159047fSniklas 
354b55d4692Sfgsch {"shr",	   2,	0xd0, 5, 0,	 bwlq_Suf|W|Modrm,	{ Imm1, Reg|AnyMem, 0} },
355b55d4692Sfgsch {"shr",	   2,	0xc0, 5, Cpu186, bwlq_Suf|W|Modrm,	{ Imm8, Reg|AnyMem, 0} },
356b55d4692Sfgsch {"shr",	   2,	0xd2, 5, 0,	 bwlq_Suf|W|Modrm,	{ ShiftCount, Reg|AnyMem, 0} },
357b55d4692Sfgsch {"shr",	   1,	0xd0, 5, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
3582159047fSniklas 
359b55d4692Sfgsch {"sar",	   2,	0xd0, 7, 0,	 bwlq_Suf|W|Modrm,	{ Imm1, Reg|AnyMem, 0} },
360b55d4692Sfgsch {"sar",	   2,	0xc0, 7, Cpu186, bwlq_Suf|W|Modrm,	{ Imm8, Reg|AnyMem, 0} },
361b55d4692Sfgsch {"sar",	   2,	0xd2, 7, 0,	 bwlq_Suf|W|Modrm,	{ ShiftCount, Reg|AnyMem, 0} },
362b55d4692Sfgsch {"sar",	   1,	0xd0, 7, 0,	 bwlq_Suf|W|Modrm,	{ Reg|AnyMem, 0, 0} },
3632159047fSniklas 
364b55d4692Sfgsch {"shld",   3, 0x0fa4, X, Cpu386, wlq_Suf|Modrm,		{ Imm8, WordReg, WordReg|WordMem} },
365b55d4692Sfgsch {"shld",   3, 0x0fa5, X, Cpu386, wlq_Suf|Modrm,		{ ShiftCount, WordReg, WordReg|WordMem} },
366b55d4692Sfgsch {"shld",   2, 0x0fa5, X, Cpu386, wlq_Suf|Modrm,		{ WordReg, WordReg|WordMem, 0} },
367b55d4692Sfgsch 
368b55d4692Sfgsch {"shrd",   3, 0x0fac, X, Cpu386, wlq_Suf|Modrm,		{ Imm8, WordReg, WordReg|WordMem} },
369b55d4692Sfgsch {"shrd",   3, 0x0fad, X, Cpu386, wlq_Suf|Modrm,		{ ShiftCount, WordReg, WordReg|WordMem} },
370b55d4692Sfgsch {"shrd",   2, 0x0fad, X, Cpu386, wlq_Suf|Modrm,		{ WordReg, WordReg|WordMem, 0} },
3712159047fSniklas 
372b305b0f1Sespie /* Control transfer instructions.  */
373b55d4692Sfgsch {"call",   1,	0xe8, X, 0,	 wlq_Suf|JumpDword|DefaultSize,	{ Disp16|Disp32, 0, 0} },
374c074d1c9Sdrahn {"call",   1,	0xff, 2, CpuNo64, wl_Suf|Modrm|DefaultSize,	{ WordReg|WordMem|JumpAbsolute, 0, 0} },
375c074d1c9Sdrahn {"call",   1,	0xff, 2, Cpu64,	 wq_Suf|Modrm|DefaultSize|NoRex64,{ WordReg|WordMem|JumpAbsolute, 0, 0} },
376b305b0f1Sespie /* Intel Syntax */
377b55d4692Sfgsch {"call",   2,	0x9a, X, CpuNo64,wlq_Suf|JumpInterSegment|DefaultSize, { Imm16, Imm16|Imm32, 0} },
378b305b0f1Sespie /* Intel Syntax */
379b55d4692Sfgsch {"call",   1,	0xff, 3, 0,	 x_Suf|Modrm|DefaultSize,	{ WordMem, 0, 0} },
380b55d4692Sfgsch {"lcall",  2,	0x9a, X, CpuNo64,	 wl_Suf|JumpInterSegment|DefaultSize, { Imm16, Imm16|Imm32, 0} },
381b55d4692Sfgsch {"lcall",  1,	0xff, 3, CpuNo64,	 wl_Suf|Modrm|DefaultSize,	{ WordMem|JumpAbsolute, 0, 0} },
382b55d4692Sfgsch {"lcall",  1,	0xff, 3, Cpu64,	 q_Suf|Modrm|DefaultSize|NoRex64,{ WordMem|JumpAbsolute, 0, 0} },
3832159047fSniklas 
3842159047fSniklas #define JUMP_PC_RELATIVE 0xeb
385b55d4692Sfgsch {"jmp",	   1,	0xeb, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
386c074d1c9Sdrahn {"jmp",	   1,	0xff, 4, CpuNo64, wl_Suf|Modrm,		{ WordReg|WordMem|JumpAbsolute, 0, 0} },
387c074d1c9Sdrahn {"jmp",	   1,	0xff, 4, Cpu64,	 wq_Suf|Modrm|NoRex64,	{ WordReg|WordMem|JumpAbsolute, 0, 0} },
388b305b0f1Sespie /* Intel Syntax */
389b55d4692Sfgsch {"jmp",    2,	0xea, X, CpuNo64,wl_Suf|JumpInterSegment, { Imm16, Imm16|Imm32, 0} },
390b305b0f1Sespie /* Intel Syntax */
391b55d4692Sfgsch {"jmp",    1,	0xff, 5, 0,	 x_Suf|Modrm,		{ WordMem, 0, 0} },
392b55d4692Sfgsch {"ljmp",   2,	0xea, X, CpuNo64,	 wl_Suf|JumpInterSegment, { Imm16, Imm16|Imm32, 0} },
393b55d4692Sfgsch {"ljmp",   1,	0xff, 5, CpuNo64,	 wl_Suf|Modrm,		{ WordMem|JumpAbsolute, 0, 0} },
394b55d4692Sfgsch {"ljmp",   1,	0xff, 5, Cpu64,	 q_Suf|Modrm|NoRex64,	{ WordMem|JumpAbsolute, 0, 0} },
3952159047fSniklas 
396b55d4692Sfgsch {"ret",	   0,	0xc3, X, CpuNo64,wlq_Suf|DefaultSize,	{ 0, 0, 0} },
397b55d4692Sfgsch {"ret",	   1,	0xc2, X, CpuNo64,wlq_Suf|DefaultSize,	{ Imm16, 0, 0} },
398b55d4692Sfgsch {"ret",	   0,	0xc3, X, Cpu64,  q_Suf|DefaultSize|NoRex64,{ 0, 0, 0} },
399b55d4692Sfgsch {"ret",	   1,	0xc2, X, Cpu64,  q_Suf|DefaultSize|NoRex64,{ Imm16, 0, 0} },
400b55d4692Sfgsch {"lret",   0,	0xcb, X, 0,	 wlq_Suf|DefaultSize,	{ 0, 0, 0} },
401b55d4692Sfgsch {"lret",   1,	0xca, X, 0,	 wlq_Suf|DefaultSize,	{ Imm16, 0, 0} },
402b55d4692Sfgsch {"enter",  2,	0xc8, X, Cpu186, wlq_Suf|DefaultSize,	{ Imm16, Imm8, 0} },
403b55d4692Sfgsch {"leave",  0,	0xc9, X, Cpu186, wlq_Suf|DefaultSize,	{ 0, 0, 0} },
4042159047fSniklas 
405b305b0f1Sespie /* Conditional jumps.  */
406b55d4692Sfgsch {"jo",	   1,	0x70, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
407b55d4692Sfgsch {"jno",	   1,	0x71, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
408b55d4692Sfgsch {"jb",	   1,	0x72, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
409b55d4692Sfgsch {"jc",	   1,	0x72, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
410b55d4692Sfgsch {"jnae",   1,	0x72, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
411b55d4692Sfgsch {"jnb",	   1,	0x73, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
412b55d4692Sfgsch {"jnc",	   1,	0x73, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
413b55d4692Sfgsch {"jae",	   1,	0x73, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
414b55d4692Sfgsch {"je",	   1,	0x74, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
415b55d4692Sfgsch {"jz",	   1,	0x74, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
416b55d4692Sfgsch {"jne",	   1,	0x75, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
417b55d4692Sfgsch {"jnz",	   1,	0x75, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
418b55d4692Sfgsch {"jbe",	   1,	0x76, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
419b55d4692Sfgsch {"jna",	   1,	0x76, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
420b55d4692Sfgsch {"jnbe",   1,	0x77, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
421b55d4692Sfgsch {"ja",	   1,	0x77, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
422b55d4692Sfgsch {"js",	   1,	0x78, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
423b55d4692Sfgsch {"jns",	   1,	0x79, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
424b55d4692Sfgsch {"jp",	   1,	0x7a, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
425b55d4692Sfgsch {"jpe",	   1,	0x7a, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
426b55d4692Sfgsch {"jnp",	   1,	0x7b, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
427b55d4692Sfgsch {"jpo",	   1,	0x7b, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
428b55d4692Sfgsch {"jl",	   1,	0x7c, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
429b55d4692Sfgsch {"jnge",   1,	0x7c, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
430b55d4692Sfgsch {"jnl",	   1,	0x7d, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
431b55d4692Sfgsch {"jge",	   1,	0x7d, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
432b55d4692Sfgsch {"jle",	   1,	0x7e, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
433b55d4692Sfgsch {"jng",	   1,	0x7e, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
434b55d4692Sfgsch {"jnle",   1,	0x7f, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
435b55d4692Sfgsch {"jg",	   1,	0x7f, X, 0,	 NoSuf|Jump,		{ Disp, 0, 0} },
4362159047fSniklas 
437b305b0f1Sespie /* jcxz vs. jecxz is chosen on the basis of the address size prefix.  */
438c074d1c9Sdrahn {"jcxz",  1,	0xe3, X, CpuNo64,NoSuf|JumpByte|Size16, { Disp, 0, 0} },
439c074d1c9Sdrahn {"jecxz",  1,	0xe3, X, CpuNo64,NoSuf|JumpByte|Size32, { Disp, 0, 0} },
440c074d1c9Sdrahn {"jecxz",  1,	0x67e3, X, Cpu64,NoSuf|JumpByte|Size32, { Disp, 0, 0} },
441c074d1c9Sdrahn {"jrcxz",  1,	0xe3, X, Cpu64,  NoSuf|JumpByte|Size64|NoRex64, { Disp, 0, 0} },
4422159047fSniklas 
443b305b0f1Sespie /* The loop instructions also use the address size prefix to select
444b305b0f1Sespie    %cx rather than %ecx for the loop count, so the `w' form of these
445b305b0f1Sespie    instructions emit an address size prefix rather than a data size
446b305b0f1Sespie    prefix.  */
447c074d1c9Sdrahn {"loop",   1,	0xe2, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} },
448c074d1c9Sdrahn {"loop",   1,	0xe2, X, Cpu64,	 lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} },
449c074d1c9Sdrahn {"loopz",  1,	0xe1, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} },
450c074d1c9Sdrahn {"loopz",  1,	0xe1, X, Cpu64,	 lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} },
451c074d1c9Sdrahn {"loope",  1,	0xe1, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} },
452c074d1c9Sdrahn {"loope",  1,	0xe1, X, Cpu64,	 lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} },
453c074d1c9Sdrahn {"loopnz", 1,	0xe0, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} },
454c074d1c9Sdrahn {"loopnz", 1,	0xe0, X, Cpu64,	 lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} },
455c074d1c9Sdrahn {"loopne", 1,	0xe0, X, CpuNo64,wl_Suf|JumpByte,{ Disp, 0, 0} },
456c074d1c9Sdrahn {"loopne", 1,	0xe0, X, Cpu64,	 lq_Suf|JumpByte|NoRex64,{ Disp, 0, 0} },
4572159047fSniklas 
458b305b0f1Sespie /* Set byte on flag instructions.  */
459b55d4692Sfgsch {"seto",   1, 0x0f90, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
460b55d4692Sfgsch {"setno",  1, 0x0f91, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
461b55d4692Sfgsch {"setb",   1, 0x0f92, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
462b55d4692Sfgsch {"setc",   1, 0x0f92, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
463b55d4692Sfgsch {"setnae", 1, 0x0f92, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
464b55d4692Sfgsch {"setnb",  1, 0x0f93, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
465b55d4692Sfgsch {"setnc",  1, 0x0f93, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
466b55d4692Sfgsch {"setae",  1, 0x0f93, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
467b55d4692Sfgsch {"sete",   1, 0x0f94, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
468b55d4692Sfgsch {"setz",   1, 0x0f94, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
469b55d4692Sfgsch {"setne",  1, 0x0f95, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
470b55d4692Sfgsch {"setnz",  1, 0x0f95, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
471b55d4692Sfgsch {"setbe",  1, 0x0f96, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
472b55d4692Sfgsch {"setna",  1, 0x0f96, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
473b55d4692Sfgsch {"setnbe", 1, 0x0f97, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
474b55d4692Sfgsch {"seta",   1, 0x0f97, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
475b55d4692Sfgsch {"sets",   1, 0x0f98, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
476b55d4692Sfgsch {"setns",  1, 0x0f99, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
477b55d4692Sfgsch {"setp",   1, 0x0f9a, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
478b55d4692Sfgsch {"setpe",  1, 0x0f9a, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
479b55d4692Sfgsch {"setnp",  1, 0x0f9b, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
480b55d4692Sfgsch {"setpo",  1, 0x0f9b, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
481b55d4692Sfgsch {"setl",   1, 0x0f9c, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
482b55d4692Sfgsch {"setnge", 1, 0x0f9c, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
483b55d4692Sfgsch {"setnl",  1, 0x0f9d, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
484b55d4692Sfgsch {"setge",  1, 0x0f9d, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
485b55d4692Sfgsch {"setle",  1, 0x0f9e, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
486b55d4692Sfgsch {"setng",  1, 0x0f9e, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
487b55d4692Sfgsch {"setnle", 1, 0x0f9f, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
488b55d4692Sfgsch {"setg",   1, 0x0f9f, 0, Cpu386, b_Suf|Modrm,		{ Reg8|ByteMem, 0, 0} },
4892159047fSniklas 
490b305b0f1Sespie /* String manipulation.  */
491b55d4692Sfgsch {"cmps",   0,	0xa6, X, 0,	 bwlq_Suf|W|IsString,	{ 0, 0, 0} },
492b55d4692Sfgsch {"cmps",   2,	0xa6, X, 0,	 bwlq_Suf|W|IsString,	{ AnyMem|EsSeg, AnyMem, 0} },
493b55d4692Sfgsch {"scmp",   0,	0xa6, X, 0,	 bwlq_Suf|W|IsString,	{ 0, 0, 0} },
494b55d4692Sfgsch {"scmp",   2,	0xa6, X, 0,	 bwlq_Suf|W|IsString,	{ AnyMem|EsSeg, AnyMem, 0} },
495c074d1c9Sdrahn {"ins",	   0,	0x6c, X, Cpu186, bwl_Suf|W|IsString,	{ 0, 0, 0} },
496c074d1c9Sdrahn {"ins",	   2,	0x6c, X, Cpu186, bwl_Suf|W|IsString,	{ InOutPortReg, AnyMem|EsSeg, 0} },
497c074d1c9Sdrahn {"outs",   0,	0x6e, X, Cpu186, bwl_Suf|W|IsString,	{ 0, 0, 0} },
498c074d1c9Sdrahn {"outs",   2,	0x6e, X, Cpu186, bwl_Suf|W|IsString,	{ AnyMem, InOutPortReg, 0} },
499b55d4692Sfgsch {"lods",   0,	0xac, X, 0,	 bwlq_Suf|W|IsString,	{ 0, 0, 0} },
500b55d4692Sfgsch {"lods",   1,	0xac, X, 0,	 bwlq_Suf|W|IsString,	{ AnyMem, 0, 0} },
501b55d4692Sfgsch {"lods",   2,	0xac, X, 0,	 bwlq_Suf|W|IsString,	{ AnyMem, Acc, 0} },
502b55d4692Sfgsch {"slod",   0,	0xac, X, 0,	 bwlq_Suf|W|IsString,	{ 0, 0, 0} },
503b55d4692Sfgsch {"slod",   1,	0xac, X, 0,	 bwlq_Suf|W|IsString,	{ AnyMem, 0, 0} },
504b55d4692Sfgsch {"slod",   2,	0xac, X, 0,	 bwlq_Suf|W|IsString,	{ AnyMem, Acc, 0} },
505b55d4692Sfgsch {"movs",   0,	0xa4, X, 0,	 bwlq_Suf|W|IsString,	{ 0, 0, 0} },
506b55d4692Sfgsch {"movs",   2,	0xa4, X, 0,	 bwlq_Suf|W|IsString,	{ AnyMem, AnyMem|EsSeg, 0} },
507b55d4692Sfgsch {"smov",   0,	0xa4, X, 0,	 bwlq_Suf|W|IsString,	{ 0, 0, 0} },
508b55d4692Sfgsch {"smov",   2,	0xa4, X, 0,	 bwlq_Suf|W|IsString,	{ AnyMem, AnyMem|EsSeg, 0} },
509b55d4692Sfgsch {"scas",   0,	0xae, X, 0,	 bwlq_Suf|W|IsString,	{ 0, 0, 0} },
510b55d4692Sfgsch {"scas",   1,	0xae, X, 0,	 bwlq_Suf|W|IsString,	{ AnyMem|EsSeg, 0, 0} },
511b55d4692Sfgsch {"scas",   2,	0xae, X, 0,	 bwlq_Suf|W|IsString,	{ AnyMem|EsSeg, Acc, 0} },
512b55d4692Sfgsch {"ssca",   0,	0xae, X, 0,	 bwlq_Suf|W|IsString,	{ 0, 0, 0} },
513b55d4692Sfgsch {"ssca",   1,	0xae, X, 0,	 bwlq_Suf|W|IsString,	{ AnyMem|EsSeg, 0, 0} },
514b55d4692Sfgsch {"ssca",   2,	0xae, X, 0,	 bwlq_Suf|W|IsString,	{ AnyMem|EsSeg, Acc, 0} },
515b55d4692Sfgsch {"stos",   0,	0xaa, X, 0,	 bwlq_Suf|W|IsString,	{ 0, 0, 0} },
516b55d4692Sfgsch {"stos",   1,	0xaa, X, 0,	 bwlq_Suf|W|IsString,	{ AnyMem|EsSeg, 0, 0} },
517b55d4692Sfgsch {"stos",   2,	0xaa, X, 0,	 bwlq_Suf|W|IsString,	{ Acc, AnyMem|EsSeg, 0} },
518b55d4692Sfgsch {"ssto",   0,	0xaa, X, 0,	 bwlq_Suf|W|IsString,	{ 0, 0, 0} },
519b55d4692Sfgsch {"ssto",   1,	0xaa, X, 0,	 bwlq_Suf|W|IsString,	{ AnyMem|EsSeg, 0, 0} },
520b55d4692Sfgsch {"ssto",   2,	0xaa, X, 0,	 bwlq_Suf|W|IsString,	{ Acc, AnyMem|EsSeg, 0} },
521b55d4692Sfgsch {"xlat",   0,	0xd7, X, 0,	 b_Suf|IsString,	{ 0, 0, 0} },
522b55d4692Sfgsch {"xlat",   1,	0xd7, X, 0,	 b_Suf|IsString,	{ AnyMem, 0, 0} },
5232159047fSniklas 
524b305b0f1Sespie /* Bit manipulation.  */
525b55d4692Sfgsch {"bsf",	   2, 0x0fbc, X, Cpu386, wlq_Suf|Modrm,		{ WordReg|WordMem, WordReg, 0} },
526b55d4692Sfgsch {"bsr",	   2, 0x0fbd, X, Cpu386, wlq_Suf|Modrm,		{ WordReg|WordMem, WordReg, 0} },
527b55d4692Sfgsch {"bt",	   2, 0x0fa3, X, Cpu386, wlq_Suf|Modrm,		{ WordReg, WordReg|WordMem, 0} },
528b55d4692Sfgsch {"bt",	   2, 0x0fba, 4, Cpu386, wlq_Suf|Modrm,		{ Imm8, WordReg|WordMem, 0} },
529b55d4692Sfgsch {"btc",	   2, 0x0fbb, X, Cpu386, wlq_Suf|Modrm,		{ WordReg, WordReg|WordMem, 0} },
530b55d4692Sfgsch {"btc",	   2, 0x0fba, 7, Cpu386, wlq_Suf|Modrm,		{ Imm8, WordReg|WordMem, 0} },
531b55d4692Sfgsch {"btr",	   2, 0x0fb3, X, Cpu386, wlq_Suf|Modrm,		{ WordReg, WordReg|WordMem, 0} },
532b55d4692Sfgsch {"btr",	   2, 0x0fba, 6, Cpu386, wlq_Suf|Modrm,		{ Imm8, WordReg|WordMem, 0} },
533b55d4692Sfgsch {"bts",	   2, 0x0fab, X, Cpu386, wlq_Suf|Modrm,		{ WordReg, WordReg|WordMem, 0} },
534b55d4692Sfgsch {"bts",	   2, 0x0fba, 5, Cpu386, wlq_Suf|Modrm,		{ Imm8, WordReg|WordMem, 0} },
5352159047fSniklas 
536b305b0f1Sespie /* Interrupts & op. sys insns.  */
5372159047fSniklas /* See gas/config/tc-i386.c for conversion of 'int $3' into the special
5382159047fSniklas    int 3 insn.  */
5392159047fSniklas #define INT_OPCODE 0xcd
5402159047fSniklas #define INT3_OPCODE 0xcc
541b55d4692Sfgsch {"int",	   1,	0xcd, X, 0,	 NoSuf,			{ Imm8, 0, 0} },
542b55d4692Sfgsch {"int3",   0,	0xcc, X, 0,	 NoSuf,			{ 0, 0, 0} },
543b55d4692Sfgsch {"into",   0,	0xce, X, 0,	 NoSuf,			{ 0, 0, 0} },
544b55d4692Sfgsch {"iret",   0,	0xcf, X, 0,	 wlq_Suf|DefaultSize,	{ 0, 0, 0} },
545b305b0f1Sespie /* i386sl, i486sl, later 486, and Pentium.  */
546b55d4692Sfgsch {"rsm",	   0, 0x0faa, X, Cpu386, NoSuf,			{ 0, 0, 0} },
5472159047fSniklas 
548b55d4692Sfgsch {"bound",  2,	0x62, X, Cpu186, wlq_Suf|Modrm,		{ WordReg, WordMem, 0} },
5492159047fSniklas 
550b55d4692Sfgsch {"hlt",	   0,	0xf4, X, 0,	 NoSuf,			{ 0, 0, 0} },
551b305b0f1Sespie /* nop is actually 'xchgl %eax, %eax'.  */
552b55d4692Sfgsch {"nop",	   0,	0x90, X, 0,	 NoSuf,			{ 0, 0, 0} },
5532159047fSniklas 
554b305b0f1Sespie /* Protection control.  */
555b55d4692Sfgsch {"arpl",   2,	0x63, X, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16, Reg16|ShortMem, 0} },
556b55d4692Sfgsch {"lar",	   2, 0x0f02, X, Cpu286, wlq_Suf|Modrm,		{ WordReg|WordMem, WordReg, 0} },
557b55d4692Sfgsch {"lgdt",   1, 0x0f01, 2, Cpu286, wlq_Suf|Modrm,		{ WordMem, 0, 0} },
558b55d4692Sfgsch {"lidt",   1, 0x0f01, 3, Cpu286, wlq_Suf|Modrm,		{ WordMem, 0, 0} },
559b55d4692Sfgsch {"lldt",   1, 0x0f00, 2, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} },
560b55d4692Sfgsch {"lmsw",   1, 0x0f01, 6, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} },
561b55d4692Sfgsch {"lsl",	   2, 0x0f03, X, Cpu286, wlq_Suf|Modrm,		{ WordReg|WordMem, WordReg, 0} },
562b55d4692Sfgsch {"ltr",	   1, 0x0f00, 3, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} },
5632159047fSniklas 
564b55d4692Sfgsch {"sgdt",   1, 0x0f01, 0, Cpu286, wlq_Suf|Modrm,		{ WordMem, 0, 0} },
565b55d4692Sfgsch {"sidt",   1, 0x0f01, 1, Cpu286, wlq_Suf|Modrm,		{ WordMem, 0, 0} },
566c074d1c9Sdrahn {"sldt",   1, 0x0f00, 0, Cpu286, wlq_Suf|Modrm,		{ WordReg|InvMem, 0, 0} },
567c074d1c9Sdrahn {"sldt",   1, 0x0f00, 0, Cpu286, w_Suf|Modrm|IgnoreSize,{ ShortMem, 0, 0} },
568c074d1c9Sdrahn {"smsw",   1, 0x0f01, 4, Cpu286, wlq_Suf|Modrm,		{ WordReg|InvMem, 0, 0} },
569c074d1c9Sdrahn {"smsw",   1, 0x0f01, 4, Cpu286, w_Suf|Modrm|IgnoreSize,{ ShortMem, 0, 0} },
570c074d1c9Sdrahn {"str",	   1, 0x0f00, 1, Cpu286, wlq_Suf|Modrm,		{ WordReg|InvMem, 0, 0} },
571c074d1c9Sdrahn {"str",	   1, 0x0f00, 1, Cpu286, w_Suf|Modrm|IgnoreSize,{ ShortMem, 0, 0} },
5722159047fSniklas 
573b55d4692Sfgsch {"verr",   1, 0x0f00, 4, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} },
574b55d4692Sfgsch {"verw",   1, 0x0f00, 5, Cpu286, w_Suf|Modrm|IgnoreSize,{ Reg16|ShortMem, 0, 0} },
5752159047fSniklas 
576b305b0f1Sespie /* Floating point instructions.  */
5772159047fSniklas 
5782159047fSniklas /* load */
579b55d4692Sfgsch {"fld",	   1, 0xd9c0, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
580b55d4692Sfgsch {"fld",	   1,	0xd9, 0, 0,	 sl_FP|FloatMF|Modrm,	{ LongMem|LLongMem, 0, 0} },
581b55d4692Sfgsch {"fld",	   1, 0xd9c0, X, 0,	 l_FP|ShortForm|Ugh,	{ FloatReg, 0, 0} },
582b305b0f1Sespie /* Intel Syntax */
583b55d4692Sfgsch {"fld",    1,	0xdb, 5, 0,	 x_FP|Modrm,		{ LLongMem, 0, 0} },
584b55d4692Sfgsch {"fild",   1,	0xdf, 0, 0,	 sl_FP|FloatMF|Modrm,	{ ShortMem|LongMem, 0, 0} },
585b305b0f1Sespie /* Intel Syntax */
586b55d4692Sfgsch {"fildd",  1,	0xdf, 5, 0,	 FP|Modrm,		{ LLongMem, 0, 0} },
587b55d4692Sfgsch {"fildq",  1,	0xdf, 5, 0,	 FP|Modrm,		{ LLongMem, 0, 0} },
588b55d4692Sfgsch {"fildll", 1,	0xdf, 5, 0,	 FP|Modrm,		{ LLongMem, 0, 0} },
589b55d4692Sfgsch {"fldt",   1,	0xdb, 5, 0,	 FP|Modrm,		{ LLongMem, 0, 0} },
590b55d4692Sfgsch {"fbld",   1,	0xdf, 4, 0,	 FP|Modrm,		{ LLongMem, 0, 0} },
5912159047fSniklas 
5922159047fSniklas /* store (no pop) */
593b55d4692Sfgsch {"fst",	   1, 0xddd0, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
594b55d4692Sfgsch {"fst",	   1,	0xd9, 2, 0,	 sl_FP|FloatMF|Modrm,	{ LongMem|LLongMem, 0, 0} },
595b55d4692Sfgsch {"fst",	   1, 0xddd0, X, 0,	 l_FP|ShortForm|Ugh,	{ FloatReg, 0, 0} },
596b55d4692Sfgsch {"fist",   1,	0xdf, 2, 0,	 sl_FP|FloatMF|Modrm,	{ ShortMem|LongMem, 0, 0} },
5972159047fSniklas 
5982159047fSniklas /* store (with pop) */
599b55d4692Sfgsch {"fstp",   1, 0xddd8, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
600b55d4692Sfgsch {"fstp",   1,	0xd9, 3, 0,	 sl_FP|FloatMF|Modrm,	{ LongMem|LLongMem, 0, 0} },
601b55d4692Sfgsch {"fstp",   1, 0xddd8, X, 0,	 l_FP|ShortForm|Ugh,	{ FloatReg, 0, 0} },
602b305b0f1Sespie /* Intel Syntax */
603b55d4692Sfgsch {"fstp",   1,	0xdb, 7, 0,	 x_FP|Modrm,		{ LLongMem, 0, 0} },
604b55d4692Sfgsch {"fistp",  1,	0xdf, 3, 0,	 sl_FP|FloatMF|Modrm,	{ ShortMem|LongMem, 0, 0} },
605b305b0f1Sespie /* Intel Syntax */
606b55d4692Sfgsch {"fistpd", 1,	0xdf, 7, 0,	 FP|Modrm,		{ LLongMem, 0, 0} },
607b55d4692Sfgsch {"fistpq", 1,	0xdf, 7, 0,	 FP|Modrm,		{ LLongMem, 0, 0} },
608b55d4692Sfgsch {"fistpll",1,	0xdf, 7, 0,	 FP|Modrm,		{ LLongMem, 0, 0} },
609b55d4692Sfgsch {"fstpt",  1,	0xdb, 7, 0,	 FP|Modrm,		{ LLongMem, 0, 0} },
610b55d4692Sfgsch {"fbstp",  1,	0xdf, 6, 0,	 FP|Modrm,		{ LLongMem, 0, 0} },
6112159047fSniklas 
6122159047fSniklas /* exchange %st<n> with %st0 */
613b55d4692Sfgsch {"fxch",   1, 0xd9c8, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
614b305b0f1Sespie /* alias for fxch %st(1) */
615b55d4692Sfgsch {"fxch",   0, 0xd9c9, X, 0,	 FP,			{ 0, 0, 0} },
6162159047fSniklas 
6172159047fSniklas /* comparison (without pop) */
618b55d4692Sfgsch {"fcom",   1, 0xd8d0, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
619b305b0f1Sespie /* alias for fcom %st(1) */
620b55d4692Sfgsch {"fcom",   0, 0xd8d1, X, 0,	 FP,			{ 0, 0, 0} },
621b55d4692Sfgsch {"fcom",   1,	0xd8, 2, 0,	 sl_FP|FloatMF|Modrm,	{ LongMem|LLongMem, 0, 0} },
622b55d4692Sfgsch {"fcom",   1, 0xd8d0, X, 0,	 l_FP|ShortForm|Ugh,	{ FloatReg, 0, 0} },
623b55d4692Sfgsch {"ficom",  1,	0xde, 2, 0,	 sl_FP|FloatMF|Modrm,	{ ShortMem|LongMem, 0, 0} },
6242159047fSniklas 
6252159047fSniklas /* comparison (with pop) */
626b55d4692Sfgsch {"fcomp",  1, 0xd8d8, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
627b305b0f1Sespie /* alias for fcomp %st(1) */
628b55d4692Sfgsch {"fcomp",  0, 0xd8d9, X, 0,	 FP,			{ 0, 0, 0} },
629b55d4692Sfgsch {"fcomp",  1,	0xd8, 3, 0,	 sl_FP|FloatMF|Modrm,	{ LongMem|LLongMem, 0, 0} },
630b55d4692Sfgsch {"fcomp",  1, 0xd8d8, X, 0,	 l_FP|ShortForm|Ugh,	{ FloatReg, 0, 0} },
631b55d4692Sfgsch {"ficomp", 1,	0xde, 3, 0,	 sl_FP|FloatMF|Modrm,	{ ShortMem|LongMem, 0, 0} },
632b55d4692Sfgsch {"fcompp", 0, 0xded9, X, 0,	 FP,			{ 0, 0, 0} },
6332159047fSniklas 
6342159047fSniklas /* unordered comparison (with pop) */
635b55d4692Sfgsch {"fucom",  1, 0xdde0, X, Cpu286, FP|ShortForm,		{ FloatReg, 0, 0} },
636b305b0f1Sespie /* alias for fucom %st(1) */
637b55d4692Sfgsch {"fucom",  0, 0xdde1, X, Cpu286, FP,			{ 0, 0, 0} },
638b55d4692Sfgsch {"fucomp", 1, 0xdde8, X, Cpu286, FP|ShortForm,		{ FloatReg, 0, 0} },
639b305b0f1Sespie /* alias for fucomp %st(1) */
640b55d4692Sfgsch {"fucomp", 0, 0xdde9, X, Cpu286, FP,			{ 0, 0, 0} },
641b55d4692Sfgsch {"fucompp",0, 0xdae9, X, Cpu286, FP,			{ 0, 0, 0} },
6422159047fSniklas 
643b55d4692Sfgsch {"ftst",   0, 0xd9e4, X, 0,	 FP,			{ 0, 0, 0} },
644b55d4692Sfgsch {"fxam",   0, 0xd9e5, X, 0,	 FP,			{ 0, 0, 0} },
6452159047fSniklas 
6462159047fSniklas /* load constants into %st0 */
647b55d4692Sfgsch {"fld1",   0, 0xd9e8, X, 0,	 FP,			{ 0, 0, 0} },
648b55d4692Sfgsch {"fldl2t", 0, 0xd9e9, X, 0,	 FP,			{ 0, 0, 0} },
649b55d4692Sfgsch {"fldl2e", 0, 0xd9ea, X, 0,	 FP,			{ 0, 0, 0} },
650b55d4692Sfgsch {"fldpi",  0, 0xd9eb, X, 0,	 FP,			{ 0, 0, 0} },
651b55d4692Sfgsch {"fldlg2", 0, 0xd9ec, X, 0,	 FP,			{ 0, 0, 0} },
652b55d4692Sfgsch {"fldln2", 0, 0xd9ed, X, 0,	 FP,			{ 0, 0, 0} },
653b55d4692Sfgsch {"fldz",   0, 0xd9ee, X, 0,	 FP,			{ 0, 0, 0} },
6542159047fSniklas 
6552159047fSniklas /* arithmetic */
6562159047fSniklas 
6572159047fSniklas /* add */
658b55d4692Sfgsch {"fadd",   2, 0xd8c0, X, 0,	 FP|ShortForm|FloatD,	{ FloatReg, FloatAcc, 0} },
659b305b0f1Sespie /* alias for fadd %st(i), %st */
660b55d4692Sfgsch {"fadd",   1, 0xd8c0, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
661b305b0f1Sespie #if SYSV386_COMPAT
662b305b0f1Sespie /* alias for faddp */
663b55d4692Sfgsch {"fadd",   0, 0xdec1, X, 0,	 FP|Ugh,		{ 0, 0, 0} },
664b305b0f1Sespie #endif
665b55d4692Sfgsch {"fadd",   1,	0xd8, 0, 0,	 sl_FP|FloatMF|Modrm,	{ LongMem|LLongMem, 0, 0} },
666b55d4692Sfgsch {"fiadd",  1,	0xde, 0, 0,	 sl_FP|FloatMF|Modrm,	{ ShortMem|LongMem, 0, 0} },
6672159047fSniklas 
668b55d4692Sfgsch {"faddp",  2, 0xdec0, X, 0,	 FP|ShortForm,		{ FloatAcc, FloatReg, 0} },
669b55d4692Sfgsch {"faddp",  1, 0xdec0, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
670b305b0f1Sespie /* alias for faddp %st, %st(1) */
671b55d4692Sfgsch {"faddp",  0, 0xdec1, X, 0,	 FP,			{ 0, 0, 0} },
672b55d4692Sfgsch {"faddp",  2, 0xdec0, X, 0,	 FP|ShortForm|Ugh,	{ FloatReg, FloatAcc, 0} },
6732159047fSniklas 
674b305b0f1Sespie /* subtract */
675b55d4692Sfgsch {"fsub",   2, 0xd8e0, X, 0,	 FP|ShortForm|FloatDR,	{ FloatReg, FloatAcc, 0} },
676b55d4692Sfgsch {"fsub",   1, 0xd8e0, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
677b305b0f1Sespie #if SYSV386_COMPAT
678b305b0f1Sespie /* alias for fsubp */
679b55d4692Sfgsch {"fsub",   0, 0xdee1, X, 0,	 FP|Ugh,		{ 0, 0, 0} },
6802159047fSniklas #endif
681b55d4692Sfgsch {"fsub",   1,	0xd8, 4, 0,	 sl_FP|FloatMF|Modrm,	{ LongMem|LLongMem, 0, 0} },
682b55d4692Sfgsch {"fisub",  1,	0xde, 4, 0,	 sl_FP|FloatMF|Modrm,	{ ShortMem|LongMem, 0, 0} },
6832159047fSniklas 
684b305b0f1Sespie #if SYSV386_COMPAT
685b55d4692Sfgsch {"fsubp",  2, 0xdee0, X, 0,	 FP|ShortForm,		{ FloatAcc, FloatReg, 0} },
686b55d4692Sfgsch {"fsubp",  1, 0xdee0, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
687b55d4692Sfgsch {"fsubp",  0, 0xdee1, X, 0,	 FP,			{ 0, 0, 0} },
688b305b0f1Sespie #if OLDGCC_COMPAT
689b55d4692Sfgsch {"fsubp",  2, 0xdee0, X, 0,	 FP|ShortForm|Ugh,	{ FloatReg, FloatAcc, 0} },
6902159047fSniklas #endif
6912159047fSniklas #else
692b55d4692Sfgsch {"fsubp",  2, 0xdee8, X, 0,	 FP|ShortForm,		{ FloatAcc, FloatReg, 0} },
693b55d4692Sfgsch {"fsubp",  1, 0xdee8, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
694b55d4692Sfgsch {"fsubp",  0, 0xdee9, X, 0,	 FP,			{ 0, 0, 0} },
6952159047fSniklas #endif
6962159047fSniklas 
697b305b0f1Sespie /* subtract reverse */
698b55d4692Sfgsch {"fsubr",  2, 0xd8e8, X, 0,	 FP|ShortForm|FloatDR,	{ FloatReg, FloatAcc, 0} },
699b55d4692Sfgsch {"fsubr",  1, 0xd8e8, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
700b305b0f1Sespie #if SYSV386_COMPAT
701b305b0f1Sespie /* alias for fsubrp */
702b55d4692Sfgsch {"fsubr",  0, 0xdee9, X, 0,	 FP|Ugh,		{ 0, 0, 0} },
703b305b0f1Sespie #endif
704b55d4692Sfgsch {"fsubr",  1,	0xd8, 5, 0,	 sl_FP|FloatMF|Modrm,	{ LongMem|LLongMem, 0, 0} },
705b55d4692Sfgsch {"fisubr", 1,	0xde, 5, 0,	 sl_FP|FloatMF|Modrm,	{ ShortMem|LongMem, 0, 0} },
706b305b0f1Sespie 
707b305b0f1Sespie #if SYSV386_COMPAT
708b55d4692Sfgsch {"fsubrp", 2, 0xdee8, X, 0,	 FP|ShortForm,		{ FloatAcc, FloatReg, 0} },
709b55d4692Sfgsch {"fsubrp", 1, 0xdee8, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
710b55d4692Sfgsch {"fsubrp", 0, 0xdee9, X, 0,	 FP,			{ 0, 0, 0} },
711b305b0f1Sespie #if OLDGCC_COMPAT
712b55d4692Sfgsch {"fsubrp", 2, 0xdee8, X, 0,	 FP|ShortForm|Ugh,	{ FloatReg, FloatAcc, 0} },
713b305b0f1Sespie #endif
7142159047fSniklas #else
715b55d4692Sfgsch {"fsubrp", 2, 0xdee0, X, 0,	 FP|ShortForm,		{ FloatAcc, FloatReg, 0} },
716b55d4692Sfgsch {"fsubrp", 1, 0xdee0, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
717b55d4692Sfgsch {"fsubrp", 0, 0xdee1, X, 0,	 FP,			{ 0, 0, 0} },
7182159047fSniklas #endif
719b305b0f1Sespie 
720b305b0f1Sespie /* multiply */
721b55d4692Sfgsch {"fmul",   2, 0xd8c8, X, 0,	 FP|ShortForm|FloatD,	{ FloatReg, FloatAcc, 0} },
722b55d4692Sfgsch {"fmul",   1, 0xd8c8, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
723b305b0f1Sespie #if SYSV386_COMPAT
724b305b0f1Sespie /* alias for fmulp */
725b55d4692Sfgsch {"fmul",   0, 0xdec9, X, 0,	 FP|Ugh,		{ 0, 0, 0} },
726b305b0f1Sespie #endif
727b55d4692Sfgsch {"fmul",   1,	0xd8, 1, 0,	 sl_FP|FloatMF|Modrm,	{ LongMem|LLongMem, 0, 0} },
728b55d4692Sfgsch {"fimul",  1,	0xde, 1, 0,	 sl_FP|FloatMF|Modrm,	{ ShortMem|LongMem, 0, 0} },
729b305b0f1Sespie 
730b55d4692Sfgsch {"fmulp",  2, 0xdec8, X, 0,	 FP|ShortForm,		{ FloatAcc, FloatReg, 0} },
731b55d4692Sfgsch {"fmulp",  1, 0xdec8, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
732b55d4692Sfgsch {"fmulp",  0, 0xdec9, X, 0,	 FP,			{ 0, 0, 0} },
733b55d4692Sfgsch {"fmulp",  2, 0xdec8, X, 0,	 FP|ShortForm|Ugh,	{ FloatReg, FloatAcc, 0} },
734b305b0f1Sespie 
735b305b0f1Sespie /* divide */
736b55d4692Sfgsch {"fdiv",   2, 0xd8f0, X, 0,	 FP|ShortForm|FloatDR,	{ FloatReg, FloatAcc, 0} },
737b55d4692Sfgsch {"fdiv",   1, 0xd8f0, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
738b305b0f1Sespie #if SYSV386_COMPAT
739b305b0f1Sespie /* alias for fdivp */
740b55d4692Sfgsch {"fdiv",   0, 0xdef1, X, 0,	 FP|Ugh,		{ 0, 0, 0} },
741b305b0f1Sespie #endif
742b55d4692Sfgsch {"fdiv",   1,	0xd8, 6, 0,	 sl_FP|FloatMF|Modrm,	{ LongMem|LLongMem, 0, 0} },
743b55d4692Sfgsch {"fidiv",  1,	0xde, 6, 0,	 sl_FP|FloatMF|Modrm,	{ ShortMem|LongMem, 0, 0} },
744b305b0f1Sespie 
745b305b0f1Sespie #if SYSV386_COMPAT
746b55d4692Sfgsch {"fdivp",  2, 0xdef0, X, 0,	 FP|ShortForm,		{ FloatAcc, FloatReg, 0} },
747b55d4692Sfgsch {"fdivp",  1, 0xdef0, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
748b55d4692Sfgsch {"fdivp",  0, 0xdef1, X, 0,	 FP,			{ 0, 0, 0} },
749b305b0f1Sespie #if OLDGCC_COMPAT
750b55d4692Sfgsch {"fdivp",  2, 0xdef0, X, 0,	 FP|ShortForm|Ugh,	{ FloatReg, FloatAcc, 0} },
751b305b0f1Sespie #endif
7522159047fSniklas #else
753b55d4692Sfgsch {"fdivp",  2, 0xdef8, X, 0,	 FP|ShortForm,		{ FloatAcc, FloatReg, 0} },
754b55d4692Sfgsch {"fdivp",  1, 0xdef8, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
755b55d4692Sfgsch {"fdivp",  0, 0xdef9, X, 0,	 FP,			{ 0, 0, 0} },
7562159047fSniklas #endif
7572159047fSniklas 
758b305b0f1Sespie /* divide reverse */
759b55d4692Sfgsch {"fdivr",  2, 0xd8f8, X, 0,	 FP|ShortForm|FloatDR,	{ FloatReg, FloatAcc, 0} },
760b55d4692Sfgsch {"fdivr",  1, 0xd8f8, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
761b305b0f1Sespie #if SYSV386_COMPAT
762b305b0f1Sespie /* alias for fdivrp */
763b55d4692Sfgsch {"fdivr",  0, 0xdef9, X, 0,	 FP|Ugh,		{ 0, 0, 0} },
764b305b0f1Sespie #endif
765b55d4692Sfgsch {"fdivr",  1,	0xd8, 7, 0,	 sl_FP|FloatMF|Modrm,	{ LongMem|LLongMem, 0, 0} },
766b55d4692Sfgsch {"fidivr", 1,	0xde, 7, 0,	 sl_FP|FloatMF|Modrm,	{ ShortMem|LongMem, 0, 0} },
7672159047fSniklas 
768b305b0f1Sespie #if SYSV386_COMPAT
769b55d4692Sfgsch {"fdivrp", 2, 0xdef8, X, 0,	 FP|ShortForm,		{ FloatAcc, FloatReg, 0} },
770b55d4692Sfgsch {"fdivrp", 1, 0xdef8, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
771b55d4692Sfgsch {"fdivrp", 0, 0xdef9, X, 0,	 FP,			{ 0, 0, 0} },
772b305b0f1Sespie #if OLDGCC_COMPAT
773b55d4692Sfgsch {"fdivrp", 2, 0xdef8, X, 0,	 FP|ShortForm|Ugh,	{ FloatReg, FloatAcc, 0} },
774b305b0f1Sespie #endif
775b305b0f1Sespie #else
776b55d4692Sfgsch {"fdivrp", 2, 0xdef0, X, 0,	 FP|ShortForm,		{ FloatAcc, FloatReg, 0} },
777b55d4692Sfgsch {"fdivrp", 1, 0xdef0, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
778b55d4692Sfgsch {"fdivrp", 0, 0xdef1, X, 0,	 FP,			{ 0, 0, 0} },
779b305b0f1Sespie #endif
780b305b0f1Sespie 
781b55d4692Sfgsch {"f2xm1",  0, 0xd9f0, X, 0,	 FP,			{ 0, 0, 0} },
782b55d4692Sfgsch {"fyl2x",  0, 0xd9f1, X, 0,	 FP,			{ 0, 0, 0} },
783b55d4692Sfgsch {"fptan",  0, 0xd9f2, X, 0,	 FP,			{ 0, 0, 0} },
784b55d4692Sfgsch {"fpatan", 0, 0xd9f3, X, 0,	 FP,			{ 0, 0, 0} },
785b55d4692Sfgsch {"fxtract",0, 0xd9f4, X, 0,	 FP,			{ 0, 0, 0} },
786b55d4692Sfgsch {"fprem1", 0, 0xd9f5, X, Cpu286, FP,			{ 0, 0, 0} },
787b55d4692Sfgsch {"fdecstp",0, 0xd9f6, X, 0,	 FP,			{ 0, 0, 0} },
788b55d4692Sfgsch {"fincstp",0, 0xd9f7, X, 0,	 FP,			{ 0, 0, 0} },
789b55d4692Sfgsch {"fprem",  0, 0xd9f8, X, 0,	 FP,			{ 0, 0, 0} },
790b55d4692Sfgsch {"fyl2xp1",0, 0xd9f9, X, 0,	 FP,			{ 0, 0, 0} },
791b55d4692Sfgsch {"fsqrt",  0, 0xd9fa, X, 0,	 FP,			{ 0, 0, 0} },
792b55d4692Sfgsch {"fsincos",0, 0xd9fb, X, Cpu286, FP,			{ 0, 0, 0} },
793b55d4692Sfgsch {"frndint",0, 0xd9fc, X, 0,	 FP,			{ 0, 0, 0} },
794b55d4692Sfgsch {"fscale", 0, 0xd9fd, X, 0,	 FP,			{ 0, 0, 0} },
795b55d4692Sfgsch {"fsin",   0, 0xd9fe, X, Cpu286, FP,			{ 0, 0, 0} },
796b55d4692Sfgsch {"fcos",   0, 0xd9ff, X, Cpu286, FP,			{ 0, 0, 0} },
797b55d4692Sfgsch {"fchs",   0, 0xd9e0, X, 0,	 FP,			{ 0, 0, 0} },
798b55d4692Sfgsch {"fabs",   0, 0xd9e1, X, 0,	 FP,			{ 0, 0, 0} },
7992159047fSniklas 
8002159047fSniklas /* processor control */
801b55d4692Sfgsch {"fninit", 0, 0xdbe3, X, 0,	 FP,			{ 0, 0, 0} },
802b55d4692Sfgsch {"finit",  0, 0xdbe3, X, 0,	 FP|FWait,		{ 0, 0, 0} },
803b55d4692Sfgsch {"fldcw",  1,	0xd9, 5, 0,	 FP|Modrm,		{ ShortMem, 0, 0} },
804b55d4692Sfgsch {"fnstcw", 1,	0xd9, 7, 0,	 FP|Modrm,		{ ShortMem, 0, 0} },
805b55d4692Sfgsch {"fstcw",  1,	0xd9, 7, 0,	 FP|FWait|Modrm,	{ ShortMem, 0, 0} },
806b55d4692Sfgsch {"fnstsw", 1, 0xdfe0, X, 0,	 FP,			{ Acc, 0, 0} },
807b55d4692Sfgsch {"fnstsw", 1,	0xdd, 7, 0,	 FP|Modrm,		{ ShortMem, 0, 0} },
808b55d4692Sfgsch {"fnstsw", 0, 0xdfe0, X, 0,	 FP,			{ 0, 0, 0} },
809b55d4692Sfgsch {"fstsw",  1, 0xdfe0, X, 0,	 FP|FWait,		{ Acc, 0, 0} },
810b55d4692Sfgsch {"fstsw",  1,	0xdd, 7, 0,	 FP|FWait|Modrm,	{ ShortMem, 0, 0} },
811b55d4692Sfgsch {"fstsw",  0, 0xdfe0, X, 0,	 FP|FWait,		{ 0, 0, 0} },
812b55d4692Sfgsch {"fnclex", 0, 0xdbe2, X, 0,	 FP,			{ 0, 0, 0} },
813b55d4692Sfgsch {"fclex",  0, 0xdbe2, X, 0,	 FP|FWait,		{ 0, 0, 0} },
814b305b0f1Sespie /* Short forms of fldenv, fstenv use data size prefix.  */
815b55d4692Sfgsch {"fnstenv",1,	0xd9, 6, 0,	 sl_Suf|Modrm,		{ LLongMem, 0, 0} },
816b55d4692Sfgsch {"fstenv", 1,	0xd9, 6, 0,	 sl_Suf|FWait|Modrm,	{ LLongMem, 0, 0} },
817b55d4692Sfgsch {"fldenv", 1,	0xd9, 4, 0,	 sl_Suf|Modrm,		{ LLongMem, 0, 0} },
818b55d4692Sfgsch {"fnsave", 1,	0xdd, 6, 0,	 sl_Suf|Modrm,		{ LLongMem, 0, 0} },
819b55d4692Sfgsch {"fsave",  1,	0xdd, 6, 0,	 sl_Suf|FWait|Modrm,	{ LLongMem, 0, 0} },
820b55d4692Sfgsch {"frstor", 1,	0xdd, 4, 0,	 sl_Suf|Modrm,		{ LLongMem, 0, 0} },
8212159047fSniklas 
822b55d4692Sfgsch {"ffree",  1, 0xddc0, X, 0,	 FP|ShortForm,		{ FloatReg, 0, 0} },
8230c6d0228Sniklas /* P6:free st(i), pop st */
824b55d4692Sfgsch {"ffreep", 1, 0xdfc0, X, Cpu686, FP|ShortForm,		{ FloatReg, 0, 0} },
825b55d4692Sfgsch {"fnop",   0, 0xd9d0, X, 0,	 FP,			{ 0, 0, 0} },
826b305b0f1Sespie #define FWAIT_OPCODE 0x9b
827b55d4692Sfgsch {"fwait",  0,	0x9b, X, 0,	 FP,			{ 0, 0, 0} },
8282159047fSniklas 
829b305b0f1Sespie /* Opcode prefixes; we allow them as separate insns too.  */
8302159047fSniklas 
831b305b0f1Sespie #define ADDR_PREFIX_OPCODE 0x67
832b55d4692Sfgsch {"addr16", 0,	0x67, X, Cpu386, NoSuf|IsPrefix|Size16|IgnoreSize,	{ 0, 0, 0} },
833b55d4692Sfgsch {"addr32", 0,	0x67, X, Cpu386, NoSuf|IsPrefix|Size32|IgnoreSize,	{ 0, 0, 0} },
834b55d4692Sfgsch {"aword",  0,	0x67, X, Cpu386, NoSuf|IsPrefix|Size16|IgnoreSize,	{ 0, 0, 0} },
835b55d4692Sfgsch {"adword", 0,	0x67, X, Cpu386, NoSuf|IsPrefix|Size32|IgnoreSize,	{ 0, 0, 0} },
836b305b0f1Sespie #define DATA_PREFIX_OPCODE 0x66
837b55d4692Sfgsch {"data16", 0,	0x66, X, Cpu386, NoSuf|IsPrefix|Size16|IgnoreSize,	{ 0, 0, 0} },
838b55d4692Sfgsch {"data32", 0,	0x66, X, Cpu386, NoSuf|IsPrefix|Size32|IgnoreSize,	{ 0, 0, 0} },
839b55d4692Sfgsch {"word",   0,	0x66, X, Cpu386, NoSuf|IsPrefix|Size16|IgnoreSize,	{ 0, 0, 0} },
840b55d4692Sfgsch {"dword",  0,	0x66, X, Cpu386, NoSuf|IsPrefix|Size32|IgnoreSize,	{ 0, 0, 0} },
841b305b0f1Sespie #define LOCK_PREFIX_OPCODE 0xf0
842b55d4692Sfgsch {"lock",   0,	0xf0, X, 0,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
843b55d4692Sfgsch {"wait",   0,   0x9b, X, 0,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
844b305b0f1Sespie #define CS_PREFIX_OPCODE 0x2e
845b55d4692Sfgsch {"cs",	   0,	0x2e, X, 0,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
846b305b0f1Sespie #define DS_PREFIX_OPCODE 0x3e
847b55d4692Sfgsch {"ds",	   0,	0x3e, X, 0,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
848b305b0f1Sespie #define ES_PREFIX_OPCODE 0x26
849b55d4692Sfgsch {"es",	   0,	0x26, X, 0,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
850b305b0f1Sespie #define FS_PREFIX_OPCODE 0x64
851b55d4692Sfgsch {"fs",	   0,	0x64, X, Cpu386, NoSuf|IsPrefix,	{ 0, 0, 0} },
852b305b0f1Sespie #define GS_PREFIX_OPCODE 0x65
853b55d4692Sfgsch {"gs",	   0,	0x65, X, Cpu386, NoSuf|IsPrefix,	{ 0, 0, 0} },
854b305b0f1Sespie #define SS_PREFIX_OPCODE 0x36
855b55d4692Sfgsch {"ss",	   0,	0x36, X, 0,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
856b305b0f1Sespie #define REPNE_PREFIX_OPCODE 0xf2
857b305b0f1Sespie #define REPE_PREFIX_OPCODE  0xf3
858b55d4692Sfgsch {"rep",	   0,	0xf3, X, 0,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
859b55d4692Sfgsch {"repe",   0,	0xf3, X, 0,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
860b55d4692Sfgsch {"repz",   0,	0xf3, X, 0,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
861b55d4692Sfgsch {"repne",  0,	0xf2, X, 0,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
862b55d4692Sfgsch {"repnz",  0,	0xf2, X, 0,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
863b55d4692Sfgsch {"rex",    0,	0x40, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
864b55d4692Sfgsch {"rexz",   0,	0x41, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
865b55d4692Sfgsch {"rexy",   0,	0x42, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
866b55d4692Sfgsch {"rexyz",  0,	0x43, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
867b55d4692Sfgsch {"rexx",   0,	0x44, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
868b55d4692Sfgsch {"rexxz",  0,	0x45, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
869b55d4692Sfgsch {"rexxy",  0,	0x46, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
870b55d4692Sfgsch {"rexxyz", 0,	0x47, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
871b55d4692Sfgsch {"rex64",  0,	0x48, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
872b55d4692Sfgsch {"rex64z", 0,	0x49, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
873b55d4692Sfgsch {"rex64y", 0,	0x4a, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
874b55d4692Sfgsch {"rex64yz",0,	0x4b, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
875b55d4692Sfgsch {"rex64x", 0,	0x4c, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
876b55d4692Sfgsch {"rex64xz",0,	0x4d, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
877b55d4692Sfgsch {"rex64xy",0,	0x4e, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
878b55d4692Sfgsch {"rex64xyz",0,	0x4f, X, Cpu64,	 NoSuf|IsPrefix,	{ 0, 0, 0} },
8792159047fSniklas 
880b305b0f1Sespie /* 486 extensions.  */
8812159047fSniklas 
882b55d4692Sfgsch {"bswap",   1, 0x0fc8, X, Cpu486, lq_Suf|ShortForm,	{ Reg32|Reg64, 0, 0 } },
883b55d4692Sfgsch {"xadd",    2, 0x0fc0, X, Cpu486, bwlq_Suf|W|Modrm,	{ Reg, Reg|AnyMem, 0 } },
884b55d4692Sfgsch {"cmpxchg", 2, 0x0fb0, X, Cpu486, bwlq_Suf|W|Modrm,	{ Reg, Reg|AnyMem, 0 } },
885b55d4692Sfgsch {"invd",    0, 0x0f08, X, Cpu486, NoSuf,		{ 0, 0, 0} },
886b55d4692Sfgsch {"wbinvd",  0, 0x0f09, X, Cpu486, NoSuf,		{ 0, 0, 0} },
887b55d4692Sfgsch {"invlpg",  1, 0x0f01, 7, Cpu486, NoSuf|Modrm,		{ AnyMem, 0, 0} },
8882159047fSniklas 
889b305b0f1Sespie /* 586 and late 486 extensions.  */
890b55d4692Sfgsch {"cpuid",   0, 0x0fa2, X, Cpu486, NoSuf,		{ 0, 0, 0} },
8912159047fSniklas 
892b305b0f1Sespie /* Pentium extensions.  */
893b55d4692Sfgsch {"wrmsr",   0, 0x0f30, X, Cpu586, NoSuf,		{ 0, 0, 0} },
894b55d4692Sfgsch {"rdtsc",   0, 0x0f31, X, Cpu586, NoSuf,		{ 0, 0, 0} },
895b55d4692Sfgsch {"rdmsr",   0, 0x0f32, X, Cpu586, NoSuf,		{ 0, 0, 0} },
896b55d4692Sfgsch {"cmpxchg8b",1,0x0fc7, 1, Cpu586, NoSuf|Modrm,		{ LLongMem, 0, 0} },
897c88b1d6cSniklas 
898b305b0f1Sespie /* Pentium II/Pentium Pro extensions.  */
899007c2a45Smiod {"sysenter",0, 0x0f34, X, Cpu686, NoSuf,		{ 0, 0, 0} },
900007c2a45Smiod {"sysexit", 0, 0x0f35, X, Cpu686, NoSuf,		{ 0, 0, 0} },
901b55d4692Sfgsch {"fxsave",  1, 0x0fae, 0, Cpu686, FP|Modrm,		{ LLongMem, 0, 0} },
902b55d4692Sfgsch {"fxrstor", 1, 0x0fae, 1, Cpu686, FP|Modrm,		{ LLongMem, 0, 0} },
903b55d4692Sfgsch {"rdpmc",   0, 0x0f33, X, Cpu686, NoSuf,		{ 0, 0, 0} },
904b305b0f1Sespie /* official undefined instr. */
905b55d4692Sfgsch {"ud2",	    0, 0x0f0b, X, Cpu686, NoSuf,		{ 0, 0, 0} },
906b305b0f1Sespie /* alias for ud2 */
907b55d4692Sfgsch {"ud2a",    0, 0x0f0b, X, Cpu686, NoSuf,		{ 0, 0, 0} },
908b305b0f1Sespie /* 2nd. official undefined instr. */
909b55d4692Sfgsch {"ud2b",    0, 0x0fb9, X, Cpu686, NoSuf,		{ 0, 0, 0} },
910c88b1d6cSniklas 
91103da0ce4Sderaadt /* VIA C3 extensions */
91203da0ce4Sderaadt {"xstore-rng",0, 0x0fa7, 0xc0, Cpu686, ImmExt|NoSuf|IsString,  { 0, 0, 0} },
91303da0ce4Sderaadt {"xcrypt-ecb",0, 0x0fa7, 0xc8, Cpu686, ImmExt|NoSuf|IsString,  { 0, 0, 0} },
91403da0ce4Sderaadt {"xcrypt-cbc",0, 0x0fa7, 0xd0, Cpu686, ImmExt|NoSuf|IsString,  { 0, 0, 0} },
9157e5efb86Shshoexer {"xcrypt-ctr",0, 0x0fa7, 0xd8, Cpu686, ImmExt|NoSuf|IsString,  { 0, 0, 0} },
91603da0ce4Sderaadt {"xcrypt-cfb",0, 0x0fa7, 0xe0, Cpu686, ImmExt|NoSuf|IsString,  { 0, 0, 0} },
91703da0ce4Sderaadt {"xcrypt-ofb",0, 0x0fa7, 0xe8, Cpu686, ImmExt|NoSuf|IsString,  { 0, 0, 0} },
91803da0ce4Sderaadt 
9197e5efb86Shshoexer {"montmul",0, 0x0fa6, 0xc0, Cpu686, ImmExt|NoSuf|IsString,  { 0, 0, 0} },
9207e5efb86Shshoexer {"xsha1",0, 0x0fa6, 0xc8, Cpu686, ImmExt|NoSuf|IsString,  { 0, 0, 0} },
9217e5efb86Shshoexer {"xsha256",0, 0x0fa6, 0xd0, Cpu686, ImmExt|NoSuf|IsString,  { 0, 0, 0} },
9227e5efb86Shshoexer 
9237e5efb86Shshoexer 
924b55d4692Sfgsch {"cmovo",   2, 0x0f40, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
925b55d4692Sfgsch {"cmovno",  2, 0x0f41, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
926b55d4692Sfgsch {"cmovb",   2, 0x0f42, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
927b55d4692Sfgsch {"cmovc",   2, 0x0f42, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
928b55d4692Sfgsch {"cmovnae", 2, 0x0f42, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
929b55d4692Sfgsch {"cmovae",  2, 0x0f43, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
930b55d4692Sfgsch {"cmovnc",  2, 0x0f43, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
931b55d4692Sfgsch {"cmovnb",  2, 0x0f43, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
932b55d4692Sfgsch {"cmove",   2, 0x0f44, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
933b55d4692Sfgsch {"cmovz",   2, 0x0f44, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
934b55d4692Sfgsch {"cmovne",  2, 0x0f45, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
935b55d4692Sfgsch {"cmovnz",  2, 0x0f45, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
936b55d4692Sfgsch {"cmovbe",  2, 0x0f46, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
937b55d4692Sfgsch {"cmovna",  2, 0x0f46, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
938b55d4692Sfgsch {"cmova",   2, 0x0f47, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
939b55d4692Sfgsch {"cmovnbe", 2, 0x0f47, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
940b55d4692Sfgsch {"cmovs",   2, 0x0f48, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
941b55d4692Sfgsch {"cmovns",  2, 0x0f49, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
942b55d4692Sfgsch {"cmovp",   2, 0x0f4a, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
943b55d4692Sfgsch {"cmovnp",  2, 0x0f4b, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
944b55d4692Sfgsch {"cmovl",   2, 0x0f4c, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
945b55d4692Sfgsch {"cmovnge", 2, 0x0f4c, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
946b55d4692Sfgsch {"cmovge",  2, 0x0f4d, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
947b55d4692Sfgsch {"cmovnl",  2, 0x0f4d, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
948b55d4692Sfgsch {"cmovle",  2, 0x0f4e, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
949b55d4692Sfgsch {"cmovng",  2, 0x0f4e, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
950b55d4692Sfgsch {"cmovg",   2, 0x0f4f, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
951b55d4692Sfgsch {"cmovnle", 2, 0x0f4f, X, Cpu686, wlq_Suf|Modrm,	{ WordReg|WordMem, WordReg, 0} },
952c88b1d6cSniklas 
953b55d4692Sfgsch {"fcmovb",  2, 0xdac0, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
954b55d4692Sfgsch {"fcmovnae",2, 0xdac0, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
955b55d4692Sfgsch {"fcmove",  2, 0xdac8, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
956b55d4692Sfgsch {"fcmovbe", 2, 0xdad0, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
957b55d4692Sfgsch {"fcmovna", 2, 0xdad0, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
958b55d4692Sfgsch {"fcmovu",  2, 0xdad8, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
959b55d4692Sfgsch {"fcmovae", 2, 0xdbc0, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
960b55d4692Sfgsch {"fcmovnb", 2, 0xdbc0, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
961b55d4692Sfgsch {"fcmovne", 2, 0xdbc8, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
962b55d4692Sfgsch {"fcmova",  2, 0xdbd0, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
963b55d4692Sfgsch {"fcmovnbe",2, 0xdbd0, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
964b55d4692Sfgsch {"fcmovnu", 2, 0xdbd8, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
965c88b1d6cSniklas 
966b55d4692Sfgsch {"fcomi",   2, 0xdbf0, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
967b55d4692Sfgsch {"fcomi",   0, 0xdbf1, X, Cpu686, FP|ShortForm,		{ 0, 0, 0} },
968b55d4692Sfgsch {"fcomi",   1, 0xdbf0, X, Cpu686, FP|ShortForm,		{ FloatReg, 0, 0} },
969b55d4692Sfgsch {"fucomi",  2, 0xdbe8, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
970b55d4692Sfgsch {"fucomi",  0, 0xdbe9, X, Cpu686, FP|ShortForm,		{ 0, 0, 0} },
971b55d4692Sfgsch {"fucomi",  1, 0xdbe8, X, Cpu686, FP|ShortForm,		{ FloatReg, 0, 0} },
972b55d4692Sfgsch {"fcomip",  2, 0xdff0, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
973b55d4692Sfgsch {"fcompi",  2, 0xdff0, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
974b55d4692Sfgsch {"fcompi",  0, 0xdff1, X, Cpu686, FP|ShortForm,		{ 0, 0, 0} },
975b55d4692Sfgsch {"fcompi",  1, 0xdff0, X, Cpu686, FP|ShortForm,		{ FloatReg, 0, 0} },
976b55d4692Sfgsch {"fucomip", 2, 0xdfe8, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
977dab0f388Smiod {"fucomip", 0, 0xdfe9, X, Cpu686, FP|ShortForm,		{ 0, 0, 0} },
978dab0f388Smiod {"fucomip", 1, 0xdfe8, X, Cpu686, FP|ShortForm,		{ FloatReg, 0, 0} },
979b55d4692Sfgsch {"fucompi", 2, 0xdfe8, X, Cpu686, FP|ShortForm,		{ FloatReg, FloatAcc, 0} },
980b55d4692Sfgsch {"fucompi", 0, 0xdfe9, X, Cpu686, FP|ShortForm,		{ 0, 0, 0} },
981b55d4692Sfgsch {"fucompi", 1, 0xdfe8, X, Cpu686, FP|ShortForm,		{ FloatReg, 0, 0} },
982b305b0f1Sespie 
983b55d4692Sfgsch /* Pentium4 extensions.  */
984b305b0f1Sespie 
985b55d4692Sfgsch {"movnti",   2, 0x0fc3,    X, CpuP4, FP|Modrm,		{ WordReg, WordMem, 0 } },
986b55d4692Sfgsch {"clflush",  1, 0x0fae,    7, CpuP4, FP|Modrm, 		{ ByteMem, 0, 0 } },
987b55d4692Sfgsch {"lfence",   0, 0x0fae, 0xe8, CpuP4, FP|ImmExt,		{ 0, 0, 0 } },
988b55d4692Sfgsch {"mfence",   0, 0x0fae, 0xf0, CpuP4, FP|ImmExt,		{ 0, 0, 0 } },
989b55d4692Sfgsch {"pause",    0, 0xf390,    X, CpuP4, FP,		{ 0, 0, 0 } },
990b305b0f1Sespie 
991b55d4692Sfgsch /* MMX/SSE2 instructions.  */
992b55d4692Sfgsch 
993b55d4692Sfgsch {"emms",     0, 0x0f77, X, CpuMMX, FP,			{ 0, 0, 0 } },
994847c9f5dSkettenis /* These really shouldn't allow for Reg64 (movq is the right mnemonic for
995847c9f5dSkettenis    copying between Reg64/Mem64 and RegXMM/RegMMX, as is mandated by Intel's
996847c9f5dSkettenis    spec). AMD's spec, having been in existence for much longer, failed to
997847c9f5dSkettenis    recognize that and specified movd for 32- and 64-bit operations.  */
998847c9f5dSkettenis {"movd",     2, 0x0f6e, X, CpuMMX, FP|Modrm,		{ Reg32|Reg64|LongMem, RegMMX, 0 } },
999847c9f5dSkettenis {"movd",     2, 0x0f7e, X, CpuMMX, FP|Modrm,		{ RegMMX, Reg32|Reg64|LongMem, 0 } },
1000847c9f5dSkettenis {"movd",     2, 0x660f6e,X,CpuSSE2,FP|Modrm,		{ Reg32|Reg64|LLongMem, RegXMM, 0 } },
1001847c9f5dSkettenis {"movd",     2, 0x660f7e,X,CpuSSE2,FP|Modrm,		{ RegXMM, Reg32|Reg64|LLongMem, 0 } },
1002c074d1c9Sdrahn /* In the 64bit mode the short form mov immediate is redefined to have
1003c074d1c9Sdrahn    64bit displacement value.  */
1004847c9f5dSkettenis {"movq",     2, 0x0f6f, X, CpuMMX, FP|Modrm|NoRex64,	{ RegMMX|LongMem, RegMMX, 0 } },
1005847c9f5dSkettenis {"movq",     2, 0x0f7f, X, CpuMMX, FP|Modrm|NoRex64,	{ RegMMX, RegMMX|LongMem, 0 } },
1006847c9f5dSkettenis {"movq",     2, 0xf30f7e,X,CpuSSE2,FP|Modrm|NoRex64,	{ RegXMM|LLongMem, RegXMM, 0 } },
1007847c9f5dSkettenis {"movq",     2, 0x660fd6,X,CpuSSE2,FP|Modrm|NoRex64,	{ RegXMM, RegXMM|LLongMem, 0 } },
1008847c9f5dSkettenis {"movq",     2, 0x0f6e, X, Cpu64,  FP|Modrm,		{ Reg64|LLongMem, RegMMX, 0 } },
1009847c9f5dSkettenis {"movq",     2, 0x0f7e, X, Cpu64,  FP|Modrm,		{ RegMMX, Reg64|LLongMem, 0 } },
1010847c9f5dSkettenis {"movq",     2, 0x660f6e,X,Cpu64,  FP|Modrm,		{ Reg64|LLongMem, RegXMM, 0 } },
1011847c9f5dSkettenis {"movq",     2, 0x660f7e,X,Cpu64,  FP|Modrm,		{ RegXMM, Reg64|LLongMem, 0 } },
1012b55d4692Sfgsch {"movq",   2,	0x88, X, Cpu64,	 NoSuf|D|W|Modrm|Size64,{ Reg64, Reg64|AnyMem, 0 } },
1013b55d4692Sfgsch {"movq",   2,	0xc6, 0, Cpu64,	 NoSuf|W|Modrm|Size64,	{ Imm32S, Reg64|WordMem, 0 } },
1014b55d4692Sfgsch {"movq",   2,	0xb0, X, Cpu64,	 NoSuf|W|ShortForm|Size64,{ Imm64, Reg64, 0 } },
1015b55d4692Sfgsch /* Move to/from control debug registers.  In the 16 or 32bit modes they are 32bit.  In the 64bit
1016b55d4692Sfgsch    mode they are 64bit.*/
1017b55d4692Sfgsch {"movq",   2, 0x0f20, X, Cpu64,	 NoSuf|D|Modrm|IgnoreSize|NoRex64|Size64,{ Control, Reg64|InvMem, 0} },
1018b55d4692Sfgsch {"movq",   2, 0x0f21, X, Cpu64,	 NoSuf|D|Modrm|IgnoreSize|NoRex64|Size64,{ Debug, Reg64|InvMem, 0} },
1019b55d4692Sfgsch {"packssdw", 2, 0x0f6b, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1020b55d4692Sfgsch {"packssdw", 2, 0x660f6b,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1021b55d4692Sfgsch {"packsswb", 2, 0x0f63, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1022b55d4692Sfgsch {"packsswb", 2, 0x660f63,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1023b55d4692Sfgsch {"packuswb", 2, 0x0f67, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1024b55d4692Sfgsch {"packuswb", 2, 0x660f67,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1025b55d4692Sfgsch {"paddb",    2, 0x0ffc, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1026b55d4692Sfgsch {"paddb",    2, 0x660ffc,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1027b55d4692Sfgsch {"paddw",    2, 0x0ffd, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1028b55d4692Sfgsch {"paddw",    2, 0x660ffd,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1029b55d4692Sfgsch {"paddd",    2, 0x0ffe, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1030b55d4692Sfgsch {"paddd",    2, 0x660ffe,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1031b55d4692Sfgsch {"paddq",    2, 0x0fd4, X, CpuMMX, FP|Modrm,		{ RegMMX|LLongMem, RegMMX, 0 } },
1032b55d4692Sfgsch {"paddq",    2, 0x660fd4,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1033b55d4692Sfgsch {"paddsb",   2, 0x0fec, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1034b55d4692Sfgsch {"paddsb",   2, 0x660fec,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1035b55d4692Sfgsch {"paddsw",   2, 0x0fed, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1036b55d4692Sfgsch {"paddsw",   2, 0x660fed,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1037b55d4692Sfgsch {"paddusb",  2, 0x0fdc, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1038b55d4692Sfgsch {"paddusb",  2, 0x660fdc,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1039b55d4692Sfgsch {"paddusw",  2, 0x0fdd, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1040b55d4692Sfgsch {"paddusw",  2, 0x660fdd,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1041b55d4692Sfgsch {"pand",     2, 0x0fdb, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1042b55d4692Sfgsch {"pand",     2, 0x660fdb,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1043b55d4692Sfgsch {"pandn",    2, 0x0fdf, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1044b55d4692Sfgsch {"pandn",    2, 0x660fdf,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1045b55d4692Sfgsch {"pcmpeqb",  2, 0x0f74, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1046b55d4692Sfgsch {"pcmpeqb",  2, 0x660f74,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1047b55d4692Sfgsch {"pcmpeqw",  2, 0x0f75, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1048b55d4692Sfgsch {"pcmpeqw",  2, 0x660f75,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1049b55d4692Sfgsch {"pcmpeqd",  2, 0x0f76, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1050b55d4692Sfgsch {"pcmpeqd",  2, 0x660f76,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1051b55d4692Sfgsch {"pcmpgtb",  2, 0x0f64, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1052b55d4692Sfgsch {"pcmpgtb",  2, 0x660f64,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1053b55d4692Sfgsch {"pcmpgtw",  2, 0x0f65, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1054b55d4692Sfgsch {"pcmpgtw",  2, 0x660f65,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1055b55d4692Sfgsch {"pcmpgtd",  2, 0x0f66, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1056b55d4692Sfgsch {"pcmpgtd",  2, 0x660f66,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1057b55d4692Sfgsch {"pmaddwd",  2, 0x0ff5, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1058b55d4692Sfgsch {"pmaddwd",  2, 0x660ff5,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1059b55d4692Sfgsch {"pmulhw",   2, 0x0fe5, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1060b55d4692Sfgsch {"pmulhw",   2, 0x660fe5,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1061b55d4692Sfgsch {"pmullw",   2, 0x0fd5, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1062b55d4692Sfgsch {"pmullw",   2, 0x660fd5,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1063b55d4692Sfgsch {"por",	     2, 0x0feb, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1064b55d4692Sfgsch {"por",	     2, 0x660feb,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1065b55d4692Sfgsch {"psllw",    2, 0x0ff1, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1066b55d4692Sfgsch {"psllw",    2, 0x660ff1,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1067b55d4692Sfgsch {"psllw",    2, 0x0f71, 6, CpuMMX, FP|Modrm,		{ Imm8, RegMMX, 0 } },
1068b55d4692Sfgsch {"psllw",    2, 0x660f71,6,CpuSSE2,FP|Modrm,		{ Imm8, RegXMM, 0 } },
1069b55d4692Sfgsch {"pslld",    2, 0x0ff2, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1070b55d4692Sfgsch {"pslld",    2, 0x660ff2,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1071b55d4692Sfgsch {"pslld",    2, 0x0f72, 6, CpuMMX, FP|Modrm,		{ Imm8, RegMMX, 0 } },
1072b55d4692Sfgsch {"pslld",    2, 0x660f72,6,CpuSSE2,FP|Modrm,		{ Imm8, RegXMM, 0 } },
1073b55d4692Sfgsch {"psllq",    2, 0x0ff3, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1074b55d4692Sfgsch {"psllq",    2, 0x660ff3,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1075b55d4692Sfgsch {"psllq",    2, 0x0f73, 6, CpuMMX, FP|Modrm,		{ Imm8, RegMMX, 0 } },
1076b55d4692Sfgsch {"psllq",    2, 0x660f73,6,CpuSSE2,FP|Modrm,		{ Imm8, RegXMM, 0 } },
1077b55d4692Sfgsch {"psraw",    2, 0x0fe1, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1078b55d4692Sfgsch {"psraw",    2, 0x660fe1,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1079b55d4692Sfgsch {"psraw",    2, 0x0f71, 4, CpuMMX, FP|Modrm,		{ Imm8, RegMMX, 0 } },
1080b55d4692Sfgsch {"psraw",    2, 0x660f71,4,CpuSSE2,FP|Modrm,		{ Imm8, RegXMM, 0 } },
1081b55d4692Sfgsch {"psrad",    2, 0x0fe2, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1082b55d4692Sfgsch {"psrad",    2, 0x660fe2,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1083b55d4692Sfgsch {"psrad",    2, 0x0f72, 4, CpuMMX, FP|Modrm,		{ Imm8, RegMMX, 0 } },
1084b55d4692Sfgsch {"psrad",    2, 0x660f72,4,CpuSSE2,FP|Modrm,		{ Imm8, RegXMM, 0 } },
1085b55d4692Sfgsch {"psrlw",    2, 0x0fd1, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1086b55d4692Sfgsch {"psrlw",    2, 0x660fd1,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1087b55d4692Sfgsch {"psrlw",    2, 0x0f71, 2, CpuMMX, FP|Modrm,		{ Imm8, RegMMX, 0 } },
1088b55d4692Sfgsch {"psrlw",    2, 0x660f71,2,CpuSSE2,FP|Modrm,		{ Imm8, RegXMM, 0 } },
1089b55d4692Sfgsch {"psrld",    2, 0x0fd2, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1090b55d4692Sfgsch {"psrld",    2, 0x660fd2,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1091b55d4692Sfgsch {"psrld",    2, 0x0f72, 2, CpuMMX, FP|Modrm,		{ Imm8, RegMMX, 0 } },
1092b55d4692Sfgsch {"psrld",    2, 0x660f72,2,CpuSSE2,FP|Modrm,		{ Imm8, RegXMM, 0 } },
1093b55d4692Sfgsch {"psrlq",    2, 0x0fd3, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1094b55d4692Sfgsch {"psrlq",    2, 0x660fd3,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1095b55d4692Sfgsch {"psrlq",    2, 0x0f73, 2, CpuMMX, FP|Modrm,		{ Imm8, RegMMX, 0 } },
1096b55d4692Sfgsch {"psrlq",    2, 0x660f73,2,CpuSSE2,FP|Modrm,		{ Imm8, RegXMM, 0 } },
1097b55d4692Sfgsch {"psubb",    2, 0x0ff8, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1098b55d4692Sfgsch {"psubb",    2, 0x660ff8,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1099b55d4692Sfgsch {"psubw",    2, 0x0ff9, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1100b55d4692Sfgsch {"psubw",    2, 0x660ff9,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1101b55d4692Sfgsch {"psubd",    2, 0x0ffa, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1102b55d4692Sfgsch {"psubd",    2, 0x660ffa,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1103b55d4692Sfgsch {"psubq",    2, 0x0ffb, X, CpuMMX, FP|Modrm,		{ RegMMX|LLongMem, RegMMX, 0 } },
1104b55d4692Sfgsch {"psubq",    2, 0x660ffb,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1105b55d4692Sfgsch {"psubsb",   2, 0x0fe8, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1106b55d4692Sfgsch {"psubsb",   2, 0x660fe8,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1107b55d4692Sfgsch {"psubsw",   2, 0x0fe9, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1108b55d4692Sfgsch {"psubsw",   2, 0x660fe9,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1109b55d4692Sfgsch {"psubusb",  2, 0x0fd8, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1110b55d4692Sfgsch {"psubusb",  2, 0x660fd8,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1111b55d4692Sfgsch {"psubusw",  2, 0x0fd9, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1112b55d4692Sfgsch {"psubusw",  2, 0x660fd9,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1113b55d4692Sfgsch {"punpckhbw",2, 0x0f68, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1114b55d4692Sfgsch {"punpckhbw",2, 0x660f68,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1115b55d4692Sfgsch {"punpckhwd",2, 0x0f69, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1116b55d4692Sfgsch {"punpckhwd",2, 0x660f69,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1117b55d4692Sfgsch {"punpckhdq",2, 0x0f6a, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1118b55d4692Sfgsch {"punpckhdq",2, 0x660f6a,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1119b55d4692Sfgsch {"punpcklbw",2, 0x0f60, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1120b55d4692Sfgsch {"punpcklbw",2, 0x660f60,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1121b55d4692Sfgsch {"punpcklwd",2, 0x0f61, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1122b55d4692Sfgsch {"punpcklwd",2, 0x660f61,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1123b55d4692Sfgsch {"punpckldq",2, 0x0f62, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1124b55d4692Sfgsch {"punpckldq",2, 0x660f62,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1125b55d4692Sfgsch {"pxor",     2, 0x0fef, X, CpuMMX, FP|Modrm,		{ RegMMX|LongMem, RegMMX, 0 } },
1126b55d4692Sfgsch {"pxor",     2, 0x660fef,X,CpuSSE2,FP|Modrm,		{ RegXMM|LLongMem, RegXMM, 0 } },
1127b305b0f1Sespie 
1128b305b0f1Sespie /* PIII Katmai New Instructions / SIMD instructions.  */
1129b305b0f1Sespie 
1130b55d4692Sfgsch {"addps",     2, 0x0f58,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1131b55d4692Sfgsch {"addss",     2, 0xf30f58,  X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
1132b55d4692Sfgsch {"andnps",    2, 0x0f55,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1133b55d4692Sfgsch {"andps",     2, 0x0f54,    X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
1134b55d4692Sfgsch {"cmpeqps",   2, 0x0fc2,    0, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|LLongMem, RegXMM, 0 } },
1135b55d4692Sfgsch {"cmpeqss",   2, 0xf30fc2,  0, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|WordMem, RegXMM, 0 } },
1136b55d4692Sfgsch {"cmpleps",   2, 0x0fc2,    2, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|LLongMem, RegXMM, 0 } },
1137b55d4692Sfgsch {"cmpless",   2, 0xf30fc2,  2, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|WordMem, RegXMM, 0 } },
1138b55d4692Sfgsch {"cmpltps",   2, 0x0fc2,    1, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|LLongMem, RegXMM, 0 } },
1139b55d4692Sfgsch {"cmpltss",   2, 0xf30fc2,  1, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|WordMem, RegXMM, 0 } },
1140b55d4692Sfgsch {"cmpneqps",  2, 0x0fc2,    4, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|LLongMem, RegXMM, 0 } },
1141b55d4692Sfgsch {"cmpneqss",  2, 0xf30fc2,  4, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|WordMem, RegXMM, 0 } },
1142b55d4692Sfgsch {"cmpnleps",  2, 0x0fc2,    6, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|LLongMem, RegXMM, 0 } },
1143b55d4692Sfgsch {"cmpnless",  2, 0xf30fc2,  6, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|WordMem, RegXMM, 0 } },
1144b55d4692Sfgsch {"cmpnltps",  2, 0x0fc2,    5, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|LLongMem, RegXMM, 0 } },
1145b55d4692Sfgsch {"cmpnltss",  2, 0xf30fc2,  5, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|WordMem, RegXMM, 0 } },
1146b55d4692Sfgsch {"cmpordps",  2, 0x0fc2,    7, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|LLongMem, RegXMM, 0 } },
1147b55d4692Sfgsch {"cmpordss",  2, 0xf30fc2,  7, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|WordMem, RegXMM, 0 } },
1148b55d4692Sfgsch {"cmpunordps",2, 0x0fc2,    3, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|LLongMem, RegXMM, 0 } },
1149b55d4692Sfgsch {"cmpunordss",2, 0xf30fc2,  3, CpuSSE, FP|Modrm|ImmExt,	{ RegXMM|WordMem, RegXMM, 0 } },
1150b55d4692Sfgsch {"cmpps",     3, 0x0fc2,    X, CpuSSE, FP|Modrm,	{ Imm8, RegXMM|LLongMem, RegXMM } },
1151b55d4692Sfgsch {"cmpss",     3, 0xf30fc2,  X, CpuSSE, FP|Modrm,	{ Imm8, RegXMM|WordMem, RegXMM } },
1152b55d4692Sfgsch {"comiss",    2, 0x0f2f,    X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
1153b55d4692Sfgsch {"cvtpi2ps",  2, 0x0f2a,    X, CpuSSE, FP|Modrm,	{ RegMMX|LLongMem, RegXMM, 0 } },
1154b55d4692Sfgsch {"cvtps2pi",  2, 0x0f2d,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegMMX, 0 } },
1155b55d4692Sfgsch {"cvtsi2ss",  2, 0xf30f2a,  X, CpuSSE, lq_Suf|IgnoreSize|Modrm,{ Reg32|Reg64|WordMem|LLongMem, RegXMM, 0 } },
1156b55d4692Sfgsch {"cvtss2si",  2, 0xf30f2d,  X, CpuSSE, lq_Suf|IgnoreSize|Modrm,{ RegXMM|WordMem, Reg32|Reg64, 0 } },
1157b55d4692Sfgsch {"cvttps2pi", 2, 0x0f2c,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegMMX, 0 } },
1158b55d4692Sfgsch {"cvttss2si", 2, 0xf30f2c,  X, CpuSSE, lq_Suf|IgnoreSize|Modrm,	{ RegXMM|WordMem, Reg32|Reg64, 0 } },
1159b55d4692Sfgsch {"divps",     2, 0x0f5e,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1160b55d4692Sfgsch {"divss",     2, 0xf30f5e,  X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
1161b55d4692Sfgsch {"ldmxcsr",   1, 0x0fae,    2, CpuSSE, FP|Modrm, 	{ WordMem, 0, 0 } },
1162b55d4692Sfgsch {"maskmovq",  2, 0x0ff7,    X, CpuSSE, FP|Modrm,	{ RegMMX|InvMem, RegMMX, 0 } },
1163b55d4692Sfgsch {"maxps",     2, 0x0f5f,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1164b55d4692Sfgsch {"maxss",     2, 0xf30f5f,  X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
1165b55d4692Sfgsch {"minps",     2, 0x0f5d,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1166b55d4692Sfgsch {"minss",     2, 0xf30f5d,  X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
1167b55d4692Sfgsch {"movaps",    2, 0x0f28,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1168b55d4692Sfgsch {"movaps",    2, 0x0f29,    X, CpuSSE, FP|Modrm,	{ RegXMM, RegXMM|LLongMem, 0 } },
1169b55d4692Sfgsch {"movhlps",   2, 0x0f12,    X, CpuSSE, FP|Modrm,	{ RegXMM|InvMem, RegXMM, 0 } },
1170b55d4692Sfgsch {"movhps",    2, 0x0f16,    X, CpuSSE, FP|Modrm,	{ LLongMem, RegXMM, 0 } },
1171b55d4692Sfgsch {"movhps",    2, 0x0f17,    X, CpuSSE, FP|Modrm,	{ RegXMM, LLongMem, 0 } },
1172b55d4692Sfgsch {"movlhps",   2, 0x0f16,    X, CpuSSE, FP|Modrm,	{ RegXMM|InvMem, RegXMM, 0 } },
1173b55d4692Sfgsch {"movlps",    2, 0x0f12,    X, CpuSSE, FP|Modrm,	{ LLongMem, RegXMM, 0 } },
1174b55d4692Sfgsch {"movlps",    2, 0x0f13,    X, CpuSSE, FP|Modrm,	{ RegXMM, LLongMem, 0 } },
1175c074d1c9Sdrahn {"movmskps",  2, 0x0f50,    X, CpuSSE, lq_Suf|IgnoreSize|Modrm,	{ RegXMM|InvMem, Reg32|Reg64, 0 } },
1176b55d4692Sfgsch {"movntps",   2, 0x0f2b,    X, CpuSSE, FP|Modrm, 	{ RegXMM, LLongMem, 0 } },
1177b55d4692Sfgsch {"movntq",    2, 0x0fe7,    X, CpuSSE, FP|Modrm, 	{ RegMMX, LLongMem, 0 } },
1178b55d4692Sfgsch {"movntdq",   2, 0x660fe7,  X, CpuSSE2,FP|Modrm, 	{ RegXMM, LLongMem, 0 } },
1179b55d4692Sfgsch {"movss",     2, 0xf30f10,  X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
1180b55d4692Sfgsch {"movss",     2, 0xf30f11,  X, CpuSSE, FP|Modrm,	{ RegXMM, RegXMM|WordMem, 0 } },
1181b55d4692Sfgsch {"movups",    2, 0x0f10,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1182b55d4692Sfgsch {"movups",    2, 0x0f11,    X, CpuSSE, FP|Modrm,	{ RegXMM, RegXMM|LLongMem, 0 } },
1183b55d4692Sfgsch {"mulps",     2, 0x0f59,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1184b55d4692Sfgsch {"mulss",     2, 0xf30f59,  X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
1185b55d4692Sfgsch {"orps",      2, 0x0f56,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1186b55d4692Sfgsch {"pavgb",     2, 0x0fe0,    X, CpuSSE, FP|Modrm,	{ RegMMX|LLongMem, RegMMX, 0 } },
1187b55d4692Sfgsch {"pavgb",     2, 0x660fe0,  X, CpuSSE2,FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1188b55d4692Sfgsch {"pavgw",     2, 0x0fe3,    X, CpuSSE, FP|Modrm,	{ RegMMX|LLongMem, RegMMX, 0 } },
1189b55d4692Sfgsch {"pavgw",     2, 0x660fe3,  X, CpuSSE2,FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1190c074d1c9Sdrahn {"pextrw",    3, 0x0fc5,    X, CpuSSE, lq_Suf|IgnoreSize|Modrm,	{ Imm8, RegMMX|InvMem, Reg32|Reg64 } },
1191c074d1c9Sdrahn {"pextrw",    3, 0x660fc5,  X, CpuSSE2,lq_Suf|IgnoreSize|Modrm,	{ Imm8, RegXMM|InvMem, Reg32|Reg64 } },
1192c074d1c9Sdrahn {"pinsrw",    3, 0x0fc4,    X, CpuSSE, lq_Suf|IgnoreSize|Modrm,	{ Imm8, Reg32|Reg64|ShortMem, RegMMX } },
1193c074d1c9Sdrahn {"pinsrw",    3, 0x660fc4,  X, CpuSSE2, lq_Suf|IgnoreSize|Modrm, { Imm8, Reg32|Reg64|ShortMem, RegXMM } },
1194b55d4692Sfgsch {"pmaxsw",    2, 0x0fee,    X, CpuSSE, FP|Modrm,	{ RegMMX|LLongMem, RegMMX, 0 } },
1195b55d4692Sfgsch {"pmaxsw",    2, 0x660fee,  X, CpuSSE2,FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1196b55d4692Sfgsch {"pmaxub",    2, 0x0fde,    X, CpuSSE, FP|Modrm,	{ RegMMX|LLongMem, RegMMX, 0 } },
1197b55d4692Sfgsch {"pmaxub",    2, 0x660fde,  X, CpuSSE2,FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1198b55d4692Sfgsch {"pminsw",    2, 0x0fea,    X, CpuSSE, FP|Modrm,	{ RegMMX|LLongMem, RegMMX, 0 } },
1199b55d4692Sfgsch {"pminsw",    2, 0x660fea,  X, CpuSSE2,FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1200b55d4692Sfgsch {"pminub",    2, 0x0fda,    X, CpuSSE, FP|Modrm,	{ RegMMX|LLongMem, RegMMX, 0 } },
1201b55d4692Sfgsch {"pminub",    2, 0x660fda,  X, CpuSSE2,FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1202c074d1c9Sdrahn {"pmovmskb",  2, 0x0fd7,    X, CpuSSE, lq_Suf|IgnoreSize|Modrm,	{ RegMMX|InvMem, Reg32|Reg64, 0 } },
1203c074d1c9Sdrahn {"pmovmskb",  2, 0x660fd7,  X, CpuSSE2,lq_Suf|IgnoreSize|Modrm,	{ RegXMM|InvMem, Reg32|Reg64, 0 } },
1204b55d4692Sfgsch {"pmulhuw",   2, 0x0fe4,    X, CpuSSE, FP|Modrm,	{ RegMMX|LLongMem, RegMMX, 0 } },
1205b55d4692Sfgsch {"pmulhuw",   2, 0x660fe4,  X, CpuSSE2,FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1206b55d4692Sfgsch {"prefetchnta", 1, 0x0f18,  0, CpuSSE, FP|Modrm, 	{ LLongMem, 0, 0 } },
1207b55d4692Sfgsch {"prefetcht0",  1, 0x0f18,  1, CpuSSE, FP|Modrm, 	{ LLongMem, 0, 0 } },
1208b55d4692Sfgsch {"prefetcht1",  1, 0x0f18,  2, CpuSSE, FP|Modrm, 	{ LLongMem, 0, 0 } },
1209b55d4692Sfgsch {"prefetcht2",  1, 0x0f18,  3, CpuSSE, FP|Modrm, 	{ LLongMem, 0, 0 } },
1210b55d4692Sfgsch {"psadbw",    2, 0x0ff6,    X, CpuSSE, FP|Modrm,	{ RegMMX|LLongMem, RegMMX, 0 } },
1211b55d4692Sfgsch {"psadbw",    2, 0x660ff6,  X, CpuSSE2,FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1212b55d4692Sfgsch {"pshufw",    3, 0x0f70,    X, CpuSSE, FP|Modrm,	{ Imm8, RegMMX|LLongMem, RegMMX } },
1213b55d4692Sfgsch {"rcpps",     2, 0x0f53,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1214b55d4692Sfgsch {"rcpss",     2, 0xf30f53,  X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
1215b55d4692Sfgsch {"rsqrtps",   2, 0x0f52,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1216b55d4692Sfgsch {"rsqrtss",   2, 0xf30f52,  X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
1217b55d4692Sfgsch {"sfence",    0, 0x0fae, 0xf8, CpuSSE, FP|ImmExt,	{ 0, 0, 0 } },
1218b55d4692Sfgsch {"shufps",    3, 0x0fc6,    X, CpuSSE, FP|Modrm,	{ Imm8, RegXMM|LLongMem, RegXMM } },
1219b55d4692Sfgsch {"sqrtps",    2, 0x0f51,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1220b55d4692Sfgsch {"sqrtss",    2, 0xf30f51,  X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
1221b55d4692Sfgsch {"stmxcsr",   1, 0x0fae,    3, CpuSSE, FP|Modrm, 	{ WordMem, 0, 0 } },
1222b55d4692Sfgsch {"subps",     2, 0x0f5c,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1223b55d4692Sfgsch {"subss",     2, 0xf30f5c,  X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
1224b55d4692Sfgsch {"ucomiss",   2, 0x0f2e,    X, CpuSSE, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
1225b55d4692Sfgsch {"unpckhps",  2, 0x0f15,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1226b55d4692Sfgsch {"unpcklps",  2, 0x0f14,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1227b55d4692Sfgsch {"xorps",     2, 0x0f57,    X, CpuSSE, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1228b55d4692Sfgsch 
1229b55d4692Sfgsch /* SSE-2 instructions.  */
1230b55d4692Sfgsch 
1231b55d4692Sfgsch {"addpd",     2, 0x660f58,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1232b55d4692Sfgsch {"addsd",     2, 0xf20f58,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LongMem, RegXMM, 0 } },
1233b55d4692Sfgsch {"andnpd",    2, 0x660f55,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1234b55d4692Sfgsch {"andpd",     2, 0x660f54,  X, CpuSSE2, FP|Modrm,	{ RegXMM|WordMem, RegXMM, 0 } },
1235b55d4692Sfgsch {"cmpeqpd",   2, 0x660fc2,  0, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
1236b55d4692Sfgsch {"cmpeqsd",   2, 0xf20fc2,  0, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
1237b55d4692Sfgsch {"cmplepd",   2, 0x660fc2,  2, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
1238b55d4692Sfgsch {"cmplesd",   2, 0xf20fc2,  2, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
1239b55d4692Sfgsch {"cmpltpd",   2, 0x660fc2,  1, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
1240b55d4692Sfgsch {"cmpltsd",   2, 0xf20fc2,  1, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
1241b55d4692Sfgsch {"cmpneqpd",  2, 0x660fc2,  4, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
1242b55d4692Sfgsch {"cmpneqsd",  2, 0xf20fc2,  4, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
1243b55d4692Sfgsch {"cmpnlepd",  2, 0x660fc2,  6, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
1244b55d4692Sfgsch {"cmpnlesd",  2, 0xf20fc2,  6, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
1245b55d4692Sfgsch {"cmpnltpd",  2, 0x660fc2,  5, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
1246b55d4692Sfgsch {"cmpnltsd",  2, 0xf20fc2,  5, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
1247b55d4692Sfgsch {"cmpordpd",  2, 0x660fc2,  7, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
1248b55d4692Sfgsch {"cmpordsd",  2, 0xf20fc2,  7, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
1249b55d4692Sfgsch {"cmpunordpd",2, 0x660fc2,  3, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LLongMem, RegXMM, 0 } },
1250b55d4692Sfgsch {"cmpunordsd",2, 0xf20fc2,  3, CpuSSE2, FP|Modrm|ImmExt,{ RegXMM|LongMem, RegXMM, 0 } },
1251b55d4692Sfgsch {"cmppd",     3, 0x660fc2,  X, CpuSSE2, FP|Modrm,	{ Imm8, RegXMM|LLongMem, RegXMM } },
1252c074d1c9Sdrahn /* Intel mode string compare.  */
1253c074d1c9Sdrahn {"cmpsd",     0, 0xa7,      X, 0, NoSuf|Size32|IsString, { 0, 0, 0} },
1254c074d1c9Sdrahn {"cmpsd",     2, 0xa7,      X, 0, NoSuf|Size32|IsString, { AnyMem, AnyMem|EsSeg, 0} },
1255b55d4692Sfgsch {"cmpsd",     3, 0xf20fc2,  X, CpuSSE2, FP|Modrm,	{ Imm8, RegXMM|LongMem, RegXMM } },
1256b55d4692Sfgsch {"comisd",    2, 0x660f2f,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LongMem, RegXMM, 0 } },
1257b55d4692Sfgsch {"cvtpi2pd",  2, 0x660f2a,  X, CpuSSE2, FP|Modrm,	{ RegMMX|LLongMem, RegXMM, 0 } },
1258b55d4692Sfgsch {"cvtsi2sd",  2, 0xf20f2a,  X, CpuSSE2, lq_Suf|IgnoreSize|Modrm,{ Reg32|Reg64|WordMem|LLongMem, RegXMM, 0 } },
1259b55d4692Sfgsch {"divpd",     2, 0x660f5e,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1260b55d4692Sfgsch {"divsd",     2, 0xf20f5e,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LongMem, RegXMM, 0 } },
1261b55d4692Sfgsch {"maxpd",     2, 0x660f5f,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1262b55d4692Sfgsch {"maxsd",     2, 0xf20f5f,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LongMem, RegXMM, 0 } },
1263b55d4692Sfgsch {"minpd",     2, 0x660f5d,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1264b55d4692Sfgsch {"minsd",     2, 0xf20f5d,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LongMem, RegXMM, 0 } },
1265b55d4692Sfgsch {"movapd",    2, 0x660f28,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1266b55d4692Sfgsch {"movapd",    2, 0x660f29,  X, CpuSSE2, FP|Modrm,	{ RegXMM, RegXMM|LLongMem, 0 } },
1267b55d4692Sfgsch {"movhpd",    2, 0x660f16,  X, CpuSSE2, FP|Modrm,	{ LLongMem, RegXMM, 0 } },
1268b55d4692Sfgsch {"movhpd",    2, 0x660f17,  X, CpuSSE2, FP|Modrm,	{ RegXMM, LLongMem, 0 } },
1269b55d4692Sfgsch {"movlpd",    2, 0x660f12,  X, CpuSSE2, FP|Modrm,	{ LLongMem, RegXMM, 0 } },
1270b55d4692Sfgsch {"movlpd",    2, 0x660f13,  X, CpuSSE2, FP|Modrm,	{ RegXMM, LLongMem, 0 } },
1271c074d1c9Sdrahn {"movmskpd",  2, 0x660f50,  X, CpuSSE2, lq_Suf|IgnoreSize|Modrm, { RegXMM|InvMem, Reg32|Reg64, 0 } },
1272b55d4692Sfgsch {"movntpd",   2, 0x660f2b,  X, CpuSSE2, FP|Modrm, 	{ RegXMM, LLongMem, 0 } },
1273c074d1c9Sdrahn /* Intel mode string move.  */
1274c074d1c9Sdrahn {"movsd",     0, 0xa5,      X, 0, NoSuf|Size32|IsString, { 0, 0, 0} },
1275c074d1c9Sdrahn {"movsd",     2, 0xa5,      X, 0, NoSuf|Size32|IsString, { AnyMem, AnyMem|EsSeg, 0} },
1276b55d4692Sfgsch {"movsd",     2, 0xf20f10,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LongMem, RegXMM, 0 } },
1277b55d4692Sfgsch {"movsd",     2, 0xf20f11,  X, CpuSSE2, FP|Modrm,	{ RegXMM, RegXMM|LongMem, 0 } },
1278b55d4692Sfgsch {"movupd",    2, 0x660f10,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1279b55d4692Sfgsch {"movupd",    2, 0x660f11,  X, CpuSSE2, FP|Modrm,	{ RegXMM, RegXMM|LLongMem, 0 } },
1280b55d4692Sfgsch {"mulpd",     2, 0x660f59,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1281b55d4692Sfgsch {"mulsd",     2, 0xf20f59,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LongMem, RegXMM, 0 } },
1282b55d4692Sfgsch {"orpd",      2, 0x660f56,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1283b55d4692Sfgsch {"shufpd",    3, 0x660fc6,  X, CpuSSE2, FP|Modrm,	{ Imm8, RegXMM|LLongMem, RegXMM } },
1284b55d4692Sfgsch {"sqrtpd",    2, 0x660f51,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1285b55d4692Sfgsch {"sqrtsd",    2, 0xf20f51,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LongMem, RegXMM, 0 } },
1286b55d4692Sfgsch {"subpd",     2, 0x660f5c,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1287b55d4692Sfgsch {"subsd",     2, 0xf20f5c,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LongMem, RegXMM, 0 } },
1288b55d4692Sfgsch {"ucomisd",   2, 0x660f2e,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LongMem, RegXMM, 0 } },
1289b55d4692Sfgsch {"unpckhpd",  2, 0x660f15,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1290b55d4692Sfgsch {"unpcklpd",  2, 0x660f14,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1291b55d4692Sfgsch {"xorpd",     2, 0x660f57,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1292b55d4692Sfgsch {"cvtdq2pd",  2, 0xf30fe6,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1293b55d4692Sfgsch {"cvtpd2dq",  2, 0xf20fe6,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1294b55d4692Sfgsch {"cvtdq2ps",  2, 0x0f5b,    X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1295b55d4692Sfgsch {"cvtpd2pi",  2, 0x660f2d,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegMMX, 0 } },
1296b55d4692Sfgsch {"cvtpd2ps",  2, 0x660f5a,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1297b55d4692Sfgsch {"cvtps2pd",  2, 0x0f5a,    X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1298b55d4692Sfgsch {"cvtps2dq",  2, 0x660f5b,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1299b55d4692Sfgsch {"cvtsd2si",  2, 0xf20f2d,  X, CpuSSE2, lq_Suf|IgnoreSize|Modrm,{ RegXMM|LLongMem, Reg32|Reg64, 0 } },
1300b55d4692Sfgsch {"cvtsd2ss",  2, 0xf20f5a,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1301b55d4692Sfgsch {"cvtss2sd",  2, 0xf30f5a,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1302b55d4692Sfgsch {"cvttpd2pi", 2, 0x660f2c,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegMMX, 0 } },
1303b55d4692Sfgsch {"cvttsd2si", 2, 0xf20f2c,  X, CpuSSE2, lq_Suf|IgnoreSize|Modrm,{ RegXMM|WordMem, Reg32|Reg64, 0 } },
1304b55d4692Sfgsch {"cvttpd2dq", 2, 0x660fe6,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1305b55d4692Sfgsch {"cvttps2dq", 2, 0xf30f5b,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1306b55d4692Sfgsch {"maskmovdqu",2, 0x660ff7,  X, CpuSSE2, FP|Modrm,	{ RegXMM|InvMem, RegXMM, 0 } },
1307b55d4692Sfgsch {"movdqa",    2, 0x660f6f,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1308b55d4692Sfgsch {"movdqa",    2, 0x660f7f,  X, CpuSSE2, FP|Modrm,	{ RegXMM, RegXMM|LLongMem, 0 } },
1309b55d4692Sfgsch {"movdqu",    2, 0xf30f6f,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1310b55d4692Sfgsch {"movdqu",    2, 0xf30f7f,  X, CpuSSE2, FP|Modrm,	{ RegXMM, RegXMM|LLongMem, 0 } },
1311b55d4692Sfgsch {"movdq2q",    2, 0xf20fd6,  X, CpuSSE2, FP|Modrm,	{ RegXMM|InvMem, RegMMX, 0 } },
1312b55d4692Sfgsch {"movq2dq",   2, 0xf30fd6,  X, CpuSSE2, FP|Modrm,	{ RegMMX|InvMem, RegXMM, 0 } },
1313b55d4692Sfgsch {"pmuludq",   2, 0x0ff4,    X, CpuSSE2, FP|Modrm,	{ RegMMX|LongMem, RegMMX, 0 } },
1314b55d4692Sfgsch {"pmuludq",   2, 0x660ff4,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LongMem, RegXMM, 0 } },
1315b55d4692Sfgsch {"pshufd",    3, 0x660f70,  X, CpuSSE2, FP|Modrm,	{ Imm8, RegXMM|LLongMem, RegXMM } },
1316b55d4692Sfgsch {"pshufhw",   3, 0xf30f70,  X, CpuSSE2, FP|Modrm,	{ Imm8, RegXMM|LLongMem, RegXMM } },
1317b55d4692Sfgsch {"pshuflw",   3, 0xf20f70,  X, CpuSSE2, FP|Modrm,	{ Imm8, RegXMM|LLongMem, RegXMM } },
1318b55d4692Sfgsch {"pslldq",    2, 0x660f73,  7, CpuSSE2, FP|Modrm,	{ Imm8, RegXMM, 0 } },
1319b55d4692Sfgsch {"psrldq",    2, 0x660f73,  3, CpuSSE2, FP|Modrm,	{ Imm8, RegXMM, 0 } },
1320b55d4692Sfgsch {"punpckhqdq",2, 0x660f6d,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1321b55d4692Sfgsch {"punpcklqdq",2, 0x660f6c,  X, CpuSSE2, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1322b305b0f1Sespie 
1323007c2a45Smiod /* Prescott New Instructions.  */
1324007c2a45Smiod 
1325007c2a45Smiod {"addsubpd",  2, 0x660fd0,  X, CpuPNI, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1326007c2a45Smiod {"addsubps",  2, 0xf20fd0,  X, CpuPNI, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1327d670d631Skettenis {"cmpxchg16b",1, 0x0fc7,    1, CpuPNI|Cpu64, NoSuf|Modrm|Rex64, { LLongMem, 0, 0} },
1328007c2a45Smiod {"fisttp",    1, 0xdf,      1, CpuPNI, sl_FP|FloatMF|Modrm, { ShortMem|LongMem, 0, 0} },
1329007c2a45Smiod /* Intel Syntax */
1330007c2a45Smiod {"fisttpd",   1, 0xdd,      1, CpuPNI, FP|Modrm,	{ LLongMem, 0, 0} },
1331007c2a45Smiod {"fisttpq",   1, 0xdd,      1, CpuPNI, FP|Modrm,	{ LLongMem, 0, 0} },
1332007c2a45Smiod {"fisttpll",  1, 0xdd,      1, CpuPNI, FP|Modrm,	{ LLongMem, 0, 0} },
1333007c2a45Smiod {"haddpd",    2, 0x660f7c,  X, CpuPNI, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1334007c2a45Smiod {"haddps",    2, 0xf20f7c,  X, CpuPNI, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1335007c2a45Smiod {"hsubpd",    2, 0x660f7d,  X, CpuPNI, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1336007c2a45Smiod {"hsubps",    2, 0xf20f7d,  X, CpuPNI, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1337007c2a45Smiod {"lddqu",     2, 0xf20ff0,  X, CpuPNI, FP|Modrm,	{ LLongMem, RegXMM, 0 } },
1338007c2a45Smiod {"monitor",   0, 0x0f01, 0xc8, CpuPNI, FP|ImmExt,	{ 0, 0, 0} },
1339007c2a45Smiod /* Need to ensure only "monitor %eax,%ecx,%edx" is accepted. */
1340007c2a45Smiod {"monitor",   3, 0x0f01, 0xc8, CpuPNI, FP|ImmExt,	{ Reg32, Reg32, Reg32} },
1341007c2a45Smiod {"movddup",   2, 0xf20f12,  X, CpuPNI, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1342007c2a45Smiod {"movshdup",  2, 0xf30f16,  X, CpuPNI, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1343007c2a45Smiod {"movsldup",  2, 0xf30f12,  X, CpuPNI, FP|Modrm,	{ RegXMM|LLongMem, RegXMM, 0 } },
1344007c2a45Smiod {"mwait",     0, 0x0f01, 0xc9, CpuPNI, FP|ImmExt,	{ 0, 0, 0} },
1345007c2a45Smiod /* Need to ensure only "mwait %eax,%ecx" is accepted.  */
1346007c2a45Smiod {"mwait",     2, 0x0f01, 0xc9, CpuPNI, FP|ImmExt,	{ Reg32, Reg32, 0} },
1347007c2a45Smiod 
1348b305b0f1Sespie /* AMD 3DNow! instructions.  */
1349b305b0f1Sespie 
1350b55d4692Sfgsch {"prefetch", 1, 0x0f0d,	   0, Cpu3dnow, FP|Modrm,		{ ByteMem, 0, 0 } },
1351b55d4692Sfgsch {"prefetchw",1, 0x0f0d,	   1, Cpu3dnow, FP|Modrm,		{ ByteMem, 0, 0 } },
1352b55d4692Sfgsch {"femms",    0, 0x0f0e,	   X, Cpu3dnow, FP,			{ 0, 0, 0 } },
1353b55d4692Sfgsch {"pavgusb",  2, 0x0f0f, 0xbf, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1354b55d4692Sfgsch {"pf2id",    2, 0x0f0f, 0x1d, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1355b55d4692Sfgsch {"pf2iw",    2, 0x0f0f, 0x1c, Cpu3dnow|Cpu686, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1356b55d4692Sfgsch {"pfacc",    2, 0x0f0f, 0xae, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1357b55d4692Sfgsch {"pfadd",    2, 0x0f0f, 0x9e, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1358b55d4692Sfgsch {"pfcmpeq",  2, 0x0f0f, 0xb0, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1359b55d4692Sfgsch {"pfcmpge",  2, 0x0f0f, 0x90, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1360b55d4692Sfgsch {"pfcmpgt",  2, 0x0f0f, 0xa0, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1361b55d4692Sfgsch {"pfmax",    2, 0x0f0f, 0xa4, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1362b55d4692Sfgsch {"pfmin",    2, 0x0f0f, 0x94, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1363b55d4692Sfgsch {"pfmul",    2, 0x0f0f, 0xb4, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1364b55d4692Sfgsch {"pfnacc",   2, 0x0f0f, 0x8a, Cpu3dnow|Cpu686, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1365b55d4692Sfgsch {"pfpnacc",  2, 0x0f0f, 0x8e, Cpu3dnow|Cpu686, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1366b55d4692Sfgsch {"pfrcp",    2, 0x0f0f, 0x96, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1367b55d4692Sfgsch {"pfrcpit1", 2, 0x0f0f, 0xa6, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1368b55d4692Sfgsch {"pfrcpit2", 2, 0x0f0f, 0xb6, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1369b55d4692Sfgsch {"pfrsqit1", 2, 0x0f0f, 0xa7, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1370b55d4692Sfgsch {"pfrsqrt",  2, 0x0f0f, 0x97, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1371b55d4692Sfgsch {"pfsub",    2, 0x0f0f, 0x9a, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1372b55d4692Sfgsch {"pfsubr",   2, 0x0f0f, 0xaa, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1373b55d4692Sfgsch {"pi2fd",    2, 0x0f0f, 0x0d, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1374b55d4692Sfgsch {"pi2fw",    2, 0x0f0f, 0x0c, Cpu3dnow|Cpu686, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1375b55d4692Sfgsch {"pmulhrw",  2, 0x0f0f, 0xb7, Cpu3dnow, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1376b55d4692Sfgsch {"pswapd",   2, 0x0f0f, 0xbb, Cpu3dnow|Cpu686, FP|Modrm|ImmExt,	{ RegMMX|LongMem, RegMMX, 0 } },
1377b55d4692Sfgsch 
1378b55d4692Sfgsch /* AMD extensions. */
1379b55d4692Sfgsch {"syscall",  0, 0x0f05,    X, CpuK6,	NoSuf,			{ 0, 0, 0} },
1380b55d4692Sfgsch {"sysret",   0, 0x0f07,    X, CpuK6,	lq_Suf|DefaultSize,	{ 0, 0, 0} },
1381b55d4692Sfgsch {"swapgs",   0, 0x0f01, 0xf8, Cpu64,	NoSuf|ImmExt,		{ 0, 0, 0} },
1382edc69924Sguenther {"rdtscp",   0, 0x0f01, 0xf9, CpuSledgehammer,NoSuf|ImmExt,	{ 0, 0, 0} },
1383b305b0f1Sespie 
1384007c2a45Smiod /* VIA PadLock extensions. */
1385007c2a45Smiod {"xstorerng", 0, 0x0fa7c0, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
1386007c2a45Smiod {"xcryptecb", 0, 0xf30fa7c8, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
1387007c2a45Smiod {"xcryptcbc", 0, 0xf30fa7d0, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
1388007c2a45Smiod {"xcryptcfb", 0, 0xf30fa7e0, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
1389007c2a45Smiod {"xcryptofb", 0, 0xf30fa7e8, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
1390007c2a45Smiod /* alias for xstorerng */
1391007c2a45Smiod {"xstore", 0, 0x0fa7c0, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
1392007c2a45Smiod 
139347d15e0bSthib /* Supplemental Streaming SIMD Extensions 3 extensions. */
139447d15e0bSthib {"pshufb", 2, 0x660f3800, X, CpuSSSE3, FP|Modrm|IgnoreSize|NoSuf, { RegXMM|LLongMem, RegXMM } },
139547d15e0bSthib 
139647d15e0bSthib /* Intel AES extensions */
139747d15e0bSthib {"aesdec", 2, 0x660f38de, X, CpuAES, FP|Modrm|IgnoreSize|NoSuf, { RegXMM|LLongMem, RegXMM } },
139847d15e0bSthib {"aesdeclast", 2, 0x660f38df, X, CpuAES, FP|Modrm|IgnoreSize|NoSuf, { RegXMM|LLongMem, RegXMM } },
139947d15e0bSthib {"aesenc", 2, 0x660f38dc, X, CpuAES, FP|Modrm|IgnoreSize|NoSuf, { RegXMM|LLongMem, RegXMM } },
140047d15e0bSthib {"aesenclast", 2, 0x660f38dd, X, CpuAES, FP|Modrm|IgnoreSize|NoSuf, { RegXMM|LLongMem, RegXMM } },
140147d15e0bSthib {"aesimc", 2, 0x660f38db, X, CpuAES, FP|Modrm|IgnoreSize|NoSuf, { RegXMM|LLongMem, RegXMM } },
140247d15e0bSthib {"aeskeygenassist", 3, 0x660f3adf, X, CpuAES, FP|Modrm|IgnoreSize|NoSuf, { Imm8, RegXMM|LLongMem, RegXMM } },
140347d15e0bSthib 
140447d15e0bSthib /* Intel Carry-less Multiplication extensions */
140547d15e0bSthib {"pclmulqdq", 3, 0x660f3a44, X, CpuPCLMUL, FP|Modrm|IgnoreSize|NoSuf, { Imm8, RegXMM|LLongMem, RegXMM } },
140647d15e0bSthib {"pclmullqlqdq", 2, 0x660f3a44, 0x0, CpuPCLMUL, FP|Modrm|IgnoreSize|NoSuf|ImmExt, { RegXMM|LLongMem, RegXMM } },
140747d15e0bSthib {"pclmulhqlqdq", 2, 0x660f3a44, 0x1, CpuPCLMUL, FP|Modrm|IgnoreSize|NoSuf|ImmExt, { RegXMM|LLongMem, RegXMM } },
140847d15e0bSthib {"pclmullqhqdq", 2, 0x660f3a44, 0x10, CpuPCLMUL, FP|Modrm|IgnoreSize|NoSuf|ImmExt, { RegXMM|LLongMem, RegXMM } },
140947d15e0bSthib {"pclmulhqhqdq", 2, 0x660f3a44, 0x11, CpuPCLMUL, FP|Modrm|IgnoreSize|NoSuf|ImmExt, { RegXMM|LLongMem, RegXMM } },
141047d15e0bSthib 
14117e0148a2Skettenis /* Intel Random Number Generator extensions */
14127e0148a2Skettenis {"rdrand", 1, 0x0fc7, 0x6, CpuRdRnd, Modrm|NoSuf, { Reg16|Reg32|Reg64 } },
14137e0148a2Skettenis 
14145ef8804eSjsg /* Intel Supervisor Mode Access Prevention extensions */
14155ef8804eSjsg {"clac", 0, 0x0f01, 0xca, CpuSMAP, NoSuf|ImmExt, { 0, 0, 0 } },
14165ef8804eSjsg {"stac", 0, 0x0f01, 0xcb, CpuSMAP, NoSuf|ImmExt, { 0, 0, 0 } },
14175ef8804eSjsg 
14183d8cda5cSguenther /* Intel XSAVE extensions */
14193d8cda5cSguenther {"xgetbv", 0, 0x0f01, 0xd0, CpuXSAVE, NoSuf|ImmExt, { 0, 0, 0 } },
14203d8cda5cSguenther {"xsetbv", 0, 0x0f01, 0xd1, CpuXSAVE, NoSuf|ImmExt, { 0, 0, 0 } },
14213d8cda5cSguenther {"xsave", 1, 0x0fae, 4, CpuXSAVE, NoSuf|Modrm, { LLongMem, 0, 0 } },
14223d8cda5cSguenther {"xrstor", 1, 0x0fae, 5, CpuXSAVE, NoSuf|Modrm, { LLongMem, 0, 0 } },
14233d8cda5cSguenther {"xsaveopt", 1, 0x0fae, 6, CpuXSAVE, NoSuf|Modrm, { LLongMem, 0, 0 } },
14243d8cda5cSguenther 
1425*c035e489Smlarkin /* Intel VMX extensions */
1426*c035e489Smlarkin {"invept", 2, 0x660f3880, X, CpuVMX|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32 } },
1427*c035e489Smlarkin {"invept", 2, 0x660f3880, X, CpuVMX|Cpu64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg64 } },
1428*c035e489Smlarkin {"invvpid", 2, 0x660f3881, X, CpuVMX|CpuNo64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32 } },
1429*c035e489Smlarkin {"invvpid", 2, 0x660f3881, X, CpuVMX|Cpu64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg64 } },
1430*c035e489Smlarkin {"vmcall", 0, 0xf01, 0xc1, CpuVMX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0, 0, 0 } },
1431*c035e489Smlarkin {"vmclear", 1, 0x660fc7, 0x6, CpuVMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
1432*c035e489Smlarkin {"vmlaunch", 0, 0xf01, 0xc2, CpuVMX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0, 0, 0 } },
1433*c035e489Smlarkin {"vmresume", 0, 0xf01, 0xc3, CpuVMX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0, 0, 0 } },
1434*c035e489Smlarkin {"vmptrld", 1, 0xfc7, 0x6, CpuVMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
1435*c035e489Smlarkin {"vmptrst", 1, 0xfc7, 0x7, CpuVMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
1436*c035e489Smlarkin {"vmread", 2, 0xf78, None, CpuVMX|CpuNo64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf, { Reg32, Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
1437*c035e489Smlarkin {"vmread", 2, 0xf78, None, CpuVMX|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Reg64, Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
1438*c035e489Smlarkin {"vmwrite", 2, 0xf79, None, CpuVMX|CpuNo64, Modrm|No_bSuf|No_wSuf|No_sSuf|No_qSuf|No_xSuf, { Reg32|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32 } },
1439*c035e489Smlarkin {"vmwrite", 2, 0xf79, None, CpuVMX|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_xSuf|NoRex64, { Reg64|BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg64 } },
1440*c035e489Smlarkin {"vmxoff", 0, 0xf01, 0xc4, CpuVMX, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0, 0, 0 } },
1441*c035e489Smlarkin {"vmxon", 1, 0xf30fc7, 0x6, CpuVMX, Modrm|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|NoRex64, { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
1442*c035e489Smlarkin 
1443*c035e489Smlarkin /* AMD SVM extensions */
1444*c035e489Smlarkin {"clgi", 0, 0xf01, 0xdd, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0, 0, 0 } },
1445*c035e489Smlarkin {"invlpga", 0, 0xf01, 0xdf, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0, 0, 0 } },
1446*c035e489Smlarkin {"invlpga", 2, 0xf01, 0xdf, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S, Reg32 } },
1447*c035e489Smlarkin {"stgi", 0, 0xf01, 0xdc, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0, 0, 0 } },
1448*c035e489Smlarkin {"vmload", 0, 0xf01, 0xda, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0, 0, 0 } },
1449*c035e489Smlarkin {"vmload", 1, 0xf01, 0xda, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
1450*c035e489Smlarkin {"vmmcall", 0, 0xf01, 0xd9, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0, 0, 0 } },
1451*c035e489Smlarkin {"vmrun", 0, 0xf01, 0xd8, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0, 0, 0 } },
1452*c035e489Smlarkin {"vmrun", 1, 0xf01, 0xd8, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
1453*c035e489Smlarkin {"vmsave", 0, 0xf01, 0xdb, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { 0, 0, 0 } },
1454*c035e489Smlarkin {"vmsave", 1, 0xf01, 0xdb, CpuSVME, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_xSuf|ImmExt, { BaseIndex|Disp8|Disp16|Disp32|Disp32S } },
1455*c035e489Smlarkin 
1456b305b0f1Sespie /* sentinel */
1457b55d4692Sfgsch {NULL, 0, 0, 0, 0, 0, { 0, 0, 0} }
14582159047fSniklas };
1459b305b0f1Sespie #undef X
1460b305b0f1Sespie #undef NoSuf
1461b305b0f1Sespie #undef b_Suf
1462b305b0f1Sespie #undef w_Suf
1463b305b0f1Sespie #undef l_Suf
1464b55d4692Sfgsch #undef q_Suf
1465b305b0f1Sespie #undef x_Suf
1466b305b0f1Sespie #undef bw_Suf
1467b305b0f1Sespie #undef bl_Suf
1468b305b0f1Sespie #undef wl_Suf
1469b55d4692Sfgsch #undef wlq_Suf
1470b305b0f1Sespie #undef sl_Suf
1471b305b0f1Sespie #undef bwl_Suf
1472b55d4692Sfgsch #undef bwlq_Suf
1473b305b0f1Sespie #undef FP
1474b305b0f1Sespie #undef l_FP
1475b305b0f1Sespie #undef x_FP
1476b305b0f1Sespie #undef sl_FP
14772159047fSniklas 
1478b305b0f1Sespie #define MAX_MNEM_SIZE 16	/* for parsing insn mnemonics from input */
14792159047fSniklas 
1480b305b0f1Sespie 
1481b305b0f1Sespie /* 386 register table.  */
14822159047fSniklas 
14832159047fSniklas static const reg_entry i386_regtab[] = {
1484b305b0f1Sespie   /* make %st first as we test for it */
1485b55d4692Sfgsch   {"st", FloatReg|FloatAcc, 0, 0},
1486b305b0f1Sespie   /* 8 bit regs */
1487b55d4692Sfgsch #define REGNAM_AL 1		/* Entry in i386_regtab.  */
1488b55d4692Sfgsch   {"al", Reg8|Acc, 0, 0},
1489b55d4692Sfgsch   {"cl", Reg8|ShiftCount, 0, 1},
1490b55d4692Sfgsch   {"dl", Reg8, 0, 2},
1491b55d4692Sfgsch   {"bl", Reg8, 0, 3},
1492b55d4692Sfgsch   {"ah", Reg8, 0, 4},
1493b55d4692Sfgsch   {"ch", Reg8, 0, 5},
1494b55d4692Sfgsch   {"dh", Reg8, 0, 6},
1495b55d4692Sfgsch   {"bh", Reg8, 0, 7},
1496b55d4692Sfgsch   {"axl", Reg8|Acc, RegRex64, 0},  /* Must be in the "al + 8" slot.  */
1497b55d4692Sfgsch   {"cxl", Reg8, RegRex64, 1},
1498b55d4692Sfgsch   {"dxl", Reg8, RegRex64, 2},
1499b55d4692Sfgsch   {"bxl", Reg8, RegRex64, 3},
1500b55d4692Sfgsch   {"spl", Reg8, RegRex64, 4},
1501b55d4692Sfgsch   {"bpl", Reg8, RegRex64, 5},
1502b55d4692Sfgsch   {"sil", Reg8, RegRex64, 6},
1503b55d4692Sfgsch   {"dil", Reg8, RegRex64, 7},
1504b55d4692Sfgsch   {"r8b", Reg8, RegRex64|RegRex, 0},
1505b55d4692Sfgsch   {"r9b", Reg8, RegRex64|RegRex, 1},
1506b55d4692Sfgsch   {"r10b", Reg8, RegRex64|RegRex, 2},
1507b55d4692Sfgsch   {"r11b", Reg8, RegRex64|RegRex, 3},
1508b55d4692Sfgsch   {"r12b", Reg8, RegRex64|RegRex, 4},
1509b55d4692Sfgsch   {"r13b", Reg8, RegRex64|RegRex, 5},
1510b55d4692Sfgsch   {"r14b", Reg8, RegRex64|RegRex, 6},
1511b55d4692Sfgsch   {"r15b", Reg8, RegRex64|RegRex, 7},
1512b305b0f1Sespie   /* 16 bit regs */
1513b55d4692Sfgsch #define REGNAM_AX 25
1514b55d4692Sfgsch   {"ax", Reg16|Acc, 0, 0},
1515b55d4692Sfgsch   {"cx", Reg16, 0, 1},
1516b55d4692Sfgsch   {"dx", Reg16|InOutPortReg, 0, 2},
1517b55d4692Sfgsch   {"bx", Reg16|BaseIndex, 0, 3},
1518b55d4692Sfgsch   {"sp", Reg16, 0, 4},
1519b55d4692Sfgsch   {"bp", Reg16|BaseIndex, 0, 5},
1520b55d4692Sfgsch   {"si", Reg16|BaseIndex, 0, 6},
1521b55d4692Sfgsch   {"di", Reg16|BaseIndex, 0, 7},
1522b55d4692Sfgsch   {"r8w", Reg16, RegRex, 0},
1523b55d4692Sfgsch   {"r9w", Reg16, RegRex, 1},
1524b55d4692Sfgsch   {"r10w", Reg16, RegRex, 2},
1525b55d4692Sfgsch   {"r11w", Reg16, RegRex, 3},
1526b55d4692Sfgsch   {"r12w", Reg16, RegRex, 4},
1527b55d4692Sfgsch   {"r13w", Reg16, RegRex, 5},
1528b55d4692Sfgsch   {"r14w", Reg16, RegRex, 6},
1529b55d4692Sfgsch   {"r15w", Reg16, RegRex, 7},
1530b305b0f1Sespie   /* 32 bit regs */
1531b55d4692Sfgsch #define REGNAM_EAX 41
1532b55d4692Sfgsch   {"eax", Reg32|BaseIndex|Acc, 0, 0},  /* Must be in ax + 16 slot */
1533b55d4692Sfgsch   {"ecx", Reg32|BaseIndex, 0, 1},
1534b55d4692Sfgsch   {"edx", Reg32|BaseIndex, 0, 2},
1535b55d4692Sfgsch   {"ebx", Reg32|BaseIndex, 0, 3},
1536b55d4692Sfgsch   {"esp", Reg32, 0, 4},
1537b55d4692Sfgsch   {"ebp", Reg32|BaseIndex, 0, 5},
1538b55d4692Sfgsch   {"esi", Reg32|BaseIndex, 0, 6},
1539b55d4692Sfgsch   {"edi", Reg32|BaseIndex, 0, 7},
1540b55d4692Sfgsch   {"r8d", Reg32|BaseIndex, RegRex, 0},
1541b55d4692Sfgsch   {"r9d", Reg32|BaseIndex, RegRex, 1},
1542b55d4692Sfgsch   {"r10d", Reg32|BaseIndex, RegRex, 2},
1543b55d4692Sfgsch   {"r11d", Reg32|BaseIndex, RegRex, 3},
1544b55d4692Sfgsch   {"r12d", Reg32|BaseIndex, RegRex, 4},
1545b55d4692Sfgsch   {"r13d", Reg32|BaseIndex, RegRex, 5},
1546b55d4692Sfgsch   {"r14d", Reg32|BaseIndex, RegRex, 6},
1547b55d4692Sfgsch   {"r15d", Reg32|BaseIndex, RegRex, 7},
1548b55d4692Sfgsch   {"rax", Reg64|BaseIndex|Acc, 0, 0},
1549b55d4692Sfgsch   {"rcx", Reg64|BaseIndex, 0, 1},
1550b55d4692Sfgsch   {"rdx", Reg64|BaseIndex, 0, 2},
1551b55d4692Sfgsch   {"rbx", Reg64|BaseIndex, 0, 3},
1552b55d4692Sfgsch   {"rsp", Reg64, 0, 4},
1553b55d4692Sfgsch   {"rbp", Reg64|BaseIndex, 0, 5},
1554b55d4692Sfgsch   {"rsi", Reg64|BaseIndex, 0, 6},
1555b55d4692Sfgsch   {"rdi", Reg64|BaseIndex, 0, 7},
1556b55d4692Sfgsch   {"r8", Reg64|BaseIndex, RegRex, 0},
1557b55d4692Sfgsch   {"r9", Reg64|BaseIndex, RegRex, 1},
1558b55d4692Sfgsch   {"r10", Reg64|BaseIndex, RegRex, 2},
1559b55d4692Sfgsch   {"r11", Reg64|BaseIndex, RegRex, 3},
1560b55d4692Sfgsch   {"r12", Reg64|BaseIndex, RegRex, 4},
1561b55d4692Sfgsch   {"r13", Reg64|BaseIndex, RegRex, 5},
1562b55d4692Sfgsch   {"r14", Reg64|BaseIndex, RegRex, 6},
1563b55d4692Sfgsch   {"r15", Reg64|BaseIndex, RegRex, 7},
1564b305b0f1Sespie   /* segment registers */
1565b55d4692Sfgsch   {"es", SReg2, 0, 0},
1566b55d4692Sfgsch   {"cs", SReg2, 0, 1},
1567b55d4692Sfgsch   {"ss", SReg2, 0, 2},
1568b55d4692Sfgsch   {"ds", SReg2, 0, 3},
1569b55d4692Sfgsch   {"fs", SReg3, 0, 4},
1570b55d4692Sfgsch   {"gs", SReg3, 0, 5},
1571b305b0f1Sespie   /* control registers */
1572b55d4692Sfgsch   {"cr0", Control, 0, 0},
1573b55d4692Sfgsch   {"cr1", Control, 0, 1},
1574b55d4692Sfgsch   {"cr2", Control, 0, 2},
1575b55d4692Sfgsch   {"cr3", Control, 0, 3},
1576b55d4692Sfgsch   {"cr4", Control, 0, 4},
1577b55d4692Sfgsch   {"cr5", Control, 0, 5},
1578b55d4692Sfgsch   {"cr6", Control, 0, 6},
1579b55d4692Sfgsch   {"cr7", Control, 0, 7},
1580b55d4692Sfgsch   {"cr8", Control, RegRex, 0},
1581b55d4692Sfgsch   {"cr9", Control, RegRex, 1},
1582b55d4692Sfgsch   {"cr10", Control, RegRex, 2},
1583b55d4692Sfgsch   {"cr11", Control, RegRex, 3},
1584b55d4692Sfgsch   {"cr12", Control, RegRex, 4},
1585b55d4692Sfgsch   {"cr13", Control, RegRex, 5},
1586b55d4692Sfgsch   {"cr14", Control, RegRex, 6},
1587b55d4692Sfgsch   {"cr15", Control, RegRex, 7},
1588b305b0f1Sespie   /* debug registers */
1589b55d4692Sfgsch   {"db0", Debug, 0, 0},
1590b55d4692Sfgsch   {"db1", Debug, 0, 1},
1591b55d4692Sfgsch   {"db2", Debug, 0, 2},
1592b55d4692Sfgsch   {"db3", Debug, 0, 3},
1593b55d4692Sfgsch   {"db4", Debug, 0, 4},
1594b55d4692Sfgsch   {"db5", Debug, 0, 5},
1595b55d4692Sfgsch   {"db6", Debug, 0, 6},
1596b55d4692Sfgsch   {"db7", Debug, 0, 7},
1597b55d4692Sfgsch   {"db8", Debug, RegRex, 0},
1598b55d4692Sfgsch   {"db9", Debug, RegRex, 1},
1599b55d4692Sfgsch   {"db10", Debug, RegRex, 2},
1600b55d4692Sfgsch   {"db11", Debug, RegRex, 3},
1601b55d4692Sfgsch   {"db12", Debug, RegRex, 4},
1602b55d4692Sfgsch   {"db13", Debug, RegRex, 5},
1603b55d4692Sfgsch   {"db14", Debug, RegRex, 6},
1604b55d4692Sfgsch   {"db15", Debug, RegRex, 7},
1605b55d4692Sfgsch   {"dr0", Debug, 0, 0},
1606b55d4692Sfgsch   {"dr1", Debug, 0, 1},
1607b55d4692Sfgsch   {"dr2", Debug, 0, 2},
1608b55d4692Sfgsch   {"dr3", Debug, 0, 3},
1609b55d4692Sfgsch   {"dr4", Debug, 0, 4},
1610b55d4692Sfgsch   {"dr5", Debug, 0, 5},
1611b55d4692Sfgsch   {"dr6", Debug, 0, 6},
1612b55d4692Sfgsch   {"dr7", Debug, 0, 7},
1613b55d4692Sfgsch   {"dr8", Debug, RegRex, 0},
1614b55d4692Sfgsch   {"dr9", Debug, RegRex, 1},
1615b55d4692Sfgsch   {"dr10", Debug, RegRex, 2},
1616b55d4692Sfgsch   {"dr11", Debug, RegRex, 3},
1617b55d4692Sfgsch   {"dr12", Debug, RegRex, 4},
1618b55d4692Sfgsch   {"dr13", Debug, RegRex, 5},
1619b55d4692Sfgsch   {"dr14", Debug, RegRex, 6},
1620b55d4692Sfgsch   {"dr15", Debug, RegRex, 7},
1621b305b0f1Sespie   /* test registers */
1622b55d4692Sfgsch   {"tr0", Test, 0, 0},
1623b55d4692Sfgsch   {"tr1", Test, 0, 1},
1624b55d4692Sfgsch   {"tr2", Test, 0, 2},
1625b55d4692Sfgsch   {"tr3", Test, 0, 3},
1626b55d4692Sfgsch   {"tr4", Test, 0, 4},
1627b55d4692Sfgsch   {"tr5", Test, 0, 5},
1628b55d4692Sfgsch   {"tr6", Test, 0, 6},
1629b55d4692Sfgsch   {"tr7", Test, 0, 7},
1630b305b0f1Sespie   /* mmx and simd registers */
1631b55d4692Sfgsch   {"mm0", RegMMX, 0, 0},
1632b55d4692Sfgsch   {"mm1", RegMMX, 0, 1},
1633b55d4692Sfgsch   {"mm2", RegMMX, 0, 2},
1634b55d4692Sfgsch   {"mm3", RegMMX, 0, 3},
1635b55d4692Sfgsch   {"mm4", RegMMX, 0, 4},
1636b55d4692Sfgsch   {"mm5", RegMMX, 0, 5},
1637b55d4692Sfgsch   {"mm6", RegMMX, 0, 6},
1638b55d4692Sfgsch   {"mm7", RegMMX, 0, 7},
1639b55d4692Sfgsch   {"xmm0", RegXMM, 0, 0},
1640b55d4692Sfgsch   {"xmm1", RegXMM, 0, 1},
1641b55d4692Sfgsch   {"xmm2", RegXMM, 0, 2},
1642b55d4692Sfgsch   {"xmm3", RegXMM, 0, 3},
1643b55d4692Sfgsch   {"xmm4", RegXMM, 0, 4},
1644b55d4692Sfgsch   {"xmm5", RegXMM, 0, 5},
1645b55d4692Sfgsch   {"xmm6", RegXMM, 0, 6},
1646b55d4692Sfgsch   {"xmm7", RegXMM, 0, 7},
1647b55d4692Sfgsch   {"xmm8", RegXMM, RegRex, 0},
1648b55d4692Sfgsch   {"xmm9", RegXMM, RegRex, 1},
1649b55d4692Sfgsch   {"xmm10", RegXMM, RegRex, 2},
1650b55d4692Sfgsch   {"xmm11", RegXMM, RegRex, 3},
1651b55d4692Sfgsch   {"xmm12", RegXMM, RegRex, 4},
1652b55d4692Sfgsch   {"xmm13", RegXMM, RegRex, 5},
1653b55d4692Sfgsch   {"xmm14", RegXMM, RegRex, 6},
1654b55d4692Sfgsch   {"xmm15", RegXMM, RegRex, 7},
1655b55d4692Sfgsch   /* no type will make this register rejected for all purposes except
1656b55d4692Sfgsch      for addressing.  This saves creating one extra type for RIP.  */
1657b55d4692Sfgsch   {"rip", BaseIndex, 0, 0}
1658b305b0f1Sespie };
1659b305b0f1Sespie 
1660b305b0f1Sespie static const reg_entry i386_float_regtab[] = {
1661b55d4692Sfgsch   {"st(0)", FloatReg|FloatAcc, 0, 0},
1662b55d4692Sfgsch   {"st(1)", FloatReg, 0, 1},
1663b55d4692Sfgsch   {"st(2)", FloatReg, 0, 2},
1664b55d4692Sfgsch   {"st(3)", FloatReg, 0, 3},
1665b55d4692Sfgsch   {"st(4)", FloatReg, 0, 4},
1666b55d4692Sfgsch   {"st(5)", FloatReg, 0, 5},
1667b55d4692Sfgsch   {"st(6)", FloatReg, 0, 6},
1668b55d4692Sfgsch   {"st(7)", FloatReg, 0, 7}
16692159047fSniklas };
16702159047fSniklas 
16712159047fSniklas #define MAX_REG_NAME_SIZE 8	/* for parsing register names from input */
16722159047fSniklas 
16732159047fSniklas /* segment stuff */
16742159047fSniklas static const seg_entry cs = { "cs", 0x2e };
16752159047fSniklas static const seg_entry ds = { "ds", 0x3e };
16762159047fSniklas static const seg_entry ss = { "ss", 0x36 };
16772159047fSniklas static const seg_entry es = { "es", 0x26 };
16782159047fSniklas static const seg_entry fs = { "fs", 0x64 };
16792159047fSniklas static const seg_entry gs = { "gs", 0x65 };
16802159047fSniklas 
1681b305b0f1Sespie /* end of opcode/i386.h */
1682