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