summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortg74 <tg74@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-02-03 09:03:04 +0000
committertg74 <tg74@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-02-03 09:03:04 +0000
commit4c868c8c8179ac5566af1819f8088187549a65fc (patch)
tree7aea8765fafd0c05fba869b49e251a54184a51e2
parentcc277474e909e3626a72f09aa6918ecefd1388f4 (diff)
downloadfpc-4c868c8c8179ac5566af1819f8088187549a65fc.tar.gz
avxtestgenerator: working on new tests for compressed disp8*N
git-svn-id: https://svn.freepascal.org/svn/fpc/branches/tg74@48505 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--avx512-0037785/tests/utils/avx/asmtestgenerator.pas57
1 files changed, 57 insertions, 0 deletions
diff --git a/avx512-0037785/tests/utils/avx/asmtestgenerator.pas b/avx512-0037785/tests/utils/avx/asmtestgenerator.pas
index 37c48e060a..443d75442a 100644
--- a/avx512-0037785/tests/utils/avx/asmtestgenerator.pas
+++ b/avx512-0037785/tests/utils/avx/asmtestgenerator.pas
@@ -94,6 +94,7 @@ type
procedure MemRegBaseIndexCombi(const aPrefix, aSuffix: String; aSLBaseReg, aSLIndexReg, aRList: TStringList);
procedure VectorMemRegBaseIndexCombi(const aPrefix, aSuffix: String; aSLBaseReg, aSLIndexReg, aRList: TStringList);
+ function ParseBaseIndexReg(const aOp: string; var aBaseReg, aIndexReg: string): boolean;
function InternalCalcTestData(const aInst, aOp1, aOp2, aOp3, aOp4: String): TStringList;
function InternalCalcTestDataMREF(const aInst, aOp1, aOp2, aOp3, aOp4: String): TStringList;
@@ -3589,6 +3590,9 @@ var
sRegCombi2: String;
sRegCombi3: String;
sRegCombi4: String;
+ sBaseReg : String;
+ sIndexReg : String;
+
sl_Prefix: String;
UsePrefix: boolean;
il_Operands: integer;
@@ -4900,6 +4904,11 @@ begin
result.Add('');
end;
omXXM: begin
+ if ParseBaseIndexReg(OItem3.Values[il_Op3], sBaseReg, sIndexReg) then
+ begin
+
+ end;
+
result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', 'XMM1', OItem3.Values[il_Op3] ]));
result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqw', 'K2', OItem1.Values[il_Op1], 'XMM1']));
@@ -5459,6 +5468,54 @@ begin
end;
end;
+function TAsmTestGenerator.ParseBaseIndexReg(const aOp: string; var aBaseReg,
+ aIndexReg: string): boolean;
+var
+ iStartPos: integer;
+ iEndPos: integer;
+ iPos: integer;
+ sOp: string;
+ sBaseReg: string;
+ sIndexReg: string;
+begin
+ result := false;
+
+ iStartPos := Pos('[', aOp);
+ iEndPos := Pos(']', aOp);
+
+ if (iStartPos > 0) and
+ (iEndPos > 0) and
+ (iStartPos < iEndPos) then
+ begin
+ sOp := trim(copy(aOp, iStartPos + 1, iEndPos - iStartPos - 1));
+
+ with TStringList.Create do
+ try
+ CommaText := StringReplace(sOp, '+', ',', [rfReplaceAll]);
+
+ while Count < 2 do Add('');
+
+ sBaseReg := trim(Strings[0]);
+
+ if (FReg32Base.IndexOf(sBasereg) >= 0) or
+ (FReg64Base.IndexOf(sBasereg) >= 0) or
+ (FReg6432Base.IndexOf(sBasereg) >= 0) then
+ aBaseReg := sBaseReg;
+
+ sIndexReg := trim(Strings[1]);
+
+ if (FReg32Index.IndexOf(sIndexReg) >= 0) or
+ (FReg64Index.IndexOf(sIndexReg) >= 0) or
+ (FReg6432Index.IndexOf(sIndexReg) >= 0) then
+ aIndexReg := sIndex;
+
+ result := trim(aBasereg) <> '';
+ finally
+ Free;
+ end;
+ end;
+end;
+
class procedure TAsmTestGenerator.CalcTestData(aX64, aAVX512, aSAE: boolean; const aInst, aOp1, aOp2, aOp3,
aOp4: String; aSL: TStringList);
var