summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortg74 <tg74@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-02-12 16:23:55 +0000
committertg74 <tg74@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-02-12 16:23:55 +0000
commitd5d9b8e129edec15a1329d5ed518e80d63ad8e1e (patch)
treed1ba491d67a2ce97b3823cf7fb931de729d82532
parent197c6bb8050e6b3aafc3d85c65c30b29131c3aa6 (diff)
downloadfpc-d5d9b8e129edec15a1329d5ed518e80d63ad8e1e.tar.gz
avxtestgenerator: working on new tests for compressed disp8*N
git-svn-id: https://svn.freepascal.org/svn/fpc/branches/tg74@48658 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--avx512-0037785/tests/utils/avx/asmtestgenerator.pas42
-rw-r--r--avx512-0037785/tests/utils/avx/avxopcodes.pas15
2 files changed, 36 insertions, 21 deletions
diff --git a/avx512-0037785/tests/utils/avx/asmtestgenerator.pas b/avx512-0037785/tests/utils/avx/asmtestgenerator.pas
index 323708e184..c8f3825de7 100644
--- a/avx512-0037785/tests/utils/avx/asmtestgenerator.pas
+++ b/avx512-0037785/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
diff --git a/avx512-0037785/tests/utils/avx/avxopcodes.pas b/avx512-0037785/tests/utils/avx/avxopcodes.pas
index 1c826a0f43..6444137b68 100644
--- a/avx512-0037785/tests/utils/avx/avxopcodes.pas
+++ b/avx512-0037785/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.');