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