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