avxtestgenerator: working on new tests for compressed disp8*N

git-svn-id: branches/tg74/avx512-0037785@48505 -
This commit is contained in:
tg74 2021-02-03 09:03:04 +00:00 committed by Michaël Van Canneyt
parent cf1fa4cf7f
commit d13d625090

View File

@ -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