1 typedef struct {
2 	UINT8 opcode;
3 	UINT32 flags;
4 	void (*handler16)(void);
5 	void (*handler32)(void);
6 } X86_OPCODE;
7 
8 #define OP_I386			0x1
9 #define OP_FPU			0x2
10 #define OP_I486			0x4
11 #define OP_PENTIUM		0x8
12 #define OP_MMX			0x10
13 #define OP_PPRO			0x20
14 #define OP_SSE			0x40
15 #define OP_SSE2			0x80
16 #define OP_SSE3			0x100
17 #define OP_CYRIX		0x8000
18 #define OP_2BYTE		0x80000000
19 
20 static X86_OPCODE x86_opcode_table[] =
21 {
22 //  Opcode      Flags                       16-bit handler                  32-bit handler
23 	{ 0x00,		OP_I386,					I386OP(add_rm8_r8),				I386OP(add_rm8_r8),			},
24 	{ 0x01,		OP_I386,					I386OP(add_rm16_r16),			I386OP(add_rm32_r32),		},
25 	{ 0x02,		OP_I386,					I386OP(add_r8_rm8),				I386OP(add_r8_rm8),			},
26 	{ 0x03,		OP_I386,					I386OP(add_r16_rm16),			I386OP(add_r32_rm32),		},
27 	{ 0x04,		OP_I386,					I386OP(add_al_i8),				I386OP(add_al_i8),			},
28 	{ 0x05,		OP_I386,					I386OP(add_ax_i16),				I386OP(add_eax_i32),		},
29 	{ 0x06,		OP_I386,					I386OP(push_es16),				I386OP(push_es32),			},
30 	{ 0x07,		OP_I386,					I386OP(pop_es16),				I386OP(pop_es32),			},
31 	{ 0x08,		OP_I386,					I386OP(or_rm8_r8),				I386OP(or_rm8_r8),			},
32 	{ 0x09,		OP_I386,					I386OP(or_rm16_r16),			I386OP(or_rm32_r32),		},
33 	{ 0x0A,		OP_I386,					I386OP(or_r8_rm8),				I386OP(or_r8_rm8),			},
34 	{ 0x0B,		OP_I386,					I386OP(or_r16_rm16),			I386OP(or_r32_rm32),		},
35 	{ 0x0C,		OP_I386,					I386OP(or_al_i8),				I386OP(or_al_i8),			},
36 	{ 0x0D,		OP_I386,					I386OP(or_ax_i16),				I386OP(or_eax_i32),			},
37 	{ 0x0E,		OP_I386,					I386OP(push_cs16),				I386OP(push_cs32),			},
38 	{ 0x0F,		OP_I386,					I386OP(decode_two_byte),		I386OP(decode_two_byte),	},
39 	{ 0x10,		OP_I386,					I386OP(adc_rm8_r8),				I386OP(adc_rm8_r8),			},
40 	{ 0x11,		OP_I386,					I386OP(adc_rm16_r16),			I386OP(adc_rm32_r32),		},
41 	{ 0x12,		OP_I386,					I386OP(adc_r8_rm8),				I386OP(adc_r8_rm8),			},
42 	{ 0x13,		OP_I386,					I386OP(adc_r16_rm16),			I386OP(adc_r32_rm32),		},
43 	{ 0x14,		OP_I386,					I386OP(adc_al_i8),				I386OP(adc_al_i8),			},
44 	{ 0x15,		OP_I386,					I386OP(adc_ax_i16),				I386OP(adc_eax_i32),		},
45 	{ 0x16,		OP_I386,					I386OP(push_ss16),				I386OP(push_ss32),			},
46 	{ 0x17,		OP_I386,					I386OP(pop_ss16),				I386OP(pop_ss32),			},
47 	{ 0x18,		OP_I386,					I386OP(sbb_rm8_r8),				I386OP(sbb_rm8_r8),			},
48 	{ 0x19,		OP_I386,					I386OP(sbb_rm16_r16),			I386OP(sbb_rm32_r32),		},
49 	{ 0x1A,		OP_I386,					I386OP(sbb_r8_rm8),				I386OP(sbb_r8_rm8),			},
50 	{ 0x1B,		OP_I386,					I386OP(sbb_r16_rm16),			I386OP(sbb_r32_rm32),		},
51 	{ 0x1C,		OP_I386,					I386OP(sbb_al_i8),				I386OP(sbb_al_i8),			},
52 	{ 0x1D,		OP_I386,					I386OP(sbb_ax_i16),				I386OP(sbb_eax_i32),		},
53 	{ 0x1E,		OP_I386,					I386OP(push_ds16),				I386OP(push_ds32),			},
54 	{ 0x1F,		OP_I386,					I386OP(pop_ds16),				I386OP(pop_ds32),			},
55 	{ 0x20,		OP_I386,					I386OP(and_rm8_r8),				I386OP(and_rm8_r8),			},
56 	{ 0x21,		OP_I386,					I386OP(and_rm16_r16),			I386OP(and_rm32_r32),		},
57 	{ 0x22,		OP_I386,					I386OP(and_r8_rm8),				I386OP(and_r8_rm8),			},
58 	{ 0x23,		OP_I386,					I386OP(and_r16_rm16),			I386OP(and_r32_rm32),		},
59 	{ 0x24,		OP_I386,					I386OP(and_al_i8),				I386OP(and_al_i8),			},
60 	{ 0x25,		OP_I386,					I386OP(and_ax_i16),				I386OP(and_eax_i32),		},
61 	{ 0x26,		OP_I386,					I386OP(segment_ES),				I386OP(segment_ES),			},
62 	{ 0x27,		OP_I386,					I386OP(daa),					I386OP(daa),				},
63 	{ 0x28,		OP_I386,					I386OP(sub_rm8_r8),				I386OP(sub_rm8_r8),			},
64 	{ 0x29,		OP_I386,					I386OP(sub_rm16_r16),			I386OP(sub_rm32_r32),		},
65 	{ 0x2A,		OP_I386,					I386OP(sub_r8_rm8),				I386OP(sub_r8_rm8),			},
66 	{ 0x2B,		OP_I386,					I386OP(sub_r16_rm16),			I386OP(sub_r32_rm32),		},
67 	{ 0x2C,		OP_I386,					I386OP(sub_al_i8),				I386OP(sub_al_i8),			},
68 	{ 0x2D,		OP_I386,					I386OP(sub_ax_i16),				I386OP(sub_eax_i32),		},
69 	{ 0x2E,		OP_I386,					I386OP(segment_CS),				I386OP(segment_CS),			},
70 	{ 0x2F,		OP_I386,					I386OP(das),					I386OP(das),				},
71 	{ 0x30,		OP_I386,					I386OP(xor_rm8_r8),				I386OP(xor_rm8_r8),			},
72 	{ 0x31,		OP_I386,					I386OP(xor_rm16_r16),			I386OP(xor_rm32_r32),		},
73 	{ 0x32,		OP_I386,					I386OP(xor_r8_rm8),				I386OP(xor_r8_rm8),			},
74 	{ 0x33,		OP_I386,					I386OP(xor_r16_rm16),			I386OP(xor_r32_rm32),		},
75 	{ 0x34,		OP_I386,					I386OP(xor_al_i8),				I386OP(xor_al_i8),			},
76 	{ 0x35,		OP_I386,					I386OP(xor_ax_i16),				I386OP(xor_eax_i32),		},
77 	{ 0x36,		OP_I386,					I386OP(segment_SS),				I386OP(segment_SS),			},
78 	{ 0x37,		OP_I386,					I386OP(aaa),					I386OP(aaa),				},
79 	{ 0x38,		OP_I386,					I386OP(cmp_rm8_r8),				I386OP(cmp_rm8_r8),			},
80 	{ 0x39,		OP_I386,					I386OP(cmp_rm16_r16),			I386OP(cmp_rm32_r32),		},
81 	{ 0x3A,		OP_I386,					I386OP(cmp_r8_rm8),				I386OP(cmp_r8_rm8),			},
82 	{ 0x3B,		OP_I386,					I386OP(cmp_r16_rm16),			I386OP(cmp_r32_rm32),		},
83 	{ 0x3C,		OP_I386,					I386OP(cmp_al_i8),				I386OP(cmp_al_i8),			},
84 	{ 0x3D,		OP_I386,					I386OP(cmp_ax_i16),				I386OP(cmp_eax_i32),		},
85 	{ 0x3E,		OP_I386,					I386OP(segment_DS),				I386OP(segment_DS),			},
86 	{ 0x3F,		OP_I386,					I386OP(aas),					I386OP(aas),				},
87 	{ 0x40,		OP_I386,					I386OP(inc_ax),					I386OP(inc_eax),			},
88 	{ 0x41,		OP_I386,					I386OP(inc_cx),					I386OP(inc_ecx),			},
89 	{ 0x42,		OP_I386,					I386OP(inc_dx),					I386OP(inc_edx),			},
90 	{ 0x43,		OP_I386,					I386OP(inc_bx),					I386OP(inc_ebx),			},
91 	{ 0x44,		OP_I386,					I386OP(inc_sp),					I386OP(inc_esp),			},
92 	{ 0x45,		OP_I386,					I386OP(inc_bp),					I386OP(inc_ebp),			},
93 	{ 0x46,		OP_I386,					I386OP(inc_si),					I386OP(inc_esi),			},
94 	{ 0x47,		OP_I386,					I386OP(inc_di),					I386OP(inc_edi),			},
95 	{ 0x48,		OP_I386,					I386OP(dec_ax),					I386OP(dec_eax),			},
96 	{ 0x49,		OP_I386,					I386OP(dec_cx),					I386OP(dec_ecx),			},
97 	{ 0x4A,		OP_I386,					I386OP(dec_dx),					I386OP(dec_edx),			},
98 	{ 0x4B,		OP_I386,					I386OP(dec_bx),					I386OP(dec_ebx),			},
99 	{ 0x4C,		OP_I386,					I386OP(dec_sp),					I386OP(dec_esp),			},
100 	{ 0x4D,		OP_I386,					I386OP(dec_bp),					I386OP(dec_ebp),			},
101 	{ 0x4E,		OP_I386,					I386OP(dec_si),					I386OP(dec_esi),			},
102 	{ 0x4F,		OP_I386,					I386OP(dec_di),					I386OP(dec_edi),			},
103 	{ 0x50,		OP_I386,					I386OP(push_ax),				I386OP(push_eax),			},
104 	{ 0x51,		OP_I386,					I386OP(push_cx),				I386OP(push_ecx),			},
105 	{ 0x52,		OP_I386,					I386OP(push_dx),				I386OP(push_edx),			},
106 	{ 0x53,		OP_I386,					I386OP(push_bx),				I386OP(push_ebx),			},
107 	{ 0x54,		OP_I386,					I386OP(push_sp),				I386OP(push_esp),			},
108 	{ 0x55,		OP_I386,					I386OP(push_bp),				I386OP(push_ebp),			},
109 	{ 0x56,		OP_I386,					I386OP(push_si),				I386OP(push_esi),			},
110 	{ 0x57,		OP_I386,					I386OP(push_di),				I386OP(push_edi),			},
111 	{ 0x58,		OP_I386,					I386OP(pop_ax),					I386OP(pop_eax),			},
112 	{ 0x59,		OP_I386,					I386OP(pop_cx),					I386OP(pop_ecx),			},
113 	{ 0x5A,		OP_I386,					I386OP(pop_dx),					I386OP(pop_edx),			},
114 	{ 0x5B,		OP_I386,					I386OP(pop_bx),					I386OP(pop_ebx),			},
115 	{ 0x5C,		OP_I386,					I386OP(pop_sp),					I386OP(pop_esp),			},
116 	{ 0x5D,		OP_I386,					I386OP(pop_bp),					I386OP(pop_ebp),			},
117 	{ 0x5E,		OP_I386,					I386OP(pop_si),					I386OP(pop_esi),			},
118 	{ 0x5F,		OP_I386,					I386OP(pop_di),					I386OP(pop_edi),			},
119 	{ 0x60,		OP_I386,					I386OP(pusha),					I386OP(pushad),				},
120 	{ 0x61,		OP_I386,					I386OP(popa),					I386OP(popad),				},
121 	{ 0x62,		OP_I386,					I386OP(bound_r16_m16_m16),		I386OP(bound_r32_m32_m32),	},
122 	{ 0x63,		OP_I386,					I386OP(unimplemented),			I386OP(unimplemented),		},
123 	{ 0x64,		OP_I386,					I386OP(segment_FS),				I386OP(segment_FS),			},
124 	{ 0x65,		OP_I386,					I386OP(segment_GS),				I386OP(segment_GS),			},
125 	{ 0x66,		OP_I386,					I386OP(operand_size),			I386OP(operand_size),		},
126 	{ 0x67,		OP_I386,					I386OP(address_size),			I386OP(address_size),		},
127 	{ 0x68,		OP_I386,					I386OP(push_i16),				I386OP(push_i32),			},
128 	{ 0x69,		OP_I386,					I386OP(imul_r16_rm16_i16),		I386OP(imul_r32_rm32_i32),	},
129 	{ 0x6A,		OP_I386,					I386OP(push_i8),				I386OP(push_i8),			},
130 	{ 0x6B,		OP_I386,					I386OP(imul_r16_rm16_i8),		I386OP(imul_r32_rm32_i8),	},
131 	{ 0x6C,		OP_I386,					I386OP(insb),					I386OP(insb),				},
132 	{ 0x6D,		OP_I386,					I386OP(insw),					I386OP(insd),				},
133 	{ 0x6E,		OP_I386,					I386OP(outsb),					I386OP(outsb),				},
134 	{ 0x6F,		OP_I386,					I386OP(outsw),					I386OP(outsd),				},
135 	{ 0x70,		OP_I386,					I386OP(jo_rel8),				I386OP(jo_rel8),			},
136 	{ 0x71,		OP_I386,					I386OP(jno_rel8),				I386OP(jno_rel8),			},
137 	{ 0x72,		OP_I386,					I386OP(jc_rel8),				I386OP(jc_rel8),			},
138 	{ 0x73,		OP_I386,					I386OP(jnc_rel8),				I386OP(jnc_rel8),			},
139 	{ 0x74,		OP_I386,					I386OP(jz_rel8),				I386OP(jz_rel8),			},
140 	{ 0x75,		OP_I386,					I386OP(jnz_rel8),				I386OP(jnz_rel8),			},
141 	{ 0x76,		OP_I386,					I386OP(jbe_rel8),				I386OP(jbe_rel8),			},
142 	{ 0x77,		OP_I386,					I386OP(ja_rel8),				I386OP(ja_rel8),			},
143 	{ 0x78,		OP_I386,					I386OP(js_rel8),				I386OP(js_rel8),			},
144 	{ 0x79,		OP_I386,					I386OP(jns_rel8),				I386OP(jns_rel8),			},
145 	{ 0x7A,		OP_I386,					I386OP(jp_rel8),				I386OP(jp_rel8),			},
146 	{ 0x7B,		OP_I386,					I386OP(jnp_rel8),				I386OP(jnp_rel8),			},
147 	{ 0x7C,		OP_I386,					I386OP(jl_rel8),				I386OP(jl_rel8),			},
148 	{ 0x7D,		OP_I386,					I386OP(jge_rel8),				I386OP(jge_rel8),			},
149 	{ 0x7E,		OP_I386,					I386OP(jle_rel8),				I386OP(jle_rel8),			},
150 	{ 0x7F,		OP_I386,					I386OP(jg_rel8),				I386OP(jg_rel8),			},
151 	{ 0x80,		OP_I386,					I386OP(group80_8),				I386OP(group80_8),			},
152 	{ 0x81,		OP_I386,					I386OP(group81_16),				I386OP(group81_32),			},
153 	{ 0x82,		OP_I386,					I386OP(group80_8),				I386OP(group80_8),			},
154 	{ 0x83,		OP_I386,					I386OP(group83_16),				I386OP(group83_32),			},
155 	{ 0x84,		OP_I386,					I386OP(test_rm8_r8),			I386OP(test_rm8_r8),		},
156 	{ 0x85,		OP_I386,					I386OP(test_rm16_r16),			I386OP(test_rm32_r32),		},
157 	{ 0x86,		OP_I386,					I386OP(xchg_r8_rm8),			I386OP(xchg_r8_rm8),		},
158 	{ 0x87,		OP_I386,					I386OP(xchg_r16_rm16),			I386OP(xchg_r32_rm32),		},
159 	{ 0x88,		OP_I386,					I386OP(mov_rm8_r8),				I386OP(mov_rm8_r8),			},
160 	{ 0x89,		OP_I386,					I386OP(mov_rm16_r16),			I386OP(mov_rm32_r32),		},
161 	{ 0x8A,		OP_I386,					I386OP(mov_r8_rm8),				I386OP(mov_r8_rm8),			},
162 	{ 0x8B,		OP_I386,					I386OP(mov_r16_rm16),			I386OP(mov_r32_rm32),		},
163 	{ 0x8C,		OP_I386,					I386OP(mov_rm16_sreg),			I386OP(mov_rm16_sreg),		},
164 	{ 0x8D,		OP_I386,					I386OP(lea16),					I386OP(lea32),				},
165 	{ 0x8E,		OP_I386,					I386OP(mov_sreg_rm16),			I386OP(mov_sreg_rm16),		},
166 	{ 0x8F,		OP_I386,					I386OP(pop_rm16),				I386OP(pop_rm32),			},
167 	{ 0x90,		OP_I386,					I386OP(nop),					I386OP(nop),				},
168 	{ 0x91,		OP_I386,					I386OP(xchg_ax_cx),				I386OP(xchg_eax_ecx),		},
169 	{ 0x92,		OP_I386,					I386OP(xchg_ax_dx),				I386OP(xchg_eax_edx),		},
170 	{ 0x93,		OP_I386,					I386OP(xchg_ax_bx),				I386OP(xchg_eax_ebx),		},
171 	{ 0x94,		OP_I386,					I386OP(xchg_ax_sp),				I386OP(xchg_eax_esp),		},
172 	{ 0x95,		OP_I386,					I386OP(xchg_ax_bp),				I386OP(xchg_eax_ebp),		},
173 	{ 0x96,		OP_I386,					I386OP(xchg_ax_si),				I386OP(xchg_eax_esi),		},
174 	{ 0x97,		OP_I386,					I386OP(xchg_ax_di),				I386OP(xchg_eax_edi),		},
175 	{ 0x98,		OP_I386,					I386OP(cbw),					I386OP(cwde),				},
176 	{ 0x99,		OP_I386,					I386OP(cwd),					I386OP(cdq),				},
177 	{ 0x9A,		OP_I386,					I386OP(call_abs16),				I386OP(call_abs32),			},
178 	{ 0x9B,		OP_I386,					I386OP(wait),					I386OP(wait),				},
179 	{ 0x9C,		OP_I386,					I386OP(pushf),					I386OP(pushfd),				},
180 	{ 0x9D,		OP_I386,					I386OP(popf),					I386OP(popfd),				},
181 	{ 0x9E,		OP_I386,					I386OP(sahf),					I386OP(sahf),				},
182 	{ 0x9F,		OP_I386,					I386OP(lahf),					I386OP(lahf),				},
183 	{ 0xA0,		OP_I386,					I386OP(mov_al_m8),				I386OP(mov_al_m8),			},
184 	{ 0xA1,		OP_I386,					I386OP(mov_ax_m16),				I386OP(mov_eax_m32),		},
185 	{ 0xA2,		OP_I386,					I386OP(mov_m8_al),				I386OP(mov_m8_al),			},
186 	{ 0xA3,		OP_I386,					I386OP(mov_m16_ax),				I386OP(mov_m32_eax),		},
187 	{ 0xA4,		OP_I386,					I386OP(movsb),					I386OP(movsb),				},
188 	{ 0xA5,		OP_I386,					I386OP(movsw),					I386OP(movsd),				},
189 	{ 0xA6,		OP_I386,					I386OP(cmpsb),					I386OP(cmpsb),				},
190 	{ 0xA7,		OP_I386,					I386OP(cmpsw),					I386OP(cmpsd),				},
191 	{ 0xA8,		OP_I386,					I386OP(test_al_i8),				I386OP(test_al_i8),			},
192 	{ 0xA9,		OP_I386,					I386OP(test_ax_i16),			I386OP(test_eax_i32),		},
193 	{ 0xAA,		OP_I386,					I386OP(stosb),					I386OP(stosb),				},
194 	{ 0xAB,		OP_I386,					I386OP(stosw),					I386OP(stosd),				},
195 	{ 0xAC,		OP_I386,					I386OP(lodsb),					I386OP(lodsb),				},
196 	{ 0xAD,		OP_I386,					I386OP(lodsw),					I386OP(lodsd),				},
197 	{ 0xAE,		OP_I386,					I386OP(scasb),					I386OP(scasb),				},
198 	{ 0xAF,		OP_I386,					I386OP(scasw),					I386OP(scasd),				},
199 	{ 0xB0,		OP_I386,					I386OP(mov_al_i8),				I386OP(mov_al_i8),			},
200 	{ 0xB1,		OP_I386,					I386OP(mov_cl_i8),				I386OP(mov_cl_i8),			},
201 	{ 0xB2,		OP_I386,					I386OP(mov_dl_i8),				I386OP(mov_dl_i8),			},
202 	{ 0xB3,		OP_I386,					I386OP(mov_bl_i8),				I386OP(mov_bl_i8),			},
203 	{ 0xB4,		OP_I386,					I386OP(mov_ah_i8),				I386OP(mov_ah_i8),			},
204 	{ 0xB5,		OP_I386,					I386OP(mov_ch_i8),				I386OP(mov_ch_i8),			},
205 	{ 0xB6,		OP_I386,					I386OP(mov_dh_i8),				I386OP(mov_dh_i8),			},
206 	{ 0xB7,		OP_I386,					I386OP(mov_bh_i8),				I386OP(mov_bh_i8),			},
207 	{ 0xB8,		OP_I386,					I386OP(mov_ax_i16),				I386OP(mov_eax_i32),		},
208 	{ 0xB9,		OP_I386,					I386OP(mov_cx_i16),				I386OP(mov_ecx_i32),		},
209 	{ 0xBA,		OP_I386,					I386OP(mov_dx_i16),				I386OP(mov_edx_i32),		},
210 	{ 0xBB,		OP_I386,					I386OP(mov_bx_i16),				I386OP(mov_ebx_i32),		},
211 	{ 0xBC,		OP_I386,					I386OP(mov_sp_i16),				I386OP(mov_esp_i32),		},
212 	{ 0xBD,		OP_I386,					I386OP(mov_bp_i16),				I386OP(mov_ebp_i32),		},
213 	{ 0xBE,		OP_I386,					I386OP(mov_si_i16),				I386OP(mov_esi_i32),		},
214 	{ 0xBF,		OP_I386,					I386OP(mov_di_i16),				I386OP(mov_edi_i32),		},
215 	{ 0xC0,		OP_I386,					I386OP(groupC0_8),				I386OP(groupC0_8),			},
216 	{ 0xC1,		OP_I386,					I386OP(groupC1_16),				I386OP(groupC1_32),			},
217 	{ 0xC2,		OP_I386,					I386OP(ret_near16_i16),			I386OP(ret_near32_i16),		},
218 	{ 0xC3,		OP_I386,					I386OP(ret_near16),				I386OP(ret_near32),			},
219 	{ 0xC4,		OP_I386,					I386OP(les16),					I386OP(les32),				},
220 	{ 0xC5,		OP_I386,					I386OP(lds16),					I386OP(lds32),				},
221 	{ 0xC6,		OP_I386,					I386OP(mov_rm8_i8),				I386OP(mov_rm8_i8),			},
222 	{ 0xC7,		OP_I386,					I386OP(mov_rm16_i16),			I386OP(mov_rm32_i32),		},
223 	{ 0xC8,		OP_I386,					I386OP(unimplemented),			I386OP(unimplemented),		},
224 	{ 0xC9,		OP_I386,					I386OP(leave16),				I386OP(leave32),			},
225 	{ 0xCA,		OP_I386,					I386OP(retf_i16),				I386OP(retf_i32),			},
226 	{ 0xCB,		OP_I386,					I386OP(retf16),					I386OP(retf32),				},
227 	{ 0xCC,		OP_I386,					I386OP(int3),					I386OP(int3),				},
228 	{ 0xCD,		OP_I386,					I386OP(int),					I386OP(int),				},
229 	{ 0xCE,		OP_I386,					I386OP(into),					I386OP(into),				},
230 	{ 0xCF,		OP_I386,					I386OP(iret16),					I386OP(iret32),				},
231 	{ 0xD0,		OP_I386,					I386OP(groupD0_8),				I386OP(groupD0_8),			},
232 	{ 0xD1,		OP_I386,					I386OP(groupD1_16),				I386OP(groupD1_32),			},
233 	{ 0xD2,		OP_I386,					I386OP(groupD2_8),				I386OP(groupD2_8),			},
234 	{ 0xD3,		OP_I386,					I386OP(groupD3_16),				I386OP(groupD3_32),			},
235 	{ 0xD4,		OP_I386,					I386OP(aam),					I386OP(aam),				},
236 	{ 0xD5,		OP_I386,					I386OP(aad),					I386OP(aad),				},
237 	{ 0xD6,		OP_I386,					I386OP(setalc),					I386OP(setalc),				},
238 	{ 0xD7,		OP_I386,					I386OP(xlat16),					I386OP(xlat32),				},
239 	{ 0xD8,		OP_I386,					I386OP(escape),					I386OP(escape),				},
240 	{ 0xD9,		OP_I386,					I386OP(escape),					I386OP(escape),				},
241 	{ 0xDA,		OP_I386,					I386OP(escape),					I386OP(escape),				},
242 	{ 0xDB,		OP_I386,					I386OP(escape),					I386OP(escape),				},
243 	{ 0xDC,		OP_I386,					I386OP(escape),					I386OP(escape),				},
244 	{ 0xDD,		OP_I386,					I386OP(escape),					I386OP(escape),				},
245 	{ 0xDE,		OP_I386,					I386OP(escape),					I386OP(escape),				},
246 	{ 0xDF,		OP_I386,					I386OP(escape),					I386OP(escape),				},
247 	{ 0xD8,		OP_FPU,						I386OP(fpu_group_d8),			I386OP(fpu_group_d8),		},
248 	{ 0xD9,		OP_FPU,						I386OP(fpu_group_d9),			I386OP(fpu_group_d9),		},
249 	{ 0xDA,		OP_FPU,						I386OP(fpu_group_da),			I386OP(fpu_group_da),		},
250 	{ 0xDB,		OP_FPU,						I386OP(fpu_group_db),			I386OP(fpu_group_db),		},
251 	{ 0xDC,		OP_FPU,						I386OP(fpu_group_dc),			I386OP(fpu_group_dc),		},
252 	{ 0xDD,		OP_FPU,						I386OP(fpu_group_dd),			I386OP(fpu_group_dd),		},
253 	{ 0xDE,		OP_FPU,						I386OP(fpu_group_de),			I386OP(fpu_group_de),		},
254 	{ 0xDF,		OP_FPU,						I386OP(fpu_group_df),			I386OP(fpu_group_df),		},
255 	{ 0xE0,		OP_I386,					I386OP(loopne16),				I386OP(loopne32),			},
256 	{ 0xE1,		OP_I386,					I386OP(loopz16),				I386OP(loopz32),			},
257 	{ 0xE2,		OP_I386,					I386OP(loop16),					I386OP(loop32),				},
258 	{ 0xE3,		OP_I386,					I386OP(jcxz16),					I386OP(jcxz32),				},
259 	{ 0xE4,		OP_I386,					I386OP(in_al_i8),				I386OP(in_al_i8),			},
260 	{ 0xE5,		OP_I386,					I386OP(in_ax_i8),				I386OP(in_eax_i8),			},
261 	{ 0xE6,		OP_I386,					I386OP(out_al_i8),				I386OP(out_al_i8),			},
262 	{ 0xE7,		OP_I386,					I386OP(out_ax_i8),				I386OP(out_eax_i8),			},
263 	{ 0xE8,		OP_I386,					I386OP(call_rel16),				I386OP(call_rel32),			},
264 	{ 0xE9,		OP_I386,					I386OP(jmp_rel16),				I386OP(jmp_rel32),			},
265 	{ 0xEA,		OP_I386,					I386OP(jmp_abs16),				I386OP(jmp_abs32),			},
266 	{ 0xEB,		OP_I386,					I386OP(jmp_rel8),				I386OP(jmp_rel8),			},
267 	{ 0xEC,		OP_I386,					I386OP(in_al_dx),				I386OP(in_al_dx),			},
268 	{ 0xED,		OP_I386,					I386OP(in_ax_dx),				I386OP(in_eax_dx),			},
269 	{ 0xEE,		OP_I386,					I386OP(out_al_dx),				I386OP(out_al_dx),			},
270 	{ 0xEF,		OP_I386,					I386OP(out_ax_dx),				I386OP(out_eax_dx),			},
271 	{ 0xF0,		OP_I386,					I386OP(lock),					I386OP(lock),				},
272 	{ 0xF1,		OP_I386,					I386OP(invalid),				I386OP(invalid),			},
273 	{ 0xF2,		OP_I386,					I386OP(repne),					I386OP(repne),				},
274 	{ 0xF3,		OP_I386,					I386OP(rep),					I386OP(rep),				},
275 	{ 0xF4,		OP_I386,					I386OP(hlt),					I386OP(hlt),				},
276 	{ 0xF5,		OP_I386,					I386OP(cmc),					I386OP(cmc),				},
277 	{ 0xF6,		OP_I386,					I386OP(groupF6_8),				I386OP(groupF6_8),			},
278 	{ 0xF7,		OP_I386,					I386OP(groupF7_16),				I386OP(groupF7_32),			},
279 	{ 0xF8,		OP_I386,					I386OP(clc),					I386OP(clc),				},
280 	{ 0xF9,		OP_I386,					I386OP(stc),					I386OP(stc),				},
281 	{ 0xFA,		OP_I386,					I386OP(cli),					I386OP(cli),				},
282 	{ 0xFB,		OP_I386,					I386OP(sti),					I386OP(sti),				},
283 	{ 0xFC,		OP_I386,					I386OP(cld),					I386OP(cld),				},
284 	{ 0xFD,		OP_I386,					I386OP(std),					I386OP(std),				},
285 	{ 0xFE,		OP_I386,					I386OP(groupFE_8),				I386OP(groupFE_8),			},
286 	{ 0xFF,		OP_I386,					I386OP(groupFF_16),				I386OP(groupFF_32),			},
287 	{ 0x00,		OP_2BYTE|OP_I386,			I386OP(group0F00_16),			I386OP(group0F00_32),		},
288 	{ 0x01,		OP_2BYTE|OP_I386,			I386OP(group0F01_16),			I386OP(group0F01_32),		},
289 	{ 0x02,		OP_2BYTE|OP_I386,			I386OP(unimplemented),			I386OP(unimplemented),		},
290 	{ 0x03,		OP_2BYTE|OP_I386,			I386OP(unimplemented),			I386OP(unimplemented),		},
291 	{ 0x06,		OP_2BYTE|OP_I386,			I386OP(clts),					I386OP(clts),				},
292 	{ 0x08,		OP_2BYTE|OP_I486,			I486OP(invd),					I486OP(invd),				},
293 	{ 0x09,		OP_2BYTE|OP_I486,			I486OP(wbinvd),					I486OP(wbinvd),				},
294 	{ 0x0B,		OP_2BYTE|OP_I386,			I386OP(unimplemented),			I386OP(unimplemented),		},
295 	{ 0x20,		OP_2BYTE|OP_I386,			I386OP(mov_r32_cr),				I386OP(mov_r32_cr),			},
296 	{ 0x21,		OP_2BYTE|OP_I386,			I386OP(mov_r32_dr),				I386OP(mov_r32_dr),			},
297 	{ 0x22,		OP_2BYTE|OP_I386,			I386OP(mov_cr_r32),				I386OP(mov_cr_r32),			},
298 	{ 0x23,		OP_2BYTE|OP_I386,			I386OP(mov_dr_r32),				I386OP(mov_dr_r32),			},
299 	{ 0x24,		OP_2BYTE|OP_I386,			I386OP(mov_r32_tr),				I386OP(mov_r32_tr),			},
300 	{ 0x26,		OP_2BYTE|OP_I386,			I386OP(mov_tr_r32),				I386OP(mov_tr_r32),			},
301 	{ 0x30,		OP_2BYTE|OP_PENTIUM,		PENTIUMOP(wrmsr),				PENTIUMOP(wrmsr),			},
302 	{ 0x31,		OP_2BYTE|OP_PENTIUM,		PENTIUMOP(rdtsc),				PENTIUMOP(rdtsc),			},
303 	{ 0x32,		OP_2BYTE|OP_PENTIUM,		PENTIUMOP(rdmsr),				PENTIUMOP(rdmsr),			},
304 	{ 0x74,		OP_2BYTE|OP_CYRIX,			I386OP(cyrix_unknown),			I386OP(cyrix_unknown),		},
305 	{ 0x80,		OP_2BYTE|OP_I386,			I386OP(jo_rel16),				I386OP(jo_rel32),			},
306 	{ 0x81,		OP_2BYTE|OP_I386,			I386OP(jno_rel16),				I386OP(jno_rel32),			},
307 	{ 0x82,		OP_2BYTE|OP_I386,			I386OP(jc_rel16),				I386OP(jc_rel32),			},
308 	{ 0x83,		OP_2BYTE|OP_I386,			I386OP(jnc_rel16),				I386OP(jnc_rel32),			},
309 	{ 0x84,		OP_2BYTE|OP_I386,			I386OP(jz_rel16),				I386OP(jz_rel32),			},
310 	{ 0x85,		OP_2BYTE|OP_I386,			I386OP(jnz_rel16),				I386OP(jnz_rel32),			},
311 	{ 0x86,		OP_2BYTE|OP_I386,			I386OP(jbe_rel16),				I386OP(jbe_rel32),			},
312 	{ 0x87,		OP_2BYTE|OP_I386,			I386OP(ja_rel16),				I386OP(ja_rel32),			},
313 	{ 0x88,		OP_2BYTE|OP_I386,			I386OP(js_rel16),				I386OP(js_rel32),			},
314 	{ 0x89,		OP_2BYTE|OP_I386,			I386OP(jns_rel16),				I386OP(jns_rel32),			},
315 	{ 0x8A,		OP_2BYTE|OP_I386,			I386OP(jp_rel16),				I386OP(jp_rel32),			},
316 	{ 0x8B,		OP_2BYTE|OP_I386,			I386OP(jnp_rel16),				I386OP(jnp_rel32),			},
317 	{ 0x8C,		OP_2BYTE|OP_I386,			I386OP(jl_rel16),				I386OP(jl_rel32),			},
318 	{ 0x8D,		OP_2BYTE|OP_I386,			I386OP(jge_rel16),				I386OP(jge_rel32),			},
319 	{ 0x8E,		OP_2BYTE|OP_I386,			I386OP(jle_rel16),				I386OP(jle_rel32),			},
320 	{ 0x8F,		OP_2BYTE|OP_I386,			I386OP(jg_rel16),				I386OP(jg_rel32),			},
321 	{ 0x90,		OP_2BYTE|OP_I386,			I386OP(seto_rm8),				I386OP(seto_rm8),			},
322 	{ 0x91,		OP_2BYTE|OP_I386,			I386OP(setno_rm8),				I386OP(setno_rm8),			},
323 	{ 0x92,		OP_2BYTE|OP_I386,			I386OP(setc_rm8),				I386OP(setc_rm8),			},
324 	{ 0x93,		OP_2BYTE|OP_I386,			I386OP(setnc_rm8),				I386OP(setnc_rm8),			},
325 	{ 0x94,		OP_2BYTE|OP_I386,			I386OP(setz_rm8),				I386OP(setz_rm8),			},
326 	{ 0x95,		OP_2BYTE|OP_I386,			I386OP(setnz_rm8),				I386OP(setnz_rm8),			},
327 	{ 0x96,		OP_2BYTE|OP_I386,			I386OP(setbe_rm8),				I386OP(setbe_rm8),			},
328 	{ 0x97,		OP_2BYTE|OP_I386,			I386OP(seta_rm8),				I386OP(seta_rm8),			},
329 	{ 0x98,		OP_2BYTE|OP_I386,			I386OP(sets_rm8),				I386OP(sets_rm8),			},
330 	{ 0x99,		OP_2BYTE|OP_I386,			I386OP(setns_rm8),				I386OP(setns_rm8),			},
331 	{ 0x9A,		OP_2BYTE|OP_I386,			I386OP(setp_rm8),				I386OP(setp_rm8),			},
332 	{ 0x9B,		OP_2BYTE|OP_I386,			I386OP(setnp_rm8),				I386OP(setnp_rm8),			},
333 	{ 0x9C,		OP_2BYTE|OP_I386,			I386OP(setl_rm8),				I386OP(setl_rm8),			},
334 	{ 0x9D,		OP_2BYTE|OP_I386,			I386OP(setge_rm8),				I386OP(setge_rm8),			},
335 	{ 0x9E,		OP_2BYTE|OP_I386,			I386OP(setle_rm8),				I386OP(setle_rm8),			},
336 	{ 0x9F,		OP_2BYTE|OP_I386,			I386OP(setg_rm8),				I386OP(setg_rm8),			},
337 	{ 0xA0,		OP_2BYTE|OP_I386,			I386OP(push_fs16),				I386OP(push_fs32),			},
338 	{ 0xA1,		OP_2BYTE|OP_I386,			I386OP(pop_fs16),				I386OP(pop_fs32),			},
339 	{ 0xA2,		OP_2BYTE|OP_I486,			I486OP(cpuid),					I486OP(cpuid),				},
340 	{ 0xA3,		OP_2BYTE|OP_I386,			I386OP(bt_rm16_r16),			I386OP(bt_rm32_r32),		},
341 	{ 0xA4,		OP_2BYTE|OP_I386,			I386OP(shld16_i8),				I386OP(shld32_i8),			},
342 	{ 0xA5,		OP_2BYTE|OP_I386,			I386OP(shld16_cl),				I386OP(shld32_cl),			},
343 	{ 0xA8,		OP_2BYTE|OP_I386,			I386OP(push_gs16),				I386OP(push_gs32),			},
344 	{ 0xA9,		OP_2BYTE|OP_I386,			I386OP(pop_gs16),				I386OP(pop_gs32),			},
345 	{ 0xAA,		OP_2BYTE|OP_I386,			I386OP(unimplemented),			I386OP(unimplemented),		},
346 	{ 0xAB,		OP_2BYTE|OP_I386,			I386OP(bts_rm16_r16),			I386OP(bts_rm32_r32),		},
347 	{ 0xAC,		OP_2BYTE|OP_I386,			I386OP(shrd16_i8),				I386OP(shrd32_i8),			},
348 	{ 0xAD,		OP_2BYTE|OP_I386,			I386OP(shrd16_cl),				I386OP(shrd32_cl),			},
349 	{ 0xAE,		OP_2BYTE|OP_I386,			I386OP(invalid),				I386OP(invalid),			},
350 	{ 0xAF,		OP_2BYTE|OP_I386,			I386OP(imul_r16_rm16),			I386OP(imul_r32_rm32),		},
351 	{ 0xB2,		OP_2BYTE|OP_I386,			I386OP(lss16),					I386OP(lss32),				},
352 	{ 0xB3,		OP_2BYTE|OP_I386,			I386OP(btr_rm16_r16),			I386OP(btr_rm32_r32),		},
353 	{ 0xB4,		OP_2BYTE|OP_I386,			I386OP(lfs16),					I386OP(lfs32),				},
354 	{ 0xB5,		OP_2BYTE|OP_I386,			I386OP(lgs16),					I386OP(lgs32),				},
355 	{ 0xB6,		OP_2BYTE|OP_I386,			I386OP(movzx_r16_rm8),			I386OP(movzx_r32_rm8),		},
356 	{ 0xB7,		OP_2BYTE|OP_I386,			I386OP(invalid),				I386OP(movzx_r32_rm16),		},
357 	{ 0xBA,		OP_2BYTE|OP_I386,			I386OP(group0FBA_16),			I386OP(group0FBA_32),		},
358 	{ 0xBB,		OP_2BYTE|OP_I386,			I386OP(btc_rm16_r16),			I386OP(btc_rm32_r32),		},
359 	{ 0xBC,		OP_2BYTE|OP_I386,			I386OP(bsf_r16_rm16),			I386OP(bsf_r32_rm32),		},
360 	{ 0xBD,		OP_2BYTE|OP_I386,			I386OP(bsr_r16_rm16),			I386OP(bsr_r32_rm32),		},
361 	{ 0xBE,		OP_2BYTE|OP_I386,			I386OP(movsx_r16_rm8),			I386OP(movsx_r32_rm8),		},
362 	{ 0xBF,		OP_2BYTE|OP_I386,			I386OP(invalid),				I386OP(movsx_r32_rm16),		},
363 };
364