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