Просмотр исходного кода

* Flagged with NOX86_64 instructions/encodings that are invalid in 64-bit mode.
* AESKEYGENASSIST is not ATT-specific name, it is used by Intel-style assemblers as well. Also updated tests/test/taes1.pp to reflect the change.
+ Added SCASQ, resolves #16730 (other opcodes mentioned in that report were added/fixed earlier)

git-svn-id: trunk@17431 -

sergei 14 лет назад
Родитель
Сommit
6739cec2b9

+ 1 - 0
compiler/i386/i386att.inc

@@ -333,6 +333,7 @@
 'sbb',
 'scasb',
 'scasl',
+'scasq',
 'scasw',
 'cs',
 'ds',

+ 1 - 0
compiler/i386/i386atts.inc

@@ -341,6 +341,7 @@ attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufNONE,
 attsufINT,
 attsufINT,
 attsufINT,

+ 2 - 1
compiler/i386/i386int.inc

@@ -333,6 +333,7 @@
 'sbb',
 'scasb',
 'scasd',
+'scasq',
 'scasw',
 'segcs',
 'segds',
@@ -676,7 +677,7 @@
 'aesdec',
 'aesdeclast',
 'aesimc',
-'aeskeygen',
+'aeskeygenassist',
 'stosq',
 'lodsq',
 'cmpsq'

+ 2 - 1
compiler/i386/i386op.inc

@@ -333,6 +333,7 @@ A_SAR,
 A_SBB,
 A_SCASB,
 A_SCASD,
+A_SCASQ,
 A_SCASW,
 A_SEGCS,
 A_SEGDS,
@@ -676,7 +677,7 @@ A_AESENCLAST,
 A_AESDEC,
 A_AESDECLAST,
 A_AESIMC,
-A_AESKEYGEN,
+A_AESKEYGENASSIST,
 A_STOSQ,
 A_LODSQ,
 A_CMPSQ

+ 1 - 0
compiler/i386/i386prop.inc

@@ -334,6 +334,7 @@
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_None, Ch_None, Ch_None)),
 (Ch: (Ch_None, Ch_None, Ch_None)),
 (Ch: (Ch_None, Ch_None, Ch_None)),

+ 32 - 32
compiler/i386/i386tab.inc

@@ -12,42 +12,42 @@
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none);
     code    : #1#55;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_AAD;
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none);
     code    : #2#213#10;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_AAD;
     ops     : 1;
     optypes : (ot_immediate,ot_none,ot_none);
     code    : #1#213#20;
-    flags   : if_8086 or if_sb
+    flags   : if_8086 or if_sb or if_nox86_64
   ),
   (
     opcode  : A_AAM;
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none);
     code    : #2#212#10;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_AAM;
     ops     : 1;
     optypes : (ot_immediate,ot_none,ot_none);
     code    : #1#212#20;
-    flags   : if_8086 or if_sb
+    flags   : if_8086 or if_sb or if_nox86_64
   ),
   (
     opcode  : A_AAS;
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none);
     code    : #1#63;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_ADC;
@@ -285,21 +285,21 @@
     ops     : 2;
     optypes : (ot_reg16,ot_reg16,ot_none);
     code    : #192#1#99#65;
-    flags   : if_286 or if_prot
+    flags   : if_286 or if_prot or if_nox86_64
   ),
   (
     opcode  : A_ARPL;
     ops     : 2;
     optypes : (ot_memory,ot_reg16,ot_none);
     code    : #192#1#99#65;
-    flags   : if_286 or if_prot or if_sm
+    flags   : if_286 or if_prot or if_sm or if_nox86_64
   ),
   (
     opcode  : A_BOUND;
     ops     : 2;
-    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_memory,ot_none);
+    optypes : (ot_reg16 or ot_bits32,ot_memory,ot_none);
     code    : #193#208#1#98#72;
-    flags   : if_186
+    flags   : if_186 or if_nox86_64
   ),
   (
     opcode  : A_BSF;
@@ -404,7 +404,7 @@
     ops     : 1;
     optypes : (ot_immediate or ot_far,ot_none,ot_none);
     code    : #208#1#154#28#31;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_CALL;
@@ -425,35 +425,35 @@
     ops     : 2;
     optypes : (ot_immediate,ot_immediate,ot_none);
     code    : #215#1#154#29#24;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_CALL;
     ops     : 2;
     optypes : (ot_immediate or ot_bits16,ot_immediate,ot_none);
     code    : #212#1#154#25#24;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_CALL;
     ops     : 2;
     optypes : (ot_immediate,ot_immediate or ot_bits16,ot_none);
     code    : #212#1#154#25#24;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_CALL;
     ops     : 2;
     optypes : (ot_immediate or ot_bits32,ot_immediate,ot_none);
     code    : #213#1#154#33#24;
-    flags   : if_386
+    flags   : if_386 or if_nox86_64
   ),
   (
     opcode  : A_CALL;
     ops     : 2;
     optypes : (ot_immediate,ot_immediate or ot_bits32,ot_none);
     code    : #213#1#154#33#24;
-    flags   : if_386
+    flags   : if_386 or if_nox86_64
   ),
   (
     opcode  : A_CBW;
@@ -698,19 +698,19 @@
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none);
     code    : #1#39;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_DAS;
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none);
     code    : #1#47;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_DEC;
     ops     : 1;
-    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
+    optypes : (ot_reg16 or ot_bits32,ot_none,ot_none);
     code    : #208#8#72;
     flags   : if_8086 or if_nox86_64
   ),
@@ -2397,7 +2397,7 @@
   (
     opcode  : A_INC;
     ops     : 1;
-    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_none,ot_none);
+    optypes : (ot_reg16 or ot_bits32,ot_none,ot_none);
     code    : #208#8#64;
     flags   : if_8086 or if_nox86_64
   ),
@@ -2476,7 +2476,7 @@
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none);
     code    : #1#206;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_INVD;
@@ -2567,7 +2567,7 @@
     ops     : 1;
     optypes : (ot_immediate or ot_far,ot_none,ot_none);
     code    : #208#1#234#28#31;
-    flags   : if_8086 or if_pass2
+    flags   : if_8086 or if_pass2 or if_nox86_64
   ),
   (
     opcode  : A_JMP;
@@ -2588,21 +2588,21 @@
     ops     : 2;
     optypes : (ot_immediate,ot_immediate,ot_none);
     code    : #215#1#234#29#24;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_JMP;
     ops     : 2;
     optypes : (ot_immediate,ot_immediate or ot_bits16,ot_none);
     code    : #212#1#234#25#24;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_JMP;
     ops     : 2;
     optypes : (ot_immediate,ot_immediate or ot_bits32,ot_none);
     code    : #213#1#234#33#24;
-    flags   : if_386
+    flags   : if_386 or if_nox86_64
   ),
   (
     opcode  : A_LAHF;
@@ -2644,7 +2644,7 @@
     ops     : 2;
     optypes : (ot_reg16 or ot_bits32,ot_memory,ot_none);
     code    : #193#208#1#197#72;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_LEA;
@@ -2672,7 +2672,7 @@
     ops     : 2;
     optypes : (ot_reg16 or ot_bits32,ot_memory,ot_none);
     code    : #193#208#1#196#72;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_LFS;
@@ -4513,7 +4513,7 @@
     ops     : 1;
     optypes : (ot_reg_dess,ot_none,ot_none);
     code    : #4;
-    flags   : if_8086
+    flags   : if_8086 or if_nox86_64
   ),
   (
     opcode  : A_POP;
@@ -5745,7 +5745,7 @@
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none);
     code    : #1#158;
-    flags   : if_8086 or if_nox86_64
+    flags   : if_8086
   ),
   (
     opcode  : A_SAL;
@@ -5794,7 +5794,7 @@
     ops     : 0;
     optypes : (ot_none,ot_none,ot_none);
     code    : #1#214;
-    flags   : if_8086 or if_undoc
+    flags   : if_8086 or if_undoc or if_nox86_64
   ),
   (
     opcode  : A_SAR;
@@ -10907,14 +10907,14 @@
     flags   : if_sse4
   ),
   (
-    opcode  : A_AESKEYGEN;
+    opcode  : A_AESKEYGENASSIST;
     ops     : 3;
     optypes : (ot_xmmreg,ot_xmmreg,ot_immediate);
     code    : #1#102#217#3#15#58#223#72#22;
     flags   : if_sse4
   ),
   (
-    opcode  : A_AESKEYGEN;
+    opcode  : A_AESKEYGENASSIST;
     ops     : 3;
     optypes : (ot_xmmreg,ot_memory,ot_immediate);
     code    : #1#102#193#217#3#15#58#223#72#22;

+ 36 - 30
compiler/x86/x86ins.dat

@@ -16,21 +16,21 @@ void                  void                            none
 
 [AAA]
 (Ch_MEAX, Ch_WFlags, Ch_None)
-void                  \1\x37                          8086
+void                  \1\x37                          8086,NOX86_64
 
 [AAD,aadX]
 (Ch_MEAX, Ch_WFlags, Ch_None)
-void                  \2\xD5\x0A                      8086
-imm                   \1\xD5\24                       8086,SB
+void                  \2\xD5\x0A                      8086,NOX86_64
+imm                   \1\xD5\24                       8086,SB,NOX86_64
 
 [AAM,aamX]
 (Ch_MEAX, Ch_WFlags, Ch_None)
-void                  \2\xD4\x0A                      8086
-imm                   \1\xD4\24                       8086,SB
+void                  \2\xD4\x0A                      8086,NOX86_64
+imm                   \1\xD4\24                       8086,SB,NOX86_64
 
 [AAS]
 (Ch_MEAX, Ch_WFlags, Ch_None)
-void                  \1\x3F                          8086
+void                  \1\x3F                          8086,NOX86_64
 
 [ADC,adcX]
 (Ch_Mop2, Ch_Rop1, Ch_RWFlags)
@@ -76,12 +76,12 @@ rm8,imm               \300\323\1\x80\204\21           8086,SB
 
 [ARPL,arplX]
 (Ch_WFlags, Ch_None, Ch_None)
-reg16,reg16           \300\1\x63\101                  286,PROT
-mem,reg16             \300\1\x63\101                  286,PROT,SM
+reg16,reg16           \300\1\x63\101                  286,PROT,NOX86_64
+mem,reg16             \300\1\x63\101                  286,PROT,SM,NOX86_64
 
 [BOUND,boundX]
 (Ch_Rop1, Ch_None, Ch_None)
-reg16|32|64,mem       \301\320\1\x62\110              186
+reg16|32,mem          \301\320\1\x62\110              186,NOX86_64
 
 [BSF,bsfX]
 (Ch_Wop2, Ch_WFlags, Ch_Rop1)
@@ -121,14 +121,14 @@ rm16|32|64,imm        \300\320\2\x0F\xBA\205\25       386,SB
 imm                   \320\1\xE8\64                   8086
 rm16|32|64            \300\320\1\xFF\202              8086
 imm|near              \320\1\xE8\64                   8086
-imm|far               \320\1\x9A\34\37                8086,ND
+imm|far               \320\1\x9A\34\37                8086,ND,NOX86_64
 mem|near              \300\320\1\xFF\202              8086
 mem|far               \300\320\1\xFF\203              8086
-imm:imm               \327\1\x9A\35\30                8086
-imm16:imm             \324\1\x9A\31\30                8086
-imm:imm16             \324\1\x9A\31\30                8086
-imm32:imm             \325\1\x9A\41\30                386
-imm:imm32             \325\1\x9A\41\30                386
+imm:imm               \327\1\x9A\35\30                8086,NOX86_64
+imm16:imm             \324\1\x9A\31\30                8086,NOX86_64
+imm:imm16             \324\1\x9A\31\30                8086,NOX86_64
+imm32:imm             \325\1\x9A\41\30                386,NOX86_64
+imm:imm32             \325\1\x9A\41\30                386,NOX86_64
 
 [CBW,cbtw]
 (Ch_MEAX, Ch_None, Ch_None)
@@ -217,15 +217,15 @@ void                  \325\1\x98                      386
 
 [DAA]
 (Ch_MEAX, Ch_None, Ch_None)
-void                  \1\x27                          8086
+void                  \1\x27                          8086,NOX86_64
 
 [DAS]
 (Ch_MEAX, Ch_None, Ch_None)
-void                  \1\x2F                          8086
+void                  \1\x2F                          8086,NOX86_64
 
 [DEC,decX]
 (Ch_Mop1, Ch_WFlags, Ch_None)
-reg16|32|64           \320\10\x48                     8086,NOX86_64
+reg16|32              \320\10\x48                     8086,NOX86_64
 rm16|32|64            \300\320\1\xFF\201              8086
 rm8                   \300\323\1\xFE\201              8086
 
@@ -793,7 +793,7 @@ reg_ax|32|64,reg_dx   \320\1\xED                      8086
 
 [INC,incX]
 (Ch_Mop1, Ch_WFlags, Ch_None)
-reg16|32|64           \320\10\x40                     8086,NOX86_64
+reg16|32              \320\10\x40                     8086,NOX86_64
 rm16|32|64            \300\320\1\xFF\200              8086
 rm8                   \300\323\1\xFE\200              8086
 
@@ -831,7 +831,7 @@ void                  \1\xCC                          8086
 
 [INTO]
 (Ch_All, Ch_None, Ch_None)
-void                  \1\xCE                          8086
+void                  \1\xCE                          8086,NOX86_64
 
 [INVD]
 (Ch_All, Ch_None, Ch_None)
@@ -873,13 +873,14 @@ imm16|32|64           \320\1\xE9\64                   8086,PASS2
 rm16|32|64            \300\320\1\xFF\204              8086
 imm|short             \1\xEB\50                       8086,PASS2
 imm|near              \320\1\xE9\64                   8086,ND,PASS2
-imm|far               \320\1\xEA\34\37                8086,ND,PASS2
+imm|far               \320\1\xEA\34\37                8086,ND,PASS2,NOX86_64
 mem|near              \300\320\1\xFF\204              8086
 mem|far               \300\320\1\xFF\205              8086
-imm:imm               \327\1\xEA\35\30                8086
-imm:imm16             \324\1\xEA\31\30                8086
-imm:imm32             \325\1\xEA\41\30                386
+imm:imm               \327\1\xEA\35\30                8086,NOX86_64
+imm:imm16             \324\1\xEA\31\30                8086,NOX86_64
+imm:imm32             \325\1\xEA\41\30                386,NOX86_64
 
+; SAHF/LAHF are valid in x86_64 only if CPUID.80000001h:ECX.0=1
 [LAHF]
 (Ch_WEAX, Ch_RFlags, Ch_None)
 void                  \1\x9F                          8086
@@ -897,7 +898,7 @@ mem|far               \300\320\1\xFF\203              8086
 
 [LDS,ldsX]
 (Ch_Wop2, Ch_Rop1, Ch_None)
-reg16|32,mem          \301\320\1\xC5\110              8086
+reg16|32,mem          \301\320\1\xC5\110              8086,NOX86_64
 
 [LEA,leaX]
 (Ch_Wop2, Ch_Rop1, Ch_None)
@@ -910,7 +911,7 @@ void                  \1\xC9                          186
 
 [LES,lesX]
 (Ch_Wop2, Ch_Rop1, Ch_None)
-reg16|32,mem          \301\320\1\xC4\110              8086
+reg16|32,mem          \301\320\1\xC4\110              8086,NOX86_64
 
 [LFS,lfsX]
 (Ch_Wop2, Ch_Rop1, Ch_None)
@@ -1463,7 +1464,7 @@ mmxreg,mem            \301\2\x0F\x58\110              PENT,MMX,SM,CYRIX
 reg16|32|64           \320\10\x58\335                 8086
 rm16|32|64            \300\320\1\x8F\200\335          8086
 reg_cs                \1\x0F                          8086,UNDOC,ND
-reg_dess              \4                              8086
+reg_dess              \4                              8086,NOX86_64
 reg_fsgs              \1\x0F\5\335                    386
 
 [POPA,popaX]
@@ -1827,9 +1828,10 @@ mem80                 \300\2\x0F\x7B\200              486,CYRIX,SMM
 (Ch_All, Ch_None, Ch_None)
 void                  \2\x0F\xAA                      PENT,SMM
 
+; SAHF/LAHF are valid in x86_64 only if CPUID.80000001h:ECX.0=1
 [SAHF]
 (Ch_WFlags, Ch_REAX, Ch_None)
-void                  \1\x9E                          8086,NOX86_64
+void                  \1\x9E                          8086
 
 [SAL,salX]
 (Ch_Mop2, Ch_Rop1, Ch_RWFlags)
@@ -1842,7 +1844,7 @@ rm8,imm               \300\323\1\xC0\204\25           186,ND,SB
 
 [SALC]
 (Ch_WEAX, Ch_RFLAGS, Ch_None)
-void                  \1\xD6                          8086,UNDOC
+void                  \1\xD6                          8086,UNDOC,NOX86_64
 
 [SAR,sarX]
 (Ch_Mop2, Ch_Rop1, Ch_WFlags)
@@ -1875,6 +1877,10 @@ void                  \332\1\xAE                      8086
 (Ch_All, Ch_None, Ch_None)
 void                  \332\325\1\xAF                  386
 
+[SCASQ]
+(Ch_All, Ch_None, Ch_None)
+void                  \332\326\1\xAF                  X86_64
+
 [SCASW]
 (Ch_All, Ch_None, Ch_None)
 void                  \332\324\1\xAF                  8086
@@ -3700,7 +3706,7 @@ xmmreg,mem            \1\x66\301\331\3\x0F\x38\xDF\110               SSE4
 xmmreg,xmmreg         \1\x66\331\3\x0F\x38\xDB\110                   SSE4
 xmmreg,mem            \1\x66\301\331\3\x0F\x38\xDB\110               SSE4
 
-[AESKEYGEN,aeskeygenassist] ;AESKEYGENASIST
+[AESKEYGENASSIST]
 (Ch_All, Ch_None, Ch_None)
 xmmreg,xmmreg,imm     \1\x66\331\3\x0F\x3A\xDF\110\26                SSE4
 xmmreg,mem,imm        \1\x66\301\331\3\x0F\x3A\xDF\110\26            SSE4

+ 1 - 0
compiler/x86_64/x8664ats.inc

@@ -341,6 +341,7 @@ attsufNONE,
 attsufNONE,
 attsufNONE,
 attsufNONE,
+attsufNONE,
 attsufINT,
 attsufINT,
 attsufINT,

+ 1 - 0
compiler/x86_64/x8664att.inc

@@ -333,6 +333,7 @@
 'sbb',
 'scasb',
 'scasl',
+'scasq',
 'scasw',
 'cs',
 'ds',

+ 2 - 1
compiler/x86_64/x8664int.inc

@@ -333,6 +333,7 @@
 'sbb',
 'scasb',
 'scasd',
+'scasq',
 'scasw',
 'segcs',
 'segds',
@@ -676,7 +677,7 @@
 'aesdec',
 'aesdeclast',
 'aesimc',
-'aeskeygen',
+'aeskeygenassist',
 'stosq',
 'lodsq',
 'cmpsq'

+ 1 - 1
compiler/x86_64/x8664nop.inc

@@ -1,2 +1,2 @@
 { don't edit, this file is generated from x86ins.dat }
-1555;
+1531;

+ 2 - 1
compiler/x86_64/x8664op.inc

@@ -333,6 +333,7 @@ A_SAR,
 A_SBB,
 A_SCASB,
 A_SCASD,
+A_SCASQ,
 A_SCASW,
 A_SEGCS,
 A_SEGDS,
@@ -676,7 +677,7 @@ A_AESENCLAST,
 A_AESDEC,
 A_AESDECLAST,
 A_AESIMC,
-A_AESKEYGEN,
+A_AESKEYGENASSIST,
 A_STOSQ,
 A_LODSQ,
 A_CMPSQ

+ 1 - 0
compiler/x86_64/x8664pro.inc

@@ -334,6 +334,7 @@
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_All, Ch_None, Ch_None)),
+(Ch: (Ch_All, Ch_None, Ch_None)),
 (Ch: (Ch_None, Ch_None, Ch_None)),
 (Ch: (Ch_None, Ch_None, Ch_None)),
 (Ch: (Ch_None, Ch_None, Ch_None)),

+ 16 - 184
compiler/x86_64/x8664tab.inc

@@ -7,48 +7,6 @@
     code    : #0;
     flags   : if_none
   ),
-  (
-    opcode  : A_AAA;
-    ops     : 0;
-    optypes : (ot_none,ot_none,ot_none);
-    code    : #1#55;
-    flags   : if_8086
-  ),
-  (
-    opcode  : A_AAD;
-    ops     : 0;
-    optypes : (ot_none,ot_none,ot_none);
-    code    : #2#213#10;
-    flags   : if_8086
-  ),
-  (
-    opcode  : A_AAD;
-    ops     : 1;
-    optypes : (ot_immediate,ot_none,ot_none);
-    code    : #1#213#20;
-    flags   : if_8086 or if_sb
-  ),
-  (
-    opcode  : A_AAM;
-    ops     : 0;
-    optypes : (ot_none,ot_none,ot_none);
-    code    : #2#212#10;
-    flags   : if_8086
-  ),
-  (
-    opcode  : A_AAM;
-    ops     : 1;
-    optypes : (ot_immediate,ot_none,ot_none);
-    code    : #1#212#20;
-    flags   : if_8086 or if_sb
-  ),
-  (
-    opcode  : A_AAS;
-    ops     : 0;
-    optypes : (ot_none,ot_none,ot_none);
-    code    : #1#63;
-    flags   : if_8086
-  ),
   (
     opcode  : A_ADC;
     ops     : 2;
@@ -280,27 +238,6 @@
     code    : #192#211#1#128#132#17;
     flags   : if_8086 or if_sb
   ),
-  (
-    opcode  : A_ARPL;
-    ops     : 2;
-    optypes : (ot_reg16,ot_reg16,ot_none);
-    code    : #192#1#99#65;
-    flags   : if_286 or if_prot
-  ),
-  (
-    opcode  : A_ARPL;
-    ops     : 2;
-    optypes : (ot_memory,ot_reg16,ot_none);
-    code    : #192#1#99#65;
-    flags   : if_286 or if_prot or if_sm
-  ),
-  (
-    opcode  : A_BOUND;
-    ops     : 2;
-    optypes : (ot_reg16 or ot_bits32 or ot_bits64,ot_memory,ot_none);
-    code    : #193#208#1#98#72;
-    flags   : if_186
-  ),
   (
     opcode  : A_BSF;
     ops     : 2;
@@ -399,13 +336,6 @@
     code    : #208#1#232#52;
     flags   : if_8086
   ),
-  (
-    opcode  : A_CALL;
-    ops     : 1;
-    optypes : (ot_immediate or ot_far,ot_none,ot_none);
-    code    : #208#1#154#28#31;
-    flags   : if_8086
-  ),
   (
     opcode  : A_CALL;
     ops     : 1;
@@ -420,41 +350,6 @@
     code    : #192#208#1#255#131;
     flags   : if_8086
   ),
-  (
-    opcode  : A_CALL;
-    ops     : 2;
-    optypes : (ot_immediate,ot_immediate,ot_none);
-    code    : #215#1#154#29#24;
-    flags   : if_8086
-  ),
-  (
-    opcode  : A_CALL;
-    ops     : 2;
-    optypes : (ot_immediate or ot_bits16,ot_immediate,ot_none);
-    code    : #212#1#154#25#24;
-    flags   : if_8086
-  ),
-  (
-    opcode  : A_CALL;
-    ops     : 2;
-    optypes : (ot_immediate,ot_immediate or ot_bits16,ot_none);
-    code    : #212#1#154#25#24;
-    flags   : if_8086
-  ),
-  (
-    opcode  : A_CALL;
-    ops     : 2;
-    optypes : (ot_immediate or ot_bits32,ot_immediate,ot_none);
-    code    : #213#1#154#33#24;
-    flags   : if_386
-  ),
-  (
-    opcode  : A_CALL;
-    ops     : 2;
-    optypes : (ot_immediate,ot_immediate or ot_bits32,ot_none);
-    code    : #213#1#154#33#24;
-    flags   : if_386
-  ),
   (
     opcode  : A_CBW;
     ops     : 0;
@@ -693,20 +588,6 @@
     code    : #213#1#152;
     flags   : if_386
   ),
-  (
-    opcode  : A_DAA;
-    ops     : 0;
-    optypes : (ot_none,ot_none,ot_none);
-    code    : #1#39;
-    flags   : if_8086
-  ),
-  (
-    opcode  : A_DAS;
-    ops     : 0;
-    optypes : (ot_none,ot_none,ot_none);
-    code    : #1#47;
-    flags   : if_8086
-  ),
   (
     opcode  : A_DEC;
     ops     : 1;
@@ -2457,13 +2338,6 @@
     code    : #1#204;
     flags   : if_8086
   ),
-  (
-    opcode  : A_INTO;
-    ops     : 0;
-    optypes : (ot_none,ot_none,ot_none);
-    code    : #1#206;
-    flags   : if_8086
-  ),
   (
     opcode  : A_INVD;
     ops     : 0;
@@ -2548,13 +2422,6 @@
     code    : #208#1#233#52;
     flags   : if_8086 or if_pass2
   ),
-  (
-    opcode  : A_JMP;
-    ops     : 1;
-    optypes : (ot_immediate or ot_far,ot_none,ot_none);
-    code    : #208#1#234#28#31;
-    flags   : if_8086 or if_pass2
-  ),
   (
     opcode  : A_JMP;
     ops     : 1;
@@ -2569,27 +2436,6 @@
     code    : #192#208#1#255#133;
     flags   : if_8086
   ),
-  (
-    opcode  : A_JMP;
-    ops     : 2;
-    optypes : (ot_immediate,ot_immediate,ot_none);
-    code    : #215#1#234#29#24;
-    flags   : if_8086
-  ),
-  (
-    opcode  : A_JMP;
-    ops     : 2;
-    optypes : (ot_immediate,ot_immediate or ot_bits16,ot_none);
-    code    : #212#1#234#25#24;
-    flags   : if_8086
-  ),
-  (
-    opcode  : A_JMP;
-    ops     : 2;
-    optypes : (ot_immediate,ot_immediate or ot_bits32,ot_none);
-    code    : #213#1#234#33#24;
-    flags   : if_386
-  ),
   (
     opcode  : A_LAHF;
     ops     : 0;
@@ -2625,13 +2471,6 @@
     code    : #192#208#1#255#131;
     flags   : if_8086
   ),
-  (
-    opcode  : A_LDS;
-    ops     : 2;
-    optypes : (ot_reg16 or ot_bits32,ot_memory,ot_none);
-    code    : #193#208#1#197#72;
-    flags   : if_8086
-  ),
   (
     opcode  : A_LEA;
     ops     : 2;
@@ -2653,13 +2492,6 @@
     code    : #1#201;
     flags   : if_186
   ),
-  (
-    opcode  : A_LES;
-    ops     : 2;
-    optypes : (ot_reg16 or ot_bits32,ot_memory,ot_none);
-    code    : #193#208#1#196#72;
-    flags   : if_8086
-  ),
   (
     opcode  : A_LFS;
     ops     : 2;
@@ -4466,13 +4298,6 @@
     code    : #1#15;
     flags   : if_8086 or if_undoc
   ),
-  (
-    opcode  : A_POP;
-    ops     : 1;
-    optypes : (ot_reg_dess,ot_none,ot_none);
-    code    : #4;
-    flags   : if_8086
-  ),
   (
     opcode  : A_POP;
     ops     : 1;
@@ -5642,6 +5467,13 @@
     code    : #2#15#170;
     flags   : if_pent or if_smm
   ),
+  (
+    opcode  : A_SAHF;
+    ops     : 0;
+    optypes : (ot_none,ot_none,ot_none);
+    code    : #1#158;
+    flags   : if_8086
+  ),
   (
     opcode  : A_SAL;
     ops     : 2;
@@ -5684,13 +5516,6 @@
     code    : #192#211#1#192#132#21;
     flags   : if_186 or if_sb
   ),
-  (
-    opcode  : A_SALC;
-    ops     : 0;
-    optypes : (ot_none,ot_none,ot_none);
-    code    : #1#214;
-    flags   : if_8086 or if_undoc
-  ),
   (
     opcode  : A_SAR;
     ops     : 2;
@@ -5824,6 +5649,13 @@
     code    : #218#213#1#175;
     flags   : if_386
   ),
+  (
+    opcode  : A_SCASQ;
+    ops     : 0;
+    optypes : (ot_none,ot_none,ot_none);
+    code    : #218#214#1#175;
+    flags   : if_x86_64
+  ),
   (
     opcode  : A_SCASW;
     ops     : 0;
@@ -10851,14 +10683,14 @@
     flags   : if_sse4
   ),
   (
-    opcode  : A_AESKEYGEN;
+    opcode  : A_AESKEYGENASSIST;
     ops     : 3;
     optypes : (ot_xmmreg,ot_xmmreg,ot_immediate);
     code    : #1#102#217#3#15#58#223#72#22;
     flags   : if_sse4
   ),
   (
-    opcode  : A_AESKEYGEN;
+    opcode  : A_AESKEYGENASSIST;
     ops     : 3;
     optypes : (ot_xmmreg,ot_memory,ot_immediate);
     code    : #1#102#193#217#3#15#58#223#72#22;

+ 8 - 8
tests/test/taes1.pp

@@ -38,7 +38,7 @@ Procedure OpenKey_AES(Key: PAESKey256; OpenedKey: PAESOpenedKey); Assembler; NoS
    PSHUFD XMM1, XMM1, 011100101b; MOVD EBX, XMM1; XOR EAX, EBX; MOV [RCX], EAX; ADD RCX, 4
    PSHUFD XMM1, XMM1, 011100110b; MOVD EBX, XMM1; XOR EAX, EBX; MOV [RCX], EAX; ADD RCX, 4
    PSHUFD XMM1, XMM1, 011100111b; MOVD EBX, XMM1; XOR EAX, EBX; MOV [RCX], EAX; ADD RCX, 4
-   MOVDQU XMM4, [RDX]; AESKEYGEN XMM4, XMM4, 0
+   MOVDQU XMM4, [RDX]; AESKEYGENASSIST XMM4, XMM4, 0
    PSHUFD XMM4, XMM4, 011100110b; MOVD EAX, XMM4; MOVD EBX, XMM3; XOR EAX, EBX; MOV [RCX], EAX; ADD RCX, 4
    PSHUFD XMM3, XMM3, 011100101b; MOVD EBX, XMM3; XOR EAX, EBX; MOV [RCX], EAX; ADD RCX, 4
    PSHUFD XMM3, XMM3, 011100110b; MOVD EBX, XMM3; XOR EAX, EBX; MOV [RCX], EAX; ADD RCX, 4
@@ -56,13 +56,13 @@ Asm
  MOVDQU XMM1, [RCX]; MOVDQU XMM3, [RCX+16]
  MOVDQU [RDX], XMM1; MOVDQU [RDX + $10], XMM3
  LEA RCX, [RDX+$20]
- AESKEYGEN XMM2, XMM3, $1;  CALL key_expansion
- AESKEYGEN XMM2, XMM3, $2;  CALL key_expansion
- AESKEYGEN XMM2, XMM3, $4;  CALL key_expansion
- AESKEYGEN XMM2, XMM3, $8;  CALL key_expansion
- AESKEYGEN XMM2, XMM3, $10; CALL key_expansion
- AESKEYGEN XMM2, XMM3, $20; CALL key_expansion
- AESKEYGEN XMM2, XMM3, $40; CALL key_expansion
+ AESKEYGENASSIST XMM2, XMM3, $1;  CALL key_expansion
+ AESKEYGENASSIST XMM2, XMM3, $2;  CALL key_expansion
+ AESKEYGENASSIST XMM2, XMM3, $4;  CALL key_expansion
+ AESKEYGENASSIST XMM2, XMM3, $8;  CALL key_expansion
+ AESKEYGENASSIST XMM2, XMM3, $10; CALL key_expansion
+ AESKEYGENASSIST XMM2, XMM3, $20; CALL key_expansion
+ AESKEYGENASSIST XMM2, XMM3, $40; CALL key_expansion
  MOVDQU XMM0,  [R8+$00]; MOVDQU XMM1,  [R8+$10]; MOVDQU XMM2,  [R8+$20]; MOVDQU XMM3,  [R8+$30]
  MOVDQU XMM4,  [R8+$40]; MOVDQU XMM5,  [R8+$50]; MOVDQU XMM6,  [R8+$60]; MOVDQU XMM7,  [R8+$70]
  MOVDQU XMM8,  [R8+$80]; MOVDQU XMM9,  [R8+$90]; MOVDQU XMM10, [R8+$A0]; MOVDQU XMM11, [R8+$B0]