Browse Source

new avx512 tests

git-svn-id: branches/tg74/avx512@39721 -
tg74 7 years ago
parent
commit
53e4b5451c
2 changed files with 2993 additions and 1587 deletions
  1. 51 41
      tests/utils/avx/asmtestgenerator.pas
  2. 2942 1546
      tests/utils/avx/avxopcodes.pas

+ 51 - 41
tests/utils/avx/asmtestgenerator.pas

@@ -339,7 +339,9 @@ const
       OT_XMMREG    = OT_REGNORM or otf_reg_xmm;
       OT_XMMRM     = OT_REGMEM or otf_reg_xmm;
       OT_XMEM32    = OT_REGNORM or otf_reg_xmm or otf_reg_gpr or OT_BITS32;
+      OT_XMEM32_M  = OT_XMEM32 or OT_VECTORMASK;
       OT_XMEM64    = OT_REGNORM or otf_reg_xmm or otf_reg_gpr or OT_BITS64;
+      OT_XMEM64_M  = OT_XMEM64 or OT_VECTORMASK;
 
       OT_XMMREG_M   = OT_XMMREG or OT_VECTORMASK;
       OT_XMMREG_MZ  = OT_XMMREG or OT_VECTORMASK or OT_VECTORZERO;
@@ -355,7 +357,9 @@ const
       OT_YMMREG     = OT_REGNORM or otf_reg_ymm;
       OT_YMMRM      = OT_REGMEM or otf_reg_ymm;
       OT_YMEM32     = OT_REGNORM or otf_reg_ymm or otf_reg_gpr or OT_BITS32;
+      OT_YMEM32_M   = OT_YMEM32 or OT_VECTORMASK;
       OT_YMEM64     = OT_REGNORM or otf_reg_ymm or otf_reg_gpr or OT_BITS64;
+      OT_YMEM64_M   = OT_YMEM64 or OT_VECTORMASK;
 
       OT_YMMREG_M   = OT_YMMREG or OT_VECTORMASK;
       OT_YMMREG_MZ  = OT_YMMREG or OT_VECTORMASK or OT_VECTORZERO;
@@ -370,7 +374,9 @@ const
       OT_ZMMREG     = OT_REGNORM or otf_reg_zmm;
       OT_ZMMRM      = OT_REGMEM or otf_reg_zmm;
       OT_ZMEM32     = OT_REGNORM or otf_reg_zmm or otf_reg_gpr or OT_BITS32;
+      OT_ZMEM32_M   = OT_ZMEM32 or OT_VECTORMASK;
       OT_ZMEM64     = OT_REGNORM or otf_reg_zmm or otf_reg_gpr or OT_BITS64;
+      OT_ZMEM64_M   = OT_ZMEM64 or OT_VECTORMASK;
 
       OT_ZMMREG_M   = OT_ZMMREG or OT_VECTORMASK;
       OT_ZMMREG_MZ  = OT_ZMMREG or OT_VECTORMASK or OT_VECTORZERO;
@@ -390,6 +396,7 @@ const
       { Memory operands }
       OT_MEM8      = OT_MEMORY or OT_BITS8;
       OT_MEM16     = OT_MEMORY or OT_BITS16;
+      OT_MEM16_M   = OT_MEM16  or OT_VECTORMASK;
       OT_MEM32     = OT_MEMORY or OT_BITS32;
       OT_MEM32_M   = OT_MEMORY or OT_BITS32 or OT_VECTORMASK;
       OT_BMEM32    = OT_MEMORY or OT_BITS32 or OT_VECTORBCST;
@@ -521,7 +528,7 @@ begin
                        ;
 
           //TG TODO delete
-          if aInst = 'vpmovsxbq' then
+          if aInst = 'valignd' then
           begin
             sSuffix := sSuffix;
           end;
@@ -562,11 +569,11 @@ begin
               Item.OpActive := true;
 
               sSuffix := '';
-              if Pos('_MZ', sl_Operand) > 0 then sSuffix := ' {k1} {z}'
-               else if Pos('_M', sl_Operand) > 0 then sSuffix := ' {k1}';
+              if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
+               else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
 
               if Pos('_ER', sl_Operand) > 0 then sSuffix := ', {ru-sae}'
-               else if FSAE and (Pos('_SAE', sl_Operand) > 0) then sSuffix := ', {sae}';
+               else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
 
               Item.Values.Add('XMM0' + sSuffix);
               Item.Values.Add('XMM1' + sSuffix);
@@ -611,11 +618,11 @@ begin
               if UsePrefix then sl_Prefix := 'oword ';
 
               sSuffix := '';
-              if Pos('_MZ', sl_Operand) > 0 then sSuffix := ' {k1} {z}'
-               else if Pos('_M', sl_Operand) > 0 then sSuffix := ' {k1}';
+              if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
+               else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
 
-              if Pos('_ER', sl_Operand) > 0 then sSuffix := ', {rd-sae}'
-               else if FSAE and (Pos('_SAE', sl_Operand) > 0) then sSuffix := ', {sae}';
+              if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}'
+               else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
 
               Item.Values.Add('XMM0' + sSuffix);
               Item.Values.Add('XMM1' + sSuffix);
@@ -667,11 +674,11 @@ begin
               if UsePrefix then sl_Prefix := 'byte ';
 
               sSuffix := '';
-              if Pos('_MZ', sl_Operand) > 0 then sSuffix := ' {k1} {z}'
-               else if Pos('_M', sl_Operand) > 0 then sSuffix := ' {k1}';
+              if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
+               else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
 
-              if Pos('_ER', sl_Operand) > 0 then sSuffix := ', {rd-sae}'
-               else if FSAE and (Pos('_SAE', sl_Operand) > 0) then sSuffix := ', {sae}';
+              if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}'
+               else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
 
               Item.Values.Add('XMM0' + sSuffix);
               Item.Values.Add('XMM1' + sSuffix);
@@ -727,11 +734,11 @@ begin
               if UsePrefix then sl_Prefix := 'word ';
 
               sSuffix := '';
-              if Pos('_MZ', sl_Operand) > 0 then sSuffix := ' {k1} {z}'
-               else if Pos('_M', sl_Operand) > 0 then sSuffix := ' {k1}';
+              if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
+               else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
 
-              if Pos('_ER', sl_Operand) > 0 then sSuffix := ', {rd-sae}'
-               else if FSAE and (Pos('_SAE', sl_Operand) > 0) then sSuffix := ', {sae}';
+              if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}'
+               else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
 
               Item.Values.Add('XMM0' + sSuffix);
               Item.Values.Add('XMM1' + sSuffix);
@@ -785,11 +792,11 @@ begin
               Item.OpActive := true;
 
               sSuffix := '';
-              if Pos('_MZ', sl_Operand) > 0 then sSuffix := ' {k1} {z}'
-               else if Pos('_M', sl_Operand) > 0 then sSuffix := ' {k1}';
+              if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
+               else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
 
-              if Pos('_ER', sl_Operand) > 0 then sSuffix := ', {rd-sae}'
-               else if FSAE and (Pos('_SAE', sl_Operand) > 0) then sSuffix := ', {sae}';
+              if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}'
+               else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
 
               Item.Values.Add('YMM0' + sSuffix);
               Item.Values.Add('YMM1' + sSuffix);
@@ -835,11 +842,11 @@ begin
               if UsePrefix then sl_Prefix := 'yword ';
 
               sSuffix := '';
-              if Pos('_MZ', sl_Operand) > 0 then sSuffix := ' {k1} {z}'
-               else if Pos('_M', sl_Operand) > 0 then sSuffix := ' {k1}';
+              if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
+               else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
 
-              if Pos('_ER', sl_Operand) > 0 then sSuffix := ', {rd-sae}'
-               else if FSAE and (Pos('_SAE', sl_Operand) > 0) then sSuffix := ', {sae}';
+              if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}'
+               else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
 
               Item.Values.Add('YMM0' + sSuffix);
               Item.Values.Add('YMM1' + sSuffix);
@@ -890,11 +897,11 @@ begin
               Item.OpActive := true;
 
               sSuffix := '';
-              if Pos('_MZ', sl_Operand) > 0 then sSuffix := ' {k1} {z}'
-               else if Pos('_M', sl_Operand) > 0 then sSuffix := ' {k1}';
+              if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
+               else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
 
-              if Pos('_ER', sl_Operand) > 0 then sSuffix := ', {rd-sae}'
-               else if FSAE and (Pos('_SAE', sl_Operand) > 0) then sSuffix := ', {sae}';
+              if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}'
+               else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
 
               Item.Values.Add('ZMM0' + sSuffix);
               Item.Values.Add('ZMM1' + sSuffix);
@@ -940,11 +947,11 @@ begin
               if UsePrefix then sl_Prefix := 'zword ';
 
               sSuffix := '';
-              if Pos('_MZ', sl_Operand) > 0 then sSuffix := ' {k1} {z}'
-               else if Pos('_M', sl_Operand) > 0 then sSuffix := ' {k1}';
+              if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
+               else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
 
-              if Pos('_ER', sl_Operand) > 0 then sSuffix := ', {rd-sae}'
-               else if FSAE and (Pos('_SAE', sl_Operand) > 0) then sSuffix := ', {sae}';
+              if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}'
+               else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
 
               Item.Values.Add('ZMM0' + sSuffix);
               Item.Values.Add('ZMM1' + sSuffix);
@@ -998,7 +1005,8 @@ begin
               end
               else MemRegBaseIndexCombi(sl_prefix, '', FReg32Base, FReg32Index, Item.Values);
             end
-            else if AnsiSameText(sl_Operand, 'MEM16') then
+            else if AnsiSameText(sl_Operand, 'MEM16') or
+                    AnsiSameText(sl_Operand, 'MEM16_M') then
             begin
               Item.OpNumber := il_Op;
               Item.OpTyp    := otMEM16;
@@ -1006,12 +1014,14 @@ begin
 
               if UsePrefix then sl_Prefix := 'word ';
 
+              if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
+
               if x64 then
               begin
-                MemRegBaseIndexCombi(sl_Prefix, '', FReg64Base, FReg64Index, Item.Values);
+                MemRegBaseIndexCombi(sl_Prefix, sSuffix, FReg64Base, FReg64Index, Item.Values);
                 //MemRegBaseIndexCombi(FReg6432Base, FReg6432Index, Item.Values);
               end
-              else MemRegBaseIndexCombi(sl_Prefix, '', FReg32Base, FReg32Index, Item.Values);
+              else MemRegBaseIndexCombi(sl_Prefix, sSuffix, FReg32Base, FReg32Index, Item.Values);
             end
             else if AnsiSameText(sl_Operand, 'MEM32') or
                     AnsiSameText(sl_Operand, 'MEM32_M') then
@@ -1023,7 +1033,7 @@ begin
               if UsePrefix then sl_Prefix := 'dword ';
 
               sSuffix := '';
-              if Pos('_M', sl_Operand) > 0 then sSuffix := ' {k1}';
+              if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
 
 
               if x64 then
@@ -1043,7 +1053,7 @@ begin
               if UsePrefix then sl_Prefix := 'qword ';
 
               sSuffix := '';
-              if Pos('_M', sl_Operand) > 0 then sSuffix := ' {k1}';
+              if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
 
               if x64 then
               begin
@@ -1062,7 +1072,7 @@ begin
               if UsePrefix then sl_Prefix := 'oword ';
 
               sSuffix := '';
-              if Pos('_M', sl_Operand) > 0 then sSuffix := ' {k1}';
+              if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
 
               if x64 then
               begin
@@ -1081,7 +1091,7 @@ begin
               if UsePrefix then sl_Prefix := 'yword ';
 
               sSuffix := '';
-              if Pos('_M', sl_Operand) > 0 then sSuffix := ' {k1}';
+              if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
 
 
               if x64 then
@@ -1101,7 +1111,7 @@ begin
               if UsePrefix then sl_Prefix := 'zword ';
 
               sSuffix := '';
-              if Pos('_M', sl_Operand) > 0 then sSuffix := ' {k1}';
+              if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
 
 
               if x64 then
@@ -1438,7 +1448,7 @@ begin
               Item.OpTyp    := otKREG;
               Item.OpActive := true;
 
-              if Pos('_M', sl_Operand) > 0 then sSuffix := ' {k1}';
+              if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
 
               if UsePrefix then sl_Prefix := '';
 

File diff suppressed because it is too large
+ 2942 - 1546
tests/utils/avx/avxopcodes.pas


Some files were not shown because too many files changed in this diff