Browse Source

avxtestgenerator: working on new tests for compressed disp8*N

git-svn-id: branches/tg74/avx512-0037785@48658 -
tg74 4 years ago
parent
commit
772ea61b12
2 changed files with 36 additions and 21 deletions
  1. 22 20
      tests/utils/avx/asmtestgenerator.pas
  2. 14 1
      tests/utils/avx/avxopcodes.pas

+ 22 - 20
tests/utils/avx/asmtestgenerator.pas

@@ -3741,7 +3741,7 @@ var
     end;
   end;
 
-  function AsmCodeBlockCompare(aAsmCounter: integer): String;
+  function AsmCodeBlockCompare(aAsmCounter: integer; aIsKortestQ: boolean = false): String;
   var
     sReg: string;
   begin
@@ -3752,12 +3752,21 @@ var
        else sReg := 'EAX';
     end;
 
-    result := result + format('%20s%6s  ',             ['    push', sReg]) + #13#10 +
-                       format('%20s%6s,%s',            ['     mov', sReg, inttostr(aAsmCounter)]) + #13#10 +
-                       format('%20s%6s,%s',            ['   kmovd', 'K7', 'EAX']) + #13#10 +
-                       format('%20s%6s',               ['     pop', sReg])        + #13#10 +
-                       format('%20s%6s, %s',           ['kortestb', 'K1', 'K2'])  + #13#10 +
-                       format('%20s  %6s',             ['     jnc', '@@CHECKRESULT']) + #13#10 + #13#10;
+    with TStringList.Create do
+    try
+      Add(format('%20s%6s  ',             ['    push', sReg]));
+      Add(format('%20s%6s,%s',            ['     mov', sReg, inttostr(aAsmCounter)]));
+      Add(format('%20s%6s,%s',            ['   kmovd', 'K7', 'EAX']));
+      Add(format('%20s%6s',               ['     pop', sReg]));
+      if aIsKortestQ then Add(format('%20s%6s, %s',           ['kortestq', 'K1', 'K2']))
+       else Add(format('%20s%6s, %s',           ['kortestb', 'K1', 'K2']));
+
+      Add(format('%20s  %6s',             ['     jnc', '@@CHECKRESULT']));
+
+      result := Text;
+    finally
+      Free;
+    end;
   end;
 
 begin
@@ -4583,13 +4592,7 @@ begin
               Item.OpTyp    := otKREG;
               Item.OpActive := true;
 
-              sSuffix := '';
-              if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
-
-              if UsePrefix then sl_Prefix := '';
-
-              for i := 0 to FRegKREG.Count - 1 do
-               Item.Values.Add(FRegKREG[i] + sSuffix);
+              Item.Values.Add('K1');
             end
             else if trim(sl_Operand) = '' then
             begin
@@ -4931,13 +4934,12 @@ begin
 
                         inc(iAsmCounter);
                         case OpMode of
-                            omKXM: begin
-                                     result.Add(format('%20s%6s,%6s, %s + $2000', [aInst, OItem1.Values[il_Op1], 'XMM1', OItem3.Values[il_Op3] ]));
+                            omKXM,
+                            omKYM,
+                            omKZM: begin
+                                     result.Add(format('%20s%6s,%6s, %s + $2000', [aInst, 'K2', OItem2.Values[il_Op2], OItem3.Values[il_Op3] ]));
 
-                                     // TODO
-                                     //result.Add(format('%20s%6s,%6s, %s',       ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'XMM1']));
-                                     //result.Add(format('%20s%6s,%6s, %s',       ['kandq', 'K1', 'K1', 'K2']));
-                                     result.Add('');
+                                     result.Add(AsmCodeBlockCompare(iAsmCounter, true));
                                    end;
                           omXB32I,
                           omXB64I: begin

+ 14 - 1
tests/utils/avx/avxopcodes.pas

@@ -3675,6 +3675,7 @@ begin
 
                   slHeader.Add('Program $$$OPCODE$$$;');
                   slHeader.Add('{$asmmode intel}');
+                  slHeader.Add('{$mode objfpc}{$H+}');
 
                   slHeader.Add('uses sysutils;');
 
@@ -3716,7 +3717,8 @@ begin
 
                   slHeader.Add('  write(Paramstr(0) + '': '');');
 
-                  slHeader.Add('  asm');
+                  slHeader.Add('  try');
+                  slHeader.Add('    asm');
 
                   slHeader.Add('      vpxord   zmm0,  zmm0,  zmm0');
                   slHeader.Add('      vpxord   xmm1,  xmm1,  xmm1');
@@ -3758,6 +3760,17 @@ begin
                    else slFooter.Add('        pop eax');
 
 
+                  slFooter.Add('    end;');
+                  slFooter.Add('  except');
+                  slFooter.Add('    on E: EInvalidOp do');
+                  slFooter.Add('      begin');
+                  slFooter.Add('        writeln(''Error - Invalid Op: '' + E.Message);');
+                  slFooter.Add('      end;');
+
+                  slFooter.Add('    on E: Exception do');
+                  slFooter.Add('      begin');
+                  slFooter.Add('        writeln(''Fehler: '' + E.Message);');
+                  slFooter.Add('      end;');
                   slFooter.Add('  end;');
                   slFooter.Add('end.');