Added SSETER map stubs -- untested
[dyninst.git] / common / src / arch-x86.C
1 /*
2  * See the dyninst/COPYRIGHT file for copyright information.
3  * 
4  * We provide the Paradyn Tools (below described as "Paradyn")
5  * on an AS IS basis, and do not warrant its validity or performance.
6  * We reserve the right to update, modify, or discontinue this
7  * software at any time.  We shall have no obligation to supply such
8  * updates or modifications or any other form of support to you.
9  * 
10  * By your use of Paradyn, you understand and agree that we (or any
11  * other person or entity with proprietary rights in Paradyn) are
12  * under no obligation to provide either maintenance services,
13  * update services, notices of latent defects, or correction of
14  * defects for Paradyn.
15  * 
16  * This library is free software; you can redistribute it and/or
17  * modify it under the terms of the GNU Lesser General Public
18  * License as published by the Free Software Foundation; either
19  * version 2.1 of the License, or (at your option) any later version.
20  * 
21  * This library is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24  * Lesser General Public License for more details.
25  * 
26  * You should have received a copy of the GNU Lesser General Public
27  * License along with this library; if not, write to the Free Software
28  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29  */
30
31 // $Id: arch-x86.C,v 1.5 2008/09/04 21:06:48 bill Exp $
32
33 // Official documentation used:    - IA-32 Intel Architecture Software Developer Manual (2001 ed.)
34 //                                 - AMD x86-64 Architecture Programmer's Manual (rev 3.00, 1/2002)
35 // Unofficial documentation used:  - www.sandpile.org/ia32
36 //                                 - NASM documentation
37
38 // Note: Unless specified "book" refers to Intel's manual
39
40 // This include *must* come first in the file.
41 #include "common/src/Types.h"
42
43 #include <assert.h>
44 #include <stdio.h>
45 #include <map>
46 #include <string>
47 #include <iostream>
48
49 #include "boost/assign/list_of.hpp"
50 #include "boost/assign/std/vector.hpp"
51 #include "boost/assign/std/set.hpp"
52
53 #include "common/src/arch-x86.h"
54 #include "dyn_regs.h"
55
56 #if defined(os_vxworks)
57 #include "common/src/wtxKludges.h"
58 #endif
59
60 // #define VEX_DEBUG
61
62 using namespace std;
63 using namespace boost::assign;
64
65 namespace NS_x86 {
66
67 unsigned int swapBytesIfNeeded(unsigned int i)
68 {
69     return i;
70 }
71
72 // groups
73 enum {
74   Grp1a=0, Grp1b, Grp1c, Grp1d, Grp2, Grp3a, Grp3b, Grp4, Grp5, Grp6, Grp7,
75   Grp8, Grp9, Grp11, Grp12, Grp13, Grp14, Grp15, Grp16, Grp17, GrpAMD
76 };
77
78 // SSE
79 enum {
80   SSE10=0, SSE11, SSE12, SSE13, SSE14, SSE15, SSE16, SSE17,
81   SSE28, SSE29, SSE2A, SSE2B, SSE2C, SSE2D, SSE2E, SSE2F,
82   SSE50, SSE51, SSE52, SSE53, SSE54, SSE55, SSE56, SSE57,
83   SSE58, SSE59, SSE5A, SSE5B, SSE5C, SSE5D, SSE5E, SSE5F,
84   SSE60, SSE61, SSE62, SSE63, SSE64, SSE65, SSE66, SSE67,
85   SSE68, SSE69, SSE6A, SSE6B, SSE6C, SSE6D, SSE6E, SSE6F,
86   SSE70, SSE74, SSE75, SSE76, SSE77,
87   SSE78, SSE79, SSE7C, SSE7D, SSE7E, SSE7F,
88   SSEB8,
89   SSEC2, SSEC4, SSEC5, SSEC6,
90   SSED0, SSED1, SSED2, SSED3, SSED4, SSED5, SSED6, SSED7,
91   SSED8, SSED9, SSEDA, SSEDB, SSEDC, SSEDD, SSEDE, SSEDF,
92   SSEE0, SSEE1, SSEE2, SSEE3, SSEE4, SSEE5, SSEE6, SSEE7,
93   SSEE8, SSEE9, SSEEA, SSEEB, SSEEC, SSEED, SSEEE, SSEEF,
94   SSEF0, SSEF1, SSEF2, SSEF3, SSEF4, SSEF5, SSEF6, SSEF7,
95   SSEF8, SSEF9, SSEFA, SSEFB, SSEFC, SSEFD, SSEFE, SSEFF
96 };
97
98 // SSE VEX multiplexing table
99 enum { /** AUTOGENERATED */
100         SSE08_F2 = 0, SSE08_F3,
101   SSE09_66, SSE09_F2, SSE09_F3, SSE09_NO,
102   SSE10_66, SSE10_F2, SSE10_F3, SSE10_NO,
103             SSE12_F2, SSE12_F3, SSE12_NO,
104   SSE13_66,                     SSE13_NO,
105   SSE14_66,                     SSE14_NO,
106   SSE15_66,                     SSE15_NO,
107   SSE16_66,           SSE16_F3, SSE16_NO,
108   SSE28_66,                     SSE28_NO,
109   SSE29_66,
110             SSE2A_F2, SSE2A_F3,
111                                 SSE2B_NO,
112             SSE2C_F2, SSE2C_F3,
113             SSE2D_F2, SSE2D_F3,
114   SSE2E_66,                     SSE2E_NO,
115   SSE2F_66,                     SSE2F_NO,
116   SSE41_66,                     SSE41_NO,
117   SSE42_66,                     SSE42_NO,
118   SSE44_66,                     SSE44_NO,
119   SSE45_66,                     SSE45_NO,
120   SSE46_66,                     SSE46_NO,
121   SSE47_66,                     SSE47_NO,
122   SSE48_66,           SSE48_F3, SSE48_NO,
123   SSE49_66, SSE49_F2, SSE49_F3, SSE49_NO,
124   SSE4A_66,                     SSE4A_NO,
125   SSE4B_66,                     SSE4B_NO,
126   SSE51_66, SSE51_F2, SSE51_F3, SSE51_NO,
127   SSE54_66,                     SSE54_NO,
128   SSE55_66,                     SSE55_NO,
129   SSE56_66,                     SSE56_NO,
130   SSE57_66,                     SSE57_NO,
131   SSE58_66, SSE58_F2, SSE58_F3, SSE58_NO, 
132   SSE59_66, SSE59_F2, SSE59_F3, SSE59_NO,
133   SSE5A_66, SSE5A_F2, SSE5A_F3, SSE5A_NO,
134   SSE5B_66,           SSE5B_F3, SSE5B_NO,
135   SSE5C_66, SSE5C_F2, SSE5C_F3, SSE5C_NO,
136   SSE5D_66, SSE5D_F2, SSE5D_F3, SSE5D_NO,
137   SSE5E_66, SSE5E_F2, SSE5E_F3, SSE5E_NO,
138   SSE5F_66, SSE5F_F2, SSE5F_F3, SSE5F_NO,
139   SSE60_66,
140   SSE61_66,
141   SSE62_66,
142   SSE63_66,
143   SSE64_66,
144   SSE65_66,
145   SSE66_66,
146   SSE67_66,
147   SSE68_66,
148   SSE69_66,
149   SSE6A_66,
150   SSE6B_66,
151   SSE6C_66,
152   SSE6D_66,
153   SSE6F_66, SSE6F_F3,
154   SSE70_66, SSE70_F2, SSE70_F3,
155   SSE71_66,
156   SSE72_66,
157   SSE73_66,
158   SSE74_66,
159   SSE75_66,
160   SSE76_66,
161                       SSE7E_F3,
162   SSE90_66,                     SSE90_NO,
163   SSE91_66,                     SSE91_NO,
164   SSE93_66, SSE93_F2,           SSE93_NO,
165   SSE98_66,                     SSE98_NO,
166   SSE99_66,                     SSE99_NO,
167   SSEC2_66, SSEC2_F2, SSEC2_F3, SSEC2_NO,
168   SSEC4_66,
169   SSEC5_66,
170   SSEC6_66,                     SSEC6_NO,
171   SSED1_66,
172   SSED2_66,
173   SSED3_66,
174   SSED4_66,
175   SSED5_66,
176   SSED8_66,
177   SSED9_66,
178   SSEDA_66,
179   SSEDC_66,
180   SSEDD_66,
181   SSEDE_66,
182   SSEDF_66,
183   SSEE0_66,
184   SSEE1_66,
185   SSEE2_66,
186   SSEE3_66,
187   SSEE4_66,
188   SSEE5_66,
189   SSEE6_66, SSEE6_F2, SSEE6_F3,
190   SSEE8_66,
191   SSEE9_66,
192   SSEEA_66,
193   SSEEB_66,
194   SSEEC_66,
195   SSEED_66,
196   SSEEE_66,
197   SSEEF_66,
198   SSEF1_66,
199   SSEF2_66,
200   SSEF3_66,
201   SSEF4_66,
202   SSEF5_66,
203   SSEF6_66,
204   SSEF8_66,
205   SSEF9_66,
206   SSEFA_66,
207   SSEFB_66,
208   SSEFC_66,
209   SSEFD_66,
210   SSEFE_66
211 };
212
213 // SSE BIS
214 enum {
215         SSEB00=0, SSEB01, SSEB02, SSEB03, SSEB04, SSEB05, SSEB06, SSEB07,
216         SSEB08, SSEB09, SSEB0A, SSEB0B, SSEB0C, SSEB0D, SSEB0E, SSEB0F,
217         SSEB10, SSEB13, SSEB14, SSEB15, SSEB16, SSEB17,
218         SSEB18, SSEB19, SSEB1A, SSEB1B, SSEB1C, SSEB1D, SSEB1E,
219         SSEB20, SSEB21, SSEB22, SSEB23, SSEB24, SSEB25, 
220         SSEB28, SSEB29, SSEB2A, SSEB2B, SSEB2C, SSEB2D, SSEB2E, SSEB2F,
221         SSEB30, SSEB31, SSEB32, SSEB33, SSEB34, SSEB35, SSEB36, SSEB37,
222         SSEB38, SSEB39, SSEB3A, SSEB3B, SSEB3C, SSEB3D, SSEB3E, SSEB3F,
223         SSEB40, SSEB41, SSEB45, SSEB46, SSEB47,
224   SSEB58, SSEB59, SSEB5A,
225   SSEB78, SSEB79,
226   SSEB8C, SSEB8E,
227   SSEB90, SSEB91, SSEB92, SSEB93,
228   SSEB96, SSEB97,
229   SSEB98, SSEB99, SSEB9A, SSEB9B, SSEB9C, SSEB9D, SSEB9E, SSEB9F,
230   SSEBA6, SSEBA7,
231   SSEBA8, SSEBA9, SSEBAA, SSEBAB, SSEBAC, SSEBAD, SSEBAE, SSEBAF,
232   SSEBB6, SSEBB7,
233   SSEBB8, SSEBB9, SSEBBA, SSEBBB, SSEBBC, SSEBBD, SSEBBE, SSEBBF,
234         SSEBF0, SSEBF1
235 };
236
237
238 // SSEB rows: not, F3, 66, F2, 66&F2
239 // SSE BIS VEX mult table
240 enum { /** AUTOGENERATED */
241   SSEB00_66 = 0,
242   SSEB04_66,
243              SSEB08_F3,
244   SSEB09_66, SSEB09_F3,
245   SSEB0B_66,
246   SSEB0C_66,
247   SSEB0D_66,
248   SSEB13_66,
249   SSEB16_66,
250   SSEB1C_66,
251   SSEB1D_66,
252   SSEB1E_66,
253   SSEB20_66,
254   SSEB21_66,
255   SSEB22_66,
256   SSEB23_66,
257   SSEB24_66,
258   SSEB25_66,
259   SSEB28_66,
260   SSEB29_66,
261   SSEB2B_66,
262   SSEB30_66,
263   SSEB31_66,
264   SSEB32_66,
265   SSEB33_66,
266   SSEB34_66,
267   SSEB35_66,
268   SSEB36_66,
269   SSEB37_66,
270   SSEB38_66,
271   SSEB39_66,
272   SSEB3A_66,
273   SSEB3B_66,
274   SSEB3C_66,
275   SSEB3D_66,
276   SSEB3E_66,
277   SSEB3F_66,
278   SSEB40_66,
279   SSEB45_66,
280   SSEB46_66,
281   SSEB47_66,
282   SSEB48_66, SSEB48_F3,
283   SSEB49_66, SSEB49_F3,
284   SSEB96_66,
285   SSEB97_66,
286   SSEB98_66,
287   SSEB99_66,
288   SSEB9A_66,
289   SSEB9B_66,
290   SSEB9C_66,
291   SSEB9D_66,
292   SSEB9E_66,
293   SSEB9F_66,
294   SSEBA6_66,
295   SSEBA7_66,
296   SSEBA8_66,
297   SSEBA9_66,
298   SSEBAA_66,
299   SSEBAB_66,
300   SSEBAC_66,
301   SSEBAD_66,
302   SSEBAE_66,
303   SSEBAF_66,
304   SSEBB6_66,
305   SSEBB7_66,
306   SSEBB8_66,
307   SSEBB9_66,
308   SSEBBA_66,
309   SSEBBB_66,
310   SSEBBC_66,
311   SSEBBD_66,
312   SSEBBE_66,
313   SSEBBF_66
314 };
315
316 // SSE TER 
317 enum {
318         SSET00=0, SSET01, SSET02, SSET04, SSET05, SSET06,
319   SSET08, SSET09, SSET0A, SSET0B, SSET0C, SSET0D, SSET0E, SSET0F,
320         SSET14, SSET15, SSET16, SSET17,
321         SSET18, SSET19, SSET1D,
322         SSET20, SSET21, SSET22, 
323   SSET38, SSET39,
324         SSET40, SSET41, SSET42, SSET46,
325         SSET60, SSET61, SSET62, SSET63
326 };
327
328 // SSET rows:  not, 66, F2
329 // SSE TER VEX Mult
330 enum { /** AUTOGENERATED */
331   SSET00_66,
332   SSET01_66,
333   SSET04_66,
334   SSET05_66,
335   SSET09_66,
336   SSET0F_66,
337   SSET14_66,
338   SSET16_66,
339   SSET17_66,
340   SSET18_66,
341   SSET19_66,
342   SSET1D_66,
343   SSET20_66,
344   SSET21_66,
345   SSET22_66,
346   SSET29_66,
347   SSET30_66,
348   SSET31_66,
349   SSET32_66,
350   SSET33_66,
351   SSET38_66,
352   SSET39_66,
353   SSET48_66,
354   SSET49_66,
355 };
356
357 // SSE groups
358 enum {
359   G12SSE010B=0, G12SSE100B, G12SSE110B,
360   G13SSE010B, G13SSE100B, G13SSE110B,
361   G14SSE010B, G14SSE011B, G14SSE110B, G14SSE111B,
362 };
363
364 enum {
365     GrpD8=0, GrpD9, GrpDA, GrpDB, GrpDC, GrpDD, GrpDE, GrpDF
366 };
367
368 // VEX tables
369 enum {
370   VEX200=0
371 };
372
373 enum {
374   VEX300=0, VEX301, VEX302, VEX303, VEX304, VEX305, VEX306, VEX307,
375   VEX308, VEX309, VEX30A, VEX30B, VEX30C, VEX30D, VEX30E, VEX30F,
376   VEX310, VEX311, VEX312, VEX313, VEX314, VEX315, VEX316, VEX317,
377   VEX318, VEX319, VEX31A, VEX31B, VEX31C, VEX31D, VEX31E, VEX31F,
378   VEX320, VEX321, VEX322, VEX323, VEX324, VEX325
379 };
380
381 /* SIMD op conversion table */
382 static char vex3_simdop_convert[3][4] = {
383   {0, 2,  1, 3},
384   {0, 2,  1, 3},
385   {0, 1, -1, 2}
386 };
387
388 #define Zz   { 0, 0 }
389 #define ImplImm { am_ImplImm, op_b }
390 #define Ap   { am_A, op_p }
391 #define Cd   { am_C, op_d }
392 #define Dd   { am_D, op_d }
393 #define Eb   { am_E, op_b }
394 #define Ed   { am_E, op_d }
395 #define Ef   { am_E, op_f }
396 #define Efd  { am_E, op_dbl }
397 #define Ep   { am_E, op_p }
398 #define Ev   { am_E, op_v }
399 #define Ew   { am_E, op_w }
400 #define Ey       { am_E, op_y }
401 #define Fv   { am_F, op_v }
402 #define Gb   { am_G, op_b }
403 #define Gd   { am_G, op_d }
404 #define Gv   { am_G, op_v }
405 #define Gw   { am_G, op_w }
406 #define Gf   { am_G, op_f }
407 #define Gfd  { am_G, op_dbl }
408 #define Hps  { am_H, op_ps }
409 #define Hpd  { am_H, op_pd }
410 #define Hss  { am_H, op_ss }
411 #define Hsd  { am_H, op_sd }
412 #define Hdq  { am_H, op_dq }
413 #define Hqq  { am_H, op_qq }
414 #define Ib   { am_I, op_b }
415 #define Iv   { am_I, op_v }
416 #define Iw   { am_I, op_w }
417 #define Iz   { am_I, op_z }
418 #define Jb   { am_J, op_b }
419 #define Jv   { am_J, op_v }
420 #define Jz   { am_J, op_z }
421 #define Ma   { am_M, op_a }
422 #define Mb   { am_M, op_b }
423 #define Mlea { am_M, op_lea }
424 #define Mp   { am_M, op_p }
425 #define Ms   { am_M, op_s }
426 #define Md   { am_M, op_d }
427 #define Mq   { am_M, op_q }
428 #define Mdq   { am_M, op_dq }
429 #define M512 { am_M, op_512 }
430 #define Mf   { am_M, op_f }
431 #define Mfd  { am_M, op_dbl }
432 #define M14  { am_M, op_14 }
433 #define Nss  { am_N, op_ss }
434 #define Ob   { am_O, op_b }
435 #define Ov   { am_O, op_v }
436 #define Pd   { am_P, op_d }
437 #define Pdq  { am_P, op_dq }
438 #define Ppi  { am_P, op_pi }
439 #define Pq   { am_P, op_q }
440 #define Qdq  { am_Q, op_dq }
441 #define Qd   { am_Q, op_d }
442 #define Qpi  { am_Q, op_pi }
443 #define Qq   { am_Q, op_q }
444 #define Rd   { am_R, op_d }
445 #define RMb  { am_RM, op_b }
446 #define RMw  { am_RM, op_w }
447 #define Td   { am_T, op_d }
448 #define UMd      { am_UM, op_d }
449 #define Ups  { am_U, op_ps }
450 #define Upd  { am_U, op_pd }
451 #define Sw   { am_S, op_w }
452 #define Vd   { am_V, op_d }
453 #define Vdq  { am_V, op_dq }
454 #define Vpd  { am_V, op_pd }
455 #define Vps  { am_V, op_ps }
456 #define Vq   { am_V, op_q }
457 #define VRq  { am_VR, op_q }
458 #define VRdq { am_VR, op_dq }
459 #define Vss  { am_V, op_ss }
460 #define Vsd  { am_V, op_sd }
461 #define Wdq  { am_W, op_dq }
462 #define Wpd  { am_W, op_pd }
463 #define Wqq  { am_W, op_qq }
464 #define Wps  { am_W, op_ps }
465 #define Wq   { am_W, op_q }
466 #define Wb   { am_W, op_b }
467 #define Ww   { am_W, op_w }
468 #define Wd   { am_W, op_d }
469 #define Ws   { am_W, op_s }
470 #define Wsd  { am_W, op_sd }
471 #define Wss  { am_W, op_ss }
472 #define Xb   { am_X, op_b }
473 #define Xv   { am_X, op_v }
474 #define Yb   { am_Y, op_b }
475 #define Yv   { am_Y, op_v }
476 #define STHb { am_stackH, op_b }
477 #define STPb { am_stackP, op_b }
478 #define STHv { am_stackH, op_v }
479 #define STPv { am_stackP, op_v }
480 #define STHw { am_stackH, op_w }
481 #define STPw { am_stackP, op_w }
482 #define STHd { am_stackH, op_d }
483 #define STPd { am_stackP, op_d }
484 #define STHa { am_stackH, op_allgprs }
485 #define STPa { am_stackP, op_allgprs }
486
487 #define STKb { am_stack, op_b }
488 #define STKv { am_stack, op_v }
489 #define STKw { am_stack, op_w }
490 #define STKd { am_stack, op_d }
491 #define STKa { am_stack, op_allgprs }
492
493
494 #define GPRS { am_allgprs, op_allgprs }
495
496 #define AH  { am_reg, x86::iah }
497 #define AX  { am_reg, x86::iax }
498 #define BH  { am_reg, x86::ibh }
499 #define CH  { am_reg, x86::ich }
500 #define DH  { am_reg, x86::idh }
501 #define AL  { am_reg, x86::ial }
502 #define BL  { am_reg, x86::ibl }
503 #define CL  { am_reg, x86::icl }
504 #define CS  { am_reg, x86::ics }
505 #define DL  { am_reg, x86::idl }
506 #define DX  { am_reg, x86::idx }
507 #define eAX { am_reg, x86::ieax }
508 #define eBX { am_reg, x86::iebx }
509 #define eCX { am_reg, x86::iecx }
510 #define eDX { am_reg, x86::iedx }
511 #define EAX { am_reg, x86::ieax }
512 #define EBX { am_reg, x86::iebx }
513 #define ECX { am_reg, x86::iecx }
514 #define EDX { am_reg, x86::iedx }
515 #define DS  { am_reg, x86::ids }
516 #define ES  { am_reg, x86::ies }
517 #define FS  { am_reg, x86::ifs }
518 #define GS  { am_reg, x86::igs }
519 #define SS  { am_reg, x86::iss }
520 #define eSP { am_reg, x86::iesp }
521 #define eBP { am_reg, x86::iebp }
522 #define eSI { am_reg, x86::iesi }
523 #define eDI { am_reg, x86::iedi }
524 #define ESP { am_reg, x86::iesp }
525 #define EBP { am_reg, x86::iebp }
526 #define ESI { am_reg, x86::iesi }
527 #define EDI { am_reg, x86::iedi }
528 #define ECXEBX { am_tworeghack, op_ecxebx }
529 #define EDXEAX { am_tworeghack, op_edxeax }
530 #define rAX { am_reg, x86::ieax }
531 #define rBX { am_reg, x86::iebx }
532 #define rCX { am_reg, x86::iecx }
533 #define rDX { am_reg, x86::iedx }
534 #define rSP { am_reg, x86::iesp }
535 #define rBP { am_reg, x86::iebp }
536 #define rSI { am_reg, x86::iesi }
537 #define rDI { am_reg, x86::iedi }
538 #define ST0 { am_reg, x86::ist0 }
539 #define ST1 { am_reg, x86::ist1 }
540 #define ST2 { am_reg, x86::ist2 }
541 #define ST3 { am_reg, x86::ist3 }
542 #define ST4 { am_reg, x86::ist4 }
543 #define ST5 { am_reg, x86::ist5 }
544 #define ST6 { am_reg, x86::ist6 }
545 #define ST7 { am_reg, x86::ist7 }
546 #define FPOS 17
547
548 enum {
549   fNT=1,   // non-temporal
550   fPREFETCHNT,
551   fPREFETCHT0,
552   fPREFETCHT1,
553   fPREFETCHT2,
554   fPREFETCHAMDE,
555   fPREFETCHAMDW,
556   fCALL,
557   fNEARRET,
558   fFARRET,
559   fIRET,
560   fENTER,
561   fLEAVE,
562   fXLAT,
563   fIO,
564   fSEGDESC,
565   fCOND,
566   fCMPXCH,
567   fCMPXCH8,
568   fINDIRCALL,
569   fINDIRJUMP,
570   fFXSAVE,
571   fFXRSTOR,
572   fCLFLUSH,
573   fREP,   // only rep prefix allowed: ins, movs, outs, lods, stos
574   fSCAS,
575   fCMPS
576 };
577
578 COMMON_EXPORT dyn_hash_map<entryID, std::string> entryNames_IAPI = map_list_of
579   (e_aaa, "aaa")
580   (e_aad, "aad")
581   (e_aam, "aam")
582   (e_aas, "aas")
583   (e_adc, "adc")
584   (e_add, "add")
585   (e_addpd, "addpd")
586   (e_addps, "addps")
587   (e_addsd, "addsd")
588   (e_addss, "addss")
589   (e_addsubpd, "addsubpd")
590   (e_addsubps, "addsubps")
591   (e_and, "and")
592   (e_andnpd, "andnpd")
593   (e_andnps, "andnps")
594   (e_andpd, "andpd")
595   (e_andps, "andps")
596   (e_arpl, "arpl")
597   (e_blendpd,"blendpd")
598   (e_blendps, "blendps")
599   (e_blendvpd, "blendvpd")
600   (e_blendvps, "blendvps")
601   (e_bound, "bound")
602   (e_bsf, "bsf")
603   (e_bsr, "bsr")
604   (e_bswap, "bswap")
605   (e_bt, "bt")
606   (e_btc, "btc")
607   (e_btr, "btr")
608   (e_bts, "bts")
609   (e_call, "call")
610   (e_cbw, "cbw")
611   (e_cdq, "cdq")
612   (e_clc, "clc")
613   (e_cld, "cld")
614   (e_clflush, "clflush")
615   (e_cli, "cli")
616   (e_clts, "clts")
617   (e_cmc, "cmc")
618   (e_cmovbe, "cmovbe")
619   (e_cmove, "cmove")
620   (e_cmovnae, "cmovnae")
621   (e_cmovnb, "cmovnb")
622   (e_cmovnbe, "cmovnbe")
623   (e_cmovne, "cmovne")
624   (e_cmovng, "cmovng")
625   (e_cmovnge, "cmovnge")
626   (e_cmovnl, "cmovnl")
627   (e_cmovno, "cmovno")
628   (e_cmovns, "cmovns")
629   (e_cmovo, "cmovo")
630   (e_cmovpe, "cmovpe")
631   (e_cmovpo, "cmovpo")
632   (e_cmovs, "cmovs")
633   (e_cmp, "cmp")
634   (e_cmppd, "cmppd")
635   (e_cmpps, "cmpps")
636   (e_cmpsb, "cmpsb")
637   (e_cmpsd, "cmpsd")
638   (e_cmpsd_sse, "cmpsd")
639   (e_cmpss, "cmpss")
640   (e_cmpsw, "cmpsw")
641   (e_cmpxch, "cmpxch")
642   (e_cmpxch8b, "cmpxch8b")
643   (e_comisd, "comisd")
644   (e_comiss, "comiss")
645   (e_cpuid, "cpuid")
646   (e_crc32, "crc32")
647   (e_cvtdq2pd, "cvtdq2pd")
648   (e_cvtdq2ps, "cvtdq2ps")
649   (e_cvtpd2dq, "cvtpd2dq")
650   (e_cvtpd2pi, "cvtpd2pi")
651   (e_cvtpd2ps, "cvtpd2ps")
652   (e_cvtpi2pd, "cvtpi2pd")
653   (e_cvtpi2ps, "cvtpi2ps")
654   (e_cvtps2dq, "cvtps2dq")
655   (e_cvtps2pd, "cvtps2pd")
656   (e_cvtps2pi, "cvtps2pi")
657   (e_cvtsd2si, "cvtsd2si")
658   (e_cvtsd2ss, "cvtsd2ss")
659   (e_cvtsi2sd, "cvtsi2sd")
660   (e_cvtsi2ss, "cvtsi2ss")
661   (e_cvtss2sd, "cvtss2sd")
662   (e_cvtss2si, "cvtss2si")
663   (e_cvttpd2dq, "cvttpd2dq")
664   (e_cvttpd2pi, "cvttpd2pi")
665   (e_cvttps2dq, "cvttps2dq")
666   (e_cvttps2pi, "cvttps2pi")
667   (e_cvttsd2si, "cvttsd2si")
668   (e_cvttss2si, "cvttss2si")
669   (e_cwd, "cwd")
670   (e_cwde, "cwde")
671   (e_daa, "daa")
672   (e_das, "das")
673   (e_dec, "dec")
674   (e_div, "div")
675   (e_divpd, "divpd")
676   (e_divps, "divps")
677   (e_divsd, "divsd")
678   (e_divss, "divss")
679   (e_dppd, "dppd")
680   (e_dpps, "dpps")
681   (e_emms, "emms")
682   (e_enter, "enter")
683   (e_extractps, "extractps")
684   (e_extrq, "extrq")
685   (e_fadd, "fadd")
686   (e_faddp, "faddp")
687  (e_f2xm1, "f2xm1")
688   (e_fbld, "fbld")
689   (e_fbstp, "fbstp")
690  (e_fchs, "fchs")
691  (e_fcmovb, "fcmovb")
692  (e_fcmovbe, "fcmovbe")
693  (e_fcmove, "fcmove")
694  (e_fcmovne, "fcmovne")
695  (e_fcmovu, "fcmovu")
696  (e_fcmovnu, "fcmovnu")
697  (e_fcmovnb, "fcmovnb")
698  (e_fcmovnbe, "fcmovnbe")
699   (e_fcom, "fcom")
700   (e_fcomi, "fcomi")
701   (e_fcomip, "fcomip")
702   (e_fcomp, "fcomp")
703   (e_fcompp, "fcompp")
704   (e_fdiv, "fdiv")
705   (e_fdivp, "fdivp")
706   (e_fdivr, "fdivr")
707   (e_fdivrp, "fdivrp")
708   (e_femms, "femms")
709  (e_ffree, "ffree")
710  (e_ffreep, "ffreep")
711   (e_fiadd, "fiadd")
712   (e_ficom, "ficom")
713   (e_ficomp, "ficomp")
714   (e_fidiv, "fidiv")
715   (e_fidivr, "fidivr")
716   (e_fild, "fild")
717   (e_fimul, "fimul")
718   (e_fist, "fist")
719   (e_fistp, "fistp")
720   (e_fisttp, "fisttp")
721   (e_fisub, "fisub")
722   (e_fisubr, "fisubr")
723   (e_fld, "fld")
724  (e_fld1, "fld1")
725   (e_fldcw, "fldcw")
726   (e_fldenv, "fldenv")
727   (e_fmul, "fmul")
728   (e_fmulp, "fmulp")
729   (e_fnop, "fnop")
730  (e_fprem, "fprem")
731   (e_frstor, "frstor")
732   (e_fsave, "fsave")
733   (e_fst, "fst")
734   (e_fstcw, "fstcw")
735   (e_fstenv, "fstenv")
736   (e_fstp, "fstp")
737   (e_fstsw, "fstsw")
738   (e_fsub, "fsub")
739   (e_fsubp, "fsubp")
740   (e_fsubr, "fsubr")
741   (e_fsubrp, "fsubrp")
742   (e_fucom, "fucom")
743   (e_fucomp, "fucomp")
744   (e_fucomi, "fucomi")
745   (e_fucomip, "fucomip")
746   (e_fucompp, "fucompp")
747  (e_fxch, "fxch")
748   (e_fxrstor, "fxrstor")
749   (e_fxsave, "fxsave")
750   (e_haddpd, "haddpd")
751   (e_haddps, "haddps")
752   (e_hlt, "hlt")
753   (e_hsubpd, "hsubpd")
754   (e_hsubps, "hsubps")
755   (e_idiv, "idiv")
756   (e_imul, "imul")
757   (e_in, "in")
758   (e_inc, "inc")
759   (e_insb, "insb")
760   (e_insd, "insd")
761   (e_insertps, "insertps")
762   (e_insertq, "insertq")
763   (e_insw, "insw")
764   (e_int, "int")
765   (e_int3, "int 3")
766   (e_int1, "int1")
767   (e_int80, "int 80")
768   (e_into, "into")
769   (e_invd, "invd")
770   (e_invlpg, "invlpg")
771   (e_iret, "iret")
772   (e_jb, "jb")
773   (e_jb_jnaej_j, "jb")
774   (e_jbe, "jbe")
775   (e_jcxz_jec, "jcxz")
776   (e_jl, "jl")
777   (e_jle, "jle")
778   (e_jmp, "jmp")
779   (e_jnb, "jnb")
780   (e_jnb_jae_j, "jnb")
781   (e_jnbe, "jnbe")
782   (e_jnl, "jnl")
783   (e_jnle, "jnle")
784   (e_jno, "jno")
785   (e_jnp, "jnp")
786   (e_jns, "jns")
787   (e_jnz, "jnz")
788   (e_jo, "jo")
789   (e_jp, "jp")
790   (e_js, "js")
791   (e_jz, "jz")
792   (e_lahf, "lahf")
793   (e_lar, "lar")
794   (e_ldmxcsr, "ldmxcsr")
795   (e_lds, "lds")
796   (e_lddqu, "lddqu")
797   (e_lea, "lea")
798   (e_leave, "leave")
799   (e_les, "les")
800   (e_lfence, "lfence")
801   (e_lfs, "lfs")
802   (e_lgdt, "lgdt")
803   (e_lgs, "lgs")
804   (e_lidt, "lidt")
805   (e_lldt, "lldt")
806   (e_lmsw, "lmsw")
807   (e_lodsb, "lodsb")
808   (e_lodsd, "lodsd")
809   (e_lodsw, "lodsw")
810   (e_loop, "loop")
811   (e_loope, "loope")
812   (e_loopn, "loopn")
813   (e_lsl, "lsl")
814   (e_lss, "lss")
815   (e_ltr, "ltr")
816   (e_maskmovdqu, "maskmovdqu")
817   (e_maskmovq, "maskmovq")
818   (e_maxpd, "maxpd")
819   (e_maxps, "maxps")
820   (e_maxsd, "maxsd")
821   (e_maxss, "maxss")
822   (e_mfence, "mfence")
823   (e_minpd, "minpd")
824   (e_minps, "minps")
825   (e_minsd, "minsd")
826   (e_minss, "minss")
827   (e_mmxud, "mmxud")
828   (e_mov, "mov")
829   (e_movapd, "movapd")
830   (e_movaps, "movaps")
831   (e_movd, "movd")
832   (e_movddup, "movddup")
833   (e_movdq2q, "movdq2q")
834   (e_movdqa, "movdqa")
835   (e_movdqu, "movdqu")
836   (e_movhpd, "movhpd")
837   (e_movhps, "movhps")
838   (e_movhps_movlhps, "movhps/movlhps")
839   (e_movlpd, "movlpd")
840   (e_movlps, "movlps")
841   (e_movlps_movhlps, "movlps/movhlps")
842   (e_movmskpd, "movmskpd")
843   (e_movmskps, "movmskps")
844   (e_movntdq, "movntdq")
845   (e_movntdqa, "movntdqa")
846   (e_movnti, "movnti")
847   (e_movntpd, "movntpd")
848   (e_movntps, "movntps")
849   (e_movntq, "movntq")
850   (e_movq, "movq")
851   (e_movq2dq, "movq2dq")
852   (e_movsb, "movsb")
853   (e_movsd, "movsd")
854   (e_movsd_sse, "movsd")
855   (e_movshdup, "movshdup")
856   (e_movsldup, "movsldup")
857   (e_movss, "movss")
858   (e_movsw, "movsw")
859   (e_movsx, "movsx")
860   (e_movsxd, "movsxd")
861   (e_movupd, "movupd")
862   (e_movups, "movups")
863   (e_movzx, "movzx")
864   (e_mpsadbw, "mpsadbw")
865   (e_mul, "mul")
866   (e_mulpd, "mulpd")
867   (e_mulps, "mulps")
868   (e_mulsd, "mulsd")
869   (e_mulss, "mulss")
870   (e_neg, "neg")
871   (e_nop, "nop")
872   (e_not, "not")
873   (e_or, "or")
874   (e_orpd, "orpd")
875   (e_orps, "orps")
876   (e_out, "out")
877   (e_outsb, "outsb")
878   (e_outsd, "outsd")
879   (e_outsw, "outsw")
880   (e_pabsb, "pabsb")
881   (e_pabsd, "pabsd")
882   (e_pabsw, "pabsw")
883   (e_packssdw, "packssdw")
884   (e_packsswb, "packsswb")
885   (e_packusdw, "packusdw")
886   (e_packuswb, "packuswb")
887   (e_paddb, "paddb")
888   (e_paddd, "paddd")
889   (e_paddq, "paddq")
890   (e_paddsb, "paddsb")
891   (e_paddsw, "paddsw")
892   (e_paddusb, "paddusb")
893   (e_paddusw, "paddusw")
894   (e_paddw, "paddw")
895   (e_palignr, "palignr")
896   (e_pand, "pand")
897   (e_pandn, "pandn")
898   (e_pavgb, "pavgb")
899   (e_pavgw, "pavgw")
900   (e_pblendvb, "pblendvb")
901   (e_pblendw, "pblendw")
902   (e_pcmpeqb, "pcmpeqb")
903   (e_pcmpeqd, "pcmpeqd")
904   (e_pcmpeqq, "pcmpeqq")
905   (e_pcmpeqw, "pcmpeqw")
906   (e_pcmpestri, "pcmpestri")
907   (e_pcmpestrm, "pcmpestrm")
908   (e_pcmpgdt, "pcmpgdt")
909   (e_pcmpgtb, "pcmpgtb")
910   (e_pcmpgtq, "pcmpgtq")
911   (e_pcmpgtw, "pcmpgtw")
912   (e_pcmpistri, "pcmpistri")
913   (e_pcmpistrm, "pcmpistrm")
914   (e_pextrb, "pextrb")
915   (e_pextrd_pextrq, "pextrd/pextrq")
916   (e_pextrw, "pextrw")
917   (e_phaddd, "phaddd")
918   (e_phaddsw, "phaddsw")
919   (e_phaddw, "phaddw")
920   (e_phminposuw, "phminposuw")
921   (e_phsubd, "phsubd")
922   (e_phsubsw, "phsubsw")
923   (e_phsubw, "phsubw")
924   (e_pinsrb, "pinsrb")
925   (e_pinsrd_pinsrq, "pinsrd/pinsrq")
926   (e_pinsrw, "pinsrw")
927   (e_pmaddubsw, "pmaddubsw")
928   (e_pmaddwd, "pmaddwd")
929   (e_pmaxsb, "pmaxsb")
930   (e_pmaxsd, "pmaxsd")
931   (e_pmaxsw, "pmaxsw")
932   (e_pmaxub, "pmaxub")
933   (e_pmaxud, "pmaxud")
934   (e_pmaxuw, "pmaxuw")
935   (e_pminsb, "pminsb")
936   (e_pminsd, "pminsd")
937   (e_pminsw, "pminsw")
938   (e_pminub, "pminub")
939   (e_pminud, "pminud")
940   (e_pminuw, "pminuw")
941   (e_pmovmskb, "pmovmskb")
942   (e_pmovsxbd, "pmovsxbd")
943   (e_pmovsxbq, "pmovsxbq")
944   (e_pmovsxbw, "pmovsxbw")
945   (e_pmovsxdq, "pmovsxdq")
946   (e_pmovsxwd, "pmovsxwd")
947   (e_pmovsxwq, "pmovsxwq")
948   (e_pmovzxbd, "pmovzxbd")
949   (e_pmovzxbq, "pmovzxbq")
950   (e_pmovzxbw, "pmovzxbw")
951   (e_pmovzxdq, "pmovzxdq")
952   (e_pmovzxwd, "pmovzxwd")
953   (e_pmovzxwq, "pmovzxwq")
954   (e_pmuldq, "pmuldq")
955   (e_pmulhrsw, "pmulhrsw")
956   (e_pmulhuw, "pmulhuw")
957   (e_pmulhw, "pmulhw")
958   (e_pmullw, "pmullw")
959   (e_pmulld, "pmulld")
960   (e_pmuludq, "pmuludq")
961   (e_pop, "pop")
962   (e_popa, "popa")
963   (e_popad, "popad")
964   (e_popcnt, "popcnt")
965   (e_popf, "popf")
966   (e_popfd, "popfd")
967   (e_por, "por")
968   (e_prefetch, "prefetch")
969   (e_prefetchNTA, "prefetchNTA")
970   (e_prefetchT0, "prefetchT0")
971   (e_prefetchT1, "prefetchT1")
972   (e_prefetchT2, "prefetchT2")
973   (e_prefetch_w, "prefetch(w)")
974   (e_prefetchw, "prefetchw")
975   (e_psadbw, "psadbw")
976   (e_pshufb, "pshufb")
977   (e_pshufd, "pshufd")
978   (e_pshufhw, "pshufhw")
979   (e_pshuflw, "pshuflw")
980   (e_pshufw, "pshufw")
981   (e_psignb, "psignb")
982   (e_psignd, "psignd")
983   (e_psignw, "psignw")
984   (e_pslld, "pslld")
985   (e_pslldq, "pslldq")
986   (e_psllq, "psllq")
987   (e_psllw, "psllw")
988   (e_psrad, "psrad")
989   (e_psraw, "psraw")
990   (e_psrld, "psrld")
991   (e_psrldq, "psrldq")
992   (e_psrlq, "psrlq")
993   (e_psrlw, "psrlw")
994   (e_psubb, "psubb")
995   (e_psubd, "psubd")
996   (e_psubsb, "psubsb")
997   (e_psubsw, "psubsw")
998   (e_psubusb, "psubusb")
999   (e_psubusw, "psubusw")
1000   (e_psubw, "psubw")
1001   (e_ptest, "ptest")
1002   (e_punpckhbw, "punpckhbw")
1003   (e_punpckhdq, "punpckhdq")
1004   (e_punpckhqd, "punpckhqd")
1005   (e_punpckhwd, "punpckhwd")
1006   (e_punpcklbw, "punpcklbw")
1007   (e_punpcklqd, "punpcklqd")
1008   (e_punpcklqld, "punpcklqld")
1009   (e_punpcklwd, "punpcklwd")
1010   (e_push, "push")
1011   (e_pusha, "pusha")
1012   (e_pushad, "pushad")
1013   (e_pushf, "pushf")
1014   (e_pushfd, "pushfd")
1015   (e_pxor, "pxor")
1016   (e_rcl, "rcl")
1017   (e_rcpps, "rcpps")
1018   (e_rcpss, "rcpss")
1019   (e_rcr, "rcr")
1020   (e_rdmsr, "rdmsr")
1021   (e_rdpmc, "rdpmc")
1022   (e_rdtsc, "rdtsc")
1023   (e_ret_far, "ret far")
1024   (e_ret_near, "ret near")
1025   (e_rol, "rol")
1026   (e_ror, "ror")
1027   (e_roundpd, "roundpd")
1028   (e_roundps, "roundps")
1029   (e_roundsd, "roundsd")
1030   (e_roundss, "roundss")
1031   (e_rsm, "rsm")
1032   (e_rsqrtps, "rsqrtps")
1033   (e_rsqrtss, "rsqrtss")
1034   (e_sahf, "sahf")
1035   (e_salc, "salc")
1036   (e_sar, "sar")
1037   (e_sbb, "sbb")
1038   (e_scasb, "scasb")
1039   (e_scasd, "scasd")
1040   (e_scasw, "scasw")
1041   (e_setb, "setb")
1042   (e_setbe, "setbe")
1043   (e_setl, "setl")
1044   (e_setle, "setle")
1045   (e_setnb, "setnb")
1046   (e_setnbe, "setnbe")
1047   (e_setnl, "setnl")
1048   (e_setnle, "setnle")
1049   (e_setno, "setno")
1050   (e_setnp, "setnp")
1051   (e_setns, "setns")
1052   (e_setnz, "setnz")
1053   (e_seto, "seto")
1054   (e_setp, "setp")
1055   (e_sets, "sets")
1056   (e_setz, "setz")
1057   (e_sfence, "sfence")
1058   (e_sgdt, "sgdt")
1059   (e_shl_sal, "shl/sal")
1060   (e_shld, "shld")
1061   (e_shr, "shr")
1062   (e_shrd, "shrd")
1063   (e_shufpd, "shufpd")
1064   (e_shufps, "shufps")
1065   (e_sidt, "sidt")
1066   (e_sldt, "sldt")
1067   (e_smsw, "smsw")
1068   (e_sqrtpd, "sqrtpd")
1069   (e_sqrtps, "sqrtps")
1070   (e_sqrtsd, "sqrtsd")
1071   (e_sqrtss, "sqrtss")
1072   (e_stc, "stc")
1073   (e_std, "std")
1074   (e_sti, "sti")
1075   (e_stmxcsr, "stmxcsr")
1076   (e_stosb, "stosb")
1077   (e_stosd, "stosd")
1078   (e_stosw, "stosw")
1079   (e_str, "str")
1080   (e_sub, "sub")
1081   (e_subpd, "subpd")
1082   (e_subps, "subps")
1083   (e_subsd, "subsd")
1084   (e_subss, "subss")
1085   (e_syscall, "syscall")
1086   (e_sysenter, "sysenter")
1087   (e_sysexit, "sysexit")
1088   (e_sysret, "sysret")
1089   (e_test, "test")
1090   (e_ucomisd, "ucomisd")
1091   (e_ucomiss, "ucomiss")
1092   (e_ud2, "ud2")
1093   (e_ud2grp10, "ud2grp10")
1094   (e_unpckhpd, "unpckhpd")
1095   (e_unpckhps, "unpckhps")
1096   (e_unpcklpd, "unpcklpd")
1097   (e_unpcklps, "unpcklps")
1098   (e_verr, "verr")
1099   (e_verw, "verw")
1100   (e_wait, "wait")
1101   (e_wbinvd, "wbinvd")
1102   (e_wrmsr, "wrmsr")
1103   (e_xadd, "xadd")
1104   (e_xchg, "xchg")
1105   (e_xlat, "xlat")
1106   (e_xor, "xor")
1107   (e_xorpd, "xorpd")
1108   (e_xorps, "xorps")
1109
1110   (e_vaddpd, "vaddpd")
1111   (e_vaddps, "vaddps")
1112   (e_vaddsd, "vaddsd")
1113   (e_vaddss, "vaddss")
1114   (e_vandnpd, "vandnpd")
1115   (e_vandnps, "vandnps")
1116   (e_vandpd, "vandpd")
1117   (e_vandps, "vandps")
1118   (e_vbroadcastf128, "vbroadcastf128")
1119   (e_vbroadcasti128, "vbroadcasti128")
1120   (e_vbroadcastsd, "vbroadcastsd")
1121   (e_vbroadcastss, "vbroadcastss")
1122   (e_vcmppd, "vcmppd")
1123   (e_vcmpps, "vcmpps")
1124   (e_vcmpsd, "vcmpsd")
1125   (e_vcmpss, "vcmpss")
1126   (e_vcomisd, "vcomisd")
1127   (e_vcomiss, "vcomiss")
1128   (e_vcvtdq2pd, "vcvtdq2pd")
1129   (e_vcvtdq2ps, "vcvtdq2ps")
1130   (e_vcvtpd2dq, "vcvtpd2dq")
1131   (e_vcvtpd2ps, "vcvtpd2ps")
1132   (e_vcvtph2ps, "vcvtph2ps")
1133   (e_vcvtps2dq, "vcvtps2dq")
1134   (e_vcvtps2pd, "vcvtps2pd")
1135   (e_vcvtps2ph, "vcvtps2ph")
1136   (e_vcvtsd2si, "vcvtsd2si")
1137   (e_vcvtsd2ss, "vcvtsd2ss")
1138   (e_vcvtsi2sd, "vcvtsi2sd")
1139   (e_vcvtsi2ss, "vcvtsi2ss")
1140   (e_vcvtss2sd, "vcvtss2sd")
1141   (e_vcvtss2si, "vcvtss2si")
1142   (e_vcvttpd2dq, "vcvttpd2dq")
1143   (e_vcvttps2dq, "vcvttps2dq")
1144   (e_vcvttsd2si, "vcvttsd2si")
1145   (e_vcvttss2si, "vcvttss2si")
1146   (e_vdivpd, "vdivpd")
1147   (e_vdivps, "vdivps")
1148   (e_vdivsd, "vdivsd")
1149   (e_vdivss, "vdivss")
1150   (e_vextractf128, "vextractf128")
1151   (e_vextracti128, "vextracti128")
1152   (e_vextractps, "vextractps")
1153   (e_vfmadd132pd, "vfmadd132pd")
1154   (e_vfmadd132ps, "vfmadd132ps")
1155   (e_vfmadd132sd, "vfmadd132sd")
1156   (e_vfmadd132ss, "vfmadd132ss")
1157   (e_vfmadd213pd, "vfmadd213pd")
1158   (e_vfmadd213ps, "vfmadd213ps")
1159   (e_vfmadd213sd, "vfmadd213sd")
1160   (e_vfmadd213ss, "vfmadd213ss")
1161   (e_vfmadd231pd, "vfmadd231pd")
1162   (e_vfmadd231ps, "vfmadd231ps")
1163   (e_vfmadd231sd, "vfmadd231sd")
1164   (e_vfmadd231ss, "vfmadd231ss")
1165   (e_vfmaddsub132pd, "vfmaddsub132pd")
1166   (e_vfmaddsub132ps, "vfmaddsub132ps")
1167   (e_vfmaddsub213pd, "vfmaddsub213pd")
1168   (e_vfmaddsub213ps, "vfmaddsub213ps")
1169   (e_vfmaddsub231pd, "vfmaddsub231pd")
1170   (e_vfmaddsub231ps, "vfmaddsub231ps")
1171   (e_vfmsub132pd, "vfmsub132pd")
1172   (e_vfmsub132ps, "vfmsub132ps")
1173   (e_vfmsub132sd, "vfmsub132sd")
1174   (e_vfmsub132ss, "vfmsub132ss")
1175   (e_vfmsub213pd, "vfmsub213pd")
1176   (e_vfmsub213ps, "vfmsub213ps")
1177   (e_vfmsub213sd, "vfmsub213sd")
1178   (e_vfmsub213ss, "vfmsub213ss")
1179   (e_vfmsub231pd, "vfmsub231pd")
1180   (e_vfmsub231ps, "vfmsub231ps")
1181   (e_vfmsub231sd, "vfmsub231sd")
1182   (e_vfmsub231ss, "vfmsub231ss")
1183   (e_vfmsubadd132pd, "vfmsubadd132pd")
1184   (e_vfmsubadd132ps, "vfmsubadd132ps")
1185   (e_vfmsubadd213pd, "vfmsubadd213pd")
1186   (e_vfmsubadd213ps, "vfmsubadd213ps")
1187   (e_vfmsubadd231pd, "vfmsubadd231pd")
1188   (e_vfmsubadd231ps, "vfmsubadd231ps")
1189   (e_vfnmadd132pd, "vfnmadd132pd")
1190   (e_vfnmadd132ps, "vfnmadd132ps")
1191   (e_vfnmadd132sd, "vfnmadd132sd")
1192   (e_vfnmadd132ss, "vfnmadd132ss")
1193   (e_vfnmadd213pd, "vfnmadd213pd")
1194   (e_vfnmadd213ps, "vfnmadd213ps")
1195   (e_vfnmadd213sd, "vfnmadd213sd")
1196   (e_vfnmadd213ss, "vfnmadd213ss")
1197   (e_vfnmadd231pd, "vfnmadd231pd")
1198   (e_vfnmadd231ps, "vfnmadd231ps")
1199   (e_vfnmadd231sd, "vfnmadd231sd")
1200   (e_vfnmadd231ss, "vfnmadd231ss")
1201   (e_vfnmsub132pd, "vfnmsub132pd")
1202   (e_vfnmsub132ps, "vfnmsub132ps")
1203   (e_vfnmsub132sd, "vfnmsub132sd")
1204   (e_vfnmsub132ss, "vfnmsub132ss")
1205   (e_vfnmsub213pd, "vfnmsub213pd")
1206   (e_vfnmsub213ps, "vfnmsub213ps")
1207   (e_vfnmsub213sd, "vfnmsub213sd")
1208   (e_vfnmsub213ss, "vfnmsub213ss")
1209   (e_vfnmsub231pd, "vfnmsub231pd")
1210   (e_vfnmsub231ps, "vfnmsub231ps")
1211   (e_vfnmsub231sd, "vfnmsub231sd")
1212   (e_vfnmsub231ss, "vfnmsub231ss")
1213   (e_vgatherdpd, "vgatherdpd")
1214   (e_vgatherdps, "vgatherdps")
1215   (e_vgatherqpd, "vgatherqpd")
1216   (e_vgatherqps, "vgatherqps")
1217   (e_vinsertf128, "vinsertf128")
1218   (e_vinserti128, "vinserti128")
1219   (e_vinsertps, "vinsertps")
1220   (e_vmaskmovpd, "vmaskmovpd")
1221   (e_vmaskmovps, "vmaskmovps")
1222   (e_vmaxpd, "vmaxpd")
1223   (e_vmaxps, "vmaxps")
1224   (e_vmaxsd, "vmaxsd")
1225   (e_vmaxss, "vmaxss")
1226   (e_vminpd, "vminpd")
1227   (e_vminps, "vminps")
1228   (e_vminsd, "vminsd")
1229   (e_vminss, "vminss")
1230   (e_vmovapd, "vmovapd")
1231   (e_vmovaps, "vmovaps")
1232   (e_vmovddup, "vmovddup")
1233   (e_vmovdqa, "vmovdqa")
1234   (e_vmovdqu, "vmovdqu")
1235   (e_vmovhlps, "vmovhlps")
1236   (e_vmovhpd, "vmovhpd")
1237   (e_vmovhps, "vmovhps")
1238   (e_vmovlhps, "vmovlhps")
1239   (e_vmovlpd, "vmovlpd")
1240   (e_vmovlps, "vmovlps")
1241   (e_vmovntps, "vmovntps")
1242   (e_vmovq, "vmovq")
1243   (e_vmovsd, "vmovsd")
1244   (e_vmovshdup, "vmovshdup")
1245   (e_vmovsldup, "vmovsldup")
1246   (e_vmovss, "vmovss")
1247   (e_vmovupd, "vmovupd")
1248   (e_vmovups, "vmovups")
1249   (e_vmulpd, "vmulpd")
1250   (e_vmulps, "vmulps")
1251   (e_vmulsd, "vmulsd")
1252   (e_vmulss, "vmulss")
1253   (e_vorpd, "vorpd")
1254   (e_vorps, "vorps")
1255   (e_vpabsb, "vpabsb")
1256   (e_vpabsd, "vpabsd")
1257   (e_vpabsw, "vpabsw")
1258   (e_vpackssdw, "vpackssdw")
1259   (e_vpacksswb, "vpacksswb")
1260   (e_vpackusdw, "vpackusdw")
1261   (e_vpackuswb, "vpackuswb")
1262   (e_vpaddb, "vpaddb")
1263   (e_vpaddd, "vpaddd")
1264   (e_vpaddq, "vpaddq")
1265   (e_vpaddsb, "vpaddsb")
1266   (e_vpaddsw, "vpaddsw")
1267   (e_vpaddusb, "vpaddusb")
1268   (e_vpaddusw, "vpaddusw")
1269   (e_vpaddw, "vpaddw")
1270   (e_vpalignr, "vpalignr")
1271   (e_vpandn, "vpandn")
1272   (e_vpavgb, "vpavgb")
1273   (e_vpavgw, "vpavgw")
1274   (e_vpblendd, "vpblendd")
1275   (e_vpbroadcastb, "vpbroadcastb")
1276   (e_vpbroadcastd, "vpbroadcastd")
1277   (e_vpbroadcastq, "vpbroadcastq")
1278   (e_vpbroadcastw, "vpbroadcastw")
1279   (e_vpcmpeqb, "vpcmpeqb")
1280   (e_vpcmpeqd, "vpcmpeqd")
1281   (e_vpcmpeqq, "vpcmpeqq")
1282   (e_vpcmpeqw, "vpcmpeqw")
1283   (e_vpcmpgtb, "vpcmpgtb")
1284   (e_vpcmpgtd, "vpcmpgtd")
1285   (e_vpcmpgtq, "vpcmpgtq")
1286   (e_vpcmpgtw, "vpcmpgtw")
1287   (e_vperm2f128, "vperm2f128")
1288   (e_vperm2i128, "vperm2i128")
1289   (e_vpermd, "vpermd")
1290   (e_vpermilpd, "vpermilpd")
1291   (e_vpermilps, "vpermilps")
1292   (e_vpermpd, "vpermpd")
1293   (e_vpermps, "vpermps")
1294   (e_vpermq, "vpermq")
1295   (e_vpextrb, "vpextrb")
1296   (e_vpextrd, "vpextrd")
1297   (e_vpextrq, "vpextrq")
1298   (e_vpextrw, "vpextrw")
1299   (e_vpgatherdd, "vpgatherdd")
1300   (e_vpgatherdq, "vpgatherdq")
1301   (e_vpgatherqd, "vpgatherqd")
1302   (e_vpgatherqq, "vpgatherqq")
1303   (e_vpinsrb, "vpinsrb")
1304   (e_vpinsrd, "vpinsrd")
1305   (e_vpinsrq, "vpinsrq")
1306   (e_vpinsrw, "vpinsrw")
1307   (e_vpmaddubsw, "vpmaddubsw")
1308   (e_vpmaddwd, "vpmaddwd")
1309   (e_vpmaskmovd, "vpmaskmovd")
1310   (e_vpmaskmovq, "vpmaskmovq")
1311   (e_vpmaxsb, "vpmaxsb")
1312   (e_vpmaxsd, "vpmaxsd")
1313   (e_vpmaxsw, "vpmaxsw")
1314   (e_vpmaxub, "vpmaxub")
1315   (e_vpmaxud, "vpmaxud")
1316   (e_vpmaxuw, "vpmaxuw")
1317   (e_vpminsb, "vpminsb")
1318   (e_vpminsd, "vpminsd")
1319   (e_vpminsw, "vpminsw")
1320   (e_vpminub, "vpminub")
1321   (e_vpminud, "vpminud")
1322   (e_vpminuw, "vpminuw")
1323   (e_vpmovsdb, "vpmovsdb")
1324   (e_vpmovsdw, "vpmovsdw")
1325   (e_vpmovsqb, "vpmovsqb")
1326   (e_vpmovsqd, "vpmovsqd")
1327   (e_vpmovsqw, "vpmovsqw")
1328   (e_vpmovswb, "vpmovswb")
1329   (e_vpmovsxbd, "vpmovsxbd")
1330   (e_vpmovsxbq, "vpmovsxbq")
1331   (e_vpmovsxbw, "vpmovsxbw")
1332   (e_vpmovsxdq, "vpmovsxdq")
1333   (e_vpmovsxwd, "vpmovsxwd")
1334   (e_vpmovsxwq, "vpmovsxwq")
1335   (e_vpmovzxbd, "vpmovzxbd")
1336   (e_vpmovzxbq, "vpmovzxbq")
1337   (e_vpmovzxbw, "vpmovzxbw")
1338   (e_vpmovzxdq, "vpmovzxdq")
1339   (e_vpmovzxwd, "vpmovzxwd")
1340   (e_vpmovzxwq, "vpmovzxwq")
1341   (e_vpmuldq, "vpmuldq")
1342   (e_vpmulhrsw, "vpmulhrsw")
1343   (e_vpmulhuw, "vpmulhuw")
1344   (e_vpmulhw, "vpmulhw")
1345   (e_vpmulld, "vpmulld")
1346   (e_vpmullw, "vpmullw")
1347   (e_vpmuludq, "vpmuludq")
1348   (e_vpor, "vpor")
1349   (e_vpsadbw, "vpsadbw")
1350   (e_vpshufb, "vpshufb")
1351   (e_vpshufd, "vpshufd")
1352   (e_vpshufhw, "vpshufhw")
1353   (e_vpshuflw, "vpshuflw")
1354   (e_vpslldq, "vpslldq")
1355   (e_vpslld, "vpslld")
1356   (e_vpsllq, "vpsllq")
1357   (e_vpsllvd, "vpsllvd")
1358   (e_vpsllvq, "vpsllvq")
1359   (e_vpsllw, "vpsllw")
1360   (e_vpsrad, "vpsrad")
1361   (e_vpsravd, "vpsravd")
1362   (e_vpsraw, "vpsraw")
1363   (e_vpsrldq, "vpsrldq")
1364   (e_vpsrld, "vpsrld")
1365   (e_vpsrlq, "vpsrlq")
1366   (e_vpsrlvd, "vprlvd")
1367   (e_vpsrlvd, "vpsrlvd")
1368   (e_vpsrlvq, "vprlvq")
1369   (e_vpsrlvq, "vpsrlvq")
1370   (e_vpsrlw, "vpsrlw")
1371   (e_vpsubb, "vpsubb")
1372   (e_vpsubd, "vpsubd")
1373   (e_vpsubq, "vpsubq")
1374   (e_vpsubsb, "vpsubsb")
1375   (e_vpsubsw, "vpsubsw")
1376   (e_vpsubusb, "vpsubusb")
1377   (e_vpsubusw, "vpsubusw")
1378   (e_vpsubw, "vpsubw")
1379   (e_vpunpckhbw, "vpunpckhbw")
1380   (e_vpunpckhdq, "vpunpckhdq")
1381   (e_vpunpckhqdq, "vpunpckhqdq")
1382   (e_vpunpckhwd, "vpunpckhwd")
1383   (e_vpunpcklbw, "vpunpcklbw")
1384   (e_vpunpckldq, "vpunpckldq")
1385   (e_vpunpcklqdq, "vpunpcklqdq")
1386   (e_vpunpcklwd, "vpunpcklwd")
1387   (e_vpxor, "vpxor")
1388   (e_vshufpd, "vshufpd")
1389   (e_vshufps, "vshufps")
1390   (e_vsqrtpd, "vsqrtpd")
1391   (e_vsqrtps, "vsqrtps")
1392   (e_vsqrtsd, "vsqrtsd")
1393   (e_vsqrtss, "vsqrtss")
1394   (e_vsubpd, "vsubpd")
1395   (e_vsubps, "vsubps")
1396   (e_vsubsd, "vsubsd")
1397   (e_vsubss, "vsubss")
1398   (e_vtestpd, "vtestpd")
1399   (e_vtestps, "vtestps")
1400   (e_vucomisd, "vucomisd")
1401   (e_vucomiss, "vucomiss")
1402   (e_vunpckhpd, "vunpckhpd")
1403   (e_vunpckhps, "vunpckhps")
1404   (e_vunpcklpd, "vunpcklpd")
1405   (e_vunpcklps, "vunpcklps")
1406   (e_vxorpd, "vxorpd")
1407   (e_vxorps, "vxorps")
1408   (e_vzeroall, "vzeroall")
1409   (e_vzeroupper, "vzeroupper")
1410   (e_vcvtsi2sdl, "vcvtsi2sdl")
1411   (e_vcvtsi2ssl, "vcvtsi2ssl")
1412   (e_kandb, "kandb")
1413   (e_kandd, "kandd")
1414   (e_kandw, "kandw")
1415   (e_kandq, "kandq")
1416   (e_kandnb, "kandnb")
1417   (e_kandnd, "kandnd")
1418   (e_kandnw, "kandnw")
1419   (e_kandnq, "kandnq")
1420   (e_knotb, "knotb")
1421   (e_knotd, "knotd")
1422   (e_knotw, "knotw")
1423   (e_knotq, "knotq")
1424   (e_korb, "korb")
1425   (e_kord, "kord")
1426   (e_korw, "korw")
1427   (e_korq, "korq")
1428   (e_kxnorb, "kxnorb")
1429   (e_kxnord, "kxnord")
1430   (e_kxnorw, "kxnorw")
1431   (e_kxnorq, "kxnorq")
1432   (e_kxorb, "kxorb")
1433   (e_kxord, "kxord")
1434   (e_kxorw, "kxorw")
1435   (e_kxorq, "kxorq")
1436   (e_kaddb, "kaddb")
1437   (e_kaddd, "kaddd")
1438   (e_kaddw, "kaddw")
1439   (e_kaddq, "kaddq")
1440   (e_kunpckbw, "kunpckbw")
1441   (e_kunpckwd, "kunpckwd")
1442   (e_kunpckdq, "kunpckdq")
1443   (e_kmovb, "kmovb")
1444   (e_kmovd, "kmovd")
1445   (e_kmovw, "kmovw")
1446   (e_kmovq, "kmovq")
1447   (e_kmovb, "kmovb")
1448   (e_kmovd, "kmovd")
1449   (e_kmovq, "kmovq")
1450   (e_kmovw, "kmovw")
1451   (e_kortestb, "kortestb")
1452   (e_kortestd, "kortestd")
1453   (e_kortestw, "kortestw")
1454   (e_kortestq, "kortestq")
1455   (e_ktestb, "ktestb")
1456   (e_ktestd, "ktestd")
1457   (e_ktestw, "ktestw")
1458   (e_ktestq, "ktestq")
1459   (e_vcmpeqpd, "vcmpeqpd")
1460   (e_vcmpeqsd, "vcmpeqsd")
1461   (e_vcmpeqss, "vcmpeqss")
1462   (e_vcmpeqps, "vcmpeqps")
1463
1464   (e_vcvtsi2sdl, "vcvtsi2sdl")
1465
1466 /* What are these? */
1467  (e_vpmovswb, "vpmovswb")
1468  (e_vpmovsdb, "vpmovsdb")
1469  (e_vpmovsqb, "vpmovsqb")
1470  (e_vpmovsdw, "vpmovsdw")
1471  (e_vpmovsqw, "vpmovsqw")
1472  (e_vpmovsqd, "vpmovsqd")
1473
1474  (e_fp_generic, "[FIXME: GENERIC FPU INSN]")
1475  (e_3dnow_generic, "[FIXME: GENERIC 3DNow INSN]")
1476  (e_No_Entry, "No_Entry")
1477         ;
1478
1479 dyn_hash_map<prefixEntryID, std::string> prefixEntryNames_IAPI = map_list_of
1480   (prefix_rep, "REP")
1481   (prefix_repnz, "REPNZ")
1482         ;
1483
1484 COMMON_EXPORT dyn_hash_map<entryID, flagInfo> const& ia32_instruction::getFlagTable()
1485 {
1486   static dyn_hash_map<entryID, flagInfo> flagTable;
1487   if(flagTable.empty()) 
1488   {
1489     ia32_instruction::initFlagTable(flagTable);
1490   }
1491   return flagTable;
1492 }
1493   
1494 void ia32_instruction::initFlagTable(dyn_hash_map<entryID, flagInfo>& flagTable)
1495 {
1496   static const vector<Dyninst::MachRegister> standardFlags = list_of(x86::of)(x86::sf)(x86::zf)(x86::af)(x86::pf)(x86::cf);
1497
1498   flagTable[e_aaa] = flagInfo(list_of(x86::af), standardFlags);
1499   flagTable[e_aad] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1500   flagTable[e_aam] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1501   flagTable[e_aas] = flagInfo(list_of(x86::af), standardFlags);
1502   flagTable[e_adc] = flagInfo(list_of(x86::cf), standardFlags);
1503   flagTable[e_add] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1504   flagTable[e_and] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1505   flagTable[e_arpl] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::zf));
1506   flagTable[e_bsf] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1507   flagTable[e_bsr] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1508   flagTable[e_bt] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1509   flagTable[e_bts] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1510   flagTable[e_btr] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1511   flagTable[e_btc] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1512   flagTable[e_clc] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::cf));
1513   flagTable[e_cld] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::df));
1514   flagTable[e_cli] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::if_));
1515   flagTable[e_cmc] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::cf));
1516   flagTable[e_cmovbe] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1517   flagTable[e_cmove] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1518   flagTable[e_cmovnae] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1519   flagTable[e_cmovnb] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1520   flagTable[e_cmovnbe] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1521   flagTable[e_cmovne] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1522   flagTable[e_cmovng] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1523   flagTable[e_cmovnge] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1524   flagTable[e_cmovnl] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1525   flagTable[e_cmovno] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1526   flagTable[e_cmovns] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1527   flagTable[e_cmovo] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1528   flagTable[e_cmovpe] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1529   flagTable[e_cmovpo] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1530   flagTable[e_cmovs] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1531   flagTable[e_cmp] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1532   flagTable[e_cmpsb] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1533   flagTable[e_cmpsd] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1534   flagTable[e_cmpss] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1535   flagTable[e_cmpsw] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1536   flagTable[e_cmpxch] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1537   flagTable[e_cmpxch8b] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::zf));
1538   flagTable[e_comisd] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1539   flagTable[e_comiss] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1540   flagTable[e_daa] = flagInfo(list_of(x86::af)(x86::cf), standardFlags);
1541   flagTable[e_das] = flagInfo(list_of(x86::af)(x86::cf), standardFlags);
1542   flagTable[e_dec] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::of)(x86::sf)(x86::zf)(x86::af)(x86::pf));
1543   flagTable[e_div] = flagInfo(list_of(x86::af)(x86::cf), standardFlags);
1544   // TODO: FCMOVcc (not in our entry table) (reads zf/pf/cf)
1545   // TODO: FCOMI/FCOMIP/FUCOMI/FUCOMIP (writes/zf/pf/cf)
1546   flagTable[e_idiv] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1547   flagTable[e_imul] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1548   flagTable[e_inc] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::of)(x86::sf)(x86::zf)(x86::af)(x86::pf));
1549   flagTable[e_insb] = flagInfo(list_of(x86::df), vector<Dyninst::MachRegister>());
1550   flagTable[e_insw] = flagInfo(list_of(x86::df), vector<Dyninst::MachRegister>());
1551   flagTable[e_insd] = flagInfo(list_of(x86::df), vector<Dyninst::MachRegister>());
1552   flagTable[e_int] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::tf)(x86::nt_));
1553   flagTable[e_int3] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::tf)(x86::nt_));
1554   flagTable[e_int80] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::tf)(x86::nt_));
1555   flagTable[e_into] = flagInfo(list_of(x86::of), list_of(x86::tf)(x86::nt_));
1556   flagTable[e_ucomisd] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1557   flagTable[e_ucomiss] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1558   flagTable[e_iret] = flagInfo(list_of(x86::nt_),
1559 list_of(x86::of)(x86::sf)(x86::zf)(x86::af)(x86::pf)(x86::cf)(x86::tf)(x86::if_)(x86::df));
1560   flagTable[e_jb] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1561   flagTable[e_jb_jnaej_j] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1562   flagTable[e_jbe] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1563   flagTable[e_jl] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1564   flagTable[e_jle] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1565   flagTable[e_jnb] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1566   flagTable[e_jnb_jae_j] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1567   flagTable[e_jnbe] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1568   flagTable[e_jnl] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1569   flagTable[e_jnle] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1570   flagTable[e_jno] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1571   flagTable[e_jnp] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1572   flagTable[e_jns] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1573   flagTable[e_jnz] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1574   flagTable[e_jo] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1575   flagTable[e_jp] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1576   flagTable[e_js] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1577   flagTable[e_jz] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1578   flagTable[e_lar] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::zf));
1579   flagTable[e_lodsb] = flagInfo(list_of(x86::df), vector<Dyninst::MachRegister>());
1580   flagTable[e_lodsd] = flagInfo(list_of(x86::df), vector<Dyninst::MachRegister>());
1581   flagTable[e_lodsw] = flagInfo(list_of(x86::df), vector<Dyninst::MachRegister>());
1582   flagTable[e_loope] = flagInfo(list_of(x86::zf), vector<Dyninst::MachRegister>());
1583   flagTable[e_loopn] = flagInfo(list_of(x86::zf), vector<Dyninst::MachRegister>());
1584   flagTable[e_lsl] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::zf));
1585   // I'd expect that mov control/debug/test gets handled when we do operand analysis
1586   // If it doesn't, fix later
1587   flagTable[e_mul] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1588   flagTable[e_neg] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1589   flagTable[e_or] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1590   flagTable[e_outsb] = flagInfo(list_of(x86::df), vector<Dyninst::MachRegister>());
1591   flagTable[e_outsw] = flagInfo(list_of(x86::df), vector<Dyninst::MachRegister>());
1592   flagTable[e_outsd] = flagInfo(list_of(x86::df), vector<Dyninst::MachRegister>());
1593   flagTable[e_popf] = flagInfo(vector<Dyninst::MachRegister>(),
1594 list_of(x86::of)(x86::sf)(x86::zf)(x86::af)(x86::pf)(x86::cf)(x86::tf)(x86::if_)(x86::df)(x86::nt_));
1595   flagTable[e_popfd] = flagInfo(vector<Dyninst::MachRegister>(),
1596 list_of(x86::of)(x86::sf)(x86::zf)(x86::af)(x86::pf)(x86::cf)(x86::tf)(x86::if_)(x86::df)(x86::nt_));
1597   flagTable[e_rcl] = flagInfo(list_of(x86::cf), list_of(x86::of)(x86::cf));
1598   flagTable[e_rcr] = flagInfo(list_of(x86::cf), list_of(x86::of)(x86::cf));
1599   flagTable[e_rol] = flagInfo(list_of(x86::cf), list_of(x86::of)(x86::cf));
1600   flagTable[e_ror] = flagInfo(list_of(x86::cf), list_of(x86::of)(x86::cf));
1601   flagTable[e_rsm] = flagInfo(vector<Dyninst::MachRegister>(),
1602 list_of(x86::of)(x86::sf)(x86::zf)(x86::af)(x86::pf)(x86::cf)(x86::tf)(x86::if_)(x86::df)(x86::nt_)(x86::rf));
1603   flagTable[e_sahf] = flagInfo(list_of(x86::sf)(x86::zf)(x86::af)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1604   flagTable[e_sar] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1605   flagTable[e_shr] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1606   flagTable[e_salc] = flagInfo(list_of(x86::cf), vector<Dyninst::MachRegister>());
1607   flagTable[e_sbb] = flagInfo(list_of(x86::cf), standardFlags);
1608   flagTable[e_setb] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1609   flagTable[e_setbe] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1610   flagTable[e_setl] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1611   flagTable[e_setle] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1612   flagTable[e_setnb] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1613   flagTable[e_setnbe] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1614   flagTable[e_setnl] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1615   flagTable[e_setnle] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1616   flagTable[e_setno] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1617   flagTable[e_setnp] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1618   flagTable[e_setns] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1619   flagTable[e_setnz] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1620   flagTable[e_seto] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1621   flagTable[e_setp] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1622   flagTable[e_sets] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1623   flagTable[e_setz] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::pf)(x86::cf), vector<Dyninst::MachRegister>());
1624   flagTable[e_shld] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1625   flagTable[e_shrd] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1626   flagTable[e_shl_sal] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1627   flagTable[e_stc] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::cf));
1628   flagTable[e_std] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::df));
1629   flagTable[e_sti] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::if_));
1630   flagTable[e_stosb] = flagInfo(list_of(x86::df), vector<Dyninst::MachRegister>());
1631   flagTable[e_stosd] = flagInfo(list_of(x86::df), vector<Dyninst::MachRegister>());
1632   flagTable[e_stosw] = flagInfo(list_of(x86::df), vector<Dyninst::MachRegister>());
1633   flagTable[e_sub] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1634   flagTable[e_test] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1635   flagTable[e_verr] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::zf));
1636   flagTable[e_verw] = flagInfo(vector<Dyninst::MachRegister>(), list_of(x86::zf));
1637   flagTable[e_xadd] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1638   flagTable[e_xor] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1639   flagTable[e_scasb] = flagInfo(list_of(x86::df), standardFlags);
1640   flagTable[e_scasw] = flagInfo(list_of(x86::df), standardFlags);
1641   flagTable[e_scasd] = flagInfo(list_of(x86::df), standardFlags);
1642   flagTable[e_pcmpestri] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1643   flagTable[e_pcmpestrm] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1644   flagTable[e_pcmpistri] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1645   flagTable[e_pcmpistrm] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1646   flagTable[e_popcnt] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::af)(x86::cf)(x86::pf), vector<Dyninst::MachRegister>());
1647   flagTable[e_ptest] = flagInfo(vector<Dyninst::MachRegister>(), standardFlags);
1648
1649 //  flagTable[e_ptest] = flagInfo(list_of(x86::of)(x86::sf)(x86::zf)(x86::af)(x86::cf)(x86::pf), vector<Dyninst::MachRegister>());
1650 }
1651
1652 bool ia32_entry::flagsUsed(std::set<MachRegister>& flagsRead, std::set<MachRegister>& flagsWritten, ia32_locations* locs)
1653 {
1654   dyn_hash_map<entryID, flagInfo>::const_iterator found = ia32_instruction::getFlagTable().find(getID(locs));
1655   if(found == ia32_instruction::getFlagTable().end())
1656   {
1657     return false;
1658   }
1659   // No entries for something that touches no flags, so always return true if we had an entry
1660
1661   copy((found->second).readFlags.begin(), (found->second).readFlags.end(), inserter(flagsRead, flagsRead.begin()));
1662   copy((found->second).writtenFlags.begin(), (found->second).writtenFlags.end(), inserter(flagsWritten,flagsWritten.begin()));
1663   return true;
1664 }
1665
1666
1667
1668 // Modded table entry for push/pop, daa, das, aaa, aas, insb/w/d, outsb/w/d, xchg, cbw
1669 // les, lds, aam, aad, loop(z/nz), cmpxch, lss, mul, imul, div, idiv, cmpxch8, [ld/st]mxcsr
1670 // clflush, prefetch*
1671
1672
1673 // oneByteMap: one byte opcode map
1674 static ia32_entry oneByteMap[256] = {
1675   /* 00 */
1676   { e_add,  t_done, 0, true, { Eb, Gb, Zz }, 0, s1RW2R },
1677   { e_add,  t_done, 0, true, { Ev, Gv, Zz }, 0, s1RW2R },
1678   { e_add,  t_done, 0, true, { Gb, Eb, Zz }, 0, s1RW2R },
1679   { e_add,  t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R },
1680   { e_add,  t_done, 0, false, { AL, Ib, Zz }, 0, s1RW2R },
1681   { e_add,  t_done, 0, false, { eAX, Iz, Zz }, 0, s1RW2R },
1682   { e_push, t_done, 0, false, { ES, eSP, Zz }, 0, s1R2RW }, // Semantics rewritten to ignore stack "operand"
1683   { e_pop,  t_done, 0, false, { ES, eSP, Zz }, 0, s1W2RW },
1684   /* 08 */
1685   { e_or,   t_done, 0, 
1686 true, { Eb, Gb, Zz }, 0, s1RW2R },
1687   { e_or,   t_done, 0, true, { Ev, Gv, Zz }, 0, s1RW2R },
1688   { e_or,   t_done, 0, true, { Gb, Eb, Zz }, 0, s1RW2R },
1689   { e_or,   t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R },
1690   { e_or,   t_done, 0, false, { AL, Ib, Zz }, 0, s1RW2R },
1691   { e_or,   t_done, 0, false, { rAX, Iz, Zz }, 0, s1RW2R },
1692   { e_push, t_done, 0, false, { CS, eSP, Zz }, 0, s1R2RW },
1693   { e_No_Entry,      t_twoB, 0, false, { Zz, Zz, Zz }, 0, 0 },
1694   /* 10 */
1695   { e_adc,  t_done, 0, true, { Eb, Gb, Zz }, 0, s1RW2R },
1696   { e_adc,  t_done, 0, true, { Ev, Gv, Zz }, 0, s1RW2R },
1697   { e_adc,  t_done, 0, true, { Gb, Eb, Zz }, 0, s1RW2R },
1698   { e_adc,  t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R },
1699   { e_adc,  t_done, 0, false, { AL, Ib, Zz }, 0, s1RW2R },
1700   { e_adc,  t_done, 0, false, { rAX, Iz, Zz }, 0, s1RW2R },
1701   { e_push, t_done, 0, false, { SS, eSP, Zz }, 0, s1R2RW },
1702   { e_pop,  t_done, 0, false, { SS, eSP, Zz }, 0, s1W2RW },
1703   /* 18 */
1704   { e_sbb,  t_done, 0, true, { Eb, Gb, Zz }, 0, s1RW2R },
1705   { e_sbb,  t_done, 0, true, { Ev, Gv, Zz }, 0, s1RW2R },
1706   { e_sbb,  t_done, 0, true, { Gb, Eb, Zz }, 0, s1RW2R },
1707   { e_sbb,  t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R },
1708   { e_sbb,  t_done, 0, false, { AL, Ib, Zz }, 0, s1RW2R },
1709   { e_sbb,  t_done, 0, false, { rAX, Iz, Zz }, 0, s1RW2R },
1710   { e_push, t_done, 0, false, { DS, eSP, Zz }, 0, s1R2RW },
1711   { e_pop , t_done, 0, false, { DS, eSP, Zz }, 0, s1W2RW },
1712   /* 20 */
1713   { e_and, t_done, 0, true, { Eb, Gb, Zz }, 0, s1RW2R },
1714   { e_and, t_done, 0, true, { Ev, Gv, Zz }, 0, s1RW2R },
1715   { e_and, t_done, 0, true, { Gb, Eb, Zz }, 0, s1RW2R },
1716   { e_and, t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R },
1717   { e_and, t_done, 0, false, { AL, Ib, Zz }, 0, s1RW2R },
1718   { e_and, t_done, 0, false, { rAX, Iz, Zz }, 0, s1RW2R },
1719   { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 }, // PREFIX_SEG_OVR
1720   { e_daa, t_done, 0, false, { AL, Zz, Zz }, 0, s1RW },
1721   /* 28 */
1722   { e_sub, t_done, 0, true, { Eb, Gb, Zz }, 0, s1RW2R },
1723   { e_sub, t_done, 0, true, { Ev, Gv, Zz }, 0, s1RW2R },
1724   { e_sub, t_done, 0, true, { Gb, Eb, Zz }, 0, s1RW2R },
1725   { e_sub, t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R },
1726   { e_sub, t_done, 0, false, { AL, Ib, Zz }, 0, s1RW2R },
1727   { e_sub, t_done, 0, false, { rAX, Iz, Zz }, 0, s1RW2R },
1728   { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 }, // PREFIX_SEG_OVR
1729   { e_das , t_done, 0, false, { AL, Zz, Zz }, 0, s1RW },
1730   /* 30 */
1731   { e_xor, t_done, 0, true, { Eb, Gb, Zz }, 0, s1RW2R },
1732   { e_xor, t_done, 0, true, { Ev, Gv, Zz }, 0, s1RW2R },
1733   { e_xor, t_done, 0, true, { Gb, Eb, Zz }, 0, s1RW2R },
1734   { e_xor, t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R },
1735   { e_xor, t_done, 0, false, { AL, Ib, Zz }, 0, s1RW2R },
1736   { e_xor, t_done, 0, false, { rAX, Iz, Zz }, 0, s1RW2R },
1737   { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 }, // PREFIX_SEG_OVR
1738   { e_aaa, t_done, 0, false, { AX, Zz, Zz }, 0, s1RW },
1739   /* 38 */
1740   { e_cmp, t_done, 0, true, { Eb, Gb, Zz }, 0, s1R2R },
1741   { e_cmp, t_done, 0, true, { Ev, Gv, Zz }, 0, s1R2R },
1742   { e_cmp, t_done, 0, true, { Gb, Eb, Zz }, 0, s1R2R },
1743   { e_cmp, t_done, 0, true, { Gv, Ev, Zz }, 0, s1R2R },
1744   { e_cmp, t_done, 0, false, { AL, Ib, Zz }, 0, s1R2R },
1745   { e_cmp, t_done, 0, false, { rAX, Iz, Zz }, 0, s1R2R },
1746   { e_No_Entry,     t_ill,  0, false, { Zz, Zz, Zz }, 0, 0 }, // PREFIX_SEG_OVR
1747   { e_aas, t_done, 0, false, { AX, Zz, Zz }, 0, s1RW },
1748   /* 40 */
1749   { e_inc, t_done, 0, false, { eAX, Zz, Zz }, 0, s1RW },
1750   { e_inc, t_done, 0, false, { eCX, Zz, Zz }, 0, s1RW },
1751   { e_inc, t_done, 0, false, { eDX, Zz, Zz }, 0, s1RW },
1752   { e_inc, t_done, 0, false, { eBX, Zz, Zz }, 0, s1RW },
1753   { e_inc, t_done, 0, false, { eSP, Zz, Zz }, 0, s1RW },
1754   { e_inc, t_done, 0, false, { eBP, Zz, Zz }, 0, s1RW },
1755   { e_inc, t_done, 0, false, { eSI, Zz, Zz }, 0, s1RW },
1756   { e_inc, t_done, 0, false, { eDI, Zz, Zz }, 0, s1RW },
1757   /* 48 */
1758   { e_dec, t_done, 0, false, { eAX, Zz, Zz }, 0, s1RW },
1759   { e_dec, t_done, 0, false, { eCX, Zz, Zz }, 0, s1RW },
1760   { e_dec, t_done, 0, false, { eDX, Zz, Zz }, 0, s1RW },
1761   { e_dec, t_done, 0, false, { eBX, Zz, Zz }, 0, s1RW },
1762   { e_dec, t_done, 0, false, { eSP, Zz, Zz }, 0, s1RW },
1763   { e_dec, t_done, 0, false, { eBP, Zz, Zz }, 0, s1RW },
1764   { e_dec, t_done, 0, false, { eSI, Zz, Zz }, 0, s1RW },
1765   { e_dec, t_done, 0, false, { eDI, Zz, Zz }, 0, s1RW },
1766   /* 50 */
1767   { e_push, t_done, 0, false, { rAX, eSP, Zz }, 0, s1R2RW },
1768   { e_push, t_done, 0, false, { rCX, eSP, Zz }, 0, s1R2RW },
1769   { e_push, t_done, 0, false, { rDX, eSP, Zz }, 0, s1R2RW },
1770   { e_push, t_done, 0, false, { rBX, eSP, Zz }, 0, s1R2RW },
1771   { e_push, t_done, 0, false, { rSP, eSP, Zz }, 0, s1R2RW },
1772   { e_push, t_done, 0, false, { rBP, eSP, Zz }, 0, s1R2RW },
1773   { e_push, t_done, 0, false, { rSI, eSP, Zz }, 0, s1R2RW },
1774   { e_push, t_done, 0, false, { rDI, eSP, Zz }, 0, s1R2RW },
1775   /* 58 */
1776   { e_pop, t_done, 0, false, { rAX, eSP, Zz }, 0, s1W2RW },
1777   { e_pop, t_done, 0, false, { rCX, eSP, Zz }, 0, s1W2RW },
1778   { e_pop, t_done, 0, false, { rDX, eSP, Zz }, 0, s1W2RW },
1779   { e_pop, t_done, 0, false, { rBX, eSP, Zz }, 0, s1W2RW },
1780   { e_pop, t_done, 0, false, { rSP, eSP, Zz }, 0, s1W2RW },
1781   { e_pop, t_done, 0, false, { rBP, eSP, Zz }, 0, s1W2RW },
1782   { e_pop, t_done, 0, false, { rSI, eSP, Zz }, 0, s1W2RW },
1783   { e_pop, t_done, 0, false, { rDI, eSP, Zz }, 0, s1W2RW },
1784   /* 60 */
1785   { e_pushad, t_done, 0, false, { GPRS, eSP, Zz }, 0, s1R2RW },
1786   { e_popad,  t_done, 0, false, { GPRS, eSP, Zz }, 0, s1W2RW },
1787   { e_bound,    t_done, 0, true, { Gv, Ma, Zz }, 0, s1R2R }, // or VEX
1788   { e_arpl,     t_done, 0, true, { Ew, Gw, Zz }, 0, s1R2R },
1789   { e_No_Entry,          t_ill,  0, false, { Zz, Zz, Zz }, 0, 0 }, // PREFIX_SEG_OVR
1790   { e_No_Entry,          t_ill,  0, false, { Zz, Zz, Zz }, 0, 0 }, // PREFIX_SEG_OVR
1791   { e_No_Entry,   t_prefixedSSE, 2, false, { Zz, Zz, Zz }, 0, 0 }, /* operand size prefix (PREFIX_OPR_SZ)*/
1792   { e_No_Entry,          t_ill,  0, false, { Zz, Zz, Zz }, 0, 0 }, /* address size prefix (PREFIX_ADDR_SZ)*/
1793   /* 68 */
1794   { e_push,    t_done, 0, false, { Iz, eSP, Zz }, 0, s1R2RW },
1795   { e_imul,    t_done, 0, true, { Gv, Ev, Iz }, 0, s1W2R3R },
1796   { e_push,    t_done, 0, false, { Ib, eSP, Zz }, 0, s1R2RW },
1797   { e_imul,    t_done, 0, true, { Gv, Ev, Ib }, 0, s1W2R3R },
1798   { e_insb,    t_done, 0, false, { Yb, DX, Zz }, 0, s1W2R | (fREP << FPOS) }, // (e)SI/DI changed
1799   { e_insd,  t_done, 0, false, { Yv, DX, Zz }, 0, s1W2R | (fREP << FPOS) },
1800   { e_outsb,   t_done, 0, false, { DX, Xb, Zz }, 0, s1W2R | (fREP << FPOS) },
1801   { e_outsd, t_done, 0, false, { DX, Xv, Zz }, 0, s1W2R | (fREP << FPOS) },
1802   /* 70 */
1803   { e_jo,         t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1804   { e_jno,        t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1805   { e_jb_jnaej_j, t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1806   { e_jnb_jae_j,  t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1807   { e_jz,         t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1808   { e_jnz,        t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1809   { e_jbe,        t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1810   { e_jnbe,       t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1811   /* 78 */
1812   { e_js,   t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1813   { e_jns,  t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1814   { e_jp,   t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1815   { e_jnp,  t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1816   { e_jl,   t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1817   { e_jnl,  t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1818   { e_jle,  t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1819   { e_jnle, t_done, 0, false, { Jb, Zz, Zz }, (IS_JCC | REL_B), s1R },
1820   /* 80 */
1821   { e_No_Entry, t_grp, Grp1a, true, { Zz, Zz, Zz }, 0, 0 },
1822   { e_No_Entry, t_grp, Grp1b, true, { Zz, Zz, Zz }, 0, 0 },
1823   { e_No_Entry, t_grp, Grp1c, true, { Zz, Zz, Zz }, 0, 0 }, // book says Grp1 however;sandpile.org agrees.
1824   { e_No_Entry, t_grp, Grp1d, true, { Zz, Zz, Zz }, 0, 0 },
1825   { e_test, t_done, 0, true, { Eb, Gb, Zz }, 0, s1R2R },
1826   { e_test, t_done, 0, true, { Ev, Gv, Zz }, 0, s1R2R },
1827   { e_xchg, t_done, 0, true, { Eb, Gb, Zz }, 0, s1RW2RW },
1828   { e_xchg, t_done, 0, true, { Ev, Gv, Zz }, 0, s1RW2RW },
1829   /* 88 */
1830   { e_mov, t_done, 0, true, { Eb, Gb, Zz }, 0, s1W2R },
1831   { e_mov, t_done, 0, true, { Ev, Gv, Zz }, 0, s1W2R },
1832   { e_mov, t_done, 0, true, { Gb, Eb, Zz }, 0, s1W2R },
1833   { e_mov, t_done, 0, true, { Gv, Ev, Zz }, 0, s1W2R },
1834   { e_mov, t_done, 0, true, { Ew, Sw, Zz }, 0, s1W2R },
1835   { e_lea, t_done, 0, true, { Gv, Mlea, Zz }, IS_NOP, s1W2R }, // this is just M in the book
1836                                                         // AFAICT the 2nd operand is not accessed
1837   { e_mov, t_done, 0, true, { Sw, Ew, Zz }, 0, s1W2R },
1838   { e_pop, t_done, 0, true, { Ev, eSP, Zz }, 0, s1W2RW }, // or VEX XOP
1839   /* 90 */
1840   { e_nop,  t_done, 0, false, { Zz, Zz, Zz }, IS_NOP, sNONE }, // actually xchg eax,eax
1841   { e_xchg, t_done, 0, false, { rCX, rAX, Zz }, 0, s1RW2RW },
1842   { e_xchg, t_done, 0, false, { rDX, rAX, Zz }, 0, s1RW2RW },
1843   { e_xchg, t_done, 0, false, { rBX, rAX, Zz }, 0, s1RW2RW },
1844   { e_xchg, t_done, 0, false, { rSP, rAX, Zz }, 0, s1RW2RW },
1845   { e_xchg, t_done, 0, false, { rBP, rAX, Zz }, 0, s1RW2RW },
1846   { e_xchg, t_done, 0, false, { rSI, rAX, Zz }, 0, s1RW2RW },
1847   { e_xchg, t_done, 0, false, { rDI, rAX, Zz }, 0, s1RW2RW },
1848   /* 98 */
1849   { e_cwde, t_done, 0, false, { eAX, Zz, Zz }, 0, s1RW },
1850   { e_cdq,  t_done, 0, false, { eDX, eAX, Zz }, 0, s1W2R },
1851   { e_call,     t_done, 0, false, { Ap, Zz, Zz }, IS_CALL | PTR_WX, s1R },
1852   { e_wait,     t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE },
1853   { e_pushfd, t_done, 0, false, { Fv, rSP, Zz }, 0, s1R2RW },
1854   { e_popfd,  t_done, 0, false, { Fv, rSP, Zz }, 0, s1W2RW },
1855   { e_sahf,     t_done, 0, false, { Zz, Zz, Zz }, 0, 0 }, // FIXME Intel
1856   { e_lahf,     t_done, 0, false, { Zz, Zz, Zz }, 0, 0 }, // FIXME Intel
1857   /* A0 */
1858   { e_mov,   t_done, 0, false, { AL, Ob, Zz },  0, s1W2R },
1859   { e_mov,   t_done, 0, false, { rAX, Ov, Zz }, 0, s1W2R },
1860   { e_mov,   t_done, 0, false, { Ob, AL, Zz },  0, s1W2R },
1861   { e_mov,   t_done, 0, false, { Ov, rAX, Zz }, 0, s1W2R },
1862   // XXX: Xv is source, Yv is destination for movs, so they're swapped!
1863   { e_movsb, t_done, 0, false, { Yb, Xb, Zz },  0, s1W2R | (fREP << FPOS) }, // (e)SI/DI changed
1864   { e_movsd, t_done, 0, false, { Yv, Xv, Zz }, 0, s1W2R | (fREP << FPOS) },
1865   { e_cmpsb, t_done, 0, false, { Xb, Yb, Zz },  0, s1R2R | (fCMPS << FPOS) },
1866   { e_cmpsw, t_done, 0, false, { Xv, Yv, Zz },  0, s1R2R | (fCMPS << FPOS) },
1867   /* A8 */
1868   { e_test,     t_done, 0, false, { AL, Ib, Zz },  0, s1R2R },
1869   { e_test,     t_done, 0, false, { rAX, Iz, Zz }, 0, s1R2R },
1870   { e_stosb,    t_done, 0, false, { Yb, AL, Zz },  0, s1W2R | (fREP << FPOS) },
1871   { e_stosd,  t_done, 0, false, { Yv, rAX, Zz }, 0, s1W2R | (fREP << FPOS) },
1872   { e_lodsb,    t_done, 0, false, { AL, Xb, Zz },  0, s1W2R | (fREP << FPOS) },
1873   { e_lodsd,    t_done, 0, false, { rAX, Xv, Zz }, 0, s1W2R | (fREP << FPOS) },
1874   { e_scasb,    t_done, 0, false, { AL, Yb, Zz },  0, s1R2R | (fSCAS << FPOS) },
1875   { e_scasd,  t_done, 0, false, { rAX, Yv, Zz }, 0, s1R2R | (fSCAS << FPOS) },
1876   /* B0 */
1877   { e_mov, t_done, 0, false, { AL, Ib, Zz }, 0, s1W2R },
1878   { e_mov, t_done, 0, false, { CL, Ib, Zz }, 0, s1W2R },
1879   { e_mov, t_done, 0, false, { DL, Ib, Zz }, 0, s1W2R },
1880   { e_mov, t_done, 0, false, { BL, Ib, Zz }, 0, s1W2R },
1881   { e_mov, t_done, 0, false, { AH, Ib, Zz }, 0, s1W2R },
1882   { e_mov, t_done, 0, false, { CH, Ib, Zz }, 0, s1W2R },
1883   { e_mov, t_done, 0, false, { DH, Ib, Zz }, 0, s1W2R },
1884   { e_mov, t_done, 0, false, { BH, Ib, Zz }, 0, s1W2R },
1885   /* B8 */
1886   { e_mov, t_done, 0, false, { rAX, Iv, Zz }, 0, s1W2R },
1887   { e_mov, t_done, 0, false, { rCX, Iv, Zz }, 0, s1W2R },
1888   { e_mov, t_done, 0, false, { rDX, Iv, Zz }, 0, s1W2R },
1889   { e_mov, t_done, 0, false, { rBX, Iv, Zz }, 0, s1W2R },
1890   { e_mov, t_done, 0, false, { rSP, Iv, Zz }, 0, s1W2R },
1891   { e_mov, t_done, 0, false, { rBP, Iv, Zz }, 0, s1W2R },
1892   { e_mov, t_done, 0, false, { rSI, Iv, Zz }, 0, s1W2R },
1893   { e_mov, t_done, 0, false, { rDI, Iv, Zz }, 0, s1W2R },
1894   /* C0 */
1895   { e_No_Entry, t_grp, Grp2, true, { Eb, Ib, Zz }, 0, s1RW2R },
1896   { e_No_Entry, t_grp, Grp2, true, { Ev, Ib, Zz }, 0, s1RW2R },
1897   { e_ret_near, t_done, 0, false, { Iw, Zz, Zz }, (IS_RET | IS_RETC), s1R | (fNEARRET << FPOS) },
1898   { e_ret_near, t_done, 0, false, { Zz, Zz, Zz }, (IS_RET), fNEARRET << FPOS },
1899   { e_les,      t_done, 0, true, { ES, Gv, Mp }, 0, s1W2W3R }, // or VEX
1900   { e_lds,      t_done, 0, true, { DS, Gv, Mp }, 0, s1W2W3R }, // or VEX
1901   { e_No_Entry, t_grp, Grp11, true, { Eb, Ib, Zz }, 0, s1W2R },
1902   { e_No_Entry, t_grp, Grp11, true, { Ev, Iz, Zz }, 0, s1W2R },
1903   /* C8 */
1904   { e_enter,   t_done, 0, false, { Iw, Ib, Zz }, 0, s1R2R | (fENTER << FPOS) },
1905   { e_leave,   t_done, 0, false, { Zz, Zz, Zz }, 0, fLEAVE << FPOS },
1906   { e_ret_far, t_done, 0, false, { Iw, Zz, Zz }, (IS_RETF | IS_RETC), s1R | (fFARRET << FPOS) },
1907   { e_ret_far, t_done, 0, false, { Zz, Zz, Zz }, (IS_RETF), fFARRET << FPOS },
1908   { e_int3,   t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE },
1909   { e_int,     t_done, 0, false, { Ib, Zz, Zz }, 0, s1R },
1910   { e_into,    t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE },
1911   { e_iret,    t_done, 0, false, { Zz, Zz, Zz }, (IS_RET), fIRET << FPOS},
1912   /* D0 */
1913   { e_No_Entry, t_grp, Grp2, true, { Eb, ImplImm, Zz }, 0, s1RW2R }, // const1
1914   { e_No_Entry, t_grp, Grp2, true, { Ev, ImplImm, Zz }, 0, s1RW2R }, // --"--
1915   { e_No_Entry, t_grp, Grp2, true, { Eb, CL, Zz }, 0, s1RW2R },
1916   { e_No_Entry, t_grp, Grp2, true, { Ev, CL, Zz }, 0, s1RW2R },
1917   { e_aam,  t_done, 0, false, { AX, Ib, Zz }, 0, s1RW2R },
1918   { e_aad,  t_done, 0, false, { AX, Ib, Zz }, 0, s1RW2R },
1919   { e_salc, t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE }, // undocumeted
1920   { e_xlat, t_done, 0, false, { Zz, Zz, Zz }, 0, fXLAT << FPOS }, // scream
1921   /* D8 */
1922   { e_No_Entry, t_coprocEsc, GrpD8, true, { Zz, Zz, Zz }, 0, 0 },
1923   { e_No_Entry, t_coprocEsc, GrpD9, true, { Zz, Zz, Zz }, 0, 0 },
1924   { e_No_Entry, t_coprocEsc, GrpDA, true, { Zz, Zz, Zz }, 0, 0 },
1925   { e_No_Entry, t_coprocEsc, GrpDB, true, { Zz, Zz, Zz }, 0, 0 },
1926   { e_No_Entry, t_coprocEsc, GrpDC, true, { Zz, Zz, Zz }, 0, 0 },
1927   { e_No_Entry, t_coprocEsc, GrpDD, true, { Zz, Zz, Zz }, 0, 0 },
1928   { e_No_Entry, t_coprocEsc, GrpDE, true, { Zz, Zz, Zz }, 0, 0 },
1929   { e_No_Entry, t_coprocEsc, GrpDF, true, { Zz, Zz, Zz }, 0, 0 },
1930   /* E0 */
1931   { e_loopn,    t_done, 0, false, { Jb, eCX, Zz }, (IS_JCC | REL_B), s1R2R }, 
1932   { e_loope,    t_done, 0, false, { Jb, eCX, Zz }, (IS_JCC | REL_B), s1R2R },
1933   { e_loop,     t_done, 0, false, { Jb, eCX, Zz }, (IS_JCC | REL_B), s1R2R },
1934   { e_jcxz_jec, t_done, 0, false, { Jb, eCX, Zz }, (IS_JCC | REL_B), s1R2R },
1935   { e_in,       t_done, 0, false, { AL, Ib, Zz }, 0, s1W2R | (fIO << FPOS) },
1936   { e_in,       t_done, 0, false, { eAX, Ib, Zz }, 0, s1W2R | (fIO << FPOS) },
1937   { e_out,      t_done, 0, false, { Ib, AL, Zz }, 0, s1W2R | (fIO << FPOS) },
1938   { e_out,      t_done, 0, false, { Ib, eAX, Zz }, 0, s1W2R | (fIO << FPOS) },
1939   /* E8 */
1940   { e_call, t_done, 0, false, { Jz, Zz, Zz }, (IS_CALL | REL_X), s1R | (fCALL << FPOS) },
1941   { e_jmp,  t_done, 0, false, { Jz, Zz, Zz }, (IS_JUMP | REL_X), s1R },
1942   { e_jmp,  t_done, 0, false, { Ap, Zz, Zz }, (IS_JUMP | PTR_WX), s1R },
1943   { e_jmp,  t_done, 0, false, { Jb, Zz, Zz }, (IS_JUMP | REL_B), s1R },
1944   { e_in,   t_done, 0, false, { AL, DX, Zz }, 0, s1W2R | (fIO << FPOS) },
1945   { e_in,   t_done, 0, false, { eAX, DX, Zz }, 0, s1W2R | (fIO << FPOS) },
1946   { e_out,  t_done, 0, false, { DX, AL, Zz }, 0, s1W2R | (fIO << FPOS) },
1947   { e_out,  t_done, 0, false, { DX, eAX, Zz }, 0, s1W2R | (fIO << FPOS) },
1948   /* F0 */
1949   { e_No_Entry,      t_ill,  0, false, { Zz, Zz, Zz }, 0, 0 }, // PREFIX_INSTR
1950   { e_int1, t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE }, // undocumented
1951   { e_No_Entry, t_prefixedSSE, 3, false, { Zz, Zz, Zz }, 0, 0 },
1952   { e_No_Entry, t_prefixedSSE, 1, false, { Zz, Zz, Zz }, 0, 0 },
1953   { e_hlt,  t_done, 0, false, { Zz, Zz, Zz }, PRVLGD, sNONE },
1954   { e_cmc,  t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE },
1955   { e_No_Entry, t_grp, Grp3a, true, { Zz, Zz, Zz }, 0, sNONE },
1956   { e_No_Entry, t_grp, Grp3b, true, { Zz, Zz, Zz }, 0, sNONE },
1957   /* F8 */
1958   { e_clc, t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE },
1959   { e_stc, t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE },
1960   { e_cli, t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE },
1961   { e_sti, t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE },
1962   { e_cld, t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE },
1963   { e_std, t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE },
1964   { e_No_Entry, t_grp, Grp4, true, { Zz, Zz, Zz }, 0, sNONE },
1965   { e_No_Entry, t_grp, Grp5, true, { Zz, Zz, Zz }, 0, sNONE }
1966 };
1967
1968
1969 // twoByteMap: two byte opcode instructions (first byte is 0x0F)
1970 static ia32_entry twoByteMap[256] = {
1971   /* 00 */
1972   // Syscall/sysret are somewhat hacked
1973   // Syscall on amd64 will also read CS/SS for where to call in 32-bit mode
1974   { e_No_Entry, t_grp, Grp6, true, { Zz, Zz, Zz }, 0, 0 },
1975   { e_No_Entry, t_grp, Grp7, false, { Zz, Zz, Zz }, 0, 0 },
1976   { e_lar,        t_done, 0, true, { Gv, Ew, Zz }, 0, s1W2R | (fSEGDESC << FPOS) },
1977   { e_lsl,        t_done, 0, true, { Gv, Ew, Zz }, 0, s1W2R | (fSEGDESC << FPOS) },
1978   { e_No_Entry,    t_ill, 0, false, { Zz, Zz, Zz }, 0, 0},
1979   { e_syscall,    t_done, 0, false, { eCX, Zz, Zz }, 0, s1W }, // AMD: writes return address to eCX; for liveness, treat as hammering all
1980   { e_clts,       t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE },
1981   { e_sysret,     t_done, 0, false, { eCX, Zz, Zz }, 0, s1R }, // AMD; reads return address from eCX; unlikely to occur in Dyninst use cases but we'll be paranoid
1982   /* 08 */
1983   { e_invd,   t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE }, // only in priviledge 0, so ignored
1984   { e_wbinvd, t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE }, // idem
1985   { e_No_Entry,        t_ill,  0, false, { Zz, Zz, Zz }, 0, 0 },
1986   { e_ud2,    t_ill,  0, 0, { Zz, Zz, Zz }, 0, 0 },
1987   { e_No_Entry,        t_ill,  0, 0, { Zz, Zz, Zz }, 0, 0 },
1988   { e_prefetch_w, t_grp, GrpAMD, true, { Zz, Zz, Zz }, 0, 0 },    // AMD prefetch group
1989   { e_femms,       t_done,  0, false, { Zz, Zz, Zz }, 0, sNONE },  // AMD specific
1990   // semantic is bogus for the 1st operand - but correct for the 2nd,
1991   // which is the only one that can be a memory operand :)
1992   // fixing the 1st operand requires an extra table for the 3dnow instructions...
1993   { e_No_Entry,             t_3dnow, 0, true,  { Pq, Qq, Zz }, 0, s1RW2R }, // AMD 3DNow! suffixes
1994   /* 10 */
1995   { e_No_Entry, t_sse, SSE10, true, { Zz, Zz, Zz }, 0, 0 },
1996   { e_No_Entry, t_sse, SSE11, true, { Zz, Zz, Zz }, 0, 0 },
1997   { e_No_Entry, t_sse, SSE12, true, { Zz, Zz, Zz }, 0, 0 },
1998   { e_No_Entry, t_sse, SSE13, true, { Zz, Zz, Zz }, 0, 0 },
1999   { e_No_Entry, t_sse, SSE14, true, { Zz, Zz, Zz }, 0, 0 },
2000   { e_No_Entry, t_sse, SSE15, true, { Zz, Zz, Zz }, 0, 0 },
2001   { e_No_Entry, t_sse, SSE16, true, { Zz, Zz, Zz }, 0, 0 },
2002   { e_No_Entry, t_sse, SSE17, true, { Zz, Zz, Zz }, 0, 0 },
2003   /* 18 */
2004   { e_No_Entry, t_grp, Grp16, 0, { Zz, Zz, Zz }, 0, 0 },
2005   { e_nop, t_done, 0, true, { Ev, Zz, Zz }, IS_NOP, 0 }, // 19-1F according to sandpile and AMD are NOPs with an Ev operand
2006   { e_nop, t_done, 0, true, { Ev, Zz, Zz }, IS_NOP, 0 }, // Can we go out on a limb that the 'operand' of a NOP is never read?
2007   { e_nop, t_done, 0, true, { Ev, Zz, Zz }, IS_NOP, 0 }, // I think we can...so nullary operand semantics, but consume the
2008   { e_nop, t_done, 0, true, { Ev, Zz, Zz }, IS_NOP, 0 }, // mod/rm byte operand.
2009   { e_nop, t_done, 0, true, { Ev, Zz, Zz }, IS_NOP, 0 }, // -- BW 1/08
2010   { e_nop, t_done, 0, true, { Ev, Zz, Zz }, IS_NOP, 0 },
2011   { e_nop, t_done, 0, true, { Ev, Zz, Zz }, IS_NOP, 0 },
2012   /* 20 */
2013   { e_mov, t_done, 0, true, { Rd, Cd, Zz }, 0, s1W2R },
2014   { e_mov, t_done, 0, true, { Rd, Dd, Zz }, 0, s1W2R },
2015   { e_mov, t_done, 0, true, { Cd, Rd, Zz }, 0, s1W2R },
2016   { e_mov, t_done, 0, true, { Dd, Rd, Zz }, 0, s1W2R },
2017   { e_mov, t_done, 0, true, { Rd, Td, Zz }, 0, s1W2R }, // actually a SSE5A
2018   { e_No_Entry,     t_ill,  0, 0, { Zz, Zz, Zz }, 0, 0 }, // SSE5A
2019   { e_mov, t_done, 0, true, { Td, Rd, Zz }, 0, s1W2R },
2020   { e_No_Entry,     t_ill,  0, 0, { Zz, Zz, Zz }, 0, 0 },
2021   /* 28 */
2022   { e_No_Entry, t_sse, SSE28, true, { Zz, Zz, Zz }, 0, 0 },
2023   { e_No_Entry, t_sse, SSE29, true, { Zz, Zz, Zz }, 0, 0 },
2024   { e_No_Entry, t_sse, SSE2A, true, { Zz, Zz, Zz }, 0, 0 },
2025   { e_No_Entry, t_sse, SSE2B, true, { Zz, Zz, Zz }, 0, 0 },
2026   { e_No_Entry, t_sse, SSE2C, true, { Zz, Zz, Zz }, 0, 0 },
2027   { e_No_Entry, t_sse, SSE2D, true, { Zz, Zz, Zz }, 0, 0 },
2028   { e_No_Entry, t_sse, SSE2E, true, { Zz, Zz, Zz }, 0, 0 },
2029   { e_No_Entry, t_sse, SSE2F, true, { Zz, Zz, Zz }, 0, 0 },
2030   /* 30 */
2031   { e_wrmsr, t_done, 0, false, { rAX, rDX, rCX }, 0, s1R2R3R },
2032   { e_rdtsc, t_done, 0, false, { rAX, rDX, Zz }, 0, s1W2W3R },
2033   { e_rdmsr, t_done, 0, false, { rAX, rDX, rCX }, 0, s1W2W3R },
2034   { e_rdpmc, t_done, 0, false, { rAX, rDX, rCX }, 0, s1W2W3R },
2035   { e_sysenter, t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE }, // XXX: fixme for kernel work
2036   { e_sysexit,  t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE }, // XXX: fixme for kernel work
2037   { e_No_Entry, t_ill, 0, 0, { Zz, Zz, Zz }, 0, 0 }, 
2038   { e_getsec, t_done, 0, false, { Zz, Zz, Zz }, 0 , sNONE },
2039   /* 38 */
2040   { e_No_Entry, t_threeB, 0, 0, { Zz, Zz, Zz }, 0, 0 }, //3-Byte escape (Book Table A-4)
2041   { e_No_Entry, t_ill, 0, 0, { Zz, Zz, Zz }, 0 ,0 },
2042   { e_No_Entry, t_threeB2, 0, 0, { Zz, Zz, Zz }, 0, 0 }, //3-Byte escape (Book Table A-5)
2043   { e_No_Entry, t_ill, 0, 0, { Zz, Zz, Zz }, 0 ,0 },
2044   { e_No_Entry, t_ill, 0, 0, { Zz, Zz, Zz }, 0 ,0 },
2045   { e_No_Entry, t_ill, 0, 0, { Zz, Zz, Zz }, 0 ,0 },
2046   { e_No_Entry, t_ill, 0, 0, { Zz, Zz, Zz }, 0 ,0 },
2047   { e_No_Entry, t_ill, 0, 0, { Zz, Zz, Zz }, 0 ,0 },
2048   /* 40 */
2049   { e_cmovo,   t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2050   { e_cmovno,  t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2051   { e_cmovnae, t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2052   { e_cmovnb,  t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2053   { e_cmove,   t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2054   { e_cmovne,  t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2055   { e_cmovbe,  t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2056   { e_cmovnbe, t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2057   /* 48 */
2058   { e_cmovs,   t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2059   { e_cmovns,  t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2060   { e_cmovpe,  t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2061   { e_cmovpo,  t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2062   { e_cmovnge, t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2063   { e_cmovnl,  t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2064   { e_cmovng,  t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2065   { e_cmovnl,  t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R | (fCOND << FPOS) },
2066   /* 50 */
2067   { e_No_Entry, t_sse, SSE50, true, { Zz, Zz, Zz }, 0, 0 },
2068   { e_No_Entry, t_sse, SSE51, true, { Zz, Zz, Zz }, 0, 0 },
2069   { e_No_Entry, t_sse, SSE52, true, { Zz, Zz, Zz }, 0, 0 },
2070   { e_No_Entry, t_sse, SSE53, true, { Zz, Zz, Zz }, 0, 0 },
2071   { e_No_Entry, t_sse, SSE54, true, { Zz, Zz, Zz }, 0, 0 },
2072   { e_No_Entry, t_sse, SSE55, true, { Zz, Zz, Zz }, 0, 0 },
2073   { e_No_Entry, t_sse, SSE56, true, { Zz, Zz, Zz }, 0, 0 },
2074   { e_No_Entry, t_sse, SSE57, true, { Zz, Zz, Zz }, 0, 0 },
2075   /* 58 */
2076   { e_No_Entry, t_sse, SSE58, true, { Zz, Zz, Zz }, 0, 0 },
2077   { e_No_Entry, t_sse, SSE59, true, { Zz, Zz, Zz }, 0, 0 },
2078   { e_No_Entry, t_sse, SSE5A, true, { Zz, Zz, Zz }, 0, 0 },
2079   { e_No_Entry, t_sse, SSE5B, true, { Zz, Zz, Zz }, 0, 0 },
2080   { e_No_Entry, t_sse, SSE5C, true, { Zz, Zz, Zz }, 0, 0 },
2081   { e_No_Entry, t_sse, SSE5D, true, { Zz, Zz, Zz }, 0, 0 },
2082   { e_No_Entry, t_sse, SSE5E, true, { Zz, Zz, Zz }, 0, 0 },
2083   { e_No_Entry, t_sse, SSE5F, true, { Zz, Zz, Zz }, 0, 0 },
2084   /* 60 */
2085   { e_No_Entry, t_sse, SSE60, true, { Zz, Zz, Zz }, 0, 0 },
2086   { e_No_Entry, t_sse, SSE61, true, { Zz, Zz, Zz }, 0, 0 },
2087   { e_No_Entry, t_sse, SSE62, true, { Zz, Zz, Zz }, 0, 0 },
2088   { e_No_Entry, t_sse, SSE63, true, { Zz, Zz, Zz }, 0, 0 },
2089   { e_No_Entry, t_sse, SSE64, true, { Zz, Zz, Zz }, 0, 0 },
2090   { e_No_Entry, t_sse, SSE65, true, { Zz, Zz, Zz }, 0, 0 },
2091   { e_No_Entry, t_sse, SSE66, true, { Zz, Zz, Zz }, 0, 0 },
2092   { e_No_Entry, t_sse, SSE67, true, { Zz, Zz, Zz }, 0, 0 },
2093   /* 68 */
2094   { e_No_Entry, t_sse, SSE68, true, { Zz, Zz, Zz }, 0, 0 },
2095   { e_No_Entry, t_sse, SSE69, true, { Zz, Zz, Zz }, 0, 0 },
2096   { e_No_Entry, t_sse, SSE6A, true, { Zz, Zz, Zz }, 0, 0 },
2097   { e_No_Entry, t_sse, SSE6B, true, { Zz, Zz, Zz }, 0, 0 },
2098   { e_No_Entry, t_sse, SSE6C, true, { Zz, Zz, Zz }, 0, 0 },
2099   { e_No_Entry, t_sse, SSE6D, true, { Zz, Zz, Zz }, 0, 0 },
2100   { e_No_Entry, t_sse, SSE6E, true, { Zz, Zz, Zz }, 0, 0 },
2101   { e_No_Entry, t_sse, SSE6F, true, { Zz, Zz, Zz }, 0, 0 },
2102   /* 70 */
2103   { e_No_Entry, t_sse, SSE70, true, { Zz, Zz, Zz }, 0, 0 },
2104   { e_No_Entry, t_grp, Grp12, false, { Zz, Zz, Zz }, 0, 0 },
2105   { e_No_Entry, t_grp, Grp13, false, { Zz, Zz, Zz }, 0, 0 },
2106   { e_No_Entry, t_grp, Grp14, false, { Zz, Zz, Zz }, 0, 0 },
2107   { e_No_Entry, t_sse, SSE74, true, { Zz, Zz, Zz }, 0, 0 },
2108   { e_No_Entry, t_sse, SSE75, true, { Zz, Zz, Zz }, 0, 0 },
2109   { e_No_Entry, t_sse, SSE76, true, { Zz, Zz, Zz }, 0, 0 },
2110   { e_No_Entry, t_sse, SSE77, false, { Zz, Zz, Zz }, 0, 0 },
2111   /* 78 */
2112   { e_No_Entry, t_sse, SSE78, 0, { Zz, Zz, Zz }, 0, 0 },
2113   { e_No_Entry, t_sse, SSE79, 0, { Zz, Zz, Zz }, 0, 0 },
2114   { e_No_Entry, t_ill, 0, 0, { Zz, Zz, Zz }, 0, 0 }, // SSE5A will go in 7A and 7B when it comes out
2115   { e_No_Entry, t_ill, 0, 0, { Zz, Zz, Zz }, 0, 0 },
2116   { e_No_Entry, t_sse, SSE7C, 0, { Zz, Zz, Zz }, 0, 0 },
2117   { e_No_Entry, t_sse, SSE7D, 0, { Zz, Zz, Zz }, 0, 0 },
2118   { e_No_Entry, t_sse, SSE7E, 0, { Zz, Zz, Zz }, 0, 0 },
2119   { e_No_Entry, t_sse, SSE7F, 0, { Zz, Zz, Zz }, 0, 0 },
2120   /* 80 */
2121   { e_jo,   t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2122   { e_jno,  t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2123   { e_jb,   t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2124   { e_jnb,  t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2125   { e_jz,   t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2126   { e_jnz,  t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2127   { e_jbe,  t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2128   { e_jnbe, t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2129   /* 88 */
2130   { e_js,   t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2131   { e_jns,  t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2132   { e_jp,   t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2133   { e_jnp,  t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2134   { e_jl,   t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2135   { e_jnl,  t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2136   { e_jle,  t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2137   { e_jnle, t_done, 0, false, { Jz, Zz, Zz }, (IS_JCC | REL_X), s1R | (fCOND << FPOS) },
2138   /* 90 */
2139   { e_seto,   t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2140   { e_setno,  t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2141   { e_setb,   t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2142   { e_setnb,  t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2143   { e_setz,   t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2144   { e_setnz,  t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2145   { e_setbe,  t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2146   { e_setnbe, t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2147   /* 98 */
2148   { e_sets,   t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2149   { e_setns,  t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2150   { e_setp,   t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2151   { e_setnp,  t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2152   { e_setl,   t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2153   { e_setnl,  t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2154   { e_setle,  t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2155   { e_setnle, t_done, 0, true, { Eb, Zz, Zz }, 0, s1W | (fCOND << FPOS) },
2156   /* A0 */
2157   { e_push,   t_done, 0, false, { FS, eSP, Zz }, 0, s1R2RW },
2158   { e_pop,    t_done, 0, false, { FS, eSP, Zz }, 0, s1W2RW },
2159   { e_cpuid,  t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE },
2160   { e_bt,     t_done, 0, true, { Ev, Gv, Zz }, 0, s1R2R },
2161   { e_shld,   t_done, 0, true, { Ev, Gv, Ib }, 0, s1RW2R3R },
2162   { e_shld,   t_done, 0, true, { Ev, Gv, CL }, 0, s1RW2R3R },
2163   { e_No_Entry, t_ill, 0, 0, { Zz, Zz, Zz }, 0, 0 }, 
2164   { e_No_Entry, t_ill, 0, 0, { Zz, Zz, Zz }, 0, 0 },
2165   /* A8 */
2166   { e_push, t_done, 0, false, { GS, eSP, Zz }, 0, s1R2RW },
2167   { e_pop,  t_done, 0, false, { GS, eSP, Zz }, 0, s1W2RW },
2168   { e_rsm,  t_done, 0, false, { Zz, Zz, Zz }, 0, sNONE },
2169   { e_bts,  t_done, 0, true, { Ev, Gv, Zz }, 0, s1RW2R },
2170   { e_shrd, t_done, 0, true, { Ev, Gv, Ib }, 0, s1RW2R3R },
2171   { e_shrd, t_done, 0, true, { Ev, Gv, CL }, 0, s1RW2R3R },
2172   { e_No_Entry, t_grp, Grp15, 0, { Zz, Zz, Zz }, 0, 0 }, 
2173   { e_imul, t_done, 0, true, { Gv, Ev, Zz }, 0, s1RW2R },
2174   /* B0 */
2175   // Assuming this is used with LOCK prefix, the destination gets a write anyway
2176   // This is not the case without lock prefix, but I ignore that case
2177   // Also, given that the 3rd operand is a register I ignore that it may be written
2178   { e_cmpxch, t_done, 0, true, { Eb, Gb, AL }, 0, s1RW2R3R | (fCMPXCH << FPOS) },
2179   { e_cmpxch, t_done, 0, true, { Ev, Gv, eAX }, 0, s1RW2R3R | (fCMPXCH << FPOS) },
2180   { e_lss, t_done, 0, true, { SS, Gv, Mp }, 0, s1W2W3R },
2181   { e_btr, t_done, 0, true, { Ev, Gv, Zz }, 0, s1RW2R },
2182   { e_lfs, t_done, 0, true, { FS, Gv, Mp }, 0, s1W2W3R },
2183   { e_lgs, t_done, 0, true, { GS, Gv, Mp }, 0, s1W2W3R },
2184   { e_movzx, t_done, 0, true, { Gv, Eb, Zz }, 0, s1W2R },
2185   { e_movzx, t_done, 0, true, { Gv, Ew, Zz }, 0, s1W2R },
2186   /* B8 */
2187   { e_No_Entry, t_sse, SSEB8, 0, { Zz, Zz, Zz }, 0, 0 },
2188   { e_ud2grp10, t_ill, 0, 0, { Zz, Zz, Zz }, 0, sNONE },
2189   { e_No_Entry, t_grp, Grp8, true, { Zz, Zz, Zz }, 0, 0 },
2190   { e_btc, t_done, 0, true, { Ev, Gv, Zz }, 0, s1RW2R },
2191   { e_bsf, t_done, 0, true, { Gv, Ev, Zz }, 0, s1W2R },
2192   { e_bsr, t_done, 0, true, { Gv, Ev, Zz }, 0, s1W2R },
2193   { e_movsx, t_done, 0, true, { Gv, Eb, Zz }, 0, s1W2R },
2194   { e_movsx, t_done, 0, true, { Gv, Ew, Zz }, 0, s1W2R },
2195   /* C0 */
2196   { e_xadd, t_done, 0, true, { Eb, Gb, Zz }, 0, s1RW2RW },
2197   { e_xadd, t_done, 0, true, { Ev, Gv, Zz }, 0, s1RW2RW },
2198   { e_No_Entry, t_sse, SSEC2, true, { Zz, Zz, Zz }, 0, 0 },
2199   { e_movnti , t_done, 0, true, { Ev, Gv, Zz }, 0, s1W2R | (fNT << FPOS) },
2200   { e_No_Entry, t_sse, SSEC4, true, { Zz, Zz, Zz }, 0, 0 },
2201   { e_No_Entry, t_sse, SSEC5, true, { Zz, Zz, Zz }, 0, 0 },
2202   { e_No_Entry, t_sse, SSEC6, true, { Zz, Zz, Zz }, 0, 0 },
2203   { e_No_Entry, t_grp, Grp9,  true, { Zz, Zz, Zz }, 0, 0 },
2204   /* C8 */
2205   { e_bswap, t_done, 0, false, { EAX, Zz, Zz }, 0, s1RW }, 
2206   { e_bswap, t_done, 0, false, { ECX, Zz, Zz }, 0, s1RW },
2207   { e_bswap, t_done, 0, false, { EDX, Zz, Zz }, 0, s1RW }, 
2208   { e_bswap, t_done, 0, false, { EBX, Zz, Zz }, 0, s1RW }, 
2209   { e_bswap, t_done, 0, false, { ESP, Zz, Zz }, 0, s1RW },
2210   { e_bswap, t_done, 0, false, { EBP, Zz, Zz }, 0, s1RW }, 
2211   { e_bswap, t_done, 0, false, { ESI, Zz, Zz }, 0, s1RW }, 
2212   { e_bswap, t_done, 0, false, { EDI, Zz, Zz }, 0, s1RW }, 
2213   /* D0 */
2214   { e_No_Entry, t_sse, SSED0, false, { Zz, Zz, Zz }, 0, 0 },
2215   { e_No_Entry, t_sse, SSED1, true, { Zz, Zz, Zz }, 0, 0 },
2216   { e_No_Entry, t_sse, SSED2, true, { Zz, Zz, Zz }, 0, 0 },
2217   { e_No_Entry, t_sse, SSED3, true, { Zz, Zz, Zz }, 0, 0 },
2218   { e_No_Entry, t_sse, SSED4, true, { Zz, Zz, Zz }, 0, 0 },
2219   { e_No_Entry, t_sse, SSED5, true, { Zz, Zz, Zz }, 0, 0 },
2220   { e_No_Entry, t_sse, SSED6, true, { Zz, Zz, Zz }, 0, 0 },
2221   { e_No_Entry, t_sse, SSED7, true, { Zz, Zz, Zz }, 0, 0 },
2222   /* D8 */
2223   { e_No_Entry, t_sse, SSED8, true, { Zz, Zz, Zz }, 0, 0 },
2224   { e_No_Entry, t_sse, SSED9, true, { Zz, Zz, Zz }, 0, 0 },
2225   { e_No_Entry, t_sse, SSEDA, true, { Zz, Zz, Zz }, 0, 0 },
2226   { e_No_Entry, t_sse, SSEDB, true, { Zz, Zz, Zz }, 0, 0 },
2227   { e_No_Entry, t_sse, SSEDC, true, { Zz, Zz, Zz }, 0, 0 },
2228   { e_No_Entry, t_sse, SSEDD, true, { Zz, Zz, Zz }, 0, 0 },
2229   { e_No_Entry, t_sse, SSEDE, true, { Zz, Zz, Zz }, 0, 0 },
2230   { e_No_Entry, t_sse, SSEDF, true, { Zz, Zz, Zz }, 0, 0 },
2231   /* E0 */
2232   { e_No_Entry, t_sse, SSEE0, true, { Zz, Zz, Zz }, 0, 0 },
2233   { e_No_Entry, t_sse, SSEE1, true, { Zz, Zz, Zz }, 0, 0 },
2234   { e_No_Entry, t_sse, SSEE2, true, { Zz, Zz, Zz }, 0, 0 },
2235   { e_No_Entry, t_sse, SSEE3, true, { Zz, Zz, Zz }, 0, 0 },
2236   { e_No_Entry, t_sse, SSEE4, true, { Zz, Zz, Zz }, 0, 0 },
2237   { e_No_Entry, t_sse, SSEE5, true, { Zz, Zz, Zz }, 0, 0 },
2238   { e_No_Entry, t_sse, SSEE6, true, { Zz, Zz, Zz }, 0, 0 },
2239   { e_No_Entry, t_sse, SSEE7, true, { Zz, Zz, Zz }, 0, 0 },
2240   /* E8 */
2241   { e_No_Entry, t_sse, SSEE8, true, { Zz, Zz, Zz }, 0, 0 },
2242   { e_No_Entry, t_sse, SSEE9, true, { Zz, Zz, Zz }, 0, 0 },
2243   { e_No_Entry, t_sse, SSEEA, true, { Zz, Zz, Zz }, 0, 0 },
2244   { e_No_Entry, t_sse, SSEEB, true, { Zz, Zz, Zz }, 0, 0 },
2245   { e_No_Entry, t_sse, SSEEC, true, { Zz, Zz, Zz }, 0, 0 },
2246   { e_No_Entry, t_sse, SSEED, true, { Zz, Zz, Zz }, 0, 0 },
2247   { e_No_Entry, t_sse, SSEEE, true, { Zz, Zz, Zz }, 0, 0 },
2248   { e_No_Entry, t_sse, SSEEF, true, { Zz, Zz, Zz }, 0, 0 },
2249   /* F0 */
2250   { e_No_Entry, t_sse, SSEF0, false, { Zz, Zz, Zz }, 0, 0 },
2251   { e_No_Entry, t_sse, SSEF1, true, { Zz, Zz, Zz }, 0, 0 },
2252   { e_No_Entry, t_sse, SSEF2, true, { Zz, Zz, Zz }, 0, 0 },
2253   { e_No_Entry, t_sse, SSEF3, true, { Zz, Zz, Zz }, 0, 0 },
2254   { e_No_Entry, t_sse, SSEF4, true, { Zz, Zz, Zz }, 0, 0 },
2255   { e_No_Entry, t_sse, SSEF5, true, { Zz, Zz, Zz }, 0, 0 },
2256   { e_No_Entry, t_sse, SSEF6, true, { Zz, Zz, Zz }, 0, 0 },
2257   { e_No_Entry, t_sse, SSEF7, true, { Zz, Zz, Zz }, 0, 0 },
2258   /* F8 */
2259   { e_No_Entry, t_sse, SSEF8, true, { Zz, Zz, Zz }, 0, 0 },
2260   { e_No_Entry, t_sse, SSEF9, true, { Zz, Zz, Zz }, 0, 0 },
2261   { e_No_Entry, t_sse, SSEFA, true, { Zz, Zz, Zz }, 0, 0 },
2262   { e_No_Entry, t_sse, SSEFB, true, { Zz, Zz, Zz }, 0, 0 },
2263   { e_No_Entry, t_sse, SSEFC, true, { Zz, Zz, Zz }, 0, 0 },
2264   { e_No_Entry, t_sse, SSEFD, true, { Zz, Zz, Zz }, 0, 0 },
2265   { e_No_Entry, t_sse, SSEFE, true, { Zz, Zz, Zz }, 0, 0 },
2266   { e_No_Entry, t_sse, SSEFF, false, { Zz, Zz, Zz }, 0, 0 }
2267 };
2268
2269 static ia32_entry threeByteMap[256] = {
2270                 /* 00 */
2271                 { e_No_Entry, t_sse_bis, SSEB00, true, { Zz, Zz, Zz }, 0, 0 },
2272                 { e_No_Entry, t_sse_bis, SSEB01, true, { Zz, Zz, Zz }, 0, 0 },
2273                 { e_No_Entry, t_sse_bis, SSEB02, true, { Zz, Zz, Zz }, 0, 0 },
2274                 { e_No_Entry, t_sse_bis, SSEB03, true, { Zz, Zz, Zz }, 0, 0 },
2275                 { e_No_Entry, t_sse_bis, SSEB04, true, { Zz, Zz, Zz }, 0, 0 },
2276                 { e_No_Entry, t_sse_bis, SSEB05, true, { Zz, Zz, Zz }, 0, 0 },
2277                 { e_No_Entry, t_sse_bis, SSEB06, true, { Zz, Zz, Zz }, 0, 0 },
2278                 { e_No_Entry, t_sse_bis, SSEB07, true, { Zz, Zz, Zz }, 0, 0 },
2279                 /* 08*/
2280                 { e_No_Entry, t_sse_bis, SSEB08, true, { Zz, Zz, Zz }, 0, 0 },
2281                 { e_No_Entry, t_sse_bis, SSEB09, true, { Zz, Zz, Zz }, 0, 0 },
2282                 { e_No_Entry, t_sse_bis, SSEB0A, true, { Zz, Zz, Zz }, 0, 0 },
2283                 { e_No_Entry, t_sse_bis, SSEB0B, true, { Zz, Zz, Zz }, 0, 0 },
2284                 { e_No_Entry, t_sse_bis, SSEB0C, false, { Zz, Zz, Zz }, 0, 0 },
2285                 { e_No_Entry, t_sse_bis, SSEB0D, false, { Zz, Zz, Zz }, 0, 0 },
2286                 { e_No_Entry, t_sse_bis, SSEB0E, false, { Zz, Zz, Zz }, 0, sNONE },
2287                 { e_No_Entry, t_sse_bis, SSEB0F, false, { Zz, Zz, Zz }, 0, sNONE },
2288                 /* 10 */
2289                 { e_No_Entry, t_sse_bis, SSEB10, true, { Zz, Zz, Zz }, 0, 0 },
2290                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2291                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2292                 { e_No_Entry, t_sse_bis, SSEB13, false, { Zz, Zz, Zz }, 0, 0 },
2293                 { e_No_Entry, t_sse_bis, SSEB14, true, { Zz, Zz, Zz }, 0, 0 },
2294                 { e_No_Entry, t_sse_bis, SSEB15, true, { Zz, Zz, Zz }, 0, 0 },
2295                 { e_No_Entry, t_sse_bis, SSEB16, false, { Zz, Zz, Zz }, 0, 0 },
2296                 { e_No_Entry, t_sse_bis, SSEB17, true, { Zz, Zz, Zz }, 0, 0 },
2297                 /* 18 */
2298                 { e_No_Entry, t_sse_bis, SSEB18, false, { Zz, Zz, Zz }, 0, 0 },
2299                 { e_No_Entry, t_sse_bis, SSEB19, false, { Zz, Zz, Zz }, 0, 0 },
2300                 { e_No_Entry, t_sse_bis, SSEB1A, false, { Zz, Zz, Zz }, 0, 0 },
2301                 { e_No_Entry, t_sse_bis, SSEB1B, false, { Zz, Zz, Zz }, 0, 0 },
2302                 { e_No_Entry, t_sse_bis, SSEB1C, true, { Zz, Zz, Zz }, 0, 0 },
2303                 { e_No_Entry, t_sse_bis, SSEB1D, true, { Zz, Zz, Zz }, 0, 0 },
2304                 { e_No_Entry, t_sse_bis, SSEB1E, true, { Zz, Zz, Zz }, 0, 0 },
2305                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2306                 /* 20 */
2307                 { e_No_Entry, t_sse_bis, SSEB20, true, { Zz, Zz, Zz }, 0, 0 },
2308                 { e_No_Entry, t_sse_bis, SSEB21, true, { Zz, Zz, Zz }, 0, 0 },
2309                 { e_No_Entry, t_sse_bis, SSEB22, true, { Zz, Zz, Zz }, 0, 0 },
2310                 { e_No_Entry, t_sse_bis, SSEB23, true, { Zz, Zz, Zz }, 0, 0 },
2311                 { e_No_Entry, t_sse_bis, SSEB24, true, { Zz, Zz, Zz }, 0, 0 },
2312                 { e_No_Entry, t_sse_bis, SSEB25, true, { Zz, Zz, Zz }, 0, 0 },
2313                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2314                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2315                 /* 28 */
2316                 { e_No_Entry, t_sse_bis, SSEB28, true, { Zz, Zz, Zz }, 0, 0 },
2317                 { e_No_Entry, t_sse_bis, SSEB29, true, { Zz, Zz, Zz }, 0, 0 },
2318                 { e_No_Entry, t_sse_bis, SSEB2A, true, { Zz, Zz, Zz }, 0, 0 },
2319                 { e_No_Entry, t_sse_bis, SSEB2B, true, { Zz, Zz, Zz }, 0, 0 },
2320                 { e_No_Entry, t_sse_bis, SSEB2C, false, { Zz, Zz, Zz }, 0, 0 },
2321                 { e_No_Entry, t_sse_bis, SSEB2D, false, { Zz, Zz, Zz }, 0, 0 },
2322                 { e_No_Entry, t_sse_bis, SSEB2E, false, { Zz, Zz, Zz }, 0, 0 },
2323                 { e_No_Entry, t_sse_bis, SSEB2F, false, { Zz, Zz, Zz }, 0, 0 },
2324                 /* 30 */
2325                 { e_No_Entry, t_sse_bis, SSEB30, true, { Zz, Zz, Zz }, 0, 0 },
2326                 { e_No_Entry, t_sse_bis, SSEB31, true, { Zz, Zz, Zz }, 0, 0 },
2327                 { e_No_Entry, t_sse_bis, SSEB32, true, { Zz, Zz, Zz }, 0, 0 },
2328                 { e_No_Entry, t_sse_bis, SSEB33, true, { Zz, Zz, Zz }, 0, 0 },
2329                 { e_No_Entry, t_sse_bis, SSEB34, true, { Zz, Zz, Zz }, 0, 0 },
2330                 { e_No_Entry, t_sse_bis, SSEB35, true, { Zz, Zz, Zz }, 0, 0 },
2331                 { e_No_Entry, t_sse_bis, SSEB36, false, { Zz, Zz, Zz }, 0, 0 },
2332                 { e_No_Entry, t_sse_bis, SSEB37, true, { Zz, Zz, Zz }, 0, 0 },
2333                 /* 38 */
2334                 { e_No_Entry, t_sse_bis, SSEB38, true, { Zz, Zz, Zz }, 0, 0 },
2335                 { e_No_Entry, t_sse_bis, SSEB39, true, { Zz, Zz, Zz }, 0, 0 },
2336                 { e_No_Entry, t_sse_bis, SSEB3A, true, { Zz, Zz, Zz }, 0, 0 },
2337                 { e_No_Entry, t_sse_bis, SSEB3B, true, { Zz, Zz, Zz }, 0, 0 },
2338                 { e_No_Entry, t_sse_bis, SSEB3C, true, { Zz, Zz, Zz }, 0, 0 },
2339                 { e_No_Entry, t_sse_bis, SSEB3D, true, { Zz, Zz, Zz }, 0, 0 },
2340                 { e_No_Entry, t_sse_bis, SSEB3E, true, { Zz, Zz, Zz }, 0, 0 },
2341                 { e_No_Entry, t_sse_bis, SSEB3F, true, { Zz, Zz, Zz }, 0, 0 },
2342                 /* 40 */
2343                 { e_No_Entry, t_sse_bis, SSEB40, true, { Zz, Zz, Zz }, 0, 0 },
2344                 { e_No_Entry, t_sse_bis, SSEB41, true, { Zz, Zz, Zz }, 0, 0 },
2345                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2346                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2347                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2348                 { e_No_Entry, t_sse_bis, SSEB45, false, { Zz, Zz, Zz }, 0, 0 },
2349                 { e_No_Entry, t_sse_bis, SSEB46, false, { Zz, Zz, Zz }, 0, 0 },
2350                 { e_No_Entry, t_sse_bis, SSEB47, false, { Zz, Zz, Zz }, 0, 0 },
2351                 /* 48 */
2352                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2353                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2354                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2355                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2356                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2357                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2358                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2359                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2360                 /* 50 */
2361                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2362                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2363                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2364                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2365                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2366                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2367                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2368                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2369                 /* 58 */
2370                 { e_No_Entry, t_sse_bis, SSEB58, false, { Zz, Zz, Zz }, 0, 0 },
2371                 { e_No_Entry, t_sse_bis, SSEB59, false, { Zz, Zz, Zz }, 0, 0 },
2372                 { e_No_Entry, t_sse_bis, SSEB5A, false, { Zz, Zz, Zz }, 0, 0 },
2373                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2374                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2375                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2376                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2377                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2378                 /* 60 */
2379                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2380                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2381                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2382                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2383                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2384                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2385                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2386                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2387                 /* 68 */
2388                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2389                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2390                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2391                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2392                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2393                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2394                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2395                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2396                 /* 70 */
2397                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2398                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2399                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2400                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2401                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2402                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2403                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2404                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2405                 /* 78 */
2406                 { e_No_Entry, t_sse_bis, SSEB78, false, { Zz, Zz, Zz }, 0, 0 },
2407                 { e_No_Entry, t_sse_bis, SSEB79, false, { Zz, Zz, Zz }, 0, 0 },
2408                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2409                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2410                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2411                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2412                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2413                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2414                 /* 80 */
2415                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2416                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2417                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2418                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2419                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2420                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2421                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2422                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2423                 /* 88 */
2424                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2425                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2426                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2427                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2428                 { e_No_Entry, t_sse_bis, SSEB8C, false, { Zz, Zz, Zz }, 0, 0 },
2429                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2430                 { e_No_Entry, t_sse_bis, SSEB8E, false, { Zz, Zz, Zz }, 0, 0 },
2431                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2432                 /* 90 */
2433                 { e_No_Entry, t_sse_bis, SSEB90, false, { Zz, Zz, Zz }, 0, 0 },
2434                 { e_No_Entry, t_sse_bis, SSEB91, false, { Zz, Zz, Zz }, 0, 0 },
2435                 { e_No_Entry, t_sse_bis, SSEB92, false, { Zz, Zz, Zz }, 0, 0 },
2436                 { e_No_Entry, t_sse_bis, SSEB93, false, { Zz, Zz, Zz }, 0, 0 },
2437                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2438                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2439                 { e_No_Entry, t_sse_bis, SSEB96, false, { Zz, Zz, Zz }, 0, 0 },
2440                 { e_No_Entry, t_sse_bis, SSEB97, false, { Zz, Zz, Zz }, 0, 0 },
2441                 /* 98 */
2442                 { e_No_Entry, t_sse_bis, SSEB98, false, { Zz, Zz, Zz }, 0, 0 },
2443                 { e_No_Entry, t_sse_bis, SSEB99, false, { Zz, Zz, Zz }, 0, 0 },
2444                 { e_No_Entry, t_sse_bis, SSEB9A, false, { Zz, Zz, Zz }, 0, 0 },
2445                 { e_No_Entry, t_sse_bis, SSEB9B, false, { Zz, Zz, Zz }, 0, 0 },
2446                 { e_No_Entry, t_sse_bis, SSEB9C, false, { Zz, Zz, Zz }, 0, 0 },
2447                 { e_No_Entry, t_sse_bis, SSEB9D, false, { Zz, Zz, Zz }, 0, 0 },
2448                 { e_No_Entry, t_sse_bis, SSEB9E, false, { Zz, Zz, Zz }, 0, 0 },
2449                 { e_No_Entry, t_sse_bis, SSEB9F, false, { Zz, Zz, Zz }, 0, 0 },
2450                 /* A0 */
2451                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2452                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2453                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2454                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2455                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2456                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2457                 { e_No_Entry, t_sse_bis, SSEBA6, false, { Zz, Zz, Zz }, 0, 0 },
2458                 { e_No_Entry, t_sse_bis, SSEBA7, false, { Zz, Zz, Zz }, 0, 0 },
2459                 /* A8 */
2460                 { e_No_Entry, t_sse_bis, SSEBA8, false, { Zz, Zz, Zz }, 0, 0 },
2461                 { e_No_Entry, t_sse_bis, SSEBA9, false, { Zz, Zz, Zz }, 0, 0 },
2462                 { e_No_Entry, t_sse_bis, SSEBAA, false, { Zz, Zz, Zz }, 0, 0 },
2463                 { e_No_Entry, t_sse_bis, SSEBAB, false, { Zz, Zz, Zz }, 0, 0 },
2464                 { e_No_Entry, t_sse_bis, SSEBAC, false, { Zz, Zz, Zz }, 0, 0 },
2465                 { e_No_Entry, t_sse_bis, SSEBAD, false, { Zz, Zz, Zz }, 0, 0 },
2466                 { e_No_Entry, t_sse_bis, SSEBAE, false, { Zz, Zz, Zz }, 0, 0 },
2467                 { e_No_Entry, t_sse_bis, SSEBAF, false, { Zz, Zz, Zz }, 0, 0 },
2468                 /* B0 */
2469                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2470                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2471                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2472                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2473                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2474                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2475                 { e_No_Entry, t_sse_bis, SSEBB6, false, { Zz, Zz, Zz }, 0, 0 },
2476                 { e_No_Entry, t_sse_bis, SSEBB7, false, { Zz, Zz, Zz }, 0, 0 }, 
2477                 /* B8 */
2478                 { e_No_Entry, t_sse_bis, SSEBB8, false, { Zz, Zz, Zz }, 0, 0 },
2479                 { e_No_Entry, t_sse_bis, SSEBB9, false, { Zz, Zz, Zz }, 0, 0 },
2480                 { e_No_Entry, t_sse_bis, SSEBBA, false, { Zz, Zz, Zz }, 0, 0 },
2481                 { e_No_Entry, t_sse_bis, SSEBBB, false, { Zz, Zz, Zz }, 0, 0 },
2482                 { e_No_Entry, t_sse_bis, SSEBBC, false, { Zz, Zz, Zz }, 0, 0 },
2483                 { e_No_Entry, t_sse_bis, SSEBBD, false, { Zz, Zz, Zz }, 0, 0 },
2484                 { e_No_Entry, t_sse_bis, SSEBBE, false, { Zz, Zz, Zz }, 0, 0 },
2485                 { e_No_Entry, t_sse_bis, SSEBBF, false, { Zz, Zz, Zz }, 0, 0 },
2486                 /* C0 */
2487                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2488                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2489                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2490                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2491                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2492                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2493                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2494                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2495                 /* C8 */
2496                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2497                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2498                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2499                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2500                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2501                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2502                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2503                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2504                 /* D0 */
2505                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2506                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2507                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2508                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2509                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2510                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2511                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2512                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2513                 /* D8 */
2514                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2515                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2516                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2517                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2518                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2519                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2520                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2521                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2522                 /* E0 */
2523                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2524                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2525                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2526                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2527                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2528                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2529                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2530                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2531                 /* E8 */
2532                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2533                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2534                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2535                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2536                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2537                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2538                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2539                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2540                 /* F0 */
2541                 { e_No_Entry, t_sse_bis, SSEBF0, true, { Zz, Zz, Zz }, 0, 0 },
2542                 { e_No_Entry, t_sse_bis, SSEBF1, true, { Zz, Zz, Zz }, 0, 0 },
2543                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2544                 { e_No_Entry, t_grp, Grp17, true, { Zz, Zz, Zz }, 0, 0 },
2545                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2546                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2547                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2548                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2549                 /* F8 */
2550                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2551                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2552                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2553                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2554                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2555                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2556                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2557                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 }
2558 };
2559
2560 static ia32_entry threeByteMap2[256] = {
2561                 /* 00 */
2562                 { e_No_Entry, t_sse_ter, SSET00, false, { Zz, Zz, Zz }, 0, 0 },
2563                 { e_No_Entry, t_sse_ter, SSET01, false, { Zz, Zz, Zz }, 0, 0 },
2564                 { e_No_Entry, t_sse_ter, SSET02, false, { Zz, Zz, Zz }, 0, 0 },
2565                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2566                 { e_No_Entry, t_sse_ter, SSET04, false, { Zz, Zz, Zz }, 0, 0 },
2567                 { e_No_Entry, t_sse_ter, SSET05, false, { Zz, Zz, Zz }, 0, 0 },
2568                 { e_No_Entry, t_sse_ter, SSET06, false, { Zz, Zz, Zz }, 0, 0 },
2569                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2570                 /* 08 */
2571                 { e_No_Entry, t_sse_ter, SSET08, true, { Zz, Zz, Zz }, 0, 0 },
2572                 { e_No_Entry, t_sse_ter, SSET09, true, { Zz, Zz, Zz }, 0, 0 },
2573                 { e_No_Entry, t_sse_ter, SSET0A, true, { Zz, Zz, Zz }, 0, 0 },
2574                 { e_No_Entry, t_sse_ter, SSET0B, true, { Zz, Zz, Zz }, 0, 0 },
2575                 { e_No_Entry, t_sse_ter, SSET0C, true, { Zz, Zz, Zz }, 0, 0 },
2576                 { e_No_Entry, t_sse_ter, SSET0D, true, { Zz, Zz, Zz }, 0, 0 },
2577                 { e_No_Entry, t_sse_ter, SSET0E, true, { Zz, Zz, Zz }, 0, 0 },
2578                 { e_No_Entry, t_sse_ter, SSET0F, true, { Zz, Zz, Zz }, 0, 0 },
2579                 /* 10 */
2580                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2581                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2582                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2583                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2584                 { e_No_Entry, t_sse_ter, SSET14, true, { Zz, Zz, Zz }, 0, 0 },
2585                 { e_No_Entry, t_sse_ter, SSET15, true, { Zz, Zz, Zz }, 0, 0 },
2586                 { e_No_Entry, t_sse_ter, SSET16, true, { Zz, Zz, Zz }, 0, 0 },
2587                 { e_No_Entry, t_sse_ter, SSET17, true, { Zz, Zz, Zz }, 0, 0 },
2588                 /* 18 */
2589                 { e_No_Entry, t_sse_ter, SSET18, true, { Zz, Zz, Zz }, 0, 0 },
2590                 { e_No_Entry, t_sse_ter, SSET19, false, { Zz, Zz, Zz }, 0, 0 },
2591                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2592                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2593                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2594                 { e_No_Entry, t_sse_ter, SSET1D, false, { Zz, Zz, Zz }, 0, 0 },
2595                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2596                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2597                 /* 20 */
2598                 { e_No_Entry, t_sse_ter, SSET20, true, { Zz, Zz, Zz }, 0, 0 },
2599                 { e_No_Entry, t_sse_ter, SSET21, true, { Zz, Zz, Zz }, 0, 0 },
2600                 { e_No_Entry, t_sse_ter, SSET22, true, { Zz, Zz, Zz }, 0, 0 },
2601                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2602                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2603                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2604                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2605                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2606                 /* 28 */
2607                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2608                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2609                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2610                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2611                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2612                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2613                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2614                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2615                 /* 30 */
2616                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2617                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2618                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2619                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2620                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2621                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2622                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2623                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2624                 /* 38 */
2625                 { e_No_Entry, t_sse_ter, SSET38, false, { Zz, Zz, Zz }, 0, 0 },
2626                 { e_No_Entry, t_sse_ter, SSET39, false, { Zz, Zz, Zz }, 0, 0 },
2627                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2628                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2629                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2630                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2631                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2632                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2633                 /* 40 */
2634                 { e_No_Entry, t_sse_ter, SSET40, true, { Zz, Zz, Zz }, 0, 0 },
2635                 { e_No_Entry, t_sse_ter, SSET41, true, { Zz, Zz, Zz }, 0, 0 },
2636                 { e_No_Entry, t_sse_ter, SSET42, true, { Zz, Zz, Zz }, 0, 0 },
2637                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2638                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2639                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2640                 { e_No_Entry, t_sse_ter, SSET46, false, { Zz, Zz, Zz }, 0, 0 },
2641                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2642                 /* 48 */
2643                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2644                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2645                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2646                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2647                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2648                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2649                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2650                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2651                 /* 50 */
2652                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2653                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2654                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2655                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2656                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2657                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2658                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2659                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2660                 /* 58 */
2661                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2662                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2663                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2664                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2665                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2666                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2667                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2668                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2669                 /* 60 */
2670                 { e_No_Entry, t_sse_ter, SSET60, true, { Zz, Zz, Zz }, 0, 0 },
2671                 { e_No_Entry, t_sse_ter, SSET61, true, { Zz, Zz, Zz }, 0, 0 },
2672                 { e_No_Entry, t_sse_ter, SSET62, true, { Zz, Zz, Zz }, 0, 0 },
2673                 { e_No_Entry, t_sse_ter, SSET63, true, { Zz, Zz, Zz }, 0, 0 },
2674                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2675                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2676                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2677                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2678                 /* 68 */
2679                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2680                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2681                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2682                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2683                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2684                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2685                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2686                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2687                 /* 70 */
2688                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2689                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2690                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2691                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2692                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2693                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2694                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2695                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2696                 /* 78 */
2697                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2698                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2699                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2700                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2701                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2702                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2703                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2704                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2705                 /* 80 */
2706                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2707                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2708                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2709                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2710                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2711                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2712                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2713                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2714                 /* 88 */
2715                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2716                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2717                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2718                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2719                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2720                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2721                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2722                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2723                 /* 90 */
2724                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2725                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2726                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2727                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2728                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2729                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2730                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2731                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2732                 /* 98 */
2733                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2734                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2735                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2736                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2737                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2738                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2739                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2740                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2741                 /* A0 */
2742                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2743                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2744                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2745                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2746                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2747                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2748                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2749                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2750                 /* A8 */
2751                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2752                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2753                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2754                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2755                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2756                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2757                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2758                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2759                 /* B0 */
2760                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2761                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2762                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2763                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2764                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2765                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2766                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2767                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },  
2768                 /* B8 */
2769                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2770                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2771                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2772                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2773                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2774                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2775                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2776                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2777                 /* C0 */
2778                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2779                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2780                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2781                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2782                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2783                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2784                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2785                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2786                 /* C8 */
2787                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2788                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2789                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2790                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2791                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2792                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2793                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2794                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2795                 /* D0 */
2796                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2797                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2798                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2799                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2800                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2801                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2802                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2803                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2804                 /* D8 */
2805                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2806                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2807                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2808                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2809                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2810                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2811                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2812                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2813                 /* E0 */
2814                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2815                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2816                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2817                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2818                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2819                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2820                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2821                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2822                 /* E8 */
2823                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2824                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2825                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2826                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2827                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2828                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2829                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2830                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2831                 /* F0 */
2832                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2833                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2834                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2835                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2836                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2837                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2838                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2839                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2840                 /* F8 */
2841                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2842                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2843                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2844                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2845                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2846                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2847                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 },
2848                 { e_No_Entry, t_ill, 0, false, { Zz, Zz, Zz }, 0, 0 }
2849 };
2850
2851 static ia32_entry fpuMap[][2][8] = {
2852 {
2853     { // D8
2854         { e_fadd,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2855         { e_fmul,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2856         { e_fcom,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2857         { e_fcomp, t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R }, // stack pop
2858         { e_fsub,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2859         { e_fsubr, t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2860         { e_fdiv,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2861         { e_fdivr, t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R }
2862     },
2863     { // D8 -- IMPORTANT NOTE: the C0-FF tables in the book are interleaved from how they
2864         // need to appear here (and for all FPU insns).  i.e. book rows 0, 4, 1, 5, 2, 6, 3, 7 are table rows
2865         // 0, 1, 2, 3, 4, 5, 6, 7.
2866         { e_fadd,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2867         { e_fmul,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2868         { e_fcom,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2869         { e_fcomp, t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R }, // stack pop
2870         { e_fsub,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2871         { e_fsubr, t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2872         { e_fdiv,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2873         { e_fdivr, t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R }
2874     },
2875 },
2876 {
2877     { // D9 
2878         { e_fld,    t_done, 0, true, { ST0, Ef, Zz }, 0, s1W2R }, // stack push
2879         { e_fnop,   t_done, 0, true, { Zz,  Zz, Zz }, 0, sNONE },
2880         { e_fst,    t_done, 0, true, { Ef, ST0, Zz }, 0, s1W2R },
2881         { e_fstp,   t_done, 0, true, { Ef, ST0, Zz }, 0, s1W2R }, // stack pop
2882         { e_fldenv, t_done, 0, true, { M14, Zz, Zz }, 0, s1R },
2883         { e_fldcw,  t_done, 0, true, { Ew,  Zz, Zz }, 0, s1R },
2884         { e_fstenv, t_done, 0, true, { M14, Zz, Zz }, 0, s1W },
2885         { e_fstcw,  t_done, 0, true, { Ew,  Zz, Zz }, 0, s1W }
2886     },
2887     { // D9 
2888         { e_fld,    t_done, 0, true, { ST0, Ef, Zz }, 0, s1W2R }, // stack push
2889         { e_fxch, t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2RW },
2890         { e_fnop,   t_done, 0, true, { Zz,  Zz, Zz }, 0, sNONE },
2891         { e_fstp,  t_done, 0, true, { Ef,  ST0, Zz }, 0, sNONE },
2892         { e_fchs,    t_done, 0, true, { ST0, Zz, Zz }, 0, s1RW }, // FIXME: using first of group as placeholder
2893         { e_fld1, t_done, 0, true, { ST0, Zz, Zz }, 0, s1RW }, // FIXME: using first of group
2894         { e_f2xm1,   t_done, 0, true, { ST0, Zz, Zz }, 0, s1RW }, // FIXME: using first of group as placeholder
2895         { e_fprem,  t_done, 0, true, { ST0, ST1, Zz }, 0, s1RW2R } // FIXME: using first of group
2896     },
2897 },
2898 {
2899     { // DA 
2900         { e_fiadd,  t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R },
2901         { e_fimul,  t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R },
2902         { e_ficom,  t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R },
2903         { e_ficomp, t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R }, // stack pop
2904         { e_fisub,  t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R },
2905         { e_fisubr, t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R },
2906         { e_fidiv,  t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R },
2907         { e_fidivr, t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R }
2908     },
2909     { // DA
2910         { e_fcmovb,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2911         { e_fcmove,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2912         { e_fcmovbe, t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2913         { e_fcmovu, t_done, 0, true,  { ST0, Ef, Zz }, 0, s1RW2R },
2914         { e_No_Entry,  t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE },
2915         { e_fucompp,  t_done, 0, true, { ST0, ST1, Zz }, 0, s1RW2RW }, // double pop
2916         { e_No_Entry,  t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE },
2917         { e_No_Entry,  t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE },
2918     },
2919 },
2920 {
2921     { // DB 
2922       { e_fild,   t_done, 0, true, { ST0, Ev, Zz }, 0, s1W2R },
2923       { e_fisttp, t_done, 0, true, { Ev, ST0, Zz }, 0, s1W2R }, //stack pop
2924       { e_fist,   t_done, 0, true, { Ev, ST0, Zz }, 0, s1W2R },
2925       { e_fistp,  t_done, 0, true, { Ev, ST0, Zz }, 0, s1W2R }, // stack pop
2926       { e_No_Entry,  t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE },
2927       { e_fld,    t_done, 0, true, { ST0, Ef, Zz }, 0, s1W2R },
2928       { e_No_Entry,  t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE },
2929       { e_fstp,   t_done, 0, true, { Ef, ST0, Zz }, 0, s1W2R }
2930     },
2931     { // DB
2932         { e_fcmovnb,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2933         { e_fcmovne,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2934         { e_fcmovnbe, t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2935         { e_fcmovnu,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2936         { e_fp_generic,  t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE }, // FIXME: needs FCLEX and FINIT in group
2937         { e_fucomi,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2938         { e_fcomi,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
2939         { e_No_Entry,  t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE },
2940     },
2941 },
2942 {
2943     { // DC
2944         { e_fadd,  t_done, 0, true, { ST0, Efd, Zz }, 0, s1RW2R },
2945         { e_fmul,  t_done, 0, true, { ST0, Efd, Zz }, 0, s1RW2R },
2946         { e_fcom,  t_done, 0, true, { ST0, Efd, Zz }, 0, s1RW2R },
2947         { e_fcomp, t_done, 0, true, { ST0, Efd, Zz }, 0, s1RW2R }, // stack pop
2948         { e_fsub,  t_done, 0, true, { ST0, Efd, Zz }, 0, s1RW2R },
2949         { e_fsubr, t_done, 0, true, { ST0, Efd, Zz }, 0, s1RW2R },
2950         { e_fdiv,  t_done, 0, true, { ST0, Efd, Zz }, 0, s1RW2R },
2951         { e_fdivr, t_done, 0, true, { ST0, Efd, Zz }, 0, s1RW2R }
2952     },
2953     { // DC
2954         { e_fadd,  t_done, 0, true, { Efd, ST0, Zz }, 0, s1RW2R },
2955         { e_fmul,  t_done, 0, true, { Efd, ST0, Zz }, 0, s1RW2R },
2956         { e_fcom,  t_done, 0, true, { Efd, ST0, Zz }, 0, s1RW2R },
2957         { e_fcomp,  t_done, 0, true, { ST0, Efd, Zz }, 0, s1RW2R },
2958         { e_fsubr,  t_done, 0, true, { Efd, ST0, Zz }, 0, s1RW2R },
2959         { e_fsub,  t_done, 0, true, { Efd, ST0, Zz }, 0, s1RW2R },
2960         { e_fdivr,  t_done, 0, true, { Efd, ST0, Zz }, 0, s1RW2R },
2961         { e_fdiv,  t_done, 0, true, { Efd, ST0, Zz }, 0, s1RW2R },
2962     },
2963 },
2964 {
2965     { // DD TODO semantics check
2966         { e_fld,    t_done, 0, true, { ST0, Efd, Zz }, 0, s1W2R },
2967         { e_fisttp, t_done, 0, true, { Mq, ST0, Zz }, 0, s1W2R },
2968         { e_fst,    t_done, 0, true, { Efd, ST0, Zz }, 0, s1W2R },
2969         { e_fstp,   t_done, 0, true, { Efd, ST0, Zz }, 0, s1W2R }, // stack pop
2970         { e_frstor, t_done, 0, true, { M512, Zz, Zz }, 0, s1R },
2971         { e_fucomp, t_done, 0, true, { ST0, Efd, Zz }, 0, s1R2R }, // stack pop
2972         { e_fsave,  t_done, 0, true, { M512, Zz, Zz }, 0, s1W },
2973         { e_fstsw,  t_done, 0, true, { Ew, Zz, Zz }, 0, s1W }
2974     },
2975     { // DD TODO semantics check
2976         { e_ffree,    t_done, 0, true, { Efd, Zz, Zz }, 0, s1W },
2977         { e_fxch,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2RW },
2978         { e_fst, t_done, 0, true, { Efd, ST0, Zz }, 0, s1W2R },
2979         { e_fstp, t_done, 0, true, { Efd, ST0, Zz }, 0, s1W2RW },
2980         { e_fucom,    t_done, 0, true, { ST0, Efd, Zz }, 0, s1R2R },
2981         { e_fucomp,    t_done, 0, true, { ST0, Efd, Zz }, 0, s1RW2R },
2982         { e_No_Entry,  t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE },
2983         { e_No_Entry,  t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE },
2984     },
2985 },
2986 {    
2987     { // DE 
2988         { e_fiadd,  t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R },
2989         { e_fimul,  t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R },
2990         { e_ficom,  t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R },
2991         { e_ficomp, t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R }, // stack pop
2992         { e_fisub,  t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R },
2993         { e_fisubr, t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R },
2994         { e_fidiv,  t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R },
2995         { e_fidivr, t_done, 0, true, { ST0, Ev, Zz }, 0, s1RW2R }
2996     },
2997     { // DE
2998         { e_faddp,  t_done, 0, true, { Ef, ST0, Zz }, 0, s1RW2R },
2999         { e_fmulp,  t_done, 0, true, { Ef, ST0, Zz }, 0, s1RW2R },
3000         { e_fcomp,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
3001         { e_fcompp, t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R },
3002         { e_fsubrp,  t_done, 0, true, { Ef, ST0, Zz }, 0, s1RW2R },
3003         { e_fsubp,  t_done, 0, true, { Ef, ST0, Zz }, 0, s1RW2R },
3004         { e_fdivrp, t_done, 0, true, { Ef, ST0, Zz }, 0, s1RW2R }, // stack pop
3005         { e_fdivp, t_done, 0, true, { Ef, ST0, Zz }, 0, s1RW2R }
3006     },
3007 },
3008 {
3009     { // DF TODO semantics/operand sizes
3010         { e_fild,   t_done, 0, true, { ST0, Ew, Zz }, 0, s1W2R },
3011         { e_fisttp, t_done, 0, true, { Ew, ST0, Zz }, 0, s1W2R },
3012         { e_fist,   t_done, 0, true, { Ew, ST0, Zz }, 0, s1W2R },
3013         { e_fistp,  t_done, 0, true, { Ew, ST0, Zz }, 0, s1W2R }, // stack pop
3014         { e_fbld,   t_done, 0, true, { ST0, Mq, Zz }, 0, s1W2R }, // BCD 80 bit
3015         { e_fild,   t_done, 0, true, { ST0, Ev, Zz }, 0, s1W2R },
3016         { e_fbstp,  t_done, 0, true, { Mq, ST0, Zz }, 0, s1RW2R },// BCD 80 bit
3017         { e_fistp,  t_done, 0, true, { Ev, ST0, Zz }, 0, s1W2R }
3018     },
3019     { // DF TODO semantics/operand sizes
3020         { e_ffreep,  t_done, 0, true, { Ef, Zz, Zz }, 0, sNONE },
3021         { e_fxch,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2RW },
3022         { e_fstp,  t_done, 0, true, { Ef, ST0, Zz }, 0, sNONE },
3023         { e_fstp,  t_done, 0, true, { Ef, ST0, Zz }, 0, sNONE },
3024         { e_fstsw,   t_done, 0, true, { AX, Zz, Zz }, 0, s1W },
3025         { e_fucomip,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R }, // stack pop
3026         { e_fcomip,  t_done, 0, true, { ST0, Ef, Zz }, 0, s1RW2R }, // stack pop
3027         { e_No_Entry,  t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE },
3028     }
3029 }
3030 };
3031
3032 static ia32_entry groupMap[][8] = {
3033   { /* group 1a */
3034     { e_add, t_done, 0, true, { Eb, Ib, Zz }, 0, s1RW2R },
3035     { e_or,  t_done, 0, true, { Eb, Ib, Zz }, 0, s1RW2R },
3036     { e_adc, t_done, 0, true, { Eb, Ib, Zz }, 0, s1RW2R },
3037     { e_sbb, t_done, 0, true, { Eb, Ib, Zz }, 0, s1RW2R },
3038     { e_and, t_done, 0, true, { Eb, Ib, Zz }, 0, s1RW2R },
3039     { e_sub, t_done, 0, true, { Eb, Ib, Zz }, 0, s1RW2R },
3040     { e_xor, t_done, 0, true, { Eb, Ib, Zz }, 0, s1RW2R },
3041     { e_cmp, t_done, 0, true, { Eb, Ib, Zz }, 0, s1R2R },
3042   },
3043   { /* group 1b */
3044     { e_add, t_done, 0, true, { Ev, Iz, Zz }, 0, s1RW2R },
3045     { e_or,  t_done, 0, true, { Ev, Iz, Zz }, 0, s1RW2R },
3046     { e_adc, t_done, 0, true, { Ev, Iz, Zz }, 0, s1RW2R },
3047     { e_sbb, t_done, 0, true, { Ev, Iz, Zz }, 0, s1RW2R },
3048     { e_and, t_done, 0, true, { Ev, Iz, Zz }, 0, s1RW2R },
3049     { e_sub, t_done, 0, true, { Ev, Iz, Zz }, 0, s1RW2R },
3050     { e_xor, t_done, 0, true, { Ev, Iz, Zz }, 0, s1RW2R },
3051     { e_cmp, t_done, 0, true, { Ev, Iz, Zz }, 0, s1R2R },
3052   },
3053   { /* group 1c */
3054     { e_add, t_done, 0, true, { Eb, Ib, Zz }, 0, s1RW2R },
3055     { e_or,  t_done, 0, true, { Eb, Ib, Zz }, 0, s1RW2R },
3056     { e_adc, t_done, 0, true, { Eb, Ib, Zz }, 0, s1RW2R },
3057     { e_sbb, t_done, 0, true, { Eb, Ib, Zz }, 0, s1RW2R },
3058     { e_and, t_done, 0, true, { Eb, Ib, Zz }, 0, s1RW2R },
3059     { e_sub, t_done, 0, true, { Eb, Ib, Zz }, 0, s1RW2R },
3060     { e_xor, t_done, 0, true, { Eb, Ib, Zz }, 0, s1RW2R },
3061     { e_cmp, t_done, 0, true, { Eb, Ib, Zz }, 0, s1R2R },
3062   },
3063   { /* group 1d */
3064     { e_add, t_done, 0, true, { Ev, Ib, Zz }, 0, s1RW2R },
3065     { e_or,  t_done, 0, true, { Ev, Ib, Zz }, 0, s1RW2R },
3066     { e_adc, t_done, 0, true, { Ev, Ib, Zz }, 0, s1RW2R },
3067     { e_sbb, t_done, 0, true, { Ev, Ib, Zz }, 0, s1RW2R },
3068     { e_and, t_done, 0, true, { Ev, Ib, Zz }, 0, s1RW2R },
3069     { e_sub, t_done, 0, true, { Ev, Ib, Zz }, 0, s1RW2R },
3070     { e_xor, t_done, 0, true, { Ev, Ib, Zz }, 0, s1RW2R },
3071     { e_cmp, t_done, 0, true, { Ev, Ib, Zz }, 0, s1R2R },
3072   },
3073
3074
3075  {  /* group 2 - only opcode is defined here, 
3076        operands are defined in the one or two byte maps above */
3077   { e_rol, t_done, 0, true, { Zz, Zz, Zz }, 0, 0 },
3078   { e_ror, t_done, 0, true, { Zz, Zz, Zz }, 0, 0 },
3079   { e_rcl, t_done, 0, true, { Zz, Zz, Zz }, 0, 0 },
3080   { e_rcr, t_done, 0, true, { Zz, Zz, Zz }, 0, 0 },
3081   { e_shl_sal, t_done, 0, true, { Zz, Zz, Zz }, 0, 0 },
3082   { e_shr, t_done, 0, true, { Zz, Zz, Zz }, 0, 0 },
3083   { e_shl_sal, t_done, 0, true, { Zz, Zz, Zz }, 0, 0 },
3084   { e_sar, t_done, 0, true, { Zz, Zz, Zz }, 0, 0 }
3085  },
3086
3087  { /* group 3a - operands are defined here */
3088   { e_test, t_done, 0, true, { Eb, Ib, Zz }, 0, s1R2R },
3089   { e_test, t_done, 0, true, { Eb, Ib, Zz }, 0, s1R2R }, // book swears this is illegal, sandpile claims it's an aliased TEST
3090   { e_not,  t_done, 0, true, { Eb, Zz, Zz }, 0, s1RW },
3091   { e_neg,  t_done, 0, true, { Eb, Zz, Zz }, 0, s1RW },
3092   { e_mul,  t_done, 0, true, { AX, AL, Eb }, 0, s1W2R3R },
3093   { e_imul, t_done, 0, true, { AX, AL, Eb }, 0, s1W2R3R },
3094   { e_div,  t_done, 0, true, { AX, AL, Eb }, 0, s1RW2R3R },
3095   { e_idiv, t_done, 0, true, { AX, AL, Eb }, 0, s1RW2R3R }
3096  },
3097
3098  { /* group 3b - operands are defined here */
3099   { e_test, t_done, 0, true, { Ev, Iz, Zz }, 0, s1R2R },
3100   { e_test, t_done, 0, true, { Ev, Iz, Zz }, 0, s1R2R }, // book swears this is illegal, sandpile claims it's an aliased TEST
3101   { e_not,  t_done, 0, true, { Ev, Zz, Zz }, 0, s1RW },
3102   { e_neg,  t_done, 0, true, { Ev, Zz, Zz }, 0, s1RW },
3103   { e_mul,  t_done, 0, true, { eDX, eAX, Ev }, 0, s1W2RW3R },
3104   { e_imul, t_done, 0, true, { eDX, eAX, Ev }, 0, s1W2RW3R },
3105   { e_div,  t_done, 0, true, { eDX, eAX, Ev }, 0, s1RW2RW3R },
3106   { e_idiv, t_done, 0, true, { eDX, eAX, Ev }, 0, s1RW2RW3R }
3107  },
3108
3109  { /* group 4 - operands are defined here */
3110   { e_inc, t_done, 0, true, { Eb, Zz, Zz }, 0, s1RW },
3111   { e_dec, t_done, 0, true, { Eb, Zz, Zz }, 0, s1RW },
3112   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3113   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3114   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3115   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3116   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3117   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3118  },
3119
3120  { /* group 5 - operands are defined here */
3121   { e_inc,  t_done, 0, true, { Ev, Zz, Zz }, 0, s1RW },
3122   { e_dec,  t_done, 0, true, { Ev, Zz, Zz }, 0, s1RW },
3123   { e_call, t_done, 0, true, { Ev, Zz, Zz }, (IS_CALL | INDIR), s1R | (fINDIRCALL << FPOS) },
3124   { e_call, t_done, 0, true, { Ep, Zz, Zz }, (IS_CALL | INDIR), s1R | (fINDIRCALL << FPOS) },
3125   { e_jmp,  t_done, 0, true, { Ev, Zz, Zz }, (IS_JUMP | INDIR), s1R | (fINDIRJUMP << FPOS) },
3126   { e_jmp,  t_done, 0, true, { Ep, Zz, Zz }, (IS_JUMP | INDIR), s1R | (fINDIRJUMP << FPOS) },
3127   { e_push, t_done, 0, true, { Ev, eSP, Zz }, 0, s1R2RW },
3128   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3129  },
3130
3131  { /* group 6 - operands are defined here */
3132    // these need to be fixed for kernel mode accesses
3133   { e_sldt, t_done, 0, true, { Ew, Zz, Zz }, 0, s1W },
3134   { e_str,  t_done, 0, true, { Ew, Zz, Zz }, 0, s1W },
3135   { e_lldt, t_done, 0, true, { Ew, Zz, Zz }, 0, s1R },
3136   { e_ltr,  t_done, 0, true, { Ew, Zz, Zz }, 0, s1R },
3137   { e_verr, t_done, 0, true, { Ew, Zz, Zz }, 0, s1R },
3138   { e_verw, t_done, 0, true, { Ew, Zz, Zz }, 0, s1R },
3139   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3140   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3141  },
3142
3143  { /* group 7 - operands are defined here */
3144    // idem
3145   { e_sgdt, t_done, 0, true, { Ms, Zz, Zz }, 0, s1W },
3146   { e_sidt, t_done, 0, true, { Ms, Zz, Zz }, 0, s1W },
3147   { e_lgdt, t_done, 0, true, { Ms, Zz, Zz }, 0, s1R },
3148   { e_lidt, t_done, 0, true, { Ms, Zz, Zz }, 0, s1R },
3149   { e_smsw, t_done, 0, true, { Ew, Zz, Zz }, 0, s1W },
3150   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3151   { e_lmsw, t_done, 0, true, { Ew, Zz, Zz }, 0, s1R },
3152   { e_invlpg, t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE }, // 64-bit: swapgs also uses this encoding (w/ mod=11)
3153  },
3154
3155  { /* group 8 - only opcode is defined here, 
3156      operands are defined in the one or two byte maps below */
3157   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3158   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3159   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3160   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3161   { e_bt,  t_done, 0, true, { Ev, Ib, Zz }, 0, s1R2R },
3162   { e_bts, t_done, 0, true, { Ev, Ib, Zz }, 0, s1RW2R },
3163   { e_btr, t_done, 0, true, { Ev, Ib, Zz }, 0, s1RW2R },
3164   { e_btc, t_done, 0, true, { Ev, Ib, Zz }, 0, s1RW2R },
3165  },
3166
3167  { /* group 9 - operands are defined here */
3168   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3169   // see comments for cmpxch
3170   { e_cmpxch8b, t_done, 0, true, { EDXEAX, Mq, ECXEBX }, 0, s1RW2RW3R | (fCMPXCH8 << FPOS) },
3171   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3172   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3173   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3174   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3175   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3176   { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 }
3177  },
3178
3179  /* group 10 is all illegal */
3180
3181  { /* group 11, opcodes defined in one byte map */
3182    { e_mov, t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE },
3183    { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3184    { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3185    { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3186    { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3187    { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3188    { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3189    { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3190  }
3191
3192 };
3193
3194
3195 // Groups 12-16 are split by mod={mem,11}. Some spill over into SSE groups!
3196 // Notation: G12SSE010B = group 12, SSE, reg=010; B means mod=11
3197 // Use A if Intel decides to put SSE instructions for mod=mem
3198 static ia32_entry groupMap2[][2][8] = {
3199   { /* group 12 */
3200     {
3201       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3202       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3203       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3204       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3205       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3206       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3207       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3208       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3209     },
3210     {
3211       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3212       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3213       { e_No_Entry, t_grpsse, G12SSE010B, true, { Zz, Zz, Zz }, 0, 0 },
3214       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3215       { e_No_Entry, t_grpsse, G12SSE100B, true, { Zz, Zz, Zz }, 0, 0 },
3216       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3217       { e_No_Entry, t_grpsse, G12SSE110B, true, { Zz, Zz, Zz }, 0, 0 },
3218       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3219     }
3220   },
3221   { /* group 13 */
3222     {
3223       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3224       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3225       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3226       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3227       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3228       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3229       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3230       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3231     },
3232     {
3233       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3234       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3235       { e_No_Entry, t_grpsse, G13SSE010B, true, { Zz, Zz, Zz }, 0, 0 },
3236       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3237       { e_No_Entry, t_grpsse, G13SSE100B, true, { Zz, Zz, Zz }, 0, 0 },
3238       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3239       { e_No_Entry, t_grpsse, G13SSE110B, true, { Zz, Zz, Zz }, 0, 0 },
3240       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3241     }
3242   },
3243   { /* group 14 */
3244     {
3245       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3246       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3247       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3248       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3249       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3250       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3251       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3252       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3253     },
3254     {
3255       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3256       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3257       { e_No_Entry, t_grpsse, G14SSE010B, true, { Zz, Zz, Zz }, 0, 0 },
3258       { e_No_Entry, t_grpsse, G14SSE011B, true, { Zz, Zz, Zz }, 0, 0 },
3259       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3260       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3261       { e_No_Entry, t_grpsse, G14SSE110B, true, { Zz, Zz, Zz }, 0, 0 },
3262       { e_No_Entry, t_grpsse, G14SSE111B, true, { Zz, Zz, Zz }, 0, 0 },
3263     }
3264   },
3265   { /* group 15 */
3266     {
3267       { e_fxsave,  t_done, 0, true, { M512, Zz, Zz }, 0, s1W | (fFXSAVE << FPOS) },
3268       { e_fxrstor, t_done, 0, true, { M512, Zz, Zz }, 0, s1R | (fFXRSTOR << FPOS) },
3269       { e_ldmxcsr, t_done, 0, true, { Md, Zz, Zz }, 0, s1R },
3270       { e_stmxcsr, t_done, 0, true, { Md, Zz, Zz }, 0, s1W },
3271       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3272       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3273       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3274       { e_clflush, t_done, 0, true, { Mb, Zz, Zz }, 0, s1W | (fCLFLUSH << FPOS) },
3275     },
3276     {
3277       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3278       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3279       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3280       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3281       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3282       { e_lfence, t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE },
3283       { e_mfence, t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE },
3284       { e_sfence, t_done, 0, true, { Zz, Zz, Zz }, 0, sNONE },
3285     }
3286   },
3287   { /* group 16 */
3288     {
3289       { e_prefetchNTA, t_done, 0, true, { Mb, Zz, Zz }, 0, s1R | (fPREFETCHNT << FPOS) },
3290       { e_prefetchT0,  t_done, 0, true, { Mb, Zz, Zz }, 0, s1R | (fPREFETCHT0 << FPOS) },
3291       { e_prefetchT1,  t_done, 0, true, { Mb, Zz, Zz }, 0, s1R | (fPREFETCHT1 << FPOS) },
3292       { e_prefetchT2,  t_done, 0, true, { Mb, Zz, Zz }, 0, s1R | (fPREFETCHT1 << FPOS) },
3293       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3294       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3295       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3296       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3297     },
3298     {
3299       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3300       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3301       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3302       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3303       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3304       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3305       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3306       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3307     }
3308   },
3309   { /* group 17 */
3310     {
3311       { e_extrq, t_done, 0, true, { Vdq, Ib, Ib }, 0, s1RW2R3R },
3312       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3313       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3314       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3315       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3316       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3317       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3318       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3319     },
3320     {
3321       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3322       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3323       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3324       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3325       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3326       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3327       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3328       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 },
3329     }
3330   },
3331   { /* AMD prefetch group */
3332     {
3333       { e_prefetch,   t_done, 0, true, { Mb, Zz, Zz }, 0, s1R | (fPREFETCHAMDE << FPOS) },
3334       { e_prefetchw,  t_done, 0, true, { Mb, Zz, Zz }, 0, s1R | (fPREFETCHAMDW << FPOS) },
3335       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 }, // this is reserved, not illegal, ugh...
3336       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 }, // this is reserved, not illegal, ugh...
3337       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 }, // this is reserved, not illegal, ugh...
3338       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 }, // this is reserved, not illegal, ugh...
3339       { e_No_Entry, t_ill, 0, true, { Zz, Zz, Zz }, 0, 0 }, //&