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