- compilation fixes for MSVC toolkit 2003
[bochs-mirror.git] / cpu / fetchdecode.h
blob2f55a7ec2c7ddeef8f4701348201c98cae4fa189
1 /////////////////////////////////////////////////////////////////////////
2 // $Id: fetchdecode.h,v 1.77 2008/09/16 18:28:53 sshwarts Exp $
3 /////////////////////////////////////////////////////////////////////////
4 //
5 // Copyright (c) 2005 Stanislav Shwartsman
6 // Written by Stanislav Shwartsman [sshwarts at sourceforge net]
7 //
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Lesser General Public
10 // License as published by the Free Software Foundation; either
11 // version 2 of the License, or (at your option) any later version.
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Lesser General Public License for more details.
18 // You should have received a copy of the GNU Lesser General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 /////////////////////////////////////////////////////////////////////////
24 #ifndef BX_COMMON_FETCHDECODE_TABLES_H
25 #define BX_COMMON_FETCHDECODE_TABLES_H
27 typedef struct BxOpcodeInfo_t {
28 Bit16u Attr;
29 Bit16u IA;
30 const BxOpcodeInfo_t *AnotherArray;
31 } BxOpcodeInfo_t;
34 // This file contains common IA-32/X86-64 opcode tables, like FPU opcode
35 // table, 3DNow! opcode table or SSE opcode groups (choose the opcode
36 // according to instruction prefixes)
39 BX_CPP_INLINE Bit16u FetchWORD(const Bit8u *iptr)
41 Bit16u data;
42 ReadHostWordFromLittleEndian(iptr, data);
43 return data;
46 BX_CPP_INLINE Bit32u FetchDWORD(const Bit8u *iptr)
48 Bit32u data;
49 ReadHostDWordFromLittleEndian(iptr, data);
50 return data;
53 #if BX_SUPPORT_X86_64
54 BX_CPP_INLINE Bit64u FetchQWORD(const Bit8u *iptr)
56 Bit64u data;
57 ReadHostQWordFromLittleEndian(iptr, data);
58 return data;
60 #endif
62 struct bxIAOpcodeTable {
63 BxExecutePtr_tR execute1;
64 BxExecutePtr_tR execute2;
67 enum {
68 #define bx_define_opcode(a, b, c) a,
69 #include "ia_opcodes.h"
70 BX_IA_LAST
72 #undef bx_define_opcode
75 // Common FetchDecode Opcode Tables
78 #if BX_SUPPORT_FPU
80 /* ************************************************************************ */
81 /* FPU Opcodes */
83 // floating point instructions when mod!=11b.
84 // the following tables will be accessed like groups using the nnn (reg) field of
85 // the modrm byte. (the first byte is D8-DF)
87 // D8 (modrm is outside 00h - BFh) (mod != 11)
88 static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupD8[8] = {
89 /* 0 */ { 0, BX_IA_FADD_SINGLE_REAL },
90 /* 1 */ { 0, BX_IA_FMUL_SINGLE_REAL },
91 /* 2 */ { 0, BX_IA_FCOM_SINGLE_REAL },
92 /* 3 */ { 0, BX_IA_FCOM_SINGLE_REAL }, // FCOMP_SINGLE_REAL
93 /* 4 */ { 0, BX_IA_FSUB_SINGLE_REAL },
94 /* 5 */ { 0, BX_IA_FSUBR_SINGLE_REAL },
95 /* 6 */ { 0, BX_IA_FDIV_SINGLE_REAL },
96 /* 7 */ { 0, BX_IA_FDIVR_SINGLE_REAL }
99 // D9 (modrm is outside 00h - BFh) (mod != 11)
100 static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupD9[8] = {
101 /* 0 */ { 0, BX_IA_FLD_SINGLE_REAL },
102 /* 1 */ { 0, BX_IA_ERROR },
103 /* 2 */ { 0, BX_IA_FST_SINGLE_REAL },
104 /* 3 */ { 0, BX_IA_FST_SINGLE_REAL }, // FSTP_SINGLE_REAL
105 /* 4 */ { 0, BX_IA_FLDENV },
106 /* 5 */ { 0, BX_IA_FLDCW },
107 /* 6 */ { 0, BX_IA_FNSTENV },
108 /* 7 */ { 0, BX_IA_FNSTCW }
111 // DA (modrm is outside 00h - BFh) (mod != 11)
112 static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDA[8] = {
113 /* 0 */ { 0, BX_IA_FIADD_DWORD_INTEGER },
114 /* 1 */ { 0, BX_IA_FIMUL_DWORD_INTEGER },
115 /* 2 */ { 0, BX_IA_FICOM_DWORD_INTEGER },
116 /* 3 */ { 0, BX_IA_FICOM_DWORD_INTEGER }, // FICOMP_DWORD_INTEGER
117 /* 4 */ { 0, BX_IA_FISUB_DWORD_INTEGER },
118 /* 5 */ { 0, BX_IA_FISUBR_DWORD_INTEGER },
119 /* 6 */ { 0, BX_IA_FIDIV_DWORD_INTEGER },
120 /* 7 */ { 0, BX_IA_FIDIVR_DWORD_INTEGER }
123 // DB (modrm is outside 00h - BFh) (mod != 11)
124 static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDB[8] = {
125 /* 0 */ { 0, BX_IA_FILD_DWORD_INTEGER },
126 /* 1 */ { 0, BX_IA_FISTTP32 },
127 /* 2 */ { 0, BX_IA_FIST_DWORD_INTEGER },
128 /* 3 */ { 0, BX_IA_FIST_DWORD_INTEGER }, // FISTP_DWORD_INTEGER
129 /* 4 */ { 0, BX_IA_ERROR },
130 /* 5 */ { 0, BX_IA_FLD_EXTENDED_REAL },
131 /* 6 */ { 0, BX_IA_ERROR },
132 /* 7 */ { 0, BX_IA_FSTP_EXTENDED_REAL }
135 // DC (modrm is outside 00h - BFh) (mod != 11)
136 static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDC[8] = {
137 /* 0 */ { 0, BX_IA_FADD_DOUBLE_REAL },
138 /* 1 */ { 0, BX_IA_FMUL_DOUBLE_REAL },
139 /* 2 */ { 0, BX_IA_FCOM_DOUBLE_REAL },
140 /* 3 */ { 0, BX_IA_FCOM_DOUBLE_REAL }, // FCOMP_DOUBLE_REAL
141 /* 4 */ { 0, BX_IA_FSUB_DOUBLE_REAL },
142 /* 5 */ { 0, BX_IA_FSUBR_DOUBLE_REAL },
143 /* 6 */ { 0, BX_IA_FDIV_DOUBLE_REAL },
144 /* 7 */ { 0, BX_IA_FDIVR_DOUBLE_REAL }
147 // DD (modrm is outside 00h - BFh) (mod != 11)
148 static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDD[8] = {
149 /* 0 */ { 0, BX_IA_FLD_DOUBLE_REAL },
150 /* 1 */ { 0, BX_IA_FISTTP64 },
151 /* 2 */ { 0, BX_IA_FST_DOUBLE_REAL },
152 /* 3 */ { 0, BX_IA_FST_DOUBLE_REAL }, // FSTP_DOUBLE_REAL
153 /* 4 */ { 0, BX_IA_FRSTOR },
154 /* 5 */ { 0, BX_IA_ERROR },
155 /* 6 */ { 0, BX_IA_FNSAVE },
156 /* 7 */ { 0, BX_IA_FNSTSW }
159 // DE (modrm is outside 00h - BFh) (mod != 11)
160 static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDE[8] = {
161 /* 0 */ { 0, BX_IA_FIADD_WORD_INTEGER },
162 /* 1 */ { 0, BX_IA_FIMUL_WORD_INTEGER },
163 /* 2 */ { 0, BX_IA_FICOM_WORD_INTEGER },
164 /* 3 */ { 0, BX_IA_FICOM_WORD_INTEGER }, // FICOMP_WORD_INTEGER
165 /* 4 */ { 0, BX_IA_FISUB_WORD_INTEGER },
166 /* 5 */ { 0, BX_IA_FISUBR_WORD_INTEGER },
167 /* 6 */ { 0, BX_IA_FIDIV_WORD_INTEGER },
168 /* 7 */ { 0, BX_IA_FIDIVR_WORD_INTEGER }
171 // DF (modrm is outside 00h - BFh) (mod != 11)
172 static const BxOpcodeInfo_t BxOpcodeInfo_FPGroupDF[8] = {
173 /* 0 */ { 0, BX_IA_FILD_WORD_INTEGER },
174 /* 1 */ { 0, BX_IA_FISTTP16 },
175 /* 2 */ { 0, BX_IA_FIST_WORD_INTEGER },
176 /* 3 */ { 0, BX_IA_FIST_WORD_INTEGER }, // FISTP_WORD_INTEGER
177 /* 4 */ { 0, BX_IA_FBLD_PACKED_BCD },
178 /* 5 */ { 0, BX_IA_FILD_QWORD_INTEGER },
179 /* 6 */ { 0, BX_IA_FBSTP_PACKED_BCD },
180 /* 7 */ { 0, BX_IA_FISTP_QWORD_INTEGER }
183 // 512 entries for second byte of floating point instructions. (when mod==11b)
184 static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointD8[64] = {
185 // D8 (modrm is outside 00h - BFh) (mod == 11)
186 /* D8 C0 */ { 0, BX_IA_FADD_ST0_STj },
187 /* D8 C1 */ { 0, BX_IA_FADD_ST0_STj },
188 /* D8 C2 */ { 0, BX_IA_FADD_ST0_STj },
189 /* D8 C3 */ { 0, BX_IA_FADD_ST0_STj },
190 /* D8 C4 */ { 0, BX_IA_FADD_ST0_STj },
191 /* D8 C5 */ { 0, BX_IA_FADD_ST0_STj },
192 /* D8 C6 */ { 0, BX_IA_FADD_ST0_STj },
193 /* D8 C7 */ { 0, BX_IA_FADD_ST0_STj },
194 /* D8 C8 */ { 0, BX_IA_FMUL_ST0_STj },
195 /* D8 C9 */ { 0, BX_IA_FMUL_ST0_STj },
196 /* D8 CA */ { 0, BX_IA_FMUL_ST0_STj },
197 /* D8 CB */ { 0, BX_IA_FMUL_ST0_STj },
198 /* D8 CC */ { 0, BX_IA_FMUL_ST0_STj },
199 /* D8 CD */ { 0, BX_IA_FMUL_ST0_STj },
200 /* D8 CE */ { 0, BX_IA_FMUL_ST0_STj },
201 /* D8 CF */ { 0, BX_IA_FMUL_ST0_STj },
202 /* D8 D0 */ { 0, BX_IA_FCOM_STi },
203 /* D8 D1 */ { 0, BX_IA_FCOM_STi },
204 /* D8 D2 */ { 0, BX_IA_FCOM_STi },
205 /* D8 D3 */ { 0, BX_IA_FCOM_STi },
206 /* D8 D4 */ { 0, BX_IA_FCOM_STi },
207 /* D8 D5 */ { 0, BX_IA_FCOM_STi },
208 /* D8 D6 */ { 0, BX_IA_FCOM_STi },
209 /* D8 D7 */ { 0, BX_IA_FCOM_STi },
210 /* D8 D8 */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi
211 /* D8 D9 */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi
212 /* D8 DA */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi
213 /* D8 DB */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi
214 /* D8 DC */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi
215 /* D8 DD */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi
216 /* D8 DE */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi
217 /* D8 DF */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi
218 /* D8 E0 */ { 0, BX_IA_FSUB_ST0_STj },
219 /* D8 E1 */ { 0, BX_IA_FSUB_ST0_STj },
220 /* D8 E2 */ { 0, BX_IA_FSUB_ST0_STj },
221 /* D8 E3 */ { 0, BX_IA_FSUB_ST0_STj },
222 /* D8 E4 */ { 0, BX_IA_FSUB_ST0_STj },
223 /* D8 E5 */ { 0, BX_IA_FSUB_ST0_STj },
224 /* D8 E6 */ { 0, BX_IA_FSUB_ST0_STj },
225 /* D8 E7 */ { 0, BX_IA_FSUB_ST0_STj },
226 /* D8 E8 */ { 0, BX_IA_FSUBR_ST0_STj },
227 /* D8 E9 */ { 0, BX_IA_FSUBR_ST0_STj },
228 /* D8 EA */ { 0, BX_IA_FSUBR_ST0_STj },
229 /* D8 EB */ { 0, BX_IA_FSUBR_ST0_STj },
230 /* D8 EC */ { 0, BX_IA_FSUBR_ST0_STj },
231 /* D8 ED */ { 0, BX_IA_FSUBR_ST0_STj },
232 /* D8 EE */ { 0, BX_IA_FSUBR_ST0_STj },
233 /* D8 EF */ { 0, BX_IA_FSUBR_ST0_STj },
234 /* D8 F0 */ { 0, BX_IA_FDIV_ST0_STj },
235 /* D8 F1 */ { 0, BX_IA_FDIV_ST0_STj },
236 /* D8 F2 */ { 0, BX_IA_FDIV_ST0_STj },
237 /* D8 F3 */ { 0, BX_IA_FDIV_ST0_STj },
238 /* D8 F4 */ { 0, BX_IA_FDIV_ST0_STj },
239 /* D8 F5 */ { 0, BX_IA_FDIV_ST0_STj },
240 /* D8 F6 */ { 0, BX_IA_FDIV_ST0_STj },
241 /* D8 F7 */ { 0, BX_IA_FDIV_ST0_STj },
242 /* D8 F8 */ { 0, BX_IA_FDIVR_ST0_STj },
243 /* D8 F9 */ { 0, BX_IA_FDIVR_ST0_STj },
244 /* D8 FA */ { 0, BX_IA_FDIVR_ST0_STj },
245 /* D8 FB */ { 0, BX_IA_FDIVR_ST0_STj },
246 /* D8 FC */ { 0, BX_IA_FDIVR_ST0_STj },
247 /* D8 FD */ { 0, BX_IA_FDIVR_ST0_STj },
248 /* D8 FE */ { 0, BX_IA_FDIVR_ST0_STj },
249 /* D8 FF */ { 0, BX_IA_FDIVR_ST0_STj }
252 static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointD9[64] = {
253 // D9 (modrm is outside 00h - BFh) (mod == 11)
254 /* D9 C0 */ { 0, BX_IA_FLD_STi },
255 /* D9 C1 */ { 0, BX_IA_FLD_STi },
256 /* D9 C2 */ { 0, BX_IA_FLD_STi },
257 /* D9 C3 */ { 0, BX_IA_FLD_STi },
258 /* D9 C4 */ { 0, BX_IA_FLD_STi },
259 /* D9 C5 */ { 0, BX_IA_FLD_STi },
260 /* D9 C6 */ { 0, BX_IA_FLD_STi },
261 /* D9 C7 */ { 0, BX_IA_FLD_STi },
262 /* D9 C8 */ { 0, BX_IA_FXCH_STi },
263 /* D9 C9 */ { 0, BX_IA_FXCH_STi },
264 /* D9 CA */ { 0, BX_IA_FXCH_STi },
265 /* D9 CB */ { 0, BX_IA_FXCH_STi },
266 /* D9 CC */ { 0, BX_IA_FXCH_STi },
267 /* D9 CD */ { 0, BX_IA_FXCH_STi },
268 /* D9 CE */ { 0, BX_IA_FXCH_STi },
269 /* D9 CF */ { 0, BX_IA_FXCH_STi },
270 /* D9 D0 */ { 0, BX_IA_FNOP },
271 /* D9 D1 */ { 0, BX_IA_ERROR },
272 /* D9 D2 */ { 0, BX_IA_ERROR },
273 /* D9 D3 */ { 0, BX_IA_ERROR },
274 /* D9 D4 */ { 0, BX_IA_ERROR },
275 /* D9 D5 */ { 0, BX_IA_ERROR },
276 /* D9 D6 */ { 0, BX_IA_ERROR },
277 /* D9 D7 */ { 0, BX_IA_ERROR },
278 /* D9 D8 */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
279 /* D9 D9 */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
280 /* D9 DA */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
281 /* D9 DB */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
282 /* D9 DC */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
283 /* D9 DD */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
284 /* D9 DE */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
285 /* D9 DF */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
286 /* D9 E0 */ { 0, BX_IA_FCHS },
287 /* D9 E1 */ { 0, BX_IA_FABS },
288 /* D9 E2 */ { 0, BX_IA_ERROR },
289 /* D9 E3 */ { 0, BX_IA_ERROR },
290 /* D9 E4 */ { 0, BX_IA_FTST },
291 /* D9 E5 */ { 0, BX_IA_FXAM },
292 /* D9 E6 */ { 0, BX_IA_ERROR },
293 /* D9 E7 */ { 0, BX_IA_ERROR },
294 /* D9 E8 */ { 0, BX_IA_FLD1 },
295 /* D9 E9 */ { 0, BX_IA_FLDL2T },
296 /* D9 EA */ { 0, BX_IA_FLDL2E },
297 /* D9 EB */ { 0, BX_IA_FLDPI },
298 /* D9 EC */ { 0, BX_IA_FLDLG2 },
299 /* D9 ED */ { 0, BX_IA_FLDLN2 },
300 /* D9 EE */ { 0, BX_IA_FLDZ },
301 /* D9 EF */ { 0, BX_IA_ERROR },
302 /* D9 F0 */ { 0, BX_IA_F2XM1 },
303 /* D9 F1 */ { 0, BX_IA_FYL2X },
304 /* D9 F2 */ { 0, BX_IA_FPTAN },
305 /* D9 F3 */ { 0, BX_IA_FPATAN },
306 /* D9 F4 */ { 0, BX_IA_FXTRACT },
307 /* D9 F5 */ { 0, BX_IA_FPREM1 },
308 /* D9 F6 */ { 0, BX_IA_FDECSTP },
309 /* D9 F7 */ { 0, BX_IA_FINCSTP },
310 /* D9 F8 */ { 0, BX_IA_FPREM },
311 /* D9 F9 */ { 0, BX_IA_FYL2XP1 },
312 /* D9 FA */ { 0, BX_IA_FSQRT },
313 /* D9 FB */ { 0, BX_IA_FSINCOS },
314 /* D9 FC */ { 0, BX_IA_FRNDINT },
315 /* D9 FD */ { 0, BX_IA_FSCALE },
316 /* D9 FE */ { 0, BX_IA_FSIN },
317 /* D9 FF */ { 0, BX_IA_FCOS }
320 static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDA[64] = {
321 // DA (modrm is outside 00h - BFh) (mod == 11)
322 /* DA C0 */ { 0, BX_IA_FCMOV_ST0_STj },
323 /* DA C1 */ { 0, BX_IA_FCMOV_ST0_STj },
324 /* DA C2 */ { 0, BX_IA_FCMOV_ST0_STj },
325 /* DA C3 */ { 0, BX_IA_FCMOV_ST0_STj },
326 /* DA C4 */ { 0, BX_IA_FCMOV_ST0_STj },
327 /* DA C5 */ { 0, BX_IA_FCMOV_ST0_STj },
328 /* DA C6 */ { 0, BX_IA_FCMOV_ST0_STj },
329 /* DA C7 */ { 0, BX_IA_FCMOV_ST0_STj },
330 /* DA C8 */ { 0, BX_IA_FCMOV_ST0_STj },
331 /* DA C9 */ { 0, BX_IA_FCMOV_ST0_STj },
332 /* DA CA */ { 0, BX_IA_FCMOV_ST0_STj },
333 /* DA CB */ { 0, BX_IA_FCMOV_ST0_STj },
334 /* DA CC */ { 0, BX_IA_FCMOV_ST0_STj },
335 /* DA CD */ { 0, BX_IA_FCMOV_ST0_STj },
336 /* DA CE */ { 0, BX_IA_FCMOV_ST0_STj },
337 /* DA CF */ { 0, BX_IA_FCMOV_ST0_STj },
338 /* DA D0 */ { 0, BX_IA_FCMOV_ST0_STj },
339 /* DA D1 */ { 0, BX_IA_FCMOV_ST0_STj },
340 /* DA D2 */ { 0, BX_IA_FCMOV_ST0_STj },
341 /* DA D3 */ { 0, BX_IA_FCMOV_ST0_STj },
342 /* DA D4 */ { 0, BX_IA_FCMOV_ST0_STj },
343 /* DA D5 */ { 0, BX_IA_FCMOV_ST0_STj },
344 /* DA D6 */ { 0, BX_IA_FCMOV_ST0_STj },
345 /* DA D7 */ { 0, BX_IA_FCMOV_ST0_STj },
346 /* DA D8 */ { 0, BX_IA_FCMOV_ST0_STj },
347 /* DA D9 */ { 0, BX_IA_FCMOV_ST0_STj },
348 /* DA DA */ { 0, BX_IA_FCMOV_ST0_STj },
349 /* DA DB */ { 0, BX_IA_FCMOV_ST0_STj },
350 /* DA DC */ { 0, BX_IA_FCMOV_ST0_STj },
351 /* DA DD */ { 0, BX_IA_FCMOV_ST0_STj },
352 /* DA DE */ { 0, BX_IA_FCMOV_ST0_STj },
353 /* DA DF */ { 0, BX_IA_FCMOV_ST0_STj },
354 /* DA E0 */ { 0, BX_IA_ERROR },
355 /* DA E1 */ { 0, BX_IA_ERROR },
356 /* DA E2 */ { 0, BX_IA_ERROR },
357 /* DA E3 */ { 0, BX_IA_ERROR },
358 /* DA E4 */ { 0, BX_IA_ERROR },
359 /* DA E5 */ { 0, BX_IA_ERROR },
360 /* DA E6 */ { 0, BX_IA_ERROR },
361 /* DA E7 */ { 0, BX_IA_ERROR },
362 /* DA E8 */ { 0, BX_IA_ERROR },
363 /* DA E9 */ { 0, BX_IA_FUCOMPP },
364 /* DA EA */ { 0, BX_IA_ERROR },
365 /* DA EB */ { 0, BX_IA_ERROR },
366 /* DA EC */ { 0, BX_IA_ERROR },
367 /* DA ED */ { 0, BX_IA_ERROR },
368 /* DA EE */ { 0, BX_IA_ERROR },
369 /* DA EF */ { 0, BX_IA_ERROR },
370 /* DA F0 */ { 0, BX_IA_ERROR },
371 /* DA F1 */ { 0, BX_IA_ERROR },
372 /* DA F2 */ { 0, BX_IA_ERROR },
373 /* DA F3 */ { 0, BX_IA_ERROR },
374 /* DA F4 */ { 0, BX_IA_ERROR },
375 /* DA F5 */ { 0, BX_IA_ERROR },
376 /* DA F6 */ { 0, BX_IA_ERROR },
377 /* DA F7 */ { 0, BX_IA_ERROR },
378 /* DA F8 */ { 0, BX_IA_ERROR },
379 /* DA F9 */ { 0, BX_IA_ERROR },
380 /* DA FA */ { 0, BX_IA_ERROR },
381 /* DA FB */ { 0, BX_IA_ERROR },
382 /* DA FC */ { 0, BX_IA_ERROR },
383 /* DA FD */ { 0, BX_IA_ERROR },
384 /* DA FE */ { 0, BX_IA_ERROR },
385 /* DA FF */ { 0, BX_IA_ERROR }
388 static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDB[64] = {
389 // DB (modrm is outside 00h - BFh) (mod == 11)
390 /* DB C0 */ { 0, BX_IA_FCMOV_ST0_STj },
391 /* DB C1 */ { 0, BX_IA_FCMOV_ST0_STj },
392 /* DB C2 */ { 0, BX_IA_FCMOV_ST0_STj },
393 /* DB C3 */ { 0, BX_IA_FCMOV_ST0_STj },
394 /* DB C4 */ { 0, BX_IA_FCMOV_ST0_STj },
395 /* DB C5 */ { 0, BX_IA_FCMOV_ST0_STj },
396 /* DB C6 */ { 0, BX_IA_FCMOV_ST0_STj },
397 /* DB C7 */ { 0, BX_IA_FCMOV_ST0_STj },
398 /* DB C8 */ { 0, BX_IA_FCMOV_ST0_STj },
399 /* DB C9 */ { 0, BX_IA_FCMOV_ST0_STj },
400 /* DB CA */ { 0, BX_IA_FCMOV_ST0_STj },
401 /* DB CB */ { 0, BX_IA_FCMOV_ST0_STj },
402 /* DB CC */ { 0, BX_IA_FCMOV_ST0_STj },
403 /* DB CD */ { 0, BX_IA_FCMOV_ST0_STj },
404 /* DB CE */ { 0, BX_IA_FCMOV_ST0_STj },
405 /* DB CF */ { 0, BX_IA_FCMOV_ST0_STj },
406 /* DB D0 */ { 0, BX_IA_FCMOV_ST0_STj },
407 /* DB D1 */ { 0, BX_IA_FCMOV_ST0_STj },
408 /* DB D2 */ { 0, BX_IA_FCMOV_ST0_STj },
409 /* DB D3 */ { 0, BX_IA_FCMOV_ST0_STj },
410 /* DB D4 */ { 0, BX_IA_FCMOV_ST0_STj },
411 /* DB D5 */ { 0, BX_IA_FCMOV_ST0_STj },
412 /* DB D6 */ { 0, BX_IA_FCMOV_ST0_STj },
413 /* DB D7 */ { 0, BX_IA_FCMOV_ST0_STj },
414 /* DB D8 */ { 0, BX_IA_FCMOV_ST0_STj },
415 /* DB D9 */ { 0, BX_IA_FCMOV_ST0_STj },
416 /* DB DA */ { 0, BX_IA_FCMOV_ST0_STj },
417 /* DB DB */ { 0, BX_IA_FCMOV_ST0_STj },
418 /* DB DC */ { 0, BX_IA_FCMOV_ST0_STj },
419 /* DB DD */ { 0, BX_IA_FCMOV_ST0_STj },
420 /* DB DE */ { 0, BX_IA_FCMOV_ST0_STj },
421 /* DB DF */ { 0, BX_IA_FCMOV_ST0_STj },
422 /* DB E0 */ { 0, BX_IA_FPLEGACY }, // feni (287 only)
423 /* DB E1 */ { 0, BX_IA_FPLEGACY }, // fdisi (287 only)
424 /* DB E2 */ { 0, BX_IA_FNCLEX },
425 /* DB E3 */ { 0, BX_IA_FNINIT },
426 /* DB E4 */ { 0, BX_IA_FPLEGACY }, // fsetpm (287 only)
427 /* DB E5 */ { 0, BX_IA_ERROR },
428 /* DB E6 */ { 0, BX_IA_ERROR },
429 /* DB E7 */ { 0, BX_IA_ERROR },
430 /* DB E8 */ { 0, BX_IA_FUCOMI_ST0_STj },
431 /* DB E9 */ { 0, BX_IA_FUCOMI_ST0_STj },
432 /* DB EA */ { 0, BX_IA_FUCOMI_ST0_STj },
433 /* DB EB */ { 0, BX_IA_FUCOMI_ST0_STj },
434 /* DB EC */ { 0, BX_IA_FUCOMI_ST0_STj },
435 /* DB ED */ { 0, BX_IA_FUCOMI_ST0_STj },
436 /* DB EE */ { 0, BX_IA_FUCOMI_ST0_STj },
437 /* DB EF */ { 0, BX_IA_FUCOMI_ST0_STj },
438 /* DB F0 */ { 0, BX_IA_FCOMI_ST0_STj },
439 /* DB F1 */ { 0, BX_IA_FCOMI_ST0_STj },
440 /* DB F2 */ { 0, BX_IA_FCOMI_ST0_STj },
441 /* DB F3 */ { 0, BX_IA_FCOMI_ST0_STj },
442 /* DB F4 */ { 0, BX_IA_FCOMI_ST0_STj },
443 /* DB F5 */ { 0, BX_IA_FCOMI_ST0_STj },
444 /* DB F6 */ { 0, BX_IA_FCOMI_ST0_STj },
445 /* DB F7 */ { 0, BX_IA_FCOMI_ST0_STj },
446 /* DB F8 */ { 0, BX_IA_ERROR },
447 /* DB F9 */ { 0, BX_IA_ERROR },
448 /* DB FA */ { 0, BX_IA_ERROR },
449 /* DB FB */ { 0, BX_IA_ERROR },
450 /* DB FC */ { 0, BX_IA_ERROR },
451 /* DB FD */ { 0, BX_IA_ERROR },
452 /* DB FE */ { 0, BX_IA_ERROR },
453 /* DB FF */ { 0, BX_IA_ERROR }
456 static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDC[64] = {
457 // DC (modrm is outside 00h - BFh) (mod == 11)
458 /* DC C0 */ { 0, BX_IA_FADD_STi_ST0 },
459 /* DC C1 */ { 0, BX_IA_FADD_STi_ST0 },
460 /* DC C2 */ { 0, BX_IA_FADD_STi_ST0 },
461 /* DC C3 */ { 0, BX_IA_FADD_STi_ST0 },
462 /* DC C4 */ { 0, BX_IA_FADD_STi_ST0 },
463 /* DC C5 */ { 0, BX_IA_FADD_STi_ST0 },
464 /* DC C6 */ { 0, BX_IA_FADD_STi_ST0 },
465 /* DC C7 */ { 0, BX_IA_FADD_STi_ST0 },
466 /* DC C8 */ { 0, BX_IA_FMUL_STi_ST0 },
467 /* DC C9 */ { 0, BX_IA_FMUL_STi_ST0 },
468 /* DC CA */ { 0, BX_IA_FMUL_STi_ST0 },
469 /* DC CB */ { 0, BX_IA_FMUL_STi_ST0 },
470 /* DC CC */ { 0, BX_IA_FMUL_STi_ST0 },
471 /* DC CD */ { 0, BX_IA_FMUL_STi_ST0 },
472 /* DC CE */ { 0, BX_IA_FMUL_STi_ST0 },
473 /* DC CF */ { 0, BX_IA_FMUL_STi_ST0 },
474 /* D8 D0 */ { 0, BX_IA_FCOM_STi }, // undocumented
475 /* D8 D1 */ { 0, BX_IA_FCOM_STi }, // undocumented
476 /* D8 D2 */ { 0, BX_IA_FCOM_STi }, // undocumented
477 /* D8 D3 */ { 0, BX_IA_FCOM_STi }, // undocumented
478 /* D8 D4 */ { 0, BX_IA_FCOM_STi }, // undocumented
479 /* D8 D5 */ { 0, BX_IA_FCOM_STi }, // undocumented
480 /* D8 D6 */ { 0, BX_IA_FCOM_STi }, // undocumented
481 /* D8 D7 */ { 0, BX_IA_FCOM_STi }, // undocumented
482 /* D8 D8 */ { 0, BX_IA_FCOM_STi }, // undocumented, FCOMP_STi
483 /* D8 D9 */ { 0, BX_IA_FCOM_STi }, // undocumented, FCOMP_STi
484 /* D8 DA */ { 0, BX_IA_FCOM_STi }, // undocumented, FCOMP_STi
485 /* D8 DB */ { 0, BX_IA_FCOM_STi }, // undocumented, FCOMP_STi
486 /* D8 DC */ { 0, BX_IA_FCOM_STi }, // undocumented, FCOMP_STi
487 /* D8 DD */ { 0, BX_IA_FCOM_STi }, // undocumented, FCOMP_STi
488 /* D8 DE */ { 0, BX_IA_FCOM_STi }, // undocumented, FCOMP_STi
489 /* D8 DF */ { 0, BX_IA_FCOM_STi }, // undocumented, FCOMP_STi
490 /* DC E0 */ { 0, BX_IA_FSUBR_STi_ST0 },
491 /* DC E1 */ { 0, BX_IA_FSUBR_STi_ST0 },
492 /* DC E2 */ { 0, BX_IA_FSUBR_STi_ST0 },
493 /* DC E3 */ { 0, BX_IA_FSUBR_STi_ST0 },
494 /* DC E4 */ { 0, BX_IA_FSUBR_STi_ST0 },
495 /* DC E5 */ { 0, BX_IA_FSUBR_STi_ST0 },
496 /* DC E6 */ { 0, BX_IA_FSUBR_STi_ST0 },
497 /* DC E7 */ { 0, BX_IA_FSUBR_STi_ST0 },
498 /* DC E8 */ { 0, BX_IA_FSUB_STi_ST0 },
499 /* DC E9 */ { 0, BX_IA_FSUB_STi_ST0 },
500 /* DC EA */ { 0, BX_IA_FSUB_STi_ST0 },
501 /* DC EB */ { 0, BX_IA_FSUB_STi_ST0 },
502 /* DC EC */ { 0, BX_IA_FSUB_STi_ST0 },
503 /* DC ED */ { 0, BX_IA_FSUB_STi_ST0 },
504 /* DC EE */ { 0, BX_IA_FSUB_STi_ST0 },
505 /* DC EF */ { 0, BX_IA_FSUB_STi_ST0 },
506 /* DC F0 */ { 0, BX_IA_FDIVR_STi_ST0 },
507 /* DC F1 */ { 0, BX_IA_FDIVR_STi_ST0 },
508 /* DC F2 */ { 0, BX_IA_FDIVR_STi_ST0 },
509 /* DC F3 */ { 0, BX_IA_FDIVR_STi_ST0 },
510 /* DC F4 */ { 0, BX_IA_FDIVR_STi_ST0 },
511 /* DC F5 */ { 0, BX_IA_FDIVR_STi_ST0 },
512 /* DC F6 */ { 0, BX_IA_FDIVR_STi_ST0 },
513 /* DC F7 */ { 0, BX_IA_FDIVR_STi_ST0 },
514 /* DC F8 */ { 0, BX_IA_FDIV_STi_ST0 },
515 /* DC F9 */ { 0, BX_IA_FDIV_STi_ST0 },
516 /* DC FA */ { 0, BX_IA_FDIV_STi_ST0 },
517 /* DC FB */ { 0, BX_IA_FDIV_STi_ST0 },
518 /* DC FC */ { 0, BX_IA_FDIV_STi_ST0 },
519 /* DC FD */ { 0, BX_IA_FDIV_STi_ST0 },
520 /* DC FE */ { 0, BX_IA_FDIV_STi_ST0 },
521 /* DC FF */ { 0, BX_IA_FDIV_STi_ST0 }
524 static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDD[64] = {
525 // DD (modrm is outside 00h - BFh) (mod == 11)
526 /* DD C0 */ { 0, BX_IA_FFREE_STi },
527 /* DD C1 */ { 0, BX_IA_FFREE_STi },
528 /* DD C2 */ { 0, BX_IA_FFREE_STi },
529 /* DD C3 */ { 0, BX_IA_FFREE_STi },
530 /* DD C4 */ { 0, BX_IA_FFREE_STi },
531 /* DD C5 */ { 0, BX_IA_FFREE_STi },
532 /* DD C6 */ { 0, BX_IA_FFREE_STi },
533 /* DD C7 */ { 0, BX_IA_FFREE_STi },
534 /* DD C8 */ { 0, BX_IA_FXCH_STi }, // undocumented
535 /* DD C9 */ { 0, BX_IA_FXCH_STi }, // undocumented
536 /* DD CA */ { 0, BX_IA_FXCH_STi }, // undocumented
537 /* DD CB */ { 0, BX_IA_FXCH_STi }, // undocumented
538 /* DD CC */ { 0, BX_IA_FXCH_STi }, // undocumented
539 /* DD CD */ { 0, BX_IA_FXCH_STi }, // undocumented
540 /* DD CE */ { 0, BX_IA_FXCH_STi }, // undocumented
541 /* DD CF */ { 0, BX_IA_FXCH_STi }, // undocumented
542 /* DD D0 */ { 0, BX_IA_FST_STi },
543 /* DD D1 */ { 0, BX_IA_FST_STi },
544 /* DD D2 */ { 0, BX_IA_FST_STi },
545 /* DD D3 */ { 0, BX_IA_FST_STi },
546 /* DD D4 */ { 0, BX_IA_FST_STi },
547 /* DD D5 */ { 0, BX_IA_FST_STi },
548 /* DD D6 */ { 0, BX_IA_FST_STi },
549 /* DD D7 */ { 0, BX_IA_FST_STi },
550 /* DD D8 */ { 0, BX_IA_FST_STi }, // FSTP_STi
551 /* DD D9 */ { 0, BX_IA_FST_STi }, // FSTP_STi
552 /* DD DA */ { 0, BX_IA_FST_STi }, // FSTP_STi
553 /* DD DB */ { 0, BX_IA_FST_STi }, // FSTP_STi
554 /* DD DC */ { 0, BX_IA_FST_STi }, // FSTP_STi
555 /* DD DD */ { 0, BX_IA_FST_STi }, // FSTP_STi
556 /* DD DE */ { 0, BX_IA_FST_STi }, // FSTP_STi
557 /* DD DF */ { 0, BX_IA_FST_STi }, // FSTP_STi
558 /* DD E0 */ { 0, BX_IA_FUCOM_STi },
559 /* DD E1 */ { 0, BX_IA_FUCOM_STi },
560 /* DD E2 */ { 0, BX_IA_FUCOM_STi },
561 /* DD E3 */ { 0, BX_IA_FUCOM_STi },
562 /* DD E4 */ { 0, BX_IA_FUCOM_STi },
563 /* DD E5 */ { 0, BX_IA_FUCOM_STi },
564 /* DD E6 */ { 0, BX_IA_FUCOM_STi },
565 /* DD E7 */ { 0, BX_IA_FUCOM_STi },
566 /* DD E8 */ { 0, BX_IA_FUCOM_STi }, // FUCOMP_STi
567 /* DD E9 */ { 0, BX_IA_FUCOM_STi }, // FUCOMP_STi
568 /* DD EA */ { 0, BX_IA_FUCOM_STi }, // FUCOMP_STi
569 /* DD EB */ { 0, BX_IA_FUCOM_STi }, // FUCOMP_STi
570 /* DD EC */ { 0, BX_IA_FUCOM_STi }, // FUCOMP_STi
571 /* DD ED */ { 0, BX_IA_FUCOM_STi }, // FUCOMP_STi
572 /* DD EE */ { 0, BX_IA_FUCOM_STi }, // FUCOMP_STi
573 /* DD EF */ { 0, BX_IA_FUCOM_STi }, // FUCOMP_STi
574 /* DD F0 */ { 0, BX_IA_ERROR },
575 /* DD F1 */ { 0, BX_IA_ERROR },
576 /* DD F2 */ { 0, BX_IA_ERROR },
577 /* DD F3 */ { 0, BX_IA_ERROR },
578 /* DD F4 */ { 0, BX_IA_ERROR },
579 /* DD F5 */ { 0, BX_IA_ERROR },
580 /* DD F6 */ { 0, BX_IA_ERROR },
581 /* DD F7 */ { 0, BX_IA_ERROR },
582 /* DD F8 */ { 0, BX_IA_ERROR },
583 /* DD F9 */ { 0, BX_IA_ERROR },
584 /* DD FA */ { 0, BX_IA_ERROR },
585 /* DD FB */ { 0, BX_IA_ERROR },
586 /* DD FC */ { 0, BX_IA_ERROR },
587 /* DD FD */ { 0, BX_IA_ERROR },
588 /* DD FE */ { 0, BX_IA_ERROR },
589 /* DD FF */ { 0, BX_IA_ERROR }
592 static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDE[64] = {
593 // DE (modrm is outside 00h - BFh) (mod == 11)
594 // all instructions pop FPU stack
595 /* DE C0 */ { 0, BX_IA_FADD_STi_ST0 },
596 /* DE C1 */ { 0, BX_IA_FADD_STi_ST0 },
597 /* DE C2 */ { 0, BX_IA_FADD_STi_ST0 },
598 /* DE C3 */ { 0, BX_IA_FADD_STi_ST0 },
599 /* DE C4 */ { 0, BX_IA_FADD_STi_ST0 },
600 /* DE C5 */ { 0, BX_IA_FADD_STi_ST0 },
601 /* DE C6 */ { 0, BX_IA_FADD_STi_ST0 },
602 /* DE C7 */ { 0, BX_IA_FADD_STi_ST0 },
603 /* DE C8 */ { 0, BX_IA_FMUL_STi_ST0 },
604 /* DE C9 */ { 0, BX_IA_FMUL_STi_ST0 },
605 /* DE CA */ { 0, BX_IA_FMUL_STi_ST0 },
606 /* DE CB */ { 0, BX_IA_FMUL_STi_ST0 },
607 /* DE CC */ { 0, BX_IA_FMUL_STi_ST0 },
608 /* DE CD */ { 0, BX_IA_FMUL_STi_ST0 },
609 /* DE CE */ { 0, BX_IA_FMUL_STi_ST0 },
610 /* DE CF */ { 0, BX_IA_FMUL_STi_ST0 },
611 /* DE D0 */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi, undocumented, special FPSTACK pop case
612 /* DE D1 */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi, undocumented, special FPSTACK pop case
613 /* DE D2 */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi, undocumented, special FPSTACK pop case
614 /* DE D3 */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi, undocumented, special FPSTACK pop case
615 /* DE D4 */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi, undocumented, special FPSTACK pop case
616 /* DE D5 */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi, undocumented, special FPSTACK pop case
617 /* DE D6 */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi, undocumented, special FPSTACK pop case
618 /* DE D7 */ { 0, BX_IA_FCOM_STi }, // FCOMP_STi, undocumented, special FPSTACK pop case
619 /* DE D8 */ { 0, BX_IA_ERROR },
620 /* DE D9 */ { 0, BX_IA_FCOMPP },
621 /* DE DA */ { 0, BX_IA_ERROR },
622 /* DE DB */ { 0, BX_IA_ERROR },
623 /* DE DC */ { 0, BX_IA_ERROR },
624 /* DE DD */ { 0, BX_IA_ERROR },
625 /* DE DE */ { 0, BX_IA_ERROR },
626 /* DE DF */ { 0, BX_IA_ERROR },
627 /* DE E0 */ { 0, BX_IA_FSUBR_STi_ST0 },
628 /* DE E1 */ { 0, BX_IA_FSUBR_STi_ST0 },
629 /* DE E2 */ { 0, BX_IA_FSUBR_STi_ST0 },
630 /* DE E3 */ { 0, BX_IA_FSUBR_STi_ST0 },
631 /* DE E4 */ { 0, BX_IA_FSUBR_STi_ST0 },
632 /* DE E5 */ { 0, BX_IA_FSUBR_STi_ST0 },
633 /* DE E6 */ { 0, BX_IA_FSUBR_STi_ST0 },
634 /* DE E7 */ { 0, BX_IA_FSUBR_STi_ST0 },
635 /* DE E8 */ { 0, BX_IA_FSUB_STi_ST0 },
636 /* DE E9 */ { 0, BX_IA_FSUB_STi_ST0 },
637 /* DE EA */ { 0, BX_IA_FSUB_STi_ST0 },
638 /* DE EB */ { 0, BX_IA_FSUB_STi_ST0 },
639 /* DE EC */ { 0, BX_IA_FSUB_STi_ST0 },
640 /* DE ED */ { 0, BX_IA_FSUB_STi_ST0 },
641 /* DE EE */ { 0, BX_IA_FSUB_STi_ST0 },
642 /* DE EF */ { 0, BX_IA_FSUB_STi_ST0 },
643 /* DE F0 */ { 0, BX_IA_FDIVR_STi_ST0 },
644 /* DE F1 */ { 0, BX_IA_FDIVR_STi_ST0 },
645 /* DE F2 */ { 0, BX_IA_FDIVR_STi_ST0 },
646 /* DE F3 */ { 0, BX_IA_FDIVR_STi_ST0 },
647 /* DE F4 */ { 0, BX_IA_FDIVR_STi_ST0 },
648 /* DE F5 */ { 0, BX_IA_FDIVR_STi_ST0 },
649 /* DE F6 */ { 0, BX_IA_FDIVR_STi_ST0 },
650 /* DE F7 */ { 0, BX_IA_FDIVR_STi_ST0 },
651 /* DE F8 */ { 0, BX_IA_FDIV_STi_ST0 },
652 /* DE F9 */ { 0, BX_IA_FDIV_STi_ST0 },
653 /* DE FA */ { 0, BX_IA_FDIV_STi_ST0 },
654 /* DE FB */ { 0, BX_IA_FDIV_STi_ST0 },
655 /* DE FC */ { 0, BX_IA_FDIV_STi_ST0 },
656 /* DE FD */ { 0, BX_IA_FDIV_STi_ST0 },
657 /* DE FE */ { 0, BX_IA_FDIV_STi_ST0 },
658 /* DE FF */ { 0, BX_IA_FDIV_STi_ST0 }
661 static const BxOpcodeInfo_t BxOpcodeInfo_FloatingPointDF[64] = {
662 // DF (modrm is outside 00h - BFh) (mod == 11)
663 /* DF C0 */ { 0, BX_IA_FFREEP_STi }, // 287+ compatibility opcode
664 /* DF C1 */ { 0, BX_IA_FFREEP_STi },
665 /* DF C2 */ { 0, BX_IA_FFREEP_STi },
666 /* DF C3 */ { 0, BX_IA_FFREEP_STi },
667 /* DF C4 */ { 0, BX_IA_FFREEP_STi },
668 /* DF C5 */ { 0, BX_IA_FFREEP_STi },
669 /* DF C6 */ { 0, BX_IA_FFREEP_STi },
670 /* DF C7 */ { 0, BX_IA_FFREEP_STi },
671 /* DF C8 */ { 0, BX_IA_FXCH_STi }, // undocumented
672 /* DF C9 */ { 0, BX_IA_FXCH_STi }, // undocumented
673 /* DF CA */ { 0, BX_IA_FXCH_STi }, // undocumented
674 /* DF CB */ { 0, BX_IA_FXCH_STi }, // undocumented
675 /* DF CC */ { 0, BX_IA_FXCH_STi }, // undocumented
676 /* DF CD */ { 0, BX_IA_FXCH_STi }, // undocumented
677 /* DF CE */ { 0, BX_IA_FXCH_STi }, // undocumented
678 /* DF CF */ { 0, BX_IA_FXCH_STi }, // undocumented
679 /* DF D0 */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented, special FPSTACK pop case
680 /* DF D1 */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented, special FPSTACK pop case
681 /* DF D2 */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented, special FPSTACK pop case
682 /* DF D3 */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented, special FPSTACK pop case
683 /* DF D4 */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented, special FPSTACK pop case
684 /* DF D5 */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented, special FPSTACK pop case
685 /* DF D6 */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented, special FPSTACK pop case
686 /* DF D7 */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented, special FPSTACK pop case
687 /* DF D8 */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
688 /* DF D9 */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
689 /* DF DA */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
690 /* DF DB */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
691 /* DF DC */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
692 /* DF DD */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
693 /* DF DE */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
694 /* DF DF */ { 0, BX_IA_FST_STi }, // FSTP_STi, undocumented
695 /* DF E0 */ { 0, BX_IA_FNSTSW_AX },
696 /* DF E1 */ { 0, BX_IA_ERROR },
697 /* DF E2 */ { 0, BX_IA_ERROR },
698 /* DF E3 */ { 0, BX_IA_ERROR },
699 /* DF E4 */ { 0, BX_IA_ERROR },
700 /* DF E5 */ { 0, BX_IA_ERROR },
701 /* DF E6 */ { 0, BX_IA_ERROR },
702 /* DF E7 */ { 0, BX_IA_ERROR },
703 /* DF E8 */ { 0, BX_IA_FUCOMI_ST0_STj }, // FUCOMIP
704 /* DF E9 */ { 0, BX_IA_FUCOMI_ST0_STj }, // FUCOMIP
705 /* DF EA */ { 0, BX_IA_FUCOMI_ST0_STj }, // FUCOMIP
706 /* DF EB */ { 0, BX_IA_FUCOMI_ST0_STj }, // FUCOMIP
707 /* DF EC */ { 0, BX_IA_FUCOMI_ST0_STj }, // FUCOMIP
708 /* DF ED */ { 0, BX_IA_FUCOMI_ST0_STj }, // FUCOMIP
709 /* DF EE */ { 0, BX_IA_FUCOMI_ST0_STj }, // FUCOMIP
710 /* DF EF */ { 0, BX_IA_FUCOMI_ST0_STj }, // FUCOMIP
711 /* DF F0 */ { 0, BX_IA_FCOMI_ST0_STj }, // FCOMIP
712 /* DF F1 */ { 0, BX_IA_FCOMI_ST0_STj }, // FCOMIP
713 /* DF F2 */ { 0, BX_IA_FCOMI_ST0_STj }, // FCOMIP
714 /* DF F3 */ { 0, BX_IA_FCOMI_ST0_STj }, // FCOMIP
715 /* DF F4 */ { 0, BX_IA_FCOMI_ST0_STj }, // FCOMIP
716 /* DF F5 */ { 0, BX_IA_FCOMI_ST0_STj }, // FCOMIP
717 /* DF F6 */ { 0, BX_IA_FCOMI_ST0_STj }, // FCOMIP
718 /* DF F7 */ { 0, BX_IA_FCOMI_ST0_STj }, // FCOMIP
719 /* DF F8 */ { 0, BX_IA_ERROR },
720 /* DF F9 */ { 0, BX_IA_ERROR },
721 /* DF FA */ { 0, BX_IA_ERROR },
722 /* DF FB */ { 0, BX_IA_ERROR },
723 /* DF FC */ { 0, BX_IA_ERROR },
724 /* DF FD */ { 0, BX_IA_ERROR },
725 /* DF FE */ { 0, BX_IA_ERROR },
726 /* DF FF */ { 0, BX_IA_ERROR },
729 #endif
731 /* ************************************************************************ */
732 /* 3DNow! Opcodes */
734 #if BX_SUPPORT_3DNOW
736 static const BxOpcodeInfo_t Bx3DNowOpcodeInfo[256] = {
737 // 256 entries for 3DNow opcodes, by suffix
738 /* 00 */ { 0, BX_IA_ERROR },
739 /* 01 */ { 0, BX_IA_ERROR },
740 /* 02 */ { 0, BX_IA_ERROR },
741 /* 03 */ { 0, BX_IA_ERROR },
742 /* 04 */ { 0, BX_IA_ERROR },
743 /* 05 */ { 0, BX_IA_ERROR },
744 /* 06 */ { 0, BX_IA_ERROR },
745 /* 07 */ { 0, BX_IA_ERROR },
746 /* 08 */ { 0, BX_IA_ERROR },
747 /* 09 */ { 0, BX_IA_ERROR },
748 /* 0A */ { 0, BX_IA_ERROR },
749 /* 0B */ { 0, BX_IA_ERROR },
750 /* 0C */ { 0, BX_IA_PI2FW_PqQq },
751 /* 0D */ { 0, BX_IA_PI2FD_PqQq },
752 /* 0E */ { 0, BX_IA_ERROR },
753 /* 0F */ { 0, BX_IA_ERROR },
754 /* 10 */ { 0, BX_IA_ERROR },
755 /* 11 */ { 0, BX_IA_ERROR },
756 /* 12 */ { 0, BX_IA_ERROR },
757 /* 13 */ { 0, BX_IA_ERROR },
758 /* 14 */ { 0, BX_IA_ERROR },
759 /* 15 */ { 0, BX_IA_ERROR },
760 /* 16 */ { 0, BX_IA_ERROR },
761 /* 17 */ { 0, BX_IA_ERROR },
762 /* 18 */ { 0, BX_IA_ERROR },
763 /* 19 */ { 0, BX_IA_ERROR },
764 /* 1A */ { 0, BX_IA_ERROR },
765 /* 1B */ { 0, BX_IA_ERROR },
766 /* 1C */ { 0, BX_IA_PF2IW_PqQq },
767 /* 1D */ { 0, BX_IA_PF2ID_PqQq },
768 /* 1E */ { 0, BX_IA_ERROR },
769 /* 1F */ { 0, BX_IA_ERROR },
770 /* 20 */ { 0, BX_IA_ERROR },
771 /* 21 */ { 0, BX_IA_ERROR },
772 /* 22 */ { 0, BX_IA_ERROR },
773 /* 23 */ { 0, BX_IA_ERROR },
774 /* 24 */ { 0, BX_IA_ERROR },
775 /* 25 */ { 0, BX_IA_ERROR },
776 /* 26 */ { 0, BX_IA_ERROR },
777 /* 27 */ { 0, BX_IA_ERROR },
778 /* 28 */ { 0, BX_IA_ERROR },
779 /* 29 */ { 0, BX_IA_ERROR },
780 /* 2A */ { 0, BX_IA_ERROR },
781 /* 2B */ { 0, BX_IA_ERROR },
782 /* 2C */ { 0, BX_IA_ERROR },
783 /* 2D */ { 0, BX_IA_ERROR },
784 /* 2E */ { 0, BX_IA_ERROR },
785 /* 2F */ { 0, BX_IA_ERROR },
786 /* 30 */ { 0, BX_IA_ERROR },
787 /* 31 */ { 0, BX_IA_ERROR },
788 /* 32 */ { 0, BX_IA_ERROR },
789 /* 33 */ { 0, BX_IA_ERROR },
790 /* 34 */ { 0, BX_IA_ERROR },
791 /* 35 */ { 0, BX_IA_ERROR },
792 /* 36 */ { 0, BX_IA_ERROR },
793 /* 37 */ { 0, BX_IA_ERROR },
794 /* 38 */ { 0, BX_IA_ERROR },
795 /* 39 */ { 0, BX_IA_ERROR },
796 /* 3A */ { 0, BX_IA_ERROR },
797 /* 3B */ { 0, BX_IA_ERROR },
798 /* 3C */ { 0, BX_IA_ERROR },
799 /* 3D */ { 0, BX_IA_ERROR },
800 /* 3E */ { 0, BX_IA_ERROR },
801 /* 3F */ { 0, BX_IA_ERROR },
802 /* 40 */ { 0, BX_IA_ERROR },
803 /* 41 */ { 0, BX_IA_ERROR },
804 /* 42 */ { 0, BX_IA_ERROR },
805 /* 43 */ { 0, BX_IA_ERROR },
806 /* 44 */ { 0, BX_IA_ERROR },
807 /* 45 */ { 0, BX_IA_ERROR },
808 /* 46 */ { 0, BX_IA_ERROR },
809 /* 47 */ { 0, BX_IA_ERROR },
810 /* 48 */ { 0, BX_IA_ERROR },
811 /* 49 */ { 0, BX_IA_ERROR },
812 /* 4A */ { 0, BX_IA_ERROR },
813 /* 4B */ { 0, BX_IA_ERROR },
814 /* 4C */ { 0, BX_IA_ERROR },
815 /* 4D */ { 0, BX_IA_ERROR },
816 /* 4E */ { 0, BX_IA_ERROR },
817 /* 4F */ { 0, BX_IA_ERROR },
818 /* 50 */ { 0, BX_IA_ERROR },
819 /* 51 */ { 0, BX_IA_ERROR },
820 /* 52 */ { 0, BX_IA_ERROR },
821 /* 53 */ { 0, BX_IA_ERROR },
822 /* 54 */ { 0, BX_IA_ERROR },
823 /* 55 */ { 0, BX_IA_ERROR },
824 /* 56 */ { 0, BX_IA_ERROR },
825 /* 57 */ { 0, BX_IA_ERROR },
826 /* 58 */ { 0, BX_IA_ERROR },
827 /* 59 */ { 0, BX_IA_ERROR },
828 /* 5A */ { 0, BX_IA_ERROR },
829 /* 5B */ { 0, BX_IA_ERROR },
830 /* 5C */ { 0, BX_IA_ERROR },
831 /* 5D */ { 0, BX_IA_ERROR },
832 /* 5E */ { 0, BX_IA_ERROR },
833 /* 5F */ { 0, BX_IA_ERROR },
834 /* 60 */ { 0, BX_IA_ERROR },
835 /* 61 */ { 0, BX_IA_ERROR },
836 /* 62 */ { 0, BX_IA_ERROR },
837 /* 63 */ { 0, BX_IA_ERROR },
838 /* 64 */ { 0, BX_IA_ERROR },
839 /* 65 */ { 0, BX_IA_ERROR },
840 /* 66 */ { 0, BX_IA_ERROR },
841 /* 67 */ { 0, BX_IA_ERROR },
842 /* 68 */ { 0, BX_IA_ERROR },
843 /* 69 */ { 0, BX_IA_ERROR },
844 /* 6A */ { 0, BX_IA_ERROR },
845 /* 6B */ { 0, BX_IA_ERROR },
846 /* 6C */ { 0, BX_IA_ERROR },
847 /* 6D */ { 0, BX_IA_ERROR },
848 /* 6E */ { 0, BX_IA_ERROR },
849 /* 6F */ { 0, BX_IA_ERROR },
850 /* 70 */ { 0, BX_IA_ERROR },
851 /* 71 */ { 0, BX_IA_ERROR },
852 /* 72 */ { 0, BX_IA_ERROR },
853 /* 73 */ { 0, BX_IA_ERROR },
854 /* 74 */ { 0, BX_IA_ERROR },
855 /* 75 */ { 0, BX_IA_ERROR },
856 /* 76 */ { 0, BX_IA_ERROR },
857 /* 77 */ { 0, BX_IA_ERROR },
858 /* 78 */ { 0, BX_IA_ERROR },
859 /* 79 */ { 0, BX_IA_ERROR },
860 /* 7A */ { 0, BX_IA_ERROR },
861 /* 7B */ { 0, BX_IA_ERROR },
862 /* 7C */ { 0, BX_IA_ERROR },
863 /* 7D */ { 0, BX_IA_ERROR },
864 /* 7E */ { 0, BX_IA_ERROR },
865 /* 7F */ { 0, BX_IA_ERROR },
866 /* 80 */ { 0, BX_IA_ERROR },
867 /* 81 */ { 0, BX_IA_ERROR },
868 /* 82 */ { 0, BX_IA_ERROR },
869 /* 83 */ { 0, BX_IA_ERROR },
870 /* 84 */ { 0, BX_IA_ERROR },
871 /* 85 */ { 0, BX_IA_ERROR },
872 /* 86 */ { 0, BX_IA_ERROR },
873 /* 87 */ { 0, BX_IA_ERROR },
874 /* 88 */ { 0, BX_IA_ERROR },
875 /* 89 */ { 0, BX_IA_ERROR },
876 /* 8A */ { 0, BX_IA_PFNACC_PqQq },
877 /* 8B */ { 0, BX_IA_ERROR },
878 /* 8C */ { 0, BX_IA_ERROR },
879 /* 8D */ { 0, BX_IA_ERROR },
880 /* 8E */ { 0, BX_IA_PFPNACC_PqQq },
881 /* 8F */ { 0, BX_IA_ERROR },
882 /* 90 */ { 0, BX_IA_PFCMPGE_PqQq },
883 /* 91 */ { 0, BX_IA_ERROR },
884 /* 92 */ { 0, BX_IA_ERROR },
885 /* 93 */ { 0, BX_IA_ERROR },
886 /* 94 */ { 0, BX_IA_PFMIN_PqQq },
887 /* 95 */ { 0, BX_IA_ERROR },
888 /* 96 */ { 0, BX_IA_PFRCP_PqQq },
889 /* 97 */ { 0, BX_IA_PFRSQRT_PqQq },
890 /* 98 */ { 0, BX_IA_ERROR },
891 /* 99 */ { 0, BX_IA_ERROR },
892 /* 9A */ { 0, BX_IA_PFSUB_PqQq },
893 /* 9B */ { 0, BX_IA_ERROR },
894 /* 9C */ { 0, BX_IA_ERROR },
895 /* 9D */ { 0, BX_IA_ERROR },
896 /* 9E */ { 0, BX_IA_PFADD_PqQq },
897 /* 9F */ { 0, BX_IA_ERROR },
898 /* A0 */ { 0, BX_IA_PFCMPGT_PqQq },
899 /* A1 */ { 0, BX_IA_ERROR },
900 /* A2 */ { 0, BX_IA_ERROR },
901 /* A3 */ { 0, BX_IA_ERROR },
902 /* A4 */ { 0, BX_IA_PFMAX_PqQq },
903 /* A5 */ { 0, BX_IA_ERROR },
904 /* A6 */ { 0, BX_IA_PFRCPIT1_PqQq },
905 /* A7 */ { 0, BX_IA_PFRSQIT1_PqQq },
906 /* A8 */ { 0, BX_IA_ERROR },
907 /* A9 */ { 0, BX_IA_ERROR },
908 /* AA */ { 0, BX_IA_PFSUBR_PqQq },
909 /* AB */ { 0, BX_IA_ERROR },
910 /* AC */ { 0, BX_IA_ERROR },
911 /* AD */ { 0, BX_IA_ERROR },
912 /* AE */ { 0, BX_IA_PFACC_PqQq },
913 /* AF */ { 0, BX_IA_ERROR },
914 /* B0 */ { 0, BX_IA_PFCMPEQ_PqQq },
915 /* B1 */ { 0, BX_IA_ERROR },
916 /* B2 */ { 0, BX_IA_ERROR },
917 /* B3 */ { 0, BX_IA_ERROR },
918 /* B4 */ { 0, BX_IA_PFMUL_PqQq },
919 /* B5 */ { 0, BX_IA_ERROR },
920 /* B6 */ { 0, BX_IA_PFRCPIT2_PqQq },
921 /* B7 */ { 0, BX_IA_PMULHRW_PqQq },
922 /* B8 */ { 0, BX_IA_ERROR },
923 /* B9 */ { 0, BX_IA_ERROR },
924 /* BA */ { 0, BX_IA_ERROR },
925 /* BB */ { 0, BX_IA_PSWAPD_PqQq },
926 /* BC */ { 0, BX_IA_ERROR },
927 /* BD */ { 0, BX_IA_ERROR },
928 /* BE */ { 0, BX_IA_ERROR },
929 /* BF */ { 0, BX_IA_PAVGB_PqQq },
930 /* C0 */ { 0, BX_IA_ERROR },
931 /* C1 */ { 0, BX_IA_ERROR },
932 /* C2 */ { 0, BX_IA_ERROR },
933 /* C3 */ { 0, BX_IA_ERROR },
934 /* C4 */ { 0, BX_IA_ERROR },
935 /* C5 */ { 0, BX_IA_ERROR },
936 /* C6 */ { 0, BX_IA_ERROR },
937 /* C7 */ { 0, BX_IA_ERROR },
938 /* C8 */ { 0, BX_IA_ERROR },
939 /* C9 */ { 0, BX_IA_ERROR },
940 /* CA */ { 0, BX_IA_ERROR },
941 /* CB */ { 0, BX_IA_ERROR },
942 /* CC */ { 0, BX_IA_ERROR },
943 /* CD */ { 0, BX_IA_ERROR },
944 /* CE */ { 0, BX_IA_ERROR },
945 /* CF */ { 0, BX_IA_ERROR },
946 /* D0 */ { 0, BX_IA_ERROR },
947 /* D1 */ { 0, BX_IA_ERROR },
948 /* D2 */ { 0, BX_IA_ERROR },
949 /* D3 */ { 0, BX_IA_ERROR },
950 /* D4 */ { 0, BX_IA_ERROR },
951 /* D5 */ { 0, BX_IA_ERROR },
952 /* D6 */ { 0, BX_IA_ERROR },
953 /* D7 */ { 0, BX_IA_ERROR },
954 /* D8 */ { 0, BX_IA_ERROR },
955 /* D9 */ { 0, BX_IA_ERROR },
956 /* DA */ { 0, BX_IA_ERROR },
957 /* DB */ { 0, BX_IA_ERROR },
958 /* DC */ { 0, BX_IA_ERROR },
959 /* DD */ { 0, BX_IA_ERROR },
960 /* DE */ { 0, BX_IA_ERROR },
961 /* DF */ { 0, BX_IA_ERROR },
962 /* E0 */ { 0, BX_IA_ERROR },
963 /* E1 */ { 0, BX_IA_ERROR },
964 /* E2 */ { 0, BX_IA_ERROR },
965 /* E3 */ { 0, BX_IA_ERROR },
966 /* E4 */ { 0, BX_IA_ERROR },
967 /* E5 */ { 0, BX_IA_ERROR },
968 /* E6 */ { 0, BX_IA_ERROR },
969 /* E7 */ { 0, BX_IA_ERROR },
970 /* E8 */ { 0, BX_IA_ERROR },
971 /* E9 */ { 0, BX_IA_ERROR },
972 /* EA */ { 0, BX_IA_ERROR },
973 /* EB */ { 0, BX_IA_ERROR },
974 /* EC */ { 0, BX_IA_ERROR },
975 /* ED */ { 0, BX_IA_ERROR },
976 /* EE */ { 0, BX_IA_ERROR },
977 /* EF */ { 0, BX_IA_ERROR },
978 /* F0 */ { 0, BX_IA_ERROR },
979 /* F1 */ { 0, BX_IA_ERROR },
980 /* F2 */ { 0, BX_IA_ERROR },
981 /* F3 */ { 0, BX_IA_ERROR },
982 /* F4 */ { 0, BX_IA_ERROR },
983 /* F5 */ { 0, BX_IA_ERROR },
984 /* F6 */ { 0, BX_IA_ERROR },
985 /* F7 */ { 0, BX_IA_ERROR },
986 /* F8 */ { 0, BX_IA_ERROR },
987 /* F9 */ { 0, BX_IA_ERROR },
988 /* FA */ { 0, BX_IA_ERROR },
989 /* FB */ { 0, BX_IA_ERROR },
990 /* FC */ { 0, BX_IA_ERROR },
991 /* FD */ { 0, BX_IA_ERROR },
992 /* FE */ { 0, BX_IA_ERROR },
993 /* FF */ { 0, BX_IA_ERROR }
996 #endif
999 /* ********** */
1000 /* SSE Groups */
1001 /* ********** */
1003 static const BxOpcodeInfo_t BxOpcodeGroupSSE_ERR[3] = {
1004 /* 66 */ { 0, BX_IA_ERROR },
1005 /* F2 */ { 0, BX_IA_ERROR },
1006 /* F3 */ { 0, BX_IA_ERROR }
1009 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f10[3] = {
1010 /* 66 */ { 0, BX_IA_MOVUPD_VpdWpd },
1011 /* F2 */ { 0, BX_IA_MOVSD_VsdWsd },
1012 /* F3 */ { 0, BX_IA_MOVSS_VssWss }
1015 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f11[3] = {
1016 /* 66 */ { 0, BX_IA_MOVUPD_WpdVpd },
1017 /* F2 */ { 0, BX_IA_MOVSD_WsdVsd },
1018 /* F3 */ { 0, BX_IA_MOVSS_WssVss }
1021 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f12[3] = {
1022 /* 66 */ { 0, BX_IA_MOVLPD_VsdMq },
1023 /* F2 */ { 0, BX_IA_MOVDDUP_VpdWq }, // SSE3
1024 /* F3 */ { 0, BX_IA_MOVSLDUP_VpsWps } // SSE3
1027 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f13M[3] = {
1028 /* 66 */ { 0, BX_IA_MOVLPD_MqVsd },
1029 /* F2 */ { 0, BX_IA_ERROR },
1030 /* F3 */ { 0, BX_IA_ERROR }
1033 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f14[3] = {
1034 /* 66 */ { 0, BX_IA_UNPCKLPD_VpdWdq },
1035 /* F2 */ { 0, BX_IA_ERROR },
1036 /* F3 */ { 0, BX_IA_ERROR }
1039 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f15[3] = {
1040 /* 66 */ { 0, BX_IA_UNPCKHPD_VpdWdq },
1041 /* F2 */ { 0, BX_IA_ERROR },
1042 /* F3 */ { 0, BX_IA_ERROR }
1045 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f16[3] = {
1046 /* 66 */ { 0, BX_IA_MOVHPD_VsdMq },
1047 /* F2 */ { 0, BX_IA_ERROR },
1048 /* F3 */ { 0, BX_IA_MOVSHDUP_VpsWps } // SSE3
1051 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f17M[3] = {
1052 /* 66 */ { 0, BX_IA_MOVHPD_MqVsd },
1053 /* F2 */ { 0, BX_IA_ERROR },
1054 /* F3 */ { 0, BX_IA_ERROR }
1057 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f28[3] = {
1058 /* 66 */ { 0, BX_IA_MOVAPD_VpdWpd },
1059 /* F2 */ { 0, BX_IA_ERROR },
1060 /* F3 */ { 0, BX_IA_ERROR }
1063 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f29[3] = {
1064 /* 66 */ { 0, BX_IA_MOVAPD_WpdVpd },
1065 /* F2 */ { 0, BX_IA_ERROR },
1066 /* F3 */ { 0, BX_IA_ERROR }
1069 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f2a[3] = {
1070 /* 66 */ { 0, BX_IA_CVTPI2PD_VpdQq },
1071 /* F2 */ { 0, BX_IA_CVTSI2SD_VsdEd },
1072 /* F3 */ { 0, BX_IA_CVTSI2SS_VssEd }
1075 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f2bM[3] = {
1076 /* 66 */ { 0, BX_IA_MOVNTPD_MpdVpd },
1077 /* F2 */ { 0, BX_IA_ERROR },
1078 /* F3 */ { 0, BX_IA_ERROR }
1081 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f2c[3] = {
1082 /* 66 */ { 0, BX_IA_CVTTPD2PI_PqWpd },
1083 /* F2 */ { 0, BX_IA_CVTTSD2SI_GdWsd },
1084 /* F3 */ { 0, BX_IA_CVTTSS2SI_GdWss }
1087 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f2d[3] = {
1088 /* 66 */ { 0, BX_IA_CVTPD2PI_PqWpd },
1089 /* F2 */ { 0, BX_IA_CVTSD2SI_GdWsd },
1090 /* F3 */ { 0, BX_IA_CVTSS2SI_GdWss }
1093 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f2e[3] = {
1094 /* 66 */ { 0, BX_IA_UCOMISD_VsdWsd },
1095 /* F2 */ { 0, BX_IA_ERROR },
1096 /* F3 */ { 0, BX_IA_ERROR }
1099 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f2f[3] = {
1100 /* 66 */ { 0, BX_IA_COMISD_VpdWpd },
1101 /* F2 */ { 0, BX_IA_ERROR },
1102 /* F3 */ { 0, BX_IA_ERROR }
1105 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f50[3] = {
1106 /* 66 */ { 0, BX_IA_MOVMSKPD_GdVRpd },
1107 /* F2 */ { 0, BX_IA_ERROR },
1108 /* F3 */ { 0, BX_IA_ERROR }
1111 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f51[3] = {
1112 /* 66 */ { 0, BX_IA_SQRTPD_VpdWpd },
1113 /* F2 */ { 0, BX_IA_SQRTSD_VsdWsd },
1114 /* F3 */ { 0, BX_IA_SQRTSS_VssWss }
1117 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f52[3] = {
1118 /* 66 */ { 0, BX_IA_ERROR },
1119 /* F2 */ { 0, BX_IA_ERROR },
1120 /* F3 */ { 0, BX_IA_RSQRTSS_VssWss }
1123 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f53[3] = {
1124 /* 66 */ { 0, BX_IA_ERROR },
1125 /* F2 */ { 0, BX_IA_ERROR },
1126 /* F3 */ { 0, BX_IA_RCPSS_VssWss }
1129 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f54[3] = {
1130 /* 66 */ { 0, BX_IA_ANDPD_VpdWpd },
1131 /* F2 */ { 0, BX_IA_ERROR },
1132 /* F3 */ { 0, BX_IA_ERROR }
1135 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f55[3] = {
1136 /* 66 */ { 0, BX_IA_ANDNPD_VpdWpd },
1137 /* F2 */ { 0, BX_IA_ERROR },
1138 /* F3 */ { 0, BX_IA_ERROR }
1141 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f56[3] = {
1142 /* 66 */ { 0, BX_IA_ORPD_VpdWpd },
1143 /* F2 */ { 0, BX_IA_ERROR },
1144 /* F3 */ { 0, BX_IA_ERROR }
1147 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f57[3] = {
1148 /* 66 */ { 0, BX_IA_XORPD_VpdWpd },
1149 /* F2 */ { 0, BX_IA_ERROR },
1150 /* F3 */ { 0, BX_IA_ERROR }
1153 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f58[3] = {
1154 /* 66 */ { 0, BX_IA_ADDPD_VpdWpd },
1155 /* F2 */ { 0, BX_IA_ADDSD_VsdWsd },
1156 /* F3 */ { 0, BX_IA_ADDSS_VssWss }
1159 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f59[3] = {
1160 /* 66 */ { 0, BX_IA_MULPD_VpdWpd },
1161 /* F2 */ { 0, BX_IA_MULSD_VsdWsd },
1162 /* F3 */ { 0, BX_IA_MULSS_VssWss }
1165 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f5a[3] = {
1166 /* 66 */ { 0, BX_IA_CVTPD2PS_VpdWpd },
1167 /* F2 */ { 0, BX_IA_CVTSD2SS_VsdWsd },
1168 /* F3 */ { 0, BX_IA_CVTSS2SD_VssWss }
1171 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f5b[3] = {
1172 /* 66 */ { 0, BX_IA_CVTPS2DQ_VdqWps },
1173 /* F2 */ { 0, BX_IA_ERROR },
1174 /* F3 */ { 0, BX_IA_CVTTPS2DQ_VdqWps }
1177 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f5c[3] = {
1178 /* 66 */ { 0, BX_IA_SUBPD_VpdWpd },
1179 /* F2 */ { 0, BX_IA_SUBSD_VsdWsd },
1180 /* F3 */ { 0, BX_IA_SUBSS_VssWss }
1183 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f5d[3] = {
1184 /* 66 */ { 0, BX_IA_MINPD_VpdWpd },
1185 /* F2 */ { 0, BX_IA_MINSD_VsdWsd },
1186 /* F3 */ { 0, BX_IA_MINSS_VssWss }
1189 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f5e[3] = {
1190 /* 66 */ { 0, BX_IA_DIVPD_VpdWpd },
1191 /* F2 */ { 0, BX_IA_DIVSD_VsdWsd },
1192 /* F3 */ { 0, BX_IA_DIVSS_VssWss }
1195 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f5f[3] = {
1196 /* 66 */ { 0, BX_IA_MAXPD_VpdWpd },
1197 /* F2 */ { 0, BX_IA_MAXSD_VsdWsd },
1198 /* F3 */ { 0, BX_IA_MAXSS_VssWss }
1201 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f60[3] = {
1202 /* 66 */ { 0, BX_IA_PUNPCKLBW_VdqWdq },
1203 /* F2 */ { 0, BX_IA_ERROR },
1204 /* F3 */ { 0, BX_IA_ERROR }
1207 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f61[3] = {
1208 /* 66 */ { 0, BX_IA_PUNPCKLWD_VdqWdq },
1209 /* F2 */ { 0, BX_IA_ERROR },
1210 /* F3 */ { 0, BX_IA_ERROR }
1213 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f62[3] = {
1214 /* 66 */ { 0, BX_IA_PUNPCKLDQ_VdqWdq },
1215 /* F2 */ { 0, BX_IA_ERROR },
1216 /* F3 */ { 0, BX_IA_ERROR }
1219 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f63[3] = {
1220 /* 66 */ { 0, BX_IA_PACKSSWB_VdqWdq },
1221 /* F2 */ { 0, BX_IA_ERROR },
1222 /* F3 */ { 0, BX_IA_ERROR }
1225 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f64[3] = {
1226 /* 66 */ { 0, BX_IA_PCMPGTB_VdqWdq },
1227 /* F2 */ { 0, BX_IA_ERROR },
1228 /* F3 */ { 0, BX_IA_ERROR }
1231 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f65[3] = {
1232 /* 66 */ { 0, BX_IA_PCMPGTW_VdqWdq },
1233 /* F2 */ { 0, BX_IA_ERROR },
1234 /* F3 */ { 0, BX_IA_ERROR }
1237 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f66[3] = {
1238 /* 66 */ { 0, BX_IA_PCMPGTD_VdqWdq },
1239 /* F2 */ { 0, BX_IA_ERROR },
1240 /* F3 */ { 0, BX_IA_ERROR }
1243 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f67[3] = {
1244 /* 66 */ { 0, BX_IA_PACKUSWB_VdqWdq },
1245 /* F2 */ { 0, BX_IA_ERROR },
1246 /* F3 */ { 0, BX_IA_ERROR }
1249 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f68[3] = {
1250 /* 66 */ { 0, BX_IA_PUNPCKHBW_VdqWdq },
1251 /* F2 */ { 0, BX_IA_ERROR },
1252 /* F3 */ { 0, BX_IA_ERROR }
1255 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f69[3] = {
1256 /* 66 */ { 0, BX_IA_PUNPCKHWD_VdqWdq },
1257 /* F2 */ { 0, BX_IA_ERROR },
1258 /* F3 */ { 0, BX_IA_ERROR }
1261 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f6a[3] = {
1262 /* 66 */ { 0, BX_IA_PUNPCKHDQ_VdqWdq },
1263 /* F2 */ { 0, BX_IA_ERROR },
1264 /* F3 */ { 0, BX_IA_ERROR }
1267 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f6b[3] = {
1268 /* 66 */ { 0, BX_IA_PACKSSDW_VdqWdq },
1269 /* F2 */ { 0, BX_IA_ERROR },
1270 /* F3 */ { 0, BX_IA_ERROR }
1273 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f6c[3] = {
1274 /* 66 */ { 0, BX_IA_PUNPCKLQDQ_VdqWdq },
1275 /* F2 */ { 0, BX_IA_ERROR },
1276 /* F3 */ { 0, BX_IA_ERROR }
1279 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f6d[3] = {
1280 /* 66 */ { 0, BX_IA_PUNPCKHQDQ_VdqWdq },
1281 /* F2 */ { 0, BX_IA_ERROR },
1282 /* F3 */ { 0, BX_IA_ERROR }
1285 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f6e[3] = {
1286 /* 66 */ { 0, BX_IA_MOVD_VdqEd },
1287 /* F2 */ { 0, BX_IA_ERROR },
1288 /* F3 */ { 0, BX_IA_ERROR }
1291 #if BX_SUPPORT_X86_64
1292 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f6eQ[3] = {
1293 /* 66 */ { 0, BX_IA_MOVQ_VdqEq },
1294 /* F2 */ { 0, BX_IA_ERROR },
1295 /* F3 */ { 0, BX_IA_ERROR }
1297 #endif
1299 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f6f[3] = {
1300 /* 66 */ { 0, BX_IA_MOVDQA_VdqWdq },
1301 /* F2 */ { 0, BX_IA_ERROR },
1302 /* F3 */ { 0, BX_IA_MOVDQU_VdqWdq }
1305 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f70[3] = {
1306 /* 66 */ { 0, BX_IA_PSHUFD_VdqWdqIb },
1307 /* F2 */ { 0, BX_IA_PSHUFHW_VdqWdqIb },
1308 /* F3 */ { 0, BX_IA_PSHUFLW_VdqWdqIb }
1311 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f74[3] = {
1312 /* 66 */ { 0, BX_IA_PCMPEQB_VdqWdq },
1313 /* F2 */ { 0, BX_IA_ERROR },
1314 /* F3 */ { 0, BX_IA_ERROR }
1317 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f75[3] = {
1318 /* 66 */ { 0, BX_IA_PCMPEQW_VdqWdq },
1319 /* F2 */ { 0, BX_IA_ERROR },
1320 /* F3 */ { 0, BX_IA_ERROR }
1323 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f76[3] = {
1324 /* 66 */ { 0, BX_IA_PCMPEQD_VdqWdq },
1325 /* F2 */ { 0, BX_IA_ERROR },
1326 /* F3 */ { 0, BX_IA_ERROR }
1329 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f7c[3] = {
1330 /* 66 */ { 0, BX_IA_HADDPD_VpdWpd }, // SSE3
1331 /* F2 */ { 0, BX_IA_HADDPS_VpsWps }, // SSE3
1332 /* F3 */ { 0, BX_IA_ERROR }
1335 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f7d[3] = {
1336 /* 66 */ { 0, BX_IA_HSUBPD_VpdWpd }, // SSE3
1337 /* F2 */ { 0, BX_IA_HSUBPS_VpsWps }, // SSE3
1338 /* F3 */ { 0, BX_IA_ERROR }
1341 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f7e[3] = {
1342 /* 66 */ { 0, BX_IA_MOVD_EdVd },
1343 /* F2 */ { 0, BX_IA_ERROR },
1344 /* F3 */ { 0, BX_IA_MOVQ_VqWq }
1347 #if BX_SUPPORT_X86_64
1348 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f7eQ[3] = {
1349 /* 66 */ { 0, BX_IA_MOVQ_EqVq },
1350 /* F2 */ { 0, BX_IA_ERROR },
1351 /* F3 */ { 0, BX_IA_MOVQ_VqWq }
1353 #endif
1355 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f7f[3] = {
1356 /* 66 */ { 0, BX_IA_MOVDQA_WdqVdq },
1357 /* F2 */ { 0, BX_IA_ERROR },
1358 /* F3 */ { 0, BX_IA_MOVDQU_WdqVdq }
1361 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fb8wR[3] = {
1362 /* 66 */ { 0, BX_IA_ERROR },
1363 /* F2 */ { 0, BX_IA_ERROR },
1364 /* F3 */ { 0, BX_IA_POPCNT_GwEwR }
1367 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fb8wM[3] = {
1368 /* 66 */ { 0, BX_IA_ERROR },
1369 /* F2 */ { 0, BX_IA_ERROR },
1370 /* F3 */ { 0, BX_IA_POPCNT_GwEwM }
1373 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fb8dR[3] = {
1374 /* 66 */ { 0, BX_IA_ERROR },
1375 /* F2 */ { 0, BX_IA_ERROR },
1376 /* F3 */ { 0, BX_IA_POPCNT_GdEdR }
1379 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fb8dM[3] = {
1380 /* 66 */ { 0, BX_IA_ERROR },
1381 /* F2 */ { 0, BX_IA_ERROR },
1382 /* F3 */ { 0, BX_IA_POPCNT_GdEdM }
1385 #if BX_SUPPORT_X86_64
1386 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fb8qR[3] = {
1387 /* 66 */ { 0, BX_IA_ERROR },
1388 /* F2 */ { 0, BX_IA_ERROR },
1389 /* F3 */ { 0, BX_IA_POPCNT_GqEqR }
1392 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fb8qM[3] = {
1393 /* 66 */ { 0, BX_IA_ERROR },
1394 /* F2 */ { 0, BX_IA_ERROR },
1395 /* F3 */ { 0, BX_IA_POPCNT_GqEqM }
1397 #endif
1399 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fc2[3] = {
1400 /* 66 */ { 0, BX_IA_CMPPD_VpdWpdIb },
1401 /* F2 */ { 0, BX_IA_CMPSD_VsdWsdIb },
1402 /* F3 */ { 0, BX_IA_CMPSS_VssWssIb }
1405 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fc4[3] = {
1406 /* 66 */ { 0, BX_IA_PINSRW_VdqEwIb },
1407 /* F2 */ { 0, BX_IA_ERROR },
1408 /* F3 */ { 0, BX_IA_ERROR }
1411 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fc5R[3] = {
1412 /* 66 */ { 0, BX_IA_PEXTRW_GdUdqIb },
1413 /* F2 */ { 0, BX_IA_ERROR },
1414 /* F3 */ { 0, BX_IA_ERROR }
1417 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fc6[3] = {
1418 /* 66 */ { 0, BX_IA_SHUFPD_VpdWpdIb },
1419 /* F2 */ { 0, BX_IA_ERROR },
1420 /* F3 */ { 0, BX_IA_ERROR }
1423 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fd0[3] = {
1424 /* 66 */ { 0, BX_IA_ADDSUBPD_VpdWpd }, // SSE3
1425 /* F2 */ { 0, BX_IA_ADDSUBPS_VpsWps }, // SSE3
1426 /* F3 */ { 0, BX_IA_ERROR }
1429 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fd1[3] = {
1430 /* 66 */ { 0, BX_IA_PSRLW_VdqWdq },
1431 /* F2 */ { 0, BX_IA_ERROR },
1432 /* F3 */ { 0, BX_IA_ERROR }
1435 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fd2[3] = {
1436 /* 66 */ { 0, BX_IA_PSRLD_VdqWdq },
1437 /* F2 */ { 0, BX_IA_ERROR },
1438 /* F3 */ { 0, BX_IA_ERROR }
1441 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fd3[3] = {
1442 /* 66 */ { 0, BX_IA_PSRLQ_VdqWdq },
1443 /* F2 */ { 0, BX_IA_ERROR },
1444 /* F3 */ { 0, BX_IA_ERROR }
1447 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fd4[3] = {
1448 /* 66 */ { 0, BX_IA_PADDQ_VdqWdq },
1449 /* F2 */ { 0, BX_IA_ERROR },
1450 /* F3 */ { 0, BX_IA_ERROR }
1453 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fd5[3] = {
1454 /* 66 */ { 0, BX_IA_PMULLW_VdqWdq },
1455 /* F2 */ { 0, BX_IA_ERROR },
1456 /* F3 */ { 0, BX_IA_ERROR }
1459 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fd6[3] = {
1460 /* 66 */ { 0, BX_IA_MOVQ_WqVq },
1461 /* F2 */ { 0, BX_IA_MOVDQ2Q_PqVRq },
1462 /* F3 */ { 0, BX_IA_MOVQ2DQ_VdqQq }
1465 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fd7[3] = {
1466 /* 66 */ { 0, BX_IA_PMOVMSKB_GdUdq },
1467 /* F2 */ { 0, BX_IA_ERROR },
1468 /* F3 */ { 0, BX_IA_ERROR }
1471 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fd8[3] = {
1472 /* 66 */ { 0, BX_IA_PSUBUSB_VdqWdq },
1473 /* F2 */ { 0, BX_IA_ERROR },
1474 /* F3 */ { 0, BX_IA_ERROR }
1477 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fd9[3] = {
1478 /* 66 */ { 0, BX_IA_PSUBUSW_VdqWdq },
1479 /* F2 */ { 0, BX_IA_ERROR },
1480 /* F3 */ { 0, BX_IA_ERROR }
1483 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fda[3] = {
1484 /* 66 */ { 0, BX_IA_PMINUB_VdqWdq },
1485 /* F2 */ { 0, BX_IA_ERROR },
1486 /* F3 */ { 0, BX_IA_ERROR }
1489 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fdb[3] = {
1490 /* 66 */ { 0, BX_IA_PAND_VdqWdq },
1491 /* F2 */ { 0, BX_IA_ERROR },
1492 /* F3 */ { 0, BX_IA_ERROR }
1495 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fdc[3] = {
1496 /* 66 */ { 0, BX_IA_PADDUSB_VdqWdq },
1497 /* F2 */ { 0, BX_IA_ERROR },
1498 /* F3 */ { 0, BX_IA_ERROR }
1501 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fdd[3] = {
1502 /* 66 */ { 0, BX_IA_PADDUSW_VdqWdq },
1503 /* F2 */ { 0, BX_IA_ERROR },
1504 /* F3 */ { 0, BX_IA_ERROR }
1507 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fde[3] = {
1508 /* 66 */ { 0, BX_IA_PMAXUB_VdqWdq },
1509 /* F2 */ { 0, BX_IA_ERROR },
1510 /* F3 */ { 0, BX_IA_ERROR }
1513 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fdf[3] = {
1514 /* 66 */ { 0, BX_IA_PANDN_VdqWdq },
1515 /* F2 */ { 0, BX_IA_ERROR },
1516 /* F3 */ { 0, BX_IA_ERROR }
1519 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fe0[3] = {
1520 /* 66 */ { 0, BX_IA_PAVGB_VdqWdq },
1521 /* F2 */ { 0, BX_IA_ERROR },
1522 /* F3 */ { 0, BX_IA_ERROR }
1525 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fe1[3] = {
1526 /* 66 */ { 0, BX_IA_PSRAW_VdqWdq },
1527 /* F2 */ { 0, BX_IA_ERROR },
1528 /* F3 */ { 0, BX_IA_ERROR }
1531 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fe2[3] = {
1532 /* 66 */ { 0, BX_IA_PSRAD_VdqWdq },
1533 /* F2 */ { 0, BX_IA_ERROR },
1534 /* F3 */ { 0, BX_IA_ERROR }
1537 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fe3[3] = {
1538 /* 66 */ { 0, BX_IA_PAVGW_VdqWdq },
1539 /* F2 */ { 0, BX_IA_ERROR },
1540 /* F3 */ { 0, BX_IA_ERROR }
1543 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fe4[3] = {
1544 /* 66 */ { 0, BX_IA_PMULHUW_VdqWdq },
1545 /* F2 */ { 0, BX_IA_ERROR },
1546 /* F3 */ { 0, BX_IA_ERROR }
1549 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fe5[3] = {
1550 /* 66 */ { 0, BX_IA_PMULHW_VdqWdq },
1551 /* F2 */ { 0, BX_IA_ERROR },
1552 /* F3 */ { 0, BX_IA_ERROR }
1555 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fe6[3] = {
1556 /* 66 */ { 0, BX_IA_CVTTPD2DQ_VqWpd },
1557 /* F2 */ { 0, BX_IA_CVTPD2DQ_VqWpd },
1558 /* F3 */ { 0, BX_IA_CVTDQ2PD_VpdWq }
1561 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fe7M[3] = {
1562 /* 66 */ { 0, BX_IA_MOVNTDQ_MdqVdq },
1563 /* F2 */ { 0, BX_IA_ERROR },
1564 /* F3 */ { 0, BX_IA_ERROR }
1567 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fe8[3] = {
1568 /* 66 */ { 0, BX_IA_PSUBSB_VdqWdq },
1569 /* F2 */ { 0, BX_IA_ERROR },
1570 /* F3 */ { 0, BX_IA_ERROR }
1573 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fe9[3] = {
1574 /* 66 */ { 0, BX_IA_PSUBSW_VdqWdq },
1575 /* F2 */ { 0, BX_IA_ERROR },
1576 /* F3 */ { 0, BX_IA_ERROR }
1579 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fea[3] = {
1580 /* 66 */ { 0, BX_IA_PMINSW_VdqWdq },
1581 /* F2 */ { 0, BX_IA_ERROR },
1582 /* F3 */ { 0, BX_IA_ERROR }
1585 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0feb[3] = {
1586 /* 66 */ { 0, BX_IA_POR_VdqWdq },
1587 /* F2 */ { 0, BX_IA_ERROR },
1588 /* F3 */ { 0, BX_IA_ERROR }
1591 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fec[3] = {
1592 /* 66 */ { 0, BX_IA_PADDSB_VdqWdq },
1593 /* F2 */ { 0, BX_IA_ERROR },
1594 /* F3 */ { 0, BX_IA_ERROR }
1597 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fed[3] = {
1598 /* 66 */ { 0, BX_IA_PADDSW_VdqWdq },
1599 /* F2 */ { 0, BX_IA_ERROR },
1600 /* F3 */ { 0, BX_IA_ERROR }
1603 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fee[3] = {
1604 /* 66 */ { 0, BX_IA_PMAXSW_VdqWdq },
1605 /* F2 */ { 0, BX_IA_ERROR },
1606 /* F3 */ { 0, BX_IA_ERROR }
1609 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0fef[3] = {
1610 /* 66 */ { 0, BX_IA_PXOR_VdqWdq },
1611 /* F2 */ { 0, BX_IA_ERROR },
1612 /* F3 */ { 0, BX_IA_ERROR }
1615 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ff0M[3] = {
1616 /* 66 */ { 0, BX_IA_ERROR },
1617 /* F2 */ { 0, BX_IA_LDDQU_VdqMdq }, // SSE3
1618 /* F3 */ { 0, BX_IA_ERROR }
1621 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ff1[3] = {
1622 /* 66 */ { 0, BX_IA_PSLLW_VdqWdq },
1623 /* F2 */ { 0, BX_IA_ERROR },
1624 /* F3 */ { 0, BX_IA_ERROR }
1627 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ff2[3] = {
1628 /* 66 */ { 0, BX_IA_PSLLD_VdqWdq },
1629 /* F2 */ { 0, BX_IA_ERROR },
1630 /* F3 */ { 0, BX_IA_ERROR }
1633 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ff3[3] = {
1634 /* 66 */ { 0, BX_IA_PSLLQ_VdqWdq },
1635 /* F2 */ { 0, BX_IA_ERROR },
1636 /* F3 */ { 0, BX_IA_ERROR }
1639 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ff4[3] = {
1640 /* 66 */ { 0, BX_IA_PMULUDQ_VdqWdq },
1641 /* F2 */ { 0, BX_IA_ERROR },
1642 /* F3 */ { 0, BX_IA_ERROR }
1645 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ff5[3] = {
1646 /* 66 */ { 0, BX_IA_PMADDWD_VdqWdq },
1647 /* F2 */ { 0, BX_IA_ERROR },
1648 /* F3 */ { 0, BX_IA_ERROR }
1651 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ff6[3] = {
1652 /* 66 */ { 0, BX_IA_PSADBW_VdqWdq },
1653 /* F2 */ { 0, BX_IA_ERROR },
1654 /* F3 */ { 0, BX_IA_ERROR }
1657 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ff7R[3] = {
1658 /* 66 */ { 0, BX_IA_MASKMOVDQU_VdqUdq },
1659 /* F2 */ { 0, BX_IA_ERROR },
1660 /* F3 */ { 0, BX_IA_ERROR }
1663 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ff8[3] = {
1664 /* 66 */ { 0, BX_IA_PSUBB_VdqWdq },
1665 /* F2 */ { 0, BX_IA_ERROR },
1666 /* F3 */ { 0, BX_IA_ERROR }
1669 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ff9[3] = {
1670 /* 66 */ { 0, BX_IA_PSUBW_VdqWdq },
1671 /* F2 */ { 0, BX_IA_ERROR },
1672 /* F3 */ { 0, BX_IA_ERROR }
1675 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ffa[3] = {
1676 /* 66 */ { 0, BX_IA_PSUBD_VdqWdq },
1677 /* F2 */ { 0, BX_IA_ERROR },
1678 /* F3 */ { 0, BX_IA_ERROR }
1681 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ffb[3] = {
1682 /* 66 */ { 0, BX_IA_PSUBQ_VdqWdq },
1683 /* F2 */ { 0, BX_IA_ERROR },
1684 /* F3 */ { 0, BX_IA_ERROR }
1687 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ffc[3] = {
1688 /* 66 */ { 0, BX_IA_PADDB_VdqWdq },
1689 /* F2 */ { 0, BX_IA_ERROR },
1690 /* F3 */ { 0, BX_IA_ERROR }
1693 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ffd[3] = {
1694 /* 66 */ { 0, BX_IA_PADDW_VdqWdq },
1695 /* F2 */ { 0, BX_IA_ERROR },
1696 /* F3 */ { 0, BX_IA_ERROR }
1699 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0ffe[3] = {
1700 /* 66 */ { 0, BX_IA_PADDD_VdqWdq },
1701 /* F2 */ { 0, BX_IA_ERROR },
1702 /* F3 */ { 0, BX_IA_ERROR }
1705 static const BxOpcodeInfo_t BxOpcodeGroupSSE_G1202[3] = {
1706 /* 66 */ { 0, BX_IA_PSRLW_UdqIb },
1707 /* F2 */ { 0, BX_IA_ERROR },
1708 /* F3 */ { 0, BX_IA_ERROR }
1711 static const BxOpcodeInfo_t BxOpcodeGroupSSE_G1204[3] = {
1712 /* 66 */ { 0, BX_IA_PSRAW_UdqIb },
1713 /* F2 */ { 0, BX_IA_ERROR },
1714 /* F3 */ { 0, BX_IA_ERROR }
1717 static const BxOpcodeInfo_t BxOpcodeGroupSSE_G1206[3] = {
1718 /* 66 */ { 0, BX_IA_PSLLW_UdqIb },
1719 /* F2 */ { 0, BX_IA_ERROR },
1720 /* F3 */ { 0, BX_IA_ERROR }
1723 static const BxOpcodeInfo_t BxOpcodeGroupSSE_G1302[3] = {
1724 /* 66 */ { 0, BX_IA_PSRLD_UdqIb },
1725 /* F2 */ { 0, BX_IA_ERROR },
1726 /* F3 */ { 0, BX_IA_ERROR }
1729 static const BxOpcodeInfo_t BxOpcodeGroupSSE_G1304[3] = {
1730 /* 66 */ { 0, BX_IA_PSRAD_UdqIb },
1731 /* F2 */ { 0, BX_IA_ERROR },
1732 /* F3 */ { 0, BX_IA_ERROR }
1735 static const BxOpcodeInfo_t BxOpcodeGroupSSE_G1306[3] = {
1736 /* 66 */ { 0, BX_IA_PSLLD_UdqIb },
1737 /* F2 */ { 0, BX_IA_ERROR },
1738 /* F3 */ { 0, BX_IA_ERROR }
1741 static const BxOpcodeInfo_t BxOpcodeGroupSSE_G1402[3] = {
1742 /* 66 */ { 0, BX_IA_PSRLQ_UdqIb },
1743 /* F2 */ { 0, BX_IA_ERROR },
1744 /* F3 */ { 0, BX_IA_ERROR }
1747 static const BxOpcodeInfo_t BxOpcodeGroupSSE_G1403[3] = {
1748 /* 66 */ { 0, BX_IA_PSRLDQ_UdqIb },
1749 /* F2 */ { 0, BX_IA_ERROR },
1750 /* F3 */ { 0, BX_IA_ERROR }
1753 static const BxOpcodeInfo_t BxOpcodeGroupSSE_G1406[3] = {
1754 /* 66 */ { 0, BX_IA_PSLLQ_UdqIb },
1755 /* F2 */ { 0, BX_IA_ERROR },
1756 /* F3 */ { 0, BX_IA_ERROR }
1759 static const BxOpcodeInfo_t BxOpcodeGroupSSE_G1407[3] = {
1760 /* 66 */ { 0, BX_IA_PSLLDQ_UdqIb },
1761 /* F2 */ { 0, BX_IA_ERROR },
1762 /* F3 */ { 0, BX_IA_ERROR }
1765 #if (BX_SUPPORT_SSE >= 4) || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0)
1767 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3800[3] = {
1768 /* 66 */ { 0, BX_IA_PSHUFB_VdqWdq },
1769 /* F2 */ { 0, BX_IA_ERROR },
1770 /* F3 */ { 0, BX_IA_ERROR }
1773 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3801[3] = {
1774 /* 66 */ { 0, BX_IA_PHADDW_VdqWdq },
1775 /* F2 */ { 0, BX_IA_ERROR },
1776 /* F3 */ { 0, BX_IA_ERROR }
1779 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3802[3] = {
1780 /* 66 */ { 0, BX_IA_PHADDD_VdqWdq },
1781 /* F2 */ { 0, BX_IA_ERROR },
1782 /* F3 */ { 0, BX_IA_ERROR }
1785 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3803[3] = {
1786 /* 66 */ { 0, BX_IA_PHADDSW_VdqWdq },
1787 /* F2 */ { 0, BX_IA_ERROR },
1788 /* F3 */ { 0, BX_IA_ERROR }
1791 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3804[3] = {
1792 /* 66 */ { 0, BX_IA_PMADDUBSW_VdqWdq },
1793 /* F2 */ { 0, BX_IA_ERROR },
1794 /* F3 */ { 0, BX_IA_ERROR }
1797 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3805[3] = {
1798 /* 66 */ { 0, BX_IA_PHSUBW_VdqWdq },
1799 /* F2 */ { 0, BX_IA_ERROR },
1800 /* F3 */ { 0, BX_IA_ERROR }
1803 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3806[3] = {
1804 /* 66 */ { 0, BX_IA_PHSUBD_VdqWdq },
1805 /* F2 */ { 0, BX_IA_ERROR },
1806 /* F3 */ { 0, BX_IA_ERROR }
1809 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3807[3] = {
1810 /* 66 */ { 0, BX_IA_PHSUBSW_VdqWdq },
1811 /* F2 */ { 0, BX_IA_ERROR },
1812 /* F3 */ { 0, BX_IA_ERROR }
1815 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3808[3] = {
1816 /* 66 */ { 0, BX_IA_PSIGNB_VdqWdq },
1817 /* F2 */ { 0, BX_IA_ERROR },
1818 /* F3 */ { 0, BX_IA_ERROR }
1821 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3809[3] = {
1822 /* 66 */ { 0, BX_IA_PSIGNW_VdqWdq },
1823 /* F2 */ { 0, BX_IA_ERROR },
1824 /* F3 */ { 0, BX_IA_ERROR }
1827 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f380a[3] = {
1828 /* 66 */ { 0, BX_IA_PSIGND_VdqWdq },
1829 /* F2 */ { 0, BX_IA_ERROR },
1830 /* F3 */ { 0, BX_IA_ERROR }
1833 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f380b[3] = {
1834 /* 66 */ { 0, BX_IA_PMULHRSW_VdqWdq },
1835 /* F2 */ { 0, BX_IA_ERROR },
1836 /* F3 */ { 0, BX_IA_ERROR }
1839 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3810[3] = {
1840 /* 66 */ { 0, BX_IA_PBLENDVB_VdqWdq },
1841 /* F2 */ { 0, BX_IA_ERROR },
1842 /* F3 */ { 0, BX_IA_ERROR }
1845 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3814[3] = {
1846 /* 66 */ { 0, BX_IA_BLENDVPS_VpsWps },
1847 /* F2 */ { 0, BX_IA_ERROR },
1848 /* F3 */ { 0, BX_IA_ERROR }
1851 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3815[3] = {
1852 /* 66 */ { 0, BX_IA_BLENDVPD_VpdWpd },
1853 /* F2 */ { 0, BX_IA_ERROR },
1854 /* F3 */ { 0, BX_IA_ERROR }
1857 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3817[3] = {
1858 /* 66 */ { 0, BX_IA_PTEST_VdqWdq },
1859 /* F2 */ { 0, BX_IA_ERROR },
1860 /* F3 */ { 0, BX_IA_ERROR }
1863 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f381c[3] = {
1864 /* 66 */ { 0, BX_IA_PABSB_VdqWdq },
1865 /* F2 */ { 0, BX_IA_ERROR },
1866 /* F3 */ { 0, BX_IA_ERROR }
1869 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f381d[3] = {
1870 /* 66 */ { 0, BX_IA_PABSW_VdqWdq },
1871 /* F2 */ { 0, BX_IA_ERROR },
1872 /* F3 */ { 0, BX_IA_ERROR }
1875 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f381e[3] = {
1876 /* 66 */ { 0, BX_IA_PABSD_VdqWdq },
1877 /* F2 */ { 0, BX_IA_ERROR },
1878 /* F3 */ { 0, BX_IA_ERROR }
1881 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3820[3] = {
1882 /* 66 */ { 0, BX_IA_PMOVSXBW_VdqWq },
1883 /* F2 */ { 0, BX_IA_ERROR },
1884 /* F3 */ { 0, BX_IA_ERROR }
1887 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3821[3] = {
1888 /* 66 */ { 0, BX_IA_PMOVSXBD_VdqWd },
1889 /* F2 */ { 0, BX_IA_ERROR },
1890 /* F3 */ { 0, BX_IA_ERROR }
1893 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3822[3] = {
1894 /* 66 */ { 0, BX_IA_PMOVSXBQ_VdqWw },
1895 /* F2 */ { 0, BX_IA_ERROR },
1896 /* F3 */ { 0, BX_IA_ERROR }
1899 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3823[3] = {
1900 /* 66 */ { 0, BX_IA_PMOVSXWD_VdqWq },
1901 /* F2 */ { 0, BX_IA_ERROR },
1902 /* F3 */ { 0, BX_IA_ERROR }
1905 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3824[3] = {
1906 /* 66 */ { 0, BX_IA_PMOVSXWQ_VdqWd },
1907 /* F2 */ { 0, BX_IA_ERROR },
1908 /* F3 */ { 0, BX_IA_ERROR }
1911 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3825[3] = {
1912 /* 66 */ { 0, BX_IA_PMOVSXDQ_VdqWq },
1913 /* F2 */ { 0, BX_IA_ERROR },
1914 /* F3 */ { 0, BX_IA_ERROR }
1917 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3828[3] = {
1918 /* 66 */ { 0, BX_IA_PMULDQ_VdqWdq },
1919 /* F2 */ { 0, BX_IA_ERROR },
1920 /* F3 */ { 0, BX_IA_ERROR }
1923 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3829[3] = {
1924 /* 66 */ { 0, BX_IA_PCMPEQQ_VdqWdq },
1925 /* F2 */ { 0, BX_IA_ERROR },
1926 /* F3 */ { 0, BX_IA_ERROR }
1929 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f382a[3] = {
1930 /* 66 */ { 0, BX_IA_MOVNTDQA_VdqMdq },
1931 /* F2 */ { 0, BX_IA_ERROR },
1932 /* F3 */ { 0, BX_IA_ERROR }
1935 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f382b[3] = {
1936 /* 66 */ { 0, BX_IA_PACKUSDW_VdqWdq },
1937 /* F2 */ { 0, BX_IA_ERROR },
1938 /* F3 */ { 0, BX_IA_ERROR }
1941 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3830[3] = {
1942 /* 66 */ { 0, BX_IA_PMOVZXBW_VdqWq },
1943 /* F2 */ { 0, BX_IA_ERROR },
1944 /* F3 */ { 0, BX_IA_ERROR }
1947 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3831[3] = {
1948 /* 66 */ { 0, BX_IA_PMOVZXBD_VdqWd },
1949 /* F2 */ { 0, BX_IA_ERROR },
1950 /* F3 */ { 0, BX_IA_ERROR }
1953 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3832[3] = {
1954 /* 66 */ { 0, BX_IA_PMOVZXBQ_VdqWw },
1955 /* F2 */ { 0, BX_IA_ERROR },
1956 /* F3 */ { 0, BX_IA_ERROR }
1959 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3833[3] = {
1960 /* 66 */ { 0, BX_IA_PMOVZXWD_VdqWq },
1961 /* F2 */ { 0, BX_IA_ERROR },
1962 /* F3 */ { 0, BX_IA_ERROR }
1965 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3834[3] = {
1966 /* 66 */ { 0, BX_IA_PMOVZXWQ_VdqWd },
1967 /* F2 */ { 0, BX_IA_ERROR },
1968 /* F3 */ { 0, BX_IA_ERROR }
1971 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3835[3] = {
1972 /* 66 */ { 0, BX_IA_PMOVZXDQ_VdqWq },
1973 /* F2 */ { 0, BX_IA_ERROR },
1974 /* F3 */ { 0, BX_IA_ERROR }
1977 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3837[3] = {
1978 /* 66 */ { 0, BX_IA_PCMPGTQ_VdqWdq },
1979 /* F2 */ { 0, BX_IA_ERROR },
1980 /* F3 */ { 0, BX_IA_ERROR }
1983 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3838[3] = {
1984 /* 66 */ { 0, BX_IA_PMINSB_VdqWdq },
1985 /* F2 */ { 0, BX_IA_ERROR },
1986 /* F3 */ { 0, BX_IA_ERROR }
1989 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3839[3] = {
1990 /* 66 */ { 0, BX_IA_PMINSD_VdqWdq },
1991 /* F2 */ { 0, BX_IA_ERROR },
1992 /* F3 */ { 0, BX_IA_ERROR }
1995 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f383a[3] = {
1996 /* 66 */ { 0, BX_IA_PMINUW_VdqWdq },
1997 /* F2 */ { 0, BX_IA_ERROR },
1998 /* F3 */ { 0, BX_IA_ERROR }
2001 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f383b[3] = {
2002 /* 66 */ { 0, BX_IA_PMINUD_VdqWdq },
2003 /* F2 */ { 0, BX_IA_ERROR },
2004 /* F3 */ { 0, BX_IA_ERROR }
2007 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f383c[3] = {
2008 /* 66 */ { 0, BX_IA_PMAXSB_VdqWdq },
2009 /* F2 */ { 0, BX_IA_ERROR },
2010 /* F3 */ { 0, BX_IA_ERROR }
2013 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f383d[3] = {
2014 /* 66 */ { 0, BX_IA_PMAXSD_VdqWdq },
2015 /* F2 */ { 0, BX_IA_ERROR },
2016 /* F3 */ { 0, BX_IA_ERROR }
2019 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f383e[3] = {
2020 /* 66 */ { 0, BX_IA_PMAXUW_VdqWdq },
2021 /* F2 */ { 0, BX_IA_ERROR },
2022 /* F3 */ { 0, BX_IA_ERROR }
2025 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f383f[3] = {
2026 /* 66 */ { 0, BX_IA_PMAXUD_VdqWdq },
2027 /* F2 */ { 0, BX_IA_ERROR },
2028 /* F3 */ { 0, BX_IA_ERROR }
2031 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3840[3] = {
2032 /* 66 */ { 0, BX_IA_PMULLD_VdqWdq },
2033 /* F2 */ { 0, BX_IA_ERROR },
2034 /* F3 */ { 0, BX_IA_ERROR }
2037 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3841[3] = {
2038 /* 66 */ { 0, BX_IA_PHMINPOSUW_VdqWdq },
2039 /* F2 */ { 0, BX_IA_ERROR },
2040 /* F3 */ { 0, BX_IA_ERROR }
2043 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38db[3] = {
2044 /* 66 */ { 0, BX_IA_AESIMC_VdqWdq }, // AES
2045 /* F2 */ { 0, BX_IA_ERROR },
2046 /* F3 */ { 0, BX_IA_ERROR }
2049 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38dc[3] = {
2050 /* 66 */ { 0, BX_IA_AESENC_VdqWdq }, // AES
2051 /* F2 */ { 0, BX_IA_ERROR },
2052 /* F3 */ { 0, BX_IA_ERROR }
2055 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38dd[3] = {
2056 /* 66 */ { 0, BX_IA_AESENCLAST_VdqWdq }, // AES
2057 /* F2 */ { 0, BX_IA_ERROR },
2058 /* F3 */ { 0, BX_IA_ERROR }
2061 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38de[3] = {
2062 /* 66 */ { 0, BX_IA_AESDEC_VdqWdq }, // AES
2063 /* F2 */ { 0, BX_IA_ERROR },
2064 /* F3 */ { 0, BX_IA_ERROR }
2067 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38df[3] = {
2068 /* 66 */ { 0, BX_IA_AESDECLAST_VdqWdq }, // AES
2069 /* F2 */ { 0, BX_IA_ERROR },
2070 /* F3 */ { 0, BX_IA_ERROR }
2073 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38f0[3] = {
2074 /* 66 */ { 0, BX_IA_ERROR },
2075 /* F2 */ { 0, BX_IA_CRC32_GdEb },
2076 /* F3 */ { 0, BX_IA_ERROR }
2079 static const BxOpcodeInfo_t BxOpcodeGroupOsize0f38f0[BX_SUPPORT_X86_64 + 2] = {
2080 /* 16 */ { BxPrefixSSE, BX_IA_MOVBE_GwEw, BxOpcodeGroupSSE_0f38f0 },
2081 /* 32 */ { BxPrefixSSE, BX_IA_MOVBE_GdEd, BxOpcodeGroupSSE_0f38f0 },
2082 #if BX_SUPPORT_X86_64
2083 /* 64 */ { BxPrefixSSE, BX_IA_MOVBE_GqEq, BxOpcodeGroupSSE_0f38f0 },
2084 #endif
2087 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38f1w[3] = {
2088 /* 66 */ { 0, BX_IA_ERROR },
2089 /* F2 */ { 0, BX_IA_CRC32_GdEw },
2090 /* F3 */ { 0, BX_IA_ERROR }
2093 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38f1d[3] = {
2094 /* 66 */ { 0, BX_IA_ERROR },
2095 /* F2 */ { 0, BX_IA_CRC32_GdEd },
2096 /* F3 */ { 0, BX_IA_ERROR }
2099 #if BX_SUPPORT_X86_64
2100 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f38f1q[3] = {
2101 /* 66 */ { 0, BX_IA_ERROR },
2102 /* F2 */ { 0, BX_IA_CRC32_GdEq },
2103 /* F3 */ { 0, BX_IA_ERROR }
2105 #endif
2107 static const BxOpcodeInfo_t BxOpcodeGroupOsize0f38f1[BX_SUPPORT_X86_64 + 2] = {
2108 /* 16 */ { BxPrefixSSE, BX_IA_MOVBE_EwGw, BxOpcodeGroupSSE_0f38f1w },
2109 /* 32 */ { BxPrefixSSE, BX_IA_MOVBE_EdGd, BxOpcodeGroupSSE_0f38f1d },
2110 #if BX_SUPPORT_X86_64
2111 /* 64 */ { BxPrefixSSE, BX_IA_MOVBE_EqGq, BxOpcodeGroupSSE_0f38f1q },
2112 #endif
2115 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a08[3] = {
2116 /* 66 */ { 0, BX_IA_ROUNDPS_VpsWpsIb },
2117 /* F2 */ { 0, BX_IA_ERROR },
2118 /* F3 */ { 0, BX_IA_ERROR }
2121 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a09[3] = {
2122 /* 66 */ { 0, BX_IA_ROUNDPD_VpdWpdIb },
2123 /* F2 */ { 0, BX_IA_ERROR },
2124 /* F3 */ { 0, BX_IA_ERROR }
2127 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a0a[3] = {
2128 /* 66 */ { 0, BX_IA_ROUNDSS_VssWssIb },
2129 /* F2 */ { 0, BX_IA_ERROR },
2130 /* F3 */ { 0, BX_IA_ERROR }
2133 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a0b[3] = {
2134 /* 66 */ { 0, BX_IA_ROUNDSD_VsdWsdIb },
2135 /* F2 */ { 0, BX_IA_ERROR },
2136 /* F3 */ { 0, BX_IA_ERROR }
2139 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a0c[3] = {
2140 /* 66 */ { 0, BX_IA_BLENDPS_VpsWpsIb },
2141 /* F2 */ { 0, BX_IA_ERROR },
2142 /* F3 */ { 0, BX_IA_ERROR }
2145 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a0d[3] = {
2146 /* 66 */ { 0, BX_IA_BLENDPD_VpdWpdIb },
2147 /* F2 */ { 0, BX_IA_ERROR },
2148 /* F3 */ { 0, BX_IA_ERROR }
2151 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a0e[3] = {
2152 /* 66 */ { 0, BX_IA_PBLENDW_VdqWdqIb },
2153 /* F2 */ { 0, BX_IA_ERROR },
2154 /* F3 */ { 0, BX_IA_ERROR }
2157 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a0f[3] = {
2158 /* 66 */ { 0, BX_IA_PALIGNR_VdqWdqIb },
2159 /* F2 */ { 0, BX_IA_ERROR },
2160 /* F3 */ { 0, BX_IA_ERROR }
2163 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a14[3] = {
2164 /* 66 */ { 0, BX_IA_PEXTRB_HbdUdqIb },
2165 /* F2 */ { 0, BX_IA_ERROR },
2166 /* F3 */ { 0, BX_IA_ERROR }
2169 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a15[3] = {
2170 /* 66 */ { 0, BX_IA_PEXTRW_HwdUdqIb },
2171 /* F2 */ { 0, BX_IA_ERROR },
2172 /* F3 */ { 0, BX_IA_ERROR }
2175 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a16[3] = {
2176 /* 66 */ { 0, BX_IA_PEXTRD_HdUdqIb },
2177 /* F2 */ { 0, BX_IA_ERROR },
2178 /* F3 */ { 0, BX_IA_ERROR }
2181 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a17[3] = {
2182 /* 66 */ { 0, BX_IA_EXTRACTPS_HdUpsIb },
2183 /* F2 */ { 0, BX_IA_ERROR },
2184 /* F3 */ { 0, BX_IA_ERROR }
2187 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a20[3] = {
2188 /* 66 */ { 0, BX_IA_PINSRB_VdqEbIb },
2189 /* F2 */ { 0, BX_IA_ERROR },
2190 /* F3 */ { 0, BX_IA_ERROR }
2193 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a21[3] = {
2194 /* 66 */ { 0, BX_IA_INSERTPS_VpsWssIb },
2195 /* F2 */ { 0, BX_IA_ERROR },
2196 /* F3 */ { 0, BX_IA_ERROR }
2199 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a22[3] = {
2200 /* 66 */ { 0, BX_IA_PINSRD_VdqEdIb },
2201 /* F2 */ { 0, BX_IA_ERROR },
2202 /* F3 */ { 0, BX_IA_ERROR }
2205 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a40[3] = {
2206 /* 66 */ { 0, BX_IA_DPPS_VpsWpsIb },
2207 /* F2 */ { 0, BX_IA_ERROR },
2208 /* F3 */ { 0, BX_IA_ERROR }
2211 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a41[3] = {
2212 /* 66 */ { 0, BX_IA_DPPD_VpdWpdIb },
2213 /* F2 */ { 0, BX_IA_ERROR },
2214 /* F3 */ { 0, BX_IA_ERROR }
2217 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a42[3] = {
2218 /* 66 */ { 0, BX_IA_MPSADBW_VdqWdqIb },
2219 /* F2 */ { 0, BX_IA_ERROR },
2220 /* F3 */ { 0, BX_IA_ERROR }
2223 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a60[3] = {
2224 /* 66 */ { 0, BX_IA_PCMPESTRM_VdqWdqIb },
2225 /* F2 */ { 0, BX_IA_ERROR },
2226 /* F3 */ { 0, BX_IA_ERROR }
2229 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a61[3] = {
2230 /* 66 */ { 0, BX_IA_PCMPESTRI_VdqWdqIb },
2231 /* F2 */ { 0, BX_IA_ERROR },
2232 /* F3 */ { 0, BX_IA_ERROR }
2235 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a62[3] = {
2236 /* 66 */ { 0, BX_IA_PCMPISTRM_VdqWdqIb },
2237 /* F2 */ { 0, BX_IA_ERROR },
2238 /* F3 */ { 0, BX_IA_ERROR }
2241 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3a63[3] = {
2242 /* 66 */ { 0, BX_IA_PCMPISTRI_VdqWdqIb },
2243 /* F2 */ { 0, BX_IA_ERROR },
2244 /* F3 */ { 0, BX_IA_ERROR }
2247 static const BxOpcodeInfo_t BxOpcodeGroupSSE_0f3adf[3] = {
2248 /* 66 */ { 0, BX_IA_AESKEYGENASSIST_VdqWdqIb },
2249 /* F2 */ { 0, BX_IA_ERROR },
2250 /* F3 */ { 0, BX_IA_ERROR }
2253 /* ************************************************************************ */
2254 /* 3-byte opcode table (Table A-4, 0F 38) */
2256 static const BxOpcodeInfo_t BxOpcode3ByteTable0f38[256] = {
2257 /* 00 */ { BxPrefixSSE, BX_IA_PSHUFB_PqQq, BxOpcodeGroupSSE_0f3800 },
2258 /* 01 */ { BxPrefixSSE, BX_IA_PHADDW_PqQq, BxOpcodeGroupSSE_0f3801 },
2259 /* 02 */ { BxPrefixSSE, BX_IA_PHADDD_PqQq, BxOpcodeGroupSSE_0f3802 },
2260 /* 03 */ { BxPrefixSSE, BX_IA_PHADDSW_PqQq, BxOpcodeGroupSSE_0f3803 },
2261 /* 04 */ { BxPrefixSSE, BX_IA_PMADDUBSW_PqQq, BxOpcodeGroupSSE_0f3804 },
2262 /* 05 */ { BxPrefixSSE, BX_IA_PHSUBW_PqQq, BxOpcodeGroupSSE_0f3805 },
2263 /* 06 */ { BxPrefixSSE, BX_IA_PHSUBD_PqQq, BxOpcodeGroupSSE_0f3806 },
2264 /* 07 */ { BxPrefixSSE, BX_IA_PHSUBSW_PqQq, BxOpcodeGroupSSE_0f3807 },
2265 /* 08 */ { BxPrefixSSE, BX_IA_PSIGNB_PqQq, BxOpcodeGroupSSE_0f3808 },
2266 /* 09 */ { BxPrefixSSE, BX_IA_PSIGNW_PqQq, BxOpcodeGroupSSE_0f3809 },
2267 /* 0A */ { BxPrefixSSE, BX_IA_PSIGND_PqQq, BxOpcodeGroupSSE_0f380a },
2268 /* 0B */ { BxPrefixSSE, BX_IA_PMULHRSW_PqQq, BxOpcodeGroupSSE_0f380b },
2269 /* 0C */ { 0, BX_IA_ERROR },
2270 /* 0D */ { 0, BX_IA_ERROR },
2271 /* 0E */ { 0, BX_IA_ERROR },
2272 /* 0F */ { 0, BX_IA_ERROR },
2273 /* 10 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3810 },
2274 /* 11 */ { 0, BX_IA_ERROR },
2275 /* 12 */ { 0, BX_IA_ERROR },
2276 /* 13 */ { 0, BX_IA_ERROR },
2277 /* 14 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3814 },
2278 /* 15 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3815 },
2279 /* 16 */ { 0, BX_IA_ERROR },
2280 /* 17 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3817 },
2281 /* 18 */ { 0, BX_IA_ERROR },
2282 /* 19 */ { 0, BX_IA_ERROR },
2283 /* 1A */ { 0, BX_IA_ERROR },
2284 /* 1B */ { 0, BX_IA_ERROR },
2285 /* 1C */ { BxPrefixSSE, BX_IA_PABSB_PqQq, BxOpcodeGroupSSE_0f381c },
2286 /* 1D */ { BxPrefixSSE, BX_IA_PABSW_PqQq, BxOpcodeGroupSSE_0f381d },
2287 /* 1E */ { BxPrefixSSE, BX_IA_PABSD_PqQq, BxOpcodeGroupSSE_0f381e },
2288 /* 1F */ { 0, BX_IA_ERROR },
2289 /* 20 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3820 },
2290 /* 21 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3821 },
2291 /* 22 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3822 },
2292 /* 23 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3823 },
2293 /* 24 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3824 },
2294 /* 25 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3825 },
2295 /* 26 */ { 0, BX_IA_ERROR },
2296 /* 27 */ { 0, BX_IA_ERROR },
2297 /* 28 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3828 },
2298 /* 29 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3829 },
2299 /* 2A */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f382a },
2300 /* 2B */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f382b },
2301 /* 2C */ { 0, BX_IA_ERROR },
2302 /* 2D */ { 0, BX_IA_ERROR },
2303 /* 2E */ { 0, BX_IA_ERROR },
2304 /* 2F */ { 0, BX_IA_ERROR },
2305 /* 30 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3830 },
2306 /* 31 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3831 },
2307 /* 32 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3832 },
2308 /* 33 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3833 },
2309 /* 34 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3834 },
2310 /* 35 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3835 },
2311 /* 36 */ { 0, BX_IA_ERROR },
2312 /* 37 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3837 },
2313 /* 38 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3838 },
2314 /* 39 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3839 },
2315 /* 3A */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383a },
2316 /* 3B */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383b },
2317 /* 3C */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383c },
2318 /* 3D */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383d },
2319 /* 3E */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383e },
2320 /* 3F */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f383f },
2321 /* 40 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3840 },
2322 /* 41 */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3841 },
2323 /* 42 */ { 0, BX_IA_ERROR },
2324 /* 43 */ { 0, BX_IA_ERROR },
2325 /* 44 */ { 0, BX_IA_ERROR },
2326 /* 45 */ { 0, BX_IA_ERROR },
2327 /* 46 */ { 0, BX_IA_ERROR },
2328 /* 47 */ { 0, BX_IA_ERROR },
2329 /* 48 */ { 0, BX_IA_ERROR },
2330 /* 49 */ { 0, BX_IA_ERROR },
2331 /* 4A */ { 0, BX_IA_ERROR },
2332 /* 4B */ { 0, BX_IA_ERROR },
2333 /* 4C */ { 0, BX_IA_ERROR },
2334 /* 4D */ { 0, BX_IA_ERROR },
2335 /* 4E */ { 0, BX_IA_ERROR },
2336 /* 4F */ { 0, BX_IA_ERROR },
2337 /* 50 */ { 0, BX_IA_ERROR },
2338 /* 51 */ { 0, BX_IA_ERROR },
2339 /* 52 */ { 0, BX_IA_ERROR },
2340 /* 53 */ { 0, BX_IA_ERROR },
2341 /* 54 */ { 0, BX_IA_ERROR },
2342 /* 55 */ { 0, BX_IA_ERROR },
2343 /* 56 */ { 0, BX_IA_ERROR },
2344 /* 57 */ { 0, BX_IA_ERROR },
2345 /* 58 */ { 0, BX_IA_ERROR },
2346 /* 59 */ { 0, BX_IA_ERROR },
2347 /* 5A */ { 0, BX_IA_ERROR },
2348 /* 5B */ { 0, BX_IA_ERROR },
2349 /* 5C */ { 0, BX_IA_ERROR },
2350 /* 5D */ { 0, BX_IA_ERROR },
2351 /* 5E */ { 0, BX_IA_ERROR },
2352 /* 5F */ { 0, BX_IA_ERROR },
2353 /* 60 */ { 0, BX_IA_ERROR },
2354 /* 61 */ { 0, BX_IA_ERROR },
2355 /* 62 */ { 0, BX_IA_ERROR },
2356 /* 63 */ { 0, BX_IA_ERROR },
2357 /* 64 */ { 0, BX_IA_ERROR },
2358 /* 65 */ { 0, BX_IA_ERROR },
2359 /* 66 */ { 0, BX_IA_ERROR },
2360 /* 67 */ { 0, BX_IA_ERROR },
2361 /* 68 */ { 0, BX_IA_ERROR },
2362 /* 69 */ { 0, BX_IA_ERROR },
2363 /* 6A */ { 0, BX_IA_ERROR },
2364 /* 6B */ { 0, BX_IA_ERROR },
2365 /* 6C */ { 0, BX_IA_ERROR },
2366 /* 6D */ { 0, BX_IA_ERROR },
2367 /* 6E */ { 0, BX_IA_ERROR },
2368 /* 6F */ { 0, BX_IA_ERROR },
2369 /* 70 */ { 0, BX_IA_ERROR },
2370 /* 71 */ { 0, BX_IA_ERROR },
2371 /* 72 */ { 0, BX_IA_ERROR },
2372 /* 73 */ { 0, BX_IA_ERROR },
2373 /* 74 */ { 0, BX_IA_ERROR },
2374 /* 75 */ { 0, BX_IA_ERROR },
2375 /* 76 */ { 0, BX_IA_ERROR },
2376 /* 77 */ { 0, BX_IA_ERROR },
2377 /* 78 */ { 0, BX_IA_ERROR },
2378 /* 79 */ { 0, BX_IA_ERROR },
2379 /* 7A */ { 0, BX_IA_ERROR },
2380 /* 7B */ { 0, BX_IA_ERROR },
2381 /* 7C */ { 0, BX_IA_ERROR },
2382 /* 7D */ { 0, BX_IA_ERROR },
2383 /* 7E */ { 0, BX_IA_ERROR },
2384 /* 7F */ { 0, BX_IA_ERROR },
2385 /* 80 */ { 0, BX_IA_ERROR },
2386 /* 81 */ { 0, BX_IA_ERROR },
2387 /* 82 */ { 0, BX_IA_ERROR },
2388 /* 83 */ { 0, BX_IA_ERROR },
2389 /* 84 */ { 0, BX_IA_ERROR },
2390 /* 85 */ { 0, BX_IA_ERROR },
2391 /* 86 */ { 0, BX_IA_ERROR },
2392 /* 87 */ { 0, BX_IA_ERROR },
2393 /* 88 */ { 0, BX_IA_ERROR },
2394 /* 89 */ { 0, BX_IA_ERROR },
2395 /* 8A */ { 0, BX_IA_ERROR },
2396 /* 8B */ { 0, BX_IA_ERROR },
2397 /* 8C */ { 0, BX_IA_ERROR },
2398 /* 8D */ { 0, BX_IA_ERROR },
2399 /* 8E */ { 0, BX_IA_ERROR },
2400 /* 8F */ { 0, BX_IA_ERROR },
2401 /* 90 */ { 0, BX_IA_ERROR },
2402 /* 91 */ { 0, BX_IA_ERROR },
2403 /* 92 */ { 0, BX_IA_ERROR },
2404 /* 93 */ { 0, BX_IA_ERROR },
2405 /* 94 */ { 0, BX_IA_ERROR },
2406 /* 95 */ { 0, BX_IA_ERROR },
2407 /* 96 */ { 0, BX_IA_ERROR },
2408 /* 97 */ { 0, BX_IA_ERROR },
2409 /* 98 */ { 0, BX_IA_ERROR },
2410 /* 99 */ { 0, BX_IA_ERROR },
2411 /* 9A */ { 0, BX_IA_ERROR },
2412 /* 9B */ { 0, BX_IA_ERROR },
2413 /* 9C */ { 0, BX_IA_ERROR },
2414 /* 9D */ { 0, BX_IA_ERROR },
2415 /* 9E */ { 0, BX_IA_ERROR },
2416 /* 9F */ { 0, BX_IA_ERROR },
2417 /* A0 */ { 0, BX_IA_ERROR },
2418 /* A1 */ { 0, BX_IA_ERROR },
2419 /* A2 */ { 0, BX_IA_ERROR },
2420 /* A3 */ { 0, BX_IA_ERROR },
2421 /* A4 */ { 0, BX_IA_ERROR },
2422 /* A5 */ { 0, BX_IA_ERROR },
2423 /* A6 */ { 0, BX_IA_ERROR },
2424 /* A7 */ { 0, BX_IA_ERROR },
2425 /* A8 */ { 0, BX_IA_ERROR },
2426 /* A9 */ { 0, BX_IA_ERROR },
2427 /* AA */ { 0, BX_IA_ERROR },
2428 /* AB */ { 0, BX_IA_ERROR },
2429 /* AC */ { 0, BX_IA_ERROR },
2430 /* AD */ { 0, BX_IA_ERROR },
2431 /* AE */ { 0, BX_IA_ERROR },
2432 /* AF */ { 0, BX_IA_ERROR },
2433 /* B0 */ { 0, BX_IA_ERROR },
2434 /* B1 */ { 0, BX_IA_ERROR },
2435 /* B2 */ { 0, BX_IA_ERROR },
2436 /* B3 */ { 0, BX_IA_ERROR },
2437 /* B4 */ { 0, BX_IA_ERROR },
2438 /* B5 */ { 0, BX_IA_ERROR },
2439 /* B6 */ { 0, BX_IA_ERROR },
2440 /* B7 */ { 0, BX_IA_ERROR },
2441 /* B8 */ { 0, BX_IA_ERROR },
2442 /* B9 */ { 0, BX_IA_ERROR },
2443 /* BA */ { 0, BX_IA_ERROR },
2444 /* BB */ { 0, BX_IA_ERROR },
2445 /* BC */ { 0, BX_IA_ERROR },
2446 /* BD */ { 0, BX_IA_ERROR },
2447 /* BE */ { 0, BX_IA_ERROR },
2448 /* BF */ { 0, BX_IA_ERROR },
2449 /* C0 */ { 0, BX_IA_ERROR },
2450 /* C1 */ { 0, BX_IA_ERROR },
2451 /* C2 */ { 0, BX_IA_ERROR },
2452 /* C3 */ { 0, BX_IA_ERROR },
2453 /* C4 */ { 0, BX_IA_ERROR },
2454 /* C5 */ { 0, BX_IA_ERROR },
2455 /* C6 */ { 0, BX_IA_ERROR },
2456 /* C7 */ { 0, BX_IA_ERROR },
2457 /* C8 */ { 0, BX_IA_ERROR },
2458 /* C9 */ { 0, BX_IA_ERROR },
2459 /* CA */ { 0, BX_IA_ERROR },
2460 /* CB */ { 0, BX_IA_ERROR },
2461 /* CC */ { 0, BX_IA_ERROR },
2462 /* CD */ { 0, BX_IA_ERROR },
2463 /* CE */ { 0, BX_IA_ERROR },
2464 /* CF */ { 0, BX_IA_ERROR },
2465 /* D0 */ { 0, BX_IA_ERROR },
2466 /* D1 */ { 0, BX_IA_ERROR },
2467 /* D2 */ { 0, BX_IA_ERROR },
2468 /* D3 */ { 0, BX_IA_ERROR },
2469 /* D4 */ { 0, BX_IA_ERROR },
2470 /* D5 */ { 0, BX_IA_ERROR },
2471 /* D6 */ { 0, BX_IA_ERROR },
2472 /* D7 */ { 0, BX_IA_ERROR },
2473 /* D8 */ { 0, BX_IA_ERROR },
2474 /* D9 */ { 0, BX_IA_ERROR },
2475 /* DA */ { 0, BX_IA_ERROR },
2476 /* DB */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38db },
2477 /* DC */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38dc },
2478 /* DD */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38dd },
2479 /* DE */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38de },
2480 /* DF */ { BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f38df },
2481 /* E0 */ { 0, BX_IA_ERROR },
2482 /* E1 */ { 0, BX_IA_ERROR },
2483 /* E2 */ { 0, BX_IA_ERROR },
2484 /* E3 */ { 0, BX_IA_ERROR },
2485 /* E4 */ { 0, BX_IA_ERROR },
2486 /* E5 */ { 0, BX_IA_ERROR },
2487 /* E6 */ { 0, BX_IA_ERROR },
2488 /* E7 */ { 0, BX_IA_ERROR },
2489 /* E8 */ { 0, BX_IA_ERROR },
2490 /* E9 */ { 0, BX_IA_ERROR },
2491 /* EA */ { 0, BX_IA_ERROR },
2492 /* EB */ { 0, BX_IA_ERROR },
2493 /* EC */ { 0, BX_IA_ERROR },
2494 /* ED */ { 0, BX_IA_ERROR },
2495 /* EE */ { 0, BX_IA_ERROR },
2496 /* EF */ { 0, BX_IA_ERROR },
2497 /* F0 */ { BxOSizeGrp, BX_IA_ERROR, BxOpcodeGroupOsize0f38f0 },
2498 /* F1 */ { BxOSizeGrp, BX_IA_ERROR, BxOpcodeGroupOsize0f38f1 },
2499 /* F2 */ { 0, BX_IA_ERROR },
2500 /* F3 */ { 0, BX_IA_ERROR },
2501 /* F4 */ { 0, BX_IA_ERROR },
2502 /* F5 */ { 0, BX_IA_ERROR },
2503 /* F6 */ { 0, BX_IA_ERROR },
2504 /* F7 */ { 0, BX_IA_ERROR },
2505 /* F8 */ { 0, BX_IA_ERROR },
2506 /* F9 */ { 0, BX_IA_ERROR },
2507 /* FA */ { 0, BX_IA_ERROR },
2508 /* FB */ { 0, BX_IA_ERROR },
2509 /* FC */ { 0, BX_IA_ERROR },
2510 /* FD */ { 0, BX_IA_ERROR },
2511 /* FE */ { 0, BX_IA_ERROR },
2512 /* FF */ { 0, BX_IA_ERROR }
2515 /* ************************************************************************ */
2516 /* 3-byte opcode table (Table A-5, 0F 3A) */
2518 static const BxOpcodeInfo_t BxOpcode3ByteTable0f3a[256] = {
2519 /* 00 */ { 0, BX_IA_ERROR },
2520 /* 01 */ { 0, BX_IA_ERROR },
2521 /* 02 */ { 0, BX_IA_ERROR },
2522 /* 03 */ { 0, BX_IA_ERROR },
2523 /* 04 */ { 0, BX_IA_ERROR },
2524 /* 05 */ { 0, BX_IA_ERROR },
2525 /* 06 */ { 0, BX_IA_ERROR },
2526 /* 07 */ { 0, BX_IA_ERROR },
2527 /* 08 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a08 },
2528 /* 09 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a09 },
2529 /* 0A */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0a },
2530 /* 0B */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0b },
2531 /* 0C */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0c },
2532 /* 0D */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0d },
2533 /* 0E */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a0e },
2534 /* 0F */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_PALIGNR_PqQqIb, BxOpcodeGroupSSE_0f3a0f },
2535 /* 10 */ { 0, BX_IA_ERROR },
2536 /* 11 */ { 0, BX_IA_ERROR },
2537 /* 12 */ { 0, BX_IA_ERROR },
2538 /* 13 */ { 0, BX_IA_ERROR },
2539 /* 14 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a14 },
2540 /* 15 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a15 },
2541 /* 16 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a16 },
2542 /* 17 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a17 },
2543 /* 18 */ { 0, BX_IA_ERROR },
2544 /* 19 */ { 0, BX_IA_ERROR },
2545 /* 1A */ { 0, BX_IA_ERROR },
2546 /* 1B */ { 0, BX_IA_ERROR },
2547 /* 1C */ { 0, BX_IA_ERROR },
2548 /* 1D */ { 0, BX_IA_ERROR },
2549 /* 1E */ { 0, BX_IA_ERROR },
2550 /* 1F */ { 0, BX_IA_ERROR },
2551 /* 20 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a20 },
2552 /* 21 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a21 },
2553 /* 22 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a22 },
2554 /* 23 */ { 0, BX_IA_ERROR },
2555 /* 24 */ { 0, BX_IA_ERROR },
2556 /* 25 */ { 0, BX_IA_ERROR },
2557 /* 26 */ { 0, BX_IA_ERROR },
2558 /* 27 */ { 0, BX_IA_ERROR },
2559 /* 28 */ { 0, BX_IA_ERROR },
2560 /* 29 */ { 0, BX_IA_ERROR },
2561 /* 2A */ { 0, BX_IA_ERROR },
2562 /* 2B */ { 0, BX_IA_ERROR },
2563 /* 2C */ { 0, BX_IA_ERROR },
2564 /* 2D */ { 0, BX_IA_ERROR },
2565 /* 2E */ { 0, BX_IA_ERROR },
2566 /* 2F */ { 0, BX_IA_ERROR },
2567 /* 30 */ { 0, BX_IA_ERROR },
2568 /* 31 */ { 0, BX_IA_ERROR },
2569 /* 32 */ { 0, BX_IA_ERROR },
2570 /* 33 */ { 0, BX_IA_ERROR },
2571 /* 34 */ { 0, BX_IA_ERROR },
2572 /* 35 */ { 0, BX_IA_ERROR },
2573 /* 36 */ { 0, BX_IA_ERROR },
2574 /* 37 */ { 0, BX_IA_ERROR },
2575 /* 38 */ { 0, BX_IA_ERROR },
2576 /* 39 */ { 0, BX_IA_ERROR },
2577 /* 3A */ { 0, BX_IA_ERROR },
2578 /* 3B */ { 0, BX_IA_ERROR },
2579 /* 3C */ { 0, BX_IA_ERROR },
2580 /* 3D */ { 0, BX_IA_ERROR },
2581 /* 3E */ { 0, BX_IA_ERROR },
2582 /* 3F */ { 0, BX_IA_ERROR },
2583 /* 40 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a40 },
2584 /* 41 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a41 },
2585 /* 42 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a42 },
2586 /* 43 */ { 0, BX_IA_ERROR },
2587 /* 44 */ { 0, BX_IA_ERROR },
2588 /* 45 */ { 0, BX_IA_ERROR },
2589 /* 46 */ { 0, BX_IA_ERROR },
2590 /* 47 */ { 0, BX_IA_ERROR },
2591 /* 48 */ { 0, BX_IA_ERROR },
2592 /* 49 */ { 0, BX_IA_ERROR },
2593 /* 4A */ { 0, BX_IA_ERROR },
2594 /* 4B */ { 0, BX_IA_ERROR },
2595 /* 4C */ { 0, BX_IA_ERROR },
2596 /* 4D */ { 0, BX_IA_ERROR },
2597 /* 4E */ { 0, BX_IA_ERROR },
2598 /* 4F */ { 0, BX_IA_ERROR },
2599 /* 50 */ { 0, BX_IA_ERROR },
2600 /* 51 */ { 0, BX_IA_ERROR },
2601 /* 52 */ { 0, BX_IA_ERROR },
2602 /* 53 */ { 0, BX_IA_ERROR },
2603 /* 54 */ { 0, BX_IA_ERROR },
2604 /* 55 */ { 0, BX_IA_ERROR },
2605 /* 56 */ { 0, BX_IA_ERROR },
2606 /* 57 */ { 0, BX_IA_ERROR },
2607 /* 58 */ { 0, BX_IA_ERROR },
2608 /* 59 */ { 0, BX_IA_ERROR },
2609 /* 5A */ { 0, BX_IA_ERROR },
2610 /* 5B */ { 0, BX_IA_ERROR },
2611 /* 5C */ { 0, BX_IA_ERROR },
2612 /* 5D */ { 0, BX_IA_ERROR },
2613 /* 5E */ { 0, BX_IA_ERROR },
2614 /* 5F */ { 0, BX_IA_ERROR },
2615 /* 60 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a60 },
2616 /* 61 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a61 },
2617 /* 62 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a62 },
2618 /* 63 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3a63 },
2619 /* 64 */ { 0, BX_IA_ERROR },
2620 /* 65 */ { 0, BX_IA_ERROR },
2621 /* 66 */ { 0, BX_IA_ERROR },
2622 /* 67 */ { 0, BX_IA_ERROR },
2623 /* 68 */ { 0, BX_IA_ERROR },
2624 /* 69 */ { 0, BX_IA_ERROR },
2625 /* 6A */ { 0, BX_IA_ERROR },
2626 /* 6B */ { 0, BX_IA_ERROR },
2627 /* 6C */ { 0, BX_IA_ERROR },
2628 /* 6D */ { 0, BX_IA_ERROR },
2629 /* 6E */ { 0, BX_IA_ERROR },
2630 /* 6F */ { 0, BX_IA_ERROR },
2631 /* 70 */ { 0, BX_IA_ERROR },
2632 /* 71 */ { 0, BX_IA_ERROR },
2633 /* 72 */ { 0, BX_IA_ERROR },
2634 /* 73 */ { 0, BX_IA_ERROR },
2635 /* 74 */ { 0, BX_IA_ERROR },
2636 /* 75 */ { 0, BX_IA_ERROR },
2637 /* 76 */ { 0, BX_IA_ERROR },
2638 /* 77 */ { 0, BX_IA_ERROR },
2639 /* 78 */ { 0, BX_IA_ERROR },
2640 /* 79 */ { 0, BX_IA_ERROR },
2641 /* 7A */ { 0, BX_IA_ERROR },
2642 /* 7B */ { 0, BX_IA_ERROR },
2643 /* 7C */ { 0, BX_IA_ERROR },
2644 /* 7D */ { 0, BX_IA_ERROR },
2645 /* 7E */ { 0, BX_IA_ERROR },
2646 /* 7F */ { 0, BX_IA_ERROR },
2647 /* 80 */ { 0, BX_IA_ERROR },
2648 /* 81 */ { 0, BX_IA_ERROR },
2649 /* 82 */ { 0, BX_IA_ERROR },
2650 /* 83 */ { 0, BX_IA_ERROR },
2651 /* 84 */ { 0, BX_IA_ERROR },
2652 /* 85 */ { 0, BX_IA_ERROR },
2653 /* 86 */ { 0, BX_IA_ERROR },
2654 /* 87 */ { 0, BX_IA_ERROR },
2655 /* 88 */ { 0, BX_IA_ERROR },
2656 /* 89 */ { 0, BX_IA_ERROR },
2657 /* 8A */ { 0, BX_IA_ERROR },
2658 /* 8B */ { 0, BX_IA_ERROR },
2659 /* 8C */ { 0, BX_IA_ERROR },
2660 /* 8D */ { 0, BX_IA_ERROR },
2661 /* 8E */ { 0, BX_IA_ERROR },
2662 /* 8F */ { 0, BX_IA_ERROR },
2663 /* 90 */ { 0, BX_IA_ERROR },
2664 /* 91 */ { 0, BX_IA_ERROR },
2665 /* 92 */ { 0, BX_IA_ERROR },
2666 /* 93 */ { 0, BX_IA_ERROR },
2667 /* 94 */ { 0, BX_IA_ERROR },
2668 /* 95 */ { 0, BX_IA_ERROR },
2669 /* 96 */ { 0, BX_IA_ERROR },
2670 /* 97 */ { 0, BX_IA_ERROR },
2671 /* 98 */ { 0, BX_IA_ERROR },
2672 /* 99 */ { 0, BX_IA_ERROR },
2673 /* 9A */ { 0, BX_IA_ERROR },
2674 /* 9B */ { 0, BX_IA_ERROR },
2675 /* 9C */ { 0, BX_IA_ERROR },
2676 /* 9D */ { 0, BX_IA_ERROR },
2677 /* 9E */ { 0, BX_IA_ERROR },
2678 /* 9F */ { 0, BX_IA_ERROR },
2679 /* A0 */ { 0, BX_IA_ERROR },
2680 /* A1 */ { 0, BX_IA_ERROR },
2681 /* A2 */ { 0, BX_IA_ERROR },
2682 /* A3 */ { 0, BX_IA_ERROR },
2683 /* A4 */ { 0, BX_IA_ERROR },
2684 /* A5 */ { 0, BX_IA_ERROR },
2685 /* A6 */ { 0, BX_IA_ERROR },
2686 /* A7 */ { 0, BX_IA_ERROR },
2687 /* A8 */ { 0, BX_IA_ERROR },
2688 /* A9 */ { 0, BX_IA_ERROR },
2689 /* AA */ { 0, BX_IA_ERROR },
2690 /* AB */ { 0, BX_IA_ERROR },
2691 /* AC */ { 0, BX_IA_ERROR },
2692 /* AD */ { 0, BX_IA_ERROR },
2693 /* AE */ { 0, BX_IA_ERROR },
2694 /* AF */ { 0, BX_IA_ERROR },
2695 /* B0 */ { 0, BX_IA_ERROR },
2696 /* B1 */ { 0, BX_IA_ERROR },
2697 /* B2 */ { 0, BX_IA_ERROR },
2698 /* B3 */ { 0, BX_IA_ERROR },
2699 /* B4 */ { 0, BX_IA_ERROR },
2700 /* B5 */ { 0, BX_IA_ERROR },
2701 /* B6 */ { 0, BX_IA_ERROR },
2702 /* B7 */ { 0, BX_IA_ERROR },
2703 /* B8 */ { 0, BX_IA_ERROR },
2704 /* B9 */ { 0, BX_IA_ERROR },
2705 /* BA */ { 0, BX_IA_ERROR },
2706 /* BB */ { 0, BX_IA_ERROR },
2707 /* BC */ { 0, BX_IA_ERROR },
2708 /* BD */ { 0, BX_IA_ERROR },
2709 /* BE */ { 0, BX_IA_ERROR },
2710 /* BF */ { 0, BX_IA_ERROR },
2711 /* C0 */ { 0, BX_IA_ERROR },
2712 /* C1 */ { 0, BX_IA_ERROR },
2713 /* C2 */ { 0, BX_IA_ERROR },
2714 /* C3 */ { 0, BX_IA_ERROR },
2715 /* C4 */ { 0, BX_IA_ERROR },
2716 /* C5 */ { 0, BX_IA_ERROR },
2717 /* C6 */ { 0, BX_IA_ERROR },
2718 /* C7 */ { 0, BX_IA_ERROR },
2719 /* C8 */ { 0, BX_IA_ERROR },
2720 /* C9 */ { 0, BX_IA_ERROR },
2721 /* CA */ { 0, BX_IA_ERROR },
2722 /* CB */ { 0, BX_IA_ERROR },
2723 /* CC */ { 0, BX_IA_ERROR },
2724 /* CD */ { 0, BX_IA_ERROR },
2725 /* CE */ { 0, BX_IA_ERROR },
2726 /* CF */ { 0, BX_IA_ERROR },
2727 /* D0 */ { 0, BX_IA_ERROR },
2728 /* D1 */ { 0, BX_IA_ERROR },
2729 /* D2 */ { 0, BX_IA_ERROR },
2730 /* D3 */ { 0, BX_IA_ERROR },
2731 /* D4 */ { 0, BX_IA_ERROR },
2732 /* D5 */ { 0, BX_IA_ERROR },
2733 /* D6 */ { 0, BX_IA_ERROR },
2734 /* D7 */ { 0, BX_IA_ERROR },
2735 /* D8 */ { 0, BX_IA_ERROR },
2736 /* D9 */ { 0, BX_IA_ERROR },
2737 /* DA */ { 0, BX_IA_ERROR },
2738 /* DB */ { 0, BX_IA_ERROR },
2739 /* DC */ { 0, BX_IA_ERROR },
2740 /* DD */ { 0, BX_IA_ERROR },
2741 /* DE */ { 0, BX_IA_ERROR },
2742 /* DF */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_0f3adf },
2743 /* E0 */ { 0, BX_IA_ERROR },
2744 /* E1 */ { 0, BX_IA_ERROR },
2745 /* E2 */ { 0, BX_IA_ERROR },
2746 /* E3 */ { 0, BX_IA_ERROR },
2747 /* E4 */ { 0, BX_IA_ERROR },
2748 /* E5 */ { 0, BX_IA_ERROR },
2749 /* E6 */ { 0, BX_IA_ERROR },
2750 /* E7 */ { 0, BX_IA_ERROR },
2751 /* E8 */ { 0, BX_IA_ERROR },
2752 /* E9 */ { 0, BX_IA_ERROR },
2753 /* EA */ { 0, BX_IA_ERROR },
2754 /* EB */ { 0, BX_IA_ERROR },
2755 /* EC */ { 0, BX_IA_ERROR },
2756 /* ED */ { 0, BX_IA_ERROR },
2757 /* EE */ { 0, BX_IA_ERROR },
2758 /* EF */ { 0, BX_IA_ERROR },
2759 /* F0 */ { 0, BX_IA_ERROR },
2760 /* F1 */ { 0, BX_IA_ERROR },
2761 /* F2 */ { 0, BX_IA_ERROR },
2762 /* F3 */ { 0, BX_IA_ERROR },
2763 /* F4 */ { 0, BX_IA_ERROR },
2764 /* F5 */ { 0, BX_IA_ERROR },
2765 /* F6 */ { 0, BX_IA_ERROR },
2766 /* F7 */ { 0, BX_IA_ERROR },
2767 /* F8 */ { 0, BX_IA_ERROR },
2768 /* F9 */ { 0, BX_IA_ERROR },
2769 /* FA */ { 0, BX_IA_ERROR },
2770 /* FB */ { 0, BX_IA_ERROR },
2771 /* FC */ { 0, BX_IA_ERROR },
2772 /* FD */ { 0, BX_IA_ERROR },
2773 /* FE */ { 0, BX_IA_ERROR },
2774 /* FF */ { 0, BX_IA_ERROR }
2777 #endif // BX_SUPPORT_SSE >= 4 || (BX_SUPPORT_SSE >= 3 && BX_SUPPORT_SSE_EXTENSION > 0)
2779 /* ************************************************************************ */
2780 /* Opcode Groups */
2782 /* ******* */
2783 /* Group 1 */
2784 /* ******* */
2786 static const BxOpcodeInfo_t BxOpcodeInfoG1EbIbM[8] = {
2787 // attributes defined in main area
2788 /* 0 */ { BxLockable, BX_IA_ADD_EbIbM },
2789 /* 1 */ { BxLockable, BX_IA_OR_EbIbM },
2790 /* 2 */ { BxLockable, BX_IA_ADC_EbIbM },
2791 /* 3 */ { BxLockable, BX_IA_SBB_EbIbM },
2792 /* 4 */ { BxLockable, BX_IA_AND_EbIbM },
2793 /* 5 */ { BxLockable, BX_IA_SUB_EbIbM },
2794 /* 6 */ { BxLockable, BX_IA_XOR_EbIbM },
2795 /* 7 */ { 0, BX_IA_CMP_EbIbM }
2798 static const BxOpcodeInfo_t BxOpcodeInfoG1EbIbR[8] = {
2799 // attributes defined in main area
2800 /* 0 */ { 0, BX_IA_ADD_EbIbR },
2801 /* 1 */ { 0, BX_IA_OR_EbIbR },
2802 /* 2 */ { 0, BX_IA_ADC_EbIbR },
2803 /* 3 */ { 0, BX_IA_SBB_EbIbR },
2804 /* 4 */ { 0, BX_IA_AND_EbIbR },
2805 /* 5 */ { 0, BX_IA_SUB_EbIbR },
2806 /* 6 */ { 0, BX_IA_XOR_EbIbR },
2807 /* 7 */ { 0, BX_IA_CMP_EbIbR }
2810 static const BxOpcodeInfo_t BxOpcodeInfoG1EwM[8] = {
2811 // attributes defined in main area
2812 /* 0 */ { BxLockable, BX_IA_ADD_EwIwM },
2813 /* 1 */ { BxLockable, BX_IA_OR_EwIwM },
2814 /* 2 */ { BxLockable, BX_IA_ADC_EwIwM },
2815 /* 3 */ { BxLockable, BX_IA_SBB_EwIwM },
2816 /* 4 */ { BxLockable, BX_IA_AND_EwIwM },
2817 /* 5 */ { BxLockable, BX_IA_SUB_EwIwM },
2818 /* 6 */ { BxLockable, BX_IA_XOR_EwIwM },
2819 /* 7 */ { 0, BX_IA_CMP_EwIwM }
2822 static const BxOpcodeInfo_t BxOpcodeInfoG1EwR[8] = {
2823 // attributes defined in main area
2824 /* 0 */ { 0, BX_IA_ADD_EwIwR },
2825 /* 1 */ { 0, BX_IA_OR_EwIwR },
2826 /* 2 */ { 0, BX_IA_ADC_EwIwR },
2827 /* 3 */ { 0, BX_IA_SBB_EwIwR },
2828 /* 4 */ { 0, BX_IA_AND_EwIwR },
2829 /* 5 */ { 0, BX_IA_SUB_EwIwR },
2830 /* 6 */ { 0, BX_IA_XOR_EwIwR },
2831 /* 7 */ { 0, BX_IA_CMP_EwIwR }
2834 static const BxOpcodeInfo_t BxOpcodeInfoG1EdM[8] = {
2835 // attributes defined in main area
2836 /* 0 */ { BxLockable, BX_IA_ADD_EdIdM },
2837 /* 1 */ { BxLockable, BX_IA_OR_EdIdM },
2838 /* 2 */ { BxLockable, BX_IA_ADC_EdIdM },
2839 /* 3 */ { BxLockable, BX_IA_SBB_EdIdM },
2840 /* 4 */ { BxLockable, BX_IA_AND_EdIdM },
2841 /* 5 */ { BxLockable, BX_IA_SUB_EdIdM },
2842 /* 6 */ { BxLockable, BX_IA_XOR_EdIdM },
2843 /* 7 */ { 0, BX_IA_CMP_EdIdM }
2846 static const BxOpcodeInfo_t BxOpcodeInfoG1EdR[8] = {
2847 // attributes defined in main area
2848 /* 0 */ { 0, BX_IA_ADD_EdIdR },
2849 /* 1 */ { 0, BX_IA_OR_EdIdR },
2850 /* 2 */ { 0, BX_IA_ADC_EdIdR },
2851 /* 3 */ { 0, BX_IA_SBB_EdIdR },
2852 /* 4 */ { 0, BX_IA_AND_EdIdR },
2853 /* 5 */ { 0, BX_IA_SUB_EdIdR },
2854 /* 6 */ { 0, BX_IA_XOR_EdIdR },
2855 /* 7 */ { 0, BX_IA_CMP_EdIdR }
2858 #if BX_SUPPORT_X86_64
2859 static const BxOpcodeInfo_t BxOpcodeInfo64G1EqM[8] = {
2860 // attributes defined in main area
2861 /* 0 */ { BxLockable, BX_IA_ADD_EqIdM },
2862 /* 1 */ { BxLockable, BX_IA_OR_EqIdM },
2863 /* 2 */ { BxLockable, BX_IA_ADC_EqIdM },
2864 /* 3 */ { BxLockable, BX_IA_SBB_EqIdM },
2865 /* 4 */ { BxLockable, BX_IA_AND_EqIdM },
2866 /* 5 */ { BxLockable, BX_IA_SUB_EqIdM },
2867 /* 6 */ { BxLockable, BX_IA_XOR_EqIdM },
2868 /* 7 */ { 0, BX_IA_CMP_EqIdM }
2871 static const BxOpcodeInfo_t BxOpcodeInfo64G1EqR[8] = {
2872 // attributes defined in main area
2873 /* 0 */ { 0, BX_IA_ADD_EqIdR },
2874 /* 1 */ { 0, BX_IA_OR_EqIdR },
2875 /* 2 */ { 0, BX_IA_ADC_EqIdR },
2876 /* 3 */ { 0, BX_IA_SBB_EqIdR },
2877 /* 4 */ { 0, BX_IA_AND_EqIdR },
2878 /* 5 */ { 0, BX_IA_SUB_EqIdR },
2879 /* 6 */ { 0, BX_IA_XOR_EqIdR },
2880 /* 7 */ { 0, BX_IA_CMP_EqIdR }
2882 #endif
2884 /* ******** */
2885 /* Group 1A */
2886 /* ******** */
2888 static const BxOpcodeInfo_t BxOpcodeInfoG1AEwR[8] = {
2889 /* 0 */ { 0, BX_IA_POP_EwR },
2890 /* 1 */ { 0, BX_IA_ERROR },
2891 /* 2 */ { 0, BX_IA_ERROR },
2892 /* 3 */ { 0, BX_IA_ERROR },
2893 /* 4 */ { 0, BX_IA_ERROR },
2894 /* 5 */ { 0, BX_IA_ERROR },
2895 /* 6 */ { 0, BX_IA_ERROR },
2896 /* 7 */ { 0, BX_IA_ERROR }
2899 static const BxOpcodeInfo_t BxOpcodeInfoG1AEwM[8] = {
2900 /* 0 */ { 0, BX_IA_POP_EwM },
2901 /* 1 */ { 0, BX_IA_ERROR },
2902 /* 2 */ { 0, BX_IA_ERROR },
2903 /* 3 */ { 0, BX_IA_ERROR },
2904 /* 4 */ { 0, BX_IA_ERROR },
2905 /* 5 */ { 0, BX_IA_ERROR },
2906 /* 6 */ { 0, BX_IA_ERROR },
2907 /* 7 */ { 0, BX_IA_ERROR }
2910 static const BxOpcodeInfo_t BxOpcodeInfoG1AEdR[8] = {
2911 /* 0 */ { 0, BX_IA_POP_EdR },
2912 /* 1 */ { 0, BX_IA_ERROR },
2913 /* 2 */ { 0, BX_IA_ERROR },
2914 /* 3 */ { 0, BX_IA_ERROR },
2915 /* 4 */ { 0, BX_IA_ERROR },
2916 /* 5 */ { 0, BX_IA_ERROR },
2917 /* 6 */ { 0, BX_IA_ERROR },
2918 /* 7 */ { 0, BX_IA_ERROR }
2921 static const BxOpcodeInfo_t BxOpcodeInfoG1AEdM[8] = {
2922 /* 0 */ { 0, BX_IA_POP_EdM },
2923 /* 1 */ { 0, BX_IA_ERROR },
2924 /* 2 */ { 0, BX_IA_ERROR },
2925 /* 3 */ { 0, BX_IA_ERROR },
2926 /* 4 */ { 0, BX_IA_ERROR },
2927 /* 5 */ { 0, BX_IA_ERROR },
2928 /* 6 */ { 0, BX_IA_ERROR },
2929 /* 7 */ { 0, BX_IA_ERROR }
2932 #if BX_SUPPORT_X86_64
2933 static const BxOpcodeInfo_t BxOpcodeInfo64G1AEqR[8] = {
2934 /* 0 */ { 0, BX_IA_POP_EqR },
2935 /* 1 */ { 0, BX_IA_ERROR },
2936 /* 2 */ { 0, BX_IA_ERROR },
2937 /* 3 */ { 0, BX_IA_ERROR },
2938 /* 4 */ { 0, BX_IA_ERROR },
2939 /* 5 */ { 0, BX_IA_ERROR },
2940 /* 6 */ { 0, BX_IA_ERROR },
2941 /* 7 */ { 0, BX_IA_ERROR }
2944 static const BxOpcodeInfo_t BxOpcodeInfo64G1AEqM[8] = {
2945 /* 0 */ { 0, BX_IA_POP_EqM },
2946 /* 1 */ { 0, BX_IA_ERROR },
2947 /* 2 */ { 0, BX_IA_ERROR },
2948 /* 3 */ { 0, BX_IA_ERROR },
2949 /* 4 */ { 0, BX_IA_ERROR },
2950 /* 5 */ { 0, BX_IA_ERROR },
2951 /* 6 */ { 0, BX_IA_ERROR },
2952 /* 7 */ { 0, BX_IA_ERROR }
2954 #endif
2956 /* ******* */
2957 /* Group 2 */
2958 /* ******* */
2960 static const BxOpcodeInfo_t BxOpcodeInfoG2Eb[8] = {
2961 // attributes defined in main area
2962 /* 0 */ { 0, BX_IA_ROL_Eb },
2963 /* 1 */ { 0, BX_IA_ROR_Eb },
2964 /* 2 */ { 0, BX_IA_RCL_Eb },
2965 /* 3 */ { 0, BX_IA_RCR_Eb },
2966 /* 4 */ { 0, BX_IA_SHL_Eb },
2967 /* 5 */ { 0, BX_IA_SHR_Eb },
2968 /* 6 */ { 0, BX_IA_SHL_Eb },
2969 /* 7 */ { 0, BX_IA_SAR_Eb }
2972 static const BxOpcodeInfo_t BxOpcodeInfoG2Ew[8] = {
2973 // attributes defined in main area
2974 /* 0 */ { 0, BX_IA_ROL_Ew },
2975 /* 1 */ { 0, BX_IA_ROR_Ew },
2976 /* 2 */ { 0, BX_IA_RCL_Ew },
2977 /* 3 */ { 0, BX_IA_RCR_Ew },
2978 /* 4 */ { 0, BX_IA_SHL_Ew },
2979 /* 5 */ { 0, BX_IA_SHR_Ew },
2980 /* 6 */ { 0, BX_IA_SHL_Ew },
2981 /* 7 */ { 0, BX_IA_SAR_Ew }
2984 static const BxOpcodeInfo_t BxOpcodeInfoG2EdM[8] = {
2985 // attributes defined in main area
2986 /* 0 */ { 0, BX_IA_ROL_EdM },
2987 /* 1 */ { 0, BX_IA_ROR_EdM },
2988 /* 2 */ { 0, BX_IA_RCL_EdM },
2989 /* 3 */ { 0, BX_IA_RCR_EdM },
2990 /* 4 */ { 0, BX_IA_SHL_EdM },
2991 /* 5 */ { 0, BX_IA_SHR_EdM },
2992 /* 6 */ { 0, BX_IA_SHL_EdM },
2993 /* 7 */ { 0, BX_IA_SAR_EdM }
2996 static const BxOpcodeInfo_t BxOpcodeInfoG2EdR[8] = {
2997 // attributes defined in main area
2998 /* 0 */ { 0, BX_IA_ROL_EdR },
2999 /* 1 */ { 0, BX_IA_ROR_EdR },
3000 /* 2 */ { 0, BX_IA_RCL_EdR },
3001 /* 3 */ { 0, BX_IA_RCR_EdR },
3002 /* 4 */ { 0, BX_IA_SHL_EdR },
3003 /* 5 */ { 0, BX_IA_SHR_EdR },
3004 /* 6 */ { 0, BX_IA_SHL_EdR },
3005 /* 7 */ { 0, BX_IA_SAR_EdR }
3008 #if BX_SUPPORT_X86_64
3009 static const BxOpcodeInfo_t BxOpcodeInfo64G2EqM[8] = {
3010 // attributes defined in main area
3011 /* 0 */ { 0, BX_IA_ROL_EqM },
3012 /* 1 */ { 0, BX_IA_ROR_EqM },
3013 /* 2 */ { 0, BX_IA_RCL_EqM },
3014 /* 3 */ { 0, BX_IA_RCR_EqM },
3015 /* 4 */ { 0, BX_IA_SHL_EqM },
3016 /* 5 */ { 0, BX_IA_SHR_EqM },
3017 /* 6 */ { 0, BX_IA_SHL_EqM },
3018 /* 7 */ { 0, BX_IA_SAR_EqM }
3021 static const BxOpcodeInfo_t BxOpcodeInfo64G2EqR[8] = {
3022 // attributes defined in main area
3023 /* 0 */ { 0, BX_IA_ROL_EqR },
3024 /* 1 */ { 0, BX_IA_ROR_EqR },
3025 /* 2 */ { 0, BX_IA_RCL_EqR },
3026 /* 3 */ { 0, BX_IA_RCR_EqR },
3027 /* 4 */ { 0, BX_IA_SHL_EqR },
3028 /* 5 */ { 0, BX_IA_SHR_EqR },
3029 /* 6 */ { 0, BX_IA_SHL_EqR },
3030 /* 7 */ { 0, BX_IA_SAR_EqR }
3032 #endif
3034 /* ******* */
3035 /* Group 3 */
3036 /* ******* */
3038 static const BxOpcodeInfo_t BxOpcodeInfoG3EbM[8] = {
3039 /* 0 */ { BxImmediate_Ib, BX_IA_TEST_EbIbM },
3040 /* 1 */ { BxImmediate_Ib, BX_IA_TEST_EbIbM },
3041 /* 2 */ { BxLockable, BX_IA_NOT_EbM },
3042 /* 3 */ { BxLockable, BX_IA_NEG_EbM },
3043 /* 4 */ { 0, BX_IA_MUL_ALEbM },
3044 /* 5 */ { 0, BX_IA_IMUL_ALEbM },
3045 /* 6 */ { 0, BX_IA_DIV_ALEbM },
3046 /* 7 */ { 0, BX_IA_IDIV_ALEbM }
3049 static const BxOpcodeInfo_t BxOpcodeInfoG3EbR[8] = {
3050 /* 0 */ { BxImmediate_Ib, BX_IA_TEST_EbIbR },
3051 /* 1 */ { BxImmediate_Ib, BX_IA_TEST_EbIbR },
3052 /* 2 */ { 0, BX_IA_NOT_EbR },
3053 /* 3 */ { 0, BX_IA_NEG_EbR },
3054 /* 4 */ { 0, BX_IA_MUL_ALEbR },
3055 /* 5 */ { 0, BX_IA_IMUL_ALEbR },
3056 /* 6 */ { 0, BX_IA_DIV_ALEbR },
3057 /* 7 */ { 0, BX_IA_IDIV_ALEbR }
3060 static const BxOpcodeInfo_t BxOpcodeInfoG3EwM[8] = {
3061 /* 0 */ { BxImmediate_Iw, BX_IA_TEST_EwIwM },
3062 /* 1 */ { BxImmediate_Iw, BX_IA_TEST_EwIwM },
3063 /* 2 */ { BxLockable, BX_IA_NOT_EwM },
3064 /* 3 */ { BxLockable, BX_IA_NEG_EwM },
3065 /* 4 */ { 0, BX_IA_MUL_AXEwM },
3066 /* 5 */ { 0, BX_IA_IMUL_AXEwM },
3067 /* 6 */ { 0, BX_IA_DIV_AXEwM },
3068 /* 7 */ { 0, BX_IA_IDIV_AXEwM }
3071 static const BxOpcodeInfo_t BxOpcodeInfoG3EwR[8] = {
3072 /* 0 */ { BxImmediate_Iw, BX_IA_TEST_EwIwR },
3073 /* 1 */ { BxImmediate_Iw, BX_IA_TEST_EwIwR },
3074 /* 2 */ { 0, BX_IA_NOT_EwR },
3075 /* 3 */ { 0, BX_IA_NEG_EwR },
3076 /* 4 */ { 0, BX_IA_MUL_AXEwR },
3077 /* 5 */ { 0, BX_IA_IMUL_AXEwR },
3078 /* 6 */ { 0, BX_IA_DIV_AXEwR },
3079 /* 7 */ { 0, BX_IA_IDIV_AXEwR }
3082 static const BxOpcodeInfo_t BxOpcodeInfoG3EdM[8] = {
3083 /* 0 */ { BxImmediate_Id, BX_IA_TEST_EdIdM },
3084 /* 1 */ { BxImmediate_Id, BX_IA_TEST_EdIdM },
3085 /* 2 */ { BxLockable, BX_IA_NOT_EdM },
3086 /* 3 */ { BxLockable, BX_IA_NEG_EdM },
3087 /* 4 */ { 0, BX_IA_MUL_EAXEdM },
3088 /* 5 */ { 0, BX_IA_IMUL_EAXEdM },
3089 /* 6 */ { 0, BX_IA_DIV_EAXEdM },
3090 /* 7 */ { 0, BX_IA_IDIV_EAXEdM }
3093 static const BxOpcodeInfo_t BxOpcodeInfoG3EdR[8] = {
3094 /* 0 */ { BxImmediate_Id, BX_IA_TEST_EdIdR },
3095 /* 1 */ { BxImmediate_Id, BX_IA_TEST_EdIdR },
3096 /* 2 */ { 0, BX_IA_NOT_EdR },
3097 /* 3 */ { 0, BX_IA_NEG_EdR },
3098 /* 4 */ { 0, BX_IA_MUL_EAXEdR },
3099 /* 5 */ { 0, BX_IA_IMUL_EAXEdR },
3100 /* 6 */ { 0, BX_IA_DIV_EAXEdR },
3101 /* 7 */ { 0, BX_IA_IDIV_EAXEdR }
3104 #if BX_SUPPORT_X86_64
3105 static const BxOpcodeInfo_t BxOpcodeInfo64G3EqM[8] = {
3106 /* 0 */ { BxImmediate_Id, BX_IA_TEST_EqIdM },
3107 /* 1 */ { BxImmediate_Id, BX_IA_TEST_EqIdM },
3108 /* 2 */ { BxLockable, BX_IA_NOT_EqM },
3109 /* 3 */ { BxLockable, BX_IA_NEG_EqM },
3110 /* 4 */ { 0, BX_IA_MUL_RAXEqM },
3111 /* 5 */ { 0, BX_IA_IMUL_RAXEqM },
3112 /* 6 */ { 0, BX_IA_DIV_RAXEqM },
3113 /* 7 */ { 0, BX_IA_IDIV_RAXEqM }
3116 static const BxOpcodeInfo_t BxOpcodeInfo64G3EqR[8] = {
3117 /* 0 */ { BxImmediate_Id, BX_IA_TEST_EqIdR },
3118 /* 1 */ { BxImmediate_Id, BX_IA_TEST_EqIdR },
3119 /* 2 */ { 0, BX_IA_NOT_EqR },
3120 /* 3 */ { 0, BX_IA_NEG_EqR },
3121 /* 4 */ { 0, BX_IA_MUL_RAXEqR },
3122 /* 5 */ { 0, BX_IA_IMUL_RAXEqR },
3123 /* 6 */ { 0, BX_IA_DIV_RAXEqR },
3124 /* 7 */ { 0, BX_IA_IDIV_RAXEqR }
3126 #endif
3128 /* ******* */
3129 /* Group 4 */
3130 /* ******* */
3132 static const BxOpcodeInfo_t BxOpcodeInfoG4M[8] = {
3133 /* 0 */ { BxLockable, BX_IA_INC_EbM },
3134 /* 1 */ { BxLockable, BX_IA_DEC_EbM },
3135 /* 2 */ { 0, BX_IA_ERROR },
3136 /* 3 */ { 0, BX_IA_ERROR },
3137 /* 4 */ { 0, BX_IA_ERROR },
3138 /* 5 */ { 0, BX_IA_ERROR },
3139 /* 6 */ { 0, BX_IA_ERROR },
3140 /* 7 */ { 0, BX_IA_ERROR }
3143 static const BxOpcodeInfo_t BxOpcodeInfoG4R[8] = {
3144 /* 0 */ { 0, BX_IA_INC_EbR },
3145 /* 1 */ { 0, BX_IA_DEC_EbR },
3146 /* 2 */ { 0, BX_IA_ERROR },
3147 /* 3 */ { 0, BX_IA_ERROR },
3148 /* 4 */ { 0, BX_IA_ERROR },
3149 /* 5 */ { 0, BX_IA_ERROR },
3150 /* 6 */ { 0, BX_IA_ERROR },
3151 /* 7 */ { 0, BX_IA_ERROR }
3154 /* ******* */
3155 /* Group 5 */
3156 /* ******* */
3158 static const BxOpcodeInfo_t BxOpcodeInfoG5wM[8] = {
3159 // attributes defined in main area
3160 /* 0 */ { BxLockable, BX_IA_INC_EwM },
3161 /* 1 */ { BxLockable, BX_IA_DEC_EwM },
3162 /* 2 */ { BxTraceEnd, BX_IA_CALL_EwM },
3163 /* 3 */ { BxTraceEnd, BX_IA_CALL16_Ep },
3164 /* 4 */ { BxTraceEnd, BX_IA_JMP_EwM },
3165 /* 5 */ { BxTraceEnd, BX_IA_JMP16_Ep },
3166 /* 6 */ { 0, BX_IA_PUSH_EwM },
3167 /* 7 */ { 0, BX_IA_ERROR }
3170 static const BxOpcodeInfo_t BxOpcodeInfoG5wR[8] = {
3171 // attributes defined in main area
3172 /* 0 */ { 0, BX_IA_INC_EwR },
3173 /* 1 */ { 0, BX_IA_DEC_EwR },
3174 /* 2 */ { BxTraceEnd, BX_IA_CALL_EwR },
3175 /* 3 */ { 0, BX_IA_ERROR }, // CALL16_Ep
3176 /* 4 */ { BxTraceEnd, BX_IA_JMP_EwR },
3177 /* 5 */ { 0, BX_IA_ERROR }, // JMP16_Ep
3178 /* 6 */ { 0, BX_IA_PUSH_EwR },
3179 /* 7 */ { 0, BX_IA_ERROR }
3182 static const BxOpcodeInfo_t BxOpcodeInfoG5dM[8] = {
3183 // attributes defined in main area
3184 /* 0 */ { BxLockable, BX_IA_INC_EdM },
3185 /* 1 */ { BxLockable, BX_IA_DEC_EdM },
3186 /* 2 */ { BxTraceEnd, BX_IA_CALL_EdM },
3187 /* 3 */ { BxTraceEnd, BX_IA_CALL32_Ep },
3188 /* 4 */ { BxTraceEnd, BX_IA_JMP_EdM },
3189 /* 5 */ { BxTraceEnd, BX_IA_JMP32_Ep },
3190 /* 6 */ { 0, BX_IA_PUSH_EdM },
3191 /* 7 */ { 0, BX_IA_ERROR }
3194 static const BxOpcodeInfo_t BxOpcodeInfoG5dR[8] = {
3195 // attributes defined in main area
3196 /* 0 */ { 0, BX_IA_INC_EdR },
3197 /* 1 */ { 0, BX_IA_DEC_EdR },
3198 /* 2 */ { BxTraceEnd, BX_IA_CALL_EdR },
3199 /* 3 */ { 0, BX_IA_ERROR }, // CALL32_Ep
3200 /* 4 */ { BxTraceEnd, BX_IA_JMP_EdR },
3201 /* 5 */ { 0, BX_IA_ERROR }, // JMP32_Ep
3202 /* 6 */ { 0, BX_IA_PUSH_EdR },
3203 /* 7 */ { 0, BX_IA_ERROR }
3206 #if BX_SUPPORT_X86_64
3207 static const BxOpcodeInfo_t BxOpcodeInfo64G5wM[8] = {
3208 /* 0 */ { BxLockable, BX_IA_INC_EwM },
3209 /* 1 */ { BxLockable, BX_IA_DEC_EwM },
3210 /* 2 */ { BxTraceEnd, BX_IA_CALL_EqM },
3211 /* 3 */ { BxTraceEnd, BX_IA_CALL16_Ep },
3212 /* 4 */ { BxTraceEnd, BX_IA_JMP_EqM },
3213 /* 5 */ { BxTraceEnd, BX_IA_JMP16_Ep },
3214 /* 6 */ { 0, BX_IA_PUSH_EwM },
3215 /* 7 */ { 0, BX_IA_ERROR }
3218 static const BxOpcodeInfo_t BxOpcodeInfo64G5wR[8] = {
3219 /* 0 */ { 0, BX_IA_INC_EwR },
3220 /* 1 */ { 0, BX_IA_DEC_EwR },
3221 /* 2 */ { BxTraceEnd, BX_IA_CALL_EqR },
3222 /* 3 */ { 0, BX_IA_ERROR }, // CALL16_Ep
3223 /* 4 */ { BxTraceEnd, BX_IA_JMP_EqR },
3224 /* 5 */ { 0, BX_IA_ERROR }, // JMP16_Ep
3225 /* 6 */ { 0, BX_IA_PUSH_EwR },
3226 /* 7 */ { 0, BX_IA_ERROR }
3229 static const BxOpcodeInfo_t BxOpcodeInfo64G5dM[8] = {
3230 /* 0 */ { BxLockable, BX_IA_INC_EdM },
3231 /* 1 */ { BxLockable, BX_IA_DEC_EdM },
3232 /* 2 */ { BxTraceEnd, BX_IA_CALL_EqM },
3233 /* 3 */ { BxTraceEnd, BX_IA_CALL32_Ep },
3234 /* 4 */ { BxTraceEnd, BX_IA_JMP_EqM },
3235 /* 5 */ { BxTraceEnd, BX_IA_JMP32_Ep },
3236 /* 6 */ { 0, BX_IA_PUSH_EqM },
3237 /* 7 */ { 0, BX_IA_ERROR }
3240 static const BxOpcodeInfo_t BxOpcodeInfo64G5dR[8] = {
3241 /* 0 */ { 0, BX_IA_INC_EdR },
3242 /* 1 */ { 0, BX_IA_DEC_EdR },
3243 /* 2 */ { BxTraceEnd, BX_IA_CALL_EqR },
3244 /* 3 */ { 0, BX_IA_ERROR }, // CALL32_Ep
3245 /* 4 */ { BxTraceEnd, BX_IA_JMP_EqR },
3246 /* 5 */ { 0, BX_IA_ERROR }, // JMP32_Ep
3247 /* 6 */ { 0, BX_IA_PUSH_EqR },
3248 /* 7 */ { 0, BX_IA_ERROR }
3251 static const BxOpcodeInfo_t BxOpcodeInfo64G5qM[8] = {
3252 /* 0 */ { BxLockable, BX_IA_INC_EqM },
3253 /* 1 */ { BxLockable, BX_IA_DEC_EqM },
3254 /* 2 */ { BxTraceEnd, BX_IA_CALL_EqM },
3255 /* 3 */ { BxTraceEnd, BX_IA_CALL64_Ep }, // TODO: 64-bit offset for Intel
3256 /* 4 */ { BxTraceEnd, BX_IA_JMP_EqM },
3257 /* 5 */ { BxTraceEnd, BX_IA_JMP64_Ep }, // TODO: 64-bit offset for Intel
3258 /* 6 */ { 0, BX_IA_PUSH_EqM },
3259 /* 7 */ { 0, BX_IA_ERROR }
3262 static const BxOpcodeInfo_t BxOpcodeInfo64G5qR[8] = {
3263 /* 0 */ { 0, BX_IA_INC_EqR },
3264 /* 1 */ { 0, BX_IA_DEC_EqR },
3265 /* 2 */ { BxTraceEnd, BX_IA_CALL_EqR },
3266 /* 3 */ { 0, BX_IA_ERROR }, // CALL64_Ep
3267 /* 4 */ { BxTraceEnd, BX_IA_JMP_EqR },
3268 /* 5 */ { 0, BX_IA_ERROR }, // JMP64_Ep
3269 /* 6 */ { 0, BX_IA_PUSH_EqR },
3270 /* 7 */ { 0, BX_IA_ERROR }
3272 #endif
3274 /* ******* */
3275 /* Group 6 */
3276 /* ******* */
3278 static const BxOpcodeInfo_t BxOpcodeInfoG6[8] = {
3279 /* 0 */ { 0, BX_IA_SLDT_Ew },
3280 /* 1 */ { 0, BX_IA_STR_Ew },
3281 /* 2 */ { BxTraceEnd, BX_IA_LLDT_Ew },
3282 /* 3 */ { BxTraceEnd, BX_IA_LTR_Ew },
3283 /* 4 */ { 0, BX_IA_VERR_Ew },
3284 /* 5 */ { 0, BX_IA_VERW_Ew },
3285 /* 6 */ { 0, BX_IA_ERROR },
3286 /* 7 */ { 0, BX_IA_ERROR }
3289 /* ******* */
3290 /* Group 7 */
3291 /* ******* */
3293 // ----------------------------------------------------
3294 // MOD REG RM | non 64 bit mode | 64 bit mode
3295 // ----------------------------------------------------
3296 // MOD <> 11 7 --- | INVLPG | INVLPG
3297 // MOD == 11 7 0 | #UD | SWAPGS
3298 // MOD == 11 7 1 | RDTSCP | RDTSCP
3299 // MOD == 11 7 2-7 | #UD | #UD
3301 static const BxOpcodeInfo_t opcodesGroupRmMONITOR[8] = {
3302 /* 0 */ { 0, BX_IA_MONITOR },
3303 /* 1 */ { BxTraceEnd, BX_IA_MWAIT },
3304 /* 2 */ { 0, BX_IA_ERROR },
3305 /* 3 */ { 0, BX_IA_ERROR },
3306 /* 4 */ { 0, BX_IA_ERROR },
3307 /* 5 */ { 0, BX_IA_ERROR },
3308 /* 6 */ { 0, BX_IA_ERROR },
3309 /* 7 */ { 0, BX_IA_ERROR }
3312 static const BxOpcodeInfo_t opcodesGroupRmXGETSET[8] = {
3313 /* 0 */ { 0, BX_IA_XGETBV },
3314 /* 1 */ { 0, BX_IA_XSETBV },
3315 /* 2 */ { 0, BX_IA_ERROR },
3316 /* 3 */ { 0, BX_IA_ERROR },
3317 /* 4 */ { 0, BX_IA_ERROR },
3318 /* 5 */ { 0, BX_IA_ERROR },
3319 /* 6 */ { 0, BX_IA_ERROR },
3320 /* 7 */ { 0, BX_IA_ERROR }
3323 #if BX_SUPPORT_X86_64
3324 static const BxOpcodeInfo_t opcodesGroupRmINVLPG[8] = {
3325 /* 0 */ { 0, BX_IA_ERROR },
3326 /* 1 */ { 0, BX_IA_RDTSCP },
3327 /* 2 */ { 0, BX_IA_ERROR },
3328 /* 3 */ { 0, BX_IA_ERROR },
3329 /* 4 */ { 0, BX_IA_ERROR },
3330 /* 5 */ { 0, BX_IA_ERROR },
3331 /* 6 */ { 0, BX_IA_ERROR },
3332 /* 7 */ { 0, BX_IA_ERROR }
3334 #endif
3336 static const BxOpcodeInfo_t BxOpcodeInfoG7R[8] = {
3337 /* 0 */ { 0, BX_IA_ERROR },
3338 /* 1 */ { BxRMGroup, BX_IA_ERROR, opcodesGroupRmMONITOR },
3339 /* 2 */ { BxRMGroup, BX_IA_ERROR, opcodesGroupRmXGETSET },
3340 /* 3 */ { 0, BX_IA_ERROR },
3341 /* 4 */ { 0, BX_IA_SMSW_EwR },
3342 /* 5 */ { 0, BX_IA_ERROR },
3343 /* 6 */ { BxTraceEnd, BX_IA_LMSW_Ew },
3344 #if BX_SUPPORT_X86_64
3345 /* 7 */ { BxRMGroup, BX_IA_ERROR, opcodesGroupRmINVLPG }
3346 #else
3347 /* 7 */ { 0, BX_IA_ERROR }
3348 #endif
3351 static const BxOpcodeInfo_t BxOpcodeInfoG7M[8] = {
3352 // attributes defined in main area
3353 /* 0 */ { 0, BX_IA_SGDT_Ms },
3354 /* 1 */ { 0, BX_IA_SIDT_Ms },
3355 /* 2 */ { BxTraceEnd, BX_IA_LGDT_Ms },
3356 /* 3 */ { BxTraceEnd, BX_IA_LIDT_Ms },
3357 /* 4 */ { 0, BX_IA_SMSW_EwM },
3358 /* 5 */ { 0, BX_IA_ERROR },
3359 /* 6 */ { BxTraceEnd, BX_IA_LMSW_Ew },
3360 /* 7 */ { BxTraceEnd, BX_IA_INVLPG }
3363 #if BX_SUPPORT_X86_64
3364 static const BxOpcodeInfo_t opcodesGroup64RmINVLPG[8] = {
3365 /* 0 */ { 0, BX_IA_SWAPGS },
3366 /* 1 */ { 0, BX_IA_RDTSCP },
3367 /* 2 */ { 0, BX_IA_ERROR },
3368 /* 3 */ { 0, BX_IA_ERROR },
3369 /* 4 */ { 0, BX_IA_ERROR },
3370 /* 5 */ { 0, BX_IA_ERROR },
3371 /* 6 */ { 0, BX_IA_ERROR },
3372 /* 7 */ { 0, BX_IA_ERROR }
3375 static const BxOpcodeInfo_t BxOpcodeInfo64G7R[8] = {
3376 /* 0 */ { 0, BX_IA_ERROR },
3377 /* 1 */ { BxRMGroup, BX_IA_ERROR, opcodesGroupRmMONITOR },
3378 /* 2 */ { 0, BX_IA_ERROR },
3379 /* 3 */ { 0, BX_IA_ERROR },
3380 /* 4 */ { 0, BX_IA_SMSW_EwR },
3381 /* 5 */ { 0, BX_IA_ERROR },
3382 /* 6 */ { BxTraceEnd, BX_IA_LMSW_Ew },
3383 /* 7 */ { BxRMGroup, BX_IA_ERROR, opcodesGroup64RmINVLPG }
3386 static const BxOpcodeInfo_t BxOpcodeInfo64G7M[8] = {
3387 /* 0 */ { 0, BX_IA_SGDT64_Ms },
3388 /* 1 */ { 0, BX_IA_SIDT64_Ms },
3389 /* 2 */ { BxTraceEnd, BX_IA_LGDT64_Ms },
3390 /* 3 */ { BxTraceEnd, BX_IA_LIDT64_Ms },
3391 /* 4 */ { 0, BX_IA_SMSW_EwM },
3392 /* 5 */ { 0, BX_IA_ERROR },
3393 /* 6 */ { BxTraceEnd, BX_IA_LMSW_Ew },
3394 /* 7 */ { BxTraceEnd, BX_IA_INVLPG }
3396 #endif
3399 /* ******* */
3400 /* Group 8 */
3401 /* ******* */
3403 static const BxOpcodeInfo_t BxOpcodeInfoG8EwIbM[8] = {
3404 /* 0 */ { 0, BX_IA_ERROR },
3405 /* 1 */ { 0, BX_IA_ERROR },
3406 /* 2 */ { 0, BX_IA_ERROR },
3407 /* 3 */ { 0, BX_IA_ERROR },
3408 /* 4 */ { BxImmediate_Ib, BX_IA_BT_EwIbM },
3409 /* 5 */ { BxImmediate_Ib | BxLockable, BX_IA_BTS_EwIbM },
3410 /* 6 */ { BxImmediate_Ib | BxLockable, BX_IA_BTR_EwIbM },
3411 /* 7 */ { BxImmediate_Ib | BxLockable, BX_IA_BTC_EwIbM }
3414 static const BxOpcodeInfo_t BxOpcodeInfoG8EwIbR[8] = {
3415 /* 0 */ { 0, BX_IA_ERROR },
3416 /* 1 */ { 0, BX_IA_ERROR },
3417 /* 2 */ { 0, BX_IA_ERROR },
3418 /* 3 */ { 0, BX_IA_ERROR },
3419 /* 4 */ { BxImmediate_Ib, BX_IA_BT_EwIbR },
3420 /* 5 */ { BxImmediate_Ib, BX_IA_BTS_EwIbR },
3421 /* 6 */ { BxImmediate_Ib, BX_IA_BTR_EwIbR },
3422 /* 7 */ { BxImmediate_Ib, BX_IA_BTC_EwIbR }
3425 static const BxOpcodeInfo_t BxOpcodeInfoG8EdIbM[8] = {
3426 /* 0 */ { 0, BX_IA_ERROR },
3427 /* 1 */ { 0, BX_IA_ERROR },
3428 /* 2 */ { 0, BX_IA_ERROR },
3429 /* 3 */ { 0, BX_IA_ERROR },
3430 /* 4 */ { BxImmediate_Ib, BX_IA_BT_EdIbM },
3431 /* 5 */ { BxImmediate_Ib | BxLockable, BX_IA_BTS_EdIbM },
3432 /* 6 */ { BxImmediate_Ib | BxLockable, BX_IA_BTR_EdIbM },
3433 /* 7 */ { BxImmediate_Ib | BxLockable, BX_IA_BTC_EdIbM }
3436 static const BxOpcodeInfo_t BxOpcodeInfoG8EdIbR[8] = {
3437 /* 0 */ { 0, BX_IA_ERROR },
3438 /* 1 */ { 0, BX_IA_ERROR },
3439 /* 2 */ { 0, BX_IA_ERROR },
3440 /* 3 */ { 0, BX_IA_ERROR },
3441 /* 4 */ { BxImmediate_Ib, BX_IA_BT_EdIbR },
3442 /* 5 */ { BxImmediate_Ib, BX_IA_BTS_EdIbR },
3443 /* 6 */ { BxImmediate_Ib, BX_IA_BTR_EdIbR },
3444 /* 7 */ { BxImmediate_Ib, BX_IA_BTC_EdIbR }
3447 #if BX_SUPPORT_X86_64
3448 static const BxOpcodeInfo_t BxOpcodeInfo64G8EqIbM[8] = {
3449 /* 0 */ { 0, BX_IA_ERROR },
3450 /* 1 */ { 0, BX_IA_ERROR },
3451 /* 2 */ { 0, BX_IA_ERROR },
3452 /* 3 */ { 0, BX_IA_ERROR },
3453 /* 4 */ { BxImmediate_Ib, BX_IA_BT_EqIbM },
3454 /* 5 */ { BxImmediate_Ib | BxLockable, BX_IA_BTS_EqIbM },
3455 /* 6 */ { BxImmediate_Ib | BxLockable, BX_IA_BTR_EqIbM },
3456 /* 7 */ { BxImmediate_Ib | BxLockable, BX_IA_BTC_EqIbM }
3459 static const BxOpcodeInfo_t BxOpcodeInfo64G8EqIbR[8] = {
3460 /* 0 */ { 0, BX_IA_ERROR },
3461 /* 1 */ { 0, BX_IA_ERROR },
3462 /* 2 */ { 0, BX_IA_ERROR },
3463 /* 3 */ { 0, BX_IA_ERROR },
3464 /* 4 */ { BxImmediate_Ib, BX_IA_BT_EqIbR },
3465 /* 5 */ { BxImmediate_Ib, BX_IA_BTS_EqIbR },
3466 /* 6 */ { BxImmediate_Ib, BX_IA_BTR_EqIbR },
3467 /* 7 */ { BxImmediate_Ib, BX_IA_BTC_EqIbR }
3469 #endif
3471 /* ******* */
3472 /* Group 9 */
3473 /* ******* */
3475 static const BxOpcodeInfo_t BxOpcodeInfoG9M[8] = {
3476 /* 0 */ { 0, BX_IA_ERROR },
3477 /* 1 */ { BxLockable, BX_IA_CMPXCHG8B },
3478 /* 2 */ { 0, BX_IA_ERROR },
3479 /* 3 */ { 0, BX_IA_ERROR },
3480 /* 4 */ { 0, BX_IA_ERROR },
3481 /* 5 */ { 0, BX_IA_ERROR },
3482 /* 6 */ { 0, BX_IA_ERROR },
3483 /* 7 */ { 0, BX_IA_ERROR }
3486 #if BX_SUPPORT_X86_64
3487 static const BxOpcodeInfo_t BxOpcodeInfo64G9qM[8] = {
3488 /* 0 */ { 0, BX_IA_ERROR },
3489 /* 1 */ { BxLockable, BX_IA_CMPXCHG16B },
3490 /* 2 */ { 0, BX_IA_ERROR },
3491 /* 3 */ { 0, BX_IA_ERROR },
3492 /* 4 */ { 0, BX_IA_ERROR },
3493 /* 5 */ { 0, BX_IA_ERROR },
3494 /* 6 */ { 0, BX_IA_ERROR },
3495 /* 7 */ { 0, BX_IA_ERROR }
3497 #endif
3499 /* ******** */
3500 /* Group 11 */
3501 /* ******** */
3503 static const BxOpcodeInfo_t BxOpcodeInfoG11EbR[8] = {
3504 /* 0 */ { BxImmediate_Ib, BX_IA_MOV_EbIbR },
3505 /* 1 */ { 0, BX_IA_ERROR },
3506 /* 2 */ { 0, BX_IA_ERROR },
3507 /* 3 */ { 0, BX_IA_ERROR },
3508 /* 4 */ { 0, BX_IA_ERROR },
3509 /* 5 */ { 0, BX_IA_ERROR },
3510 /* 6 */ { 0, BX_IA_ERROR },
3511 /* 7 */ { 0, BX_IA_ERROR }
3514 static const BxOpcodeInfo_t BxOpcodeInfoG11EbM[8] = {
3515 /* 0 */ { BxImmediate_Ib, BX_IA_MOV_EbIbM },
3516 /* 1 */ { 0, BX_IA_ERROR },
3517 /* 2 */ { 0, BX_IA_ERROR },
3518 /* 3 */ { 0, BX_IA_ERROR },
3519 /* 4 */ { 0, BX_IA_ERROR },
3520 /* 5 */ { 0, BX_IA_ERROR },
3521 /* 6 */ { 0, BX_IA_ERROR },
3522 /* 7 */ { 0, BX_IA_ERROR }
3525 static const BxOpcodeInfo_t BxOpcodeInfoG11EwR[8] = {
3526 /* 0 */ { BxImmediate_Iw, BX_IA_MOV_EwIwR },
3527 /* 1 */ { 0, BX_IA_ERROR },
3528 /* 2 */ { 0, BX_IA_ERROR },
3529 /* 3 */ { 0, BX_IA_ERROR },
3530 /* 4 */ { 0, BX_IA_ERROR },
3531 /* 5 */ { 0, BX_IA_ERROR },
3532 /* 6 */ { 0, BX_IA_ERROR },
3533 /* 7 */ { 0, BX_IA_ERROR }
3536 static const BxOpcodeInfo_t BxOpcodeInfoG11EwM[8] = {
3537 /* 0 */ { BxImmediate_Iw, BX_IA_MOV_EwIwM },
3538 /* 1 */ { 0, BX_IA_ERROR },
3539 /* 2 */ { 0, BX_IA_ERROR },
3540 /* 3 */ { 0, BX_IA_ERROR },
3541 /* 4 */ { 0, BX_IA_ERROR },
3542 /* 5 */ { 0, BX_IA_ERROR },
3543 /* 6 */ { 0, BX_IA_ERROR },
3544 /* 7 */ { 0, BX_IA_ERROR }
3547 static const BxOpcodeInfo_t BxOpcodeInfoG11EdR[8] = {
3548 /* 0 */ { BxImmediate_Id, BX_IA_MOV_EdIdR },
3549 /* 1 */ { 0, BX_IA_ERROR },
3550 /* 2 */ { 0, BX_IA_ERROR },
3551 /* 3 */ { 0, BX_IA_ERROR },
3552 /* 4 */ { 0, BX_IA_ERROR },
3553 /* 5 */ { 0, BX_IA_ERROR },
3554 /* 6 */ { 0, BX_IA_ERROR },
3555 /* 7 */ { 0, BX_IA_ERROR }
3558 static const BxOpcodeInfo_t BxOpcodeInfoG11EdM[8] = {
3559 /* 0 */ { BxImmediate_Id, BX_IA_MOV_EdIdM },
3560 /* 1 */ { 0, BX_IA_ERROR },
3561 /* 2 */ { 0, BX_IA_ERROR },
3562 /* 3 */ { 0, BX_IA_ERROR },
3563 /* 4 */ { 0, BX_IA_ERROR },
3564 /* 5 */ { 0, BX_IA_ERROR },
3565 /* 6 */ { 0, BX_IA_ERROR },
3566 /* 7 */ { 0, BX_IA_ERROR }
3569 #if BX_SUPPORT_X86_64
3570 static const BxOpcodeInfo_t BxOpcodeInfo64G11EqR[8] = {
3571 /* 0 */ { BxImmediate_Id, BX_IA_MOV_EqIdR },
3572 /* 1 */ { 0, BX_IA_ERROR },
3573 /* 2 */ { 0, BX_IA_ERROR },
3574 /* 3 */ { 0, BX_IA_ERROR },
3575 /* 4 */ { 0, BX_IA_ERROR },
3576 /* 5 */ { 0, BX_IA_ERROR },
3577 /* 6 */ { 0, BX_IA_ERROR },
3578 /* 7 */ { 0, BX_IA_ERROR }
3581 static const BxOpcodeInfo_t BxOpcodeInfo64G11EqM[8] = {
3582 /* 0 */ { BxImmediate_Id, BX_IA_MOV_EqIdM },
3583 /* 1 */ { 0, BX_IA_ERROR },
3584 /* 2 */ { 0, BX_IA_ERROR },
3585 /* 3 */ { 0, BX_IA_ERROR },
3586 /* 4 */ { 0, BX_IA_ERROR },
3587 /* 5 */ { 0, BX_IA_ERROR },
3588 /* 6 */ { 0, BX_IA_ERROR },
3589 /* 7 */ { 0, BX_IA_ERROR }
3591 #endif
3593 /* ******** */
3594 /* Group 12 */
3595 /* ******** */
3597 static const BxOpcodeInfo_t BxOpcodeInfoG12R[8] = {
3598 /* 0 */ { 0, BX_IA_ERROR },
3599 /* 1 */ { 0, BX_IA_ERROR },
3600 /* 2 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_PSRLW_PqIb, BxOpcodeGroupSSE_G1202 },
3601 /* 3 */ { 0, BX_IA_ERROR },
3602 /* 4 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_PSRAW_PqIb, BxOpcodeGroupSSE_G1204 },
3603 /* 5 */ { 0, BX_IA_ERROR },
3604 /* 6 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_PSLLW_PqIb, BxOpcodeGroupSSE_G1206 },
3605 /* 7 */ { 0, BX_IA_ERROR }
3608 /* ******** */
3609 /* Group 13 */
3610 /* ******** */
3612 static const BxOpcodeInfo_t BxOpcodeInfoG13R[8] = {
3613 /* 0 */ { 0, BX_IA_ERROR },
3614 /* 1 */ { 0, BX_IA_ERROR },
3615 /* 2 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_PSRLD_PqIb, BxOpcodeGroupSSE_G1302 },
3616 /* 3 */ { 0, BX_IA_ERROR },
3617 /* 4 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_PSRAD_PqIb, BxOpcodeGroupSSE_G1304 },
3618 /* 5 */ { 0, BX_IA_ERROR },
3619 /* 6 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_PSLLD_PqIb, BxOpcodeGroupSSE_G1306 },
3620 /* 7 */ { 0, BX_IA_ERROR }
3623 /* ******** */
3624 /* Group 14 */
3625 /* ******** */
3627 static const BxOpcodeInfo_t BxOpcodeInfoG14R[8] = {
3628 /* 0 */ { 0, BX_IA_ERROR },
3629 /* 1 */ { 0, BX_IA_ERROR },
3630 /* 2 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_PSRLQ_PqIb, BxOpcodeGroupSSE_G1402 },
3631 /* 3 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_G1403 },
3632 /* 4 */ { 0, BX_IA_ERROR },
3633 /* 5 */ { 0, BX_IA_ERROR },
3634 /* 6 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_PSLLQ_PqIb, BxOpcodeGroupSSE_G1406 },
3635 /* 7 */ { BxImmediate_Ib | BxPrefixSSE, BX_IA_ERROR, BxOpcodeGroupSSE_G1407 }
3638 /* ******** */
3639 /* Group 15 */
3640 /* ******** */
3642 static const BxOpcodeInfo_t BxOpcodeInfoG15M[8] = {
3643 /* 0 */ { 0, BX_IA_FXSAVE },
3644 /* 1 */ { 0, BX_IA_FXRSTOR },
3645 /* 2 */ { 0, BX_IA_LDMXCSR },
3646 /* 3 */ { 0, BX_IA_STMXCSR },
3647 /* 4 */ { 0, BX_IA_XSAVE },
3648 /* 5 */ { 0, BX_IA_XRSTOR },
3649 /* 6 */ { 0, BX_IA_ERROR },
3650 /* 7 */ { 0, BX_IA_CLFLUSH }
3653 static const BxOpcodeInfo_t BxOpcodeInfoG15R[8] = {
3654 /* 0 */ { 0, BX_IA_ERROR },
3655 /* 1 */ { 0, BX_IA_ERROR },
3656 /* 2 */ { 0, BX_IA_ERROR },
3657 /* 3 */ { 0, BX_IA_ERROR },
3658 /* 4 */ { 0, BX_IA_ERROR },
3659 /* 5 */ { 0, BX_IA_NOP }, /* LFENCE */
3660 /* 6 */ { 0, BX_IA_NOP }, /* MFENCE */
3661 /* 7 */ { 0, BX_IA_NOP } /* SFENCE */
3664 #endif // BX_COMMON_FETCHDECODE_TABLES_H