Browse Source

avxtestgenerator: working on new tests for compressed disp8*N

git-svn-id: branches/tg74/avx512-0037785@48505 -
tg74 4 years ago
parent
commit
d13d625090
1 changed files with 57 additions and 0 deletions
  1. 57 0
      tests/utils/avx/asmtestgenerator.pas

+ 57 - 0
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