Browse Source

working on new testmethods avx512-memref-operands - 'compressed disp8*N'

git-svn-id: branches/tg74/avx512-0037785@48189 -
tg74 4 years ago
parent
commit
ef621e7014

+ 175 - 116
tests/utils/avx/asmtestgenerator.pas

@@ -3575,7 +3575,11 @@ var
   sSuffix: string;
   sl_Operand: String;
   sl_Inst   : String;
-  sl_RegCombi: String;
+  sRegCombi0: String;
+  sRegCombi1: String;
+  sRegCombi2: String;
+  sRegCombi3: String;
+  sRegCombi4: String;
   sl_Prefix: String;
   UsePrefix: boolean;
   il_Operands: integer;
@@ -3585,7 +3589,7 @@ var
   sl_RegCombi2: string;
   sl_RegCombi3: string;
   MaskRegNeeded:boolean;
-
+  slRegCombi: TStringList;
 
   function PrepareOperandTyp(const aTyp: String): String;
   begin
@@ -3664,7 +3668,7 @@ begin
               Item.OpTyp    := otXMMReg;
               Item.OpActive := true;
 
-              Item.Values.Add('XMM0');
+              Item.Values.Add('XMM16|XMM1');
             end
             else if (AnsiSameText(sl_Operand, 'XMMREG_M')) or
                     (AnsiSameText(sl_Operand, 'XMMREG_MZ')) or
@@ -3675,16 +3679,18 @@ begin
               Item.OpTyp    := otXMMReg;
               Item.OpActive := true;
 
-              sSuffix := '';
-              if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
-               else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
-
-              if Pos('_ER', sl_Operand) > 0 then sSuffix := ', {ru-sae}'
-               else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
+              //sSuffix := '';
+              //if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
+              // else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
+              //
+              //if Pos('_ER', sl_Operand) > 0 then sSuffix := ', {ru-sae}'
+              // else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
+              //
+              //Item.Values.Add('XMM0' + sSuffix);
+              //if (sSuffix <> '') and
+              //   (MaskRegNeeded = false) then Item.Values.Add('XMM0');
 
-              Item.Values.Add('XMM0' + sSuffix);
-              if (sSuffix <> '') and
-                 (MaskRegNeeded = false) then Item.Values.Add('XMM0');
+              Item.Values.Add('XMM16|XMM1');
             end
             else if (AnsiSameText(sl_Operand, 'XMMRM')) or
                     (AnsiSameText(sl_Operand, 'XMMRM_M')) or
@@ -3738,7 +3744,7 @@ begin
               Item.OpTyp    := otYMMReg;
               Item.OpActive := true;
 
-              Item.Values.Add('YMM0');
+              Item.Values.Add('YMM16|XMM1|XMM2');
             end
             else if (AnsiSameText(sl_Operand, 'YMMREG_M')) or
                     (AnsiSameText(sl_Operand, 'YMMREG_MZ')) or
@@ -3750,16 +3756,18 @@ begin
               Item.OpTyp    := otYMMReg;
               Item.OpActive := true;
 
-              sSuffix := '';
-              if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
-               else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
-
-              if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}'
-               else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
+              //sSuffix := '';
+              //if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
+              // else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
+              //
+              //if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}'
+              // else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
+              //
+              //Item.Values.Add('YMM0' + sSuffix);
+              //if (sSuffix <> '') and
+              //   (MaskRegNeeded = false) then Item.Values.Add('YMM0');
 
-              Item.Values.Add('YMM0' + sSuffix);
-              if (sSuffix <> '') and
-                 (MaskRegNeeded = false) then Item.Values.Add('YMM0');
+              Item.Values.Add('YMM16|XMM1|XMM2');
             end
             else if (AnsiSameText(sl_Operand, 'YMMRM'))  or
                     (AnsiSameText(sl_Operand, 'YMMRM_M')) or
@@ -3774,12 +3782,12 @@ begin
 
               if UsePrefix then sl_Prefix := 'yword ';
 
-              sSuffix := '';
-              if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
-               else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
-
-              if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}'
-               else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
+              //sSuffix := '';
+              //if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
+              // else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
+              //
+              //if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}'
+              // else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
 
               if x64 then MemRegBaseIndexCombi(sl_Prefix, '', FReg64Base, FReg64Index, Item.Values)
                else MemRegBaseIndexCombi(sl_Prefix, '', FReg32Base, FReg32Index, Item.Values);
@@ -3790,7 +3798,7 @@ begin
               Item.OpTyp    := otZMMReg;
               Item.OpActive := true;
 
-              Item.Values.Add('ZMM0');
+              Item.Values.Add('ZMM16,XMM1,XMM2,XMM3,XMM4');
             end
             else if (AnsiSameText(sl_Operand, 'ZMMREG_M')) or
                     (AnsiSameText(sl_Operand, 'ZMMREG_MZ')) or
@@ -3802,12 +3810,12 @@ begin
               Item.OpTyp    := otZMMReg;
               Item.OpActive := true;
 
-              sSuffix := '';
-              if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
-               else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
-
-              if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}'
-               else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
+              //sSuffix := '';
+              //if Pos('_MZ', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1} {z}'
+              // else if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}';
+              //
+              //if Pos('_ER', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ', {rd-sae}'
+              // else if FSAE and (Pos('_SAE', AnsiUppercase(sl_Operand)) > 0) then sSuffix := ', {sae}';
 
               if x64 then MemRegBaseIndexCombi(sl_Prefix, '', FReg64Base, FReg64Index, Item.Values)
                else MemRegBaseIndexCombi(sl_Prefix, '', FReg32Base, FReg32Index, Item.Values);
@@ -4441,7 +4449,7 @@ begin
 
           end;
 
-          sl_RegCombi := '';
+          //sl_RegCombi := '';
 
 
           il_Operands := 0;
@@ -4493,38 +4501,89 @@ begin
                 begin
                   for il_Op4 := 0 to OItem4.Values.Count - 1 do
                   begin
-                    sl_RegCombi := '';
+                    slRegCombi := TStringList.Create;
+                    try
+                      while slRegCombi.Count < 5 do
+                       slRegCombi.Add('');
 
-                    if OItem1.OpActive then
-                    begin
-                      if sl_RegCombi <> '' then sl_RegCombi := sl_RegCombi + ', ';
-                      sl_RegCombi := sl_RegCombi + OItem1.Values[il_Op1];
-                    end;
+                      if OItem1.OpActive then
+                      begin
 
-                    if OItem2.OpActive then
-                    begin
-                      if sl_RegCombi <> '' then sl_RegCombi := sl_RegCombi + ', ';
-                      sl_RegCombi := sl_RegCombi + OItem2.Values[il_Op2];
-                    end;
 
-                    if OItem3.OpActive then
-                    begin
-                      if sl_RegCombi <> '' then sl_RegCombi := sl_RegCombi + ', ';
-                      sl_RegCombi := sl_RegCombi + OItem3.Values[il_Op3];
+                      end;
+                    finally
+                      FreeAndNil(slRegCombi);
                     end;
 
-                    if OItem4.OpActive then
-                    begin
-                      if sl_RegCombi <> '' then sl_RegCombi := sl_RegCombi + ', ';
-                      sl_RegCombi := sl_RegCombi + OItem4.Values[il_Op4];
-                    end;
-
-                    if sl_RegCombi <> '' then
-                    begin
-                      //result.Add(format('%-20s%s', [aInst, sl_RegCombi]));
-                      result.Add(sl_Inst + sl_RegCombi);
-                      sl_RegCombi := '';
-                    end;
+                    //sRegCombi0 := '';
+                    //sRegCombi1 := '';
+                    //sRegCombi2 := '';
+                    //sRegCombi3 := '';
+                    //sRegCombi4 := '';
+                    //
+                    //if OItem1.OpActive then
+                    //begin
+                    //  if sRegCombi0 <> '' then
+                    //  begin
+                    //    sRegCombi0 := sRegCombi0 + ', ';
+                    //    sRegCombi1 := sRegCombi1 + ', ';
+                    //    sRegCombi2 := sRegCombi2 + ', ';
+                    //    sRegCombi3 := sRegCombi3 + ', ';
+                    //    sRegCombi4 := sRegCombi4 + ', ';
+                    //  end;
+                    //
+                    //  if Pos('|', OItem1.Values[il_Op1]) > 0 then
+                    //  begin
+                    //    with TStringList.Create do
+                    //    try
+                    //      Text := Stringreplace(OItem1.Values[il_Op1], '|', #13#10,[rfReplaceAll]);
+                    //      iCnt := Count;
+                    //      while Count < 5 do Add('');
+                    //
+                    //      sRegCombi0 := sRegCombi0 + Strings[0];
+                    //      sRegCombi1 := sRegCombi1 + Strings[1];
+                    //      sRegCombi2 := sRegCombi2 + Strings[2];
+                    //      sRegCombi3 := sRegCombi3 + Strings[3];
+                    //      sRegCombi4 := sRegCombi4 + Strings[4];
+                    //
+                    //    finally
+                    //      Free;
+                    //    end;
+                    //  end
+                    //  else
+                    //  begin
+                    //    sRegCombi0 := sRegCombi0 + OItem1.Values[il_Op1];
+                    //    sRegCombi1 := sRegCombi1 + OItem1.Values[il_Op1];
+                    //    sRegCombi2 := sRegCombi2 + OItem1.Values[il_Op1];
+                    //    sRegCombi3 := sRegCombi3 + OItem1.Values[il_Op1];
+                    //    sRegCombi4 := sRegCombi4 + OItem1.Values[il_Op1];
+                    //  end;
+                    //end;
+                    //
+                    //if OItem2.OpActive then
+                    //begin
+                    //  if sl_RegCombi <> '' then sl_RegCombi := sl_RegCombi + ', ';
+                    //  sl_RegCombi := sl_RegCombi + OItem2.Values[il_Op2];
+                    //end;
+                    //
+                    //if OItem3.OpActive then
+                    //begin
+                    //  if sl_RegCombi <> '' then sl_RegCombi := sl_RegCombi + ', ';
+                    //  sl_RegCombi := sl_RegCombi + OItem3.Values[il_Op3];
+                    //end;
+                    //
+                    //if OItem4.OpActive then
+                    //begin
+                    //  if sl_RegCombi <> '' then sl_RegCombi := sl_RegCombi + ', ';
+                    //  sl_RegCombi := sl_RegCombi + OItem4.Values[il_Op4];
+                    //end;
+                    //
+                    //if sl_RegCombi <> '' then
+                    //begin
+                    //  //result.Add(format('%-20s%s', [aInst, sl_RegCombi]));
+                    //  result.Add(sl_Inst + sl_RegCombi);
+                    //  sl_RegCombi := '';
+                    //end;
                   end;
                 end;
               end;
@@ -4532,59 +4591,59 @@ begin
           end
           else
           begin
-            sl_Inst := format('%-20s', [aInst]);
-
-            for il_Op1 := 0 to OItem1.Values.Count - 1 do
-            begin
-              if OItem1.OpActive then
-              begin
-                sl_RegCombi1 := OItem1.Values[il_Op1];
-              end
-              else sl_RegCombi1 := '';
-
-              for il_Op2 := 0 to OItem2.Values.Count - 1 do
-              begin
-                if OItem2.OpActive then
-                begin
-                  sl_RegCombi2 := sl_RegCombi1 + ', ' + OItem2.Values[il_Op2];
-                end
-                else sl_RegCombi2 := sl_RegCombi1;
-
-                for il_Op3 := 0 to OItem3.Values.Count - 1 do
-                begin
-                  if OItem3.OpActive then
-                  begin
-                    sl_RegCombi3 := sl_RegCombi2 + ', ' + OItem3.Values[il_Op3];
-                  end
-                  else sl_RegCombi3 := sl_RegCombi2;
-
-                  for il_Op4 := 0 to OItem4.Values.Count - 1 do
-                  begin
-                    if OItem4.OpActive then
-                    begin
-                      sl_RegCombi := sl_RegCombi3 + ', ' + OItem4.Values[il_Op4];
-                    end
-                    else sl_RegCombi := sl_RegCombi3;
-
-                    if (sl_RegCombi <> '') and
-                       (
-                        (OItem1.OpActive and (OItem1.OpTyp in OTMEMTYPES)) or
-                        (OItem2.OpActive and (OItem2.OpTyp in OTMEMTYPES)) or
-                        (OItem3.OpActive and (OItem3.OpTyp in OTMEMTYPES)) or
-                        (OItem4.OpActive and (OItem4.OpTyp in OTMEMTYPES))
-                       ) then
-                    begin
-                      //result.Add(format('%-20s%s', [aInst, sl_RegCombi]));
-                      result.Add(sl_Inst + sl_RegCombi);
-
-
-
-                      sl_RegCombi := '';
-                    end;
-                  end;
-                end;
-              end;
-            end;
+            //sl_Inst := format('%-20s', [aInst]);
+            //
+            //for il_Op1 := 0 to OItem1.Values.Count - 1 do
+            //begin
+            //  if OItem1.OpActive then
+            //  begin
+            //    sl_RegCombi1 := OItem1.Values[il_Op1];
+            //  end
+            //  else sl_RegCombi1 := '';
+            //
+            //  for il_Op2 := 0 to OItem2.Values.Count - 1 do
+            //  begin
+            //    if OItem2.OpActive then
+            //    begin
+            //      sl_RegCombi2 := sl_RegCombi1 + ', ' + OItem2.Values[il_Op2];
+            //    end
+            //    else sl_RegCombi2 := sl_RegCombi1;
+            //
+            //    for il_Op3 := 0 to OItem3.Values.Count - 1 do
+            //    begin
+            //      if OItem3.OpActive then
+            //      begin
+            //        sl_RegCombi3 := sl_RegCombi2 + ', ' + OItem3.Values[il_Op3];
+            //      end
+            //      else sl_RegCombi3 := sl_RegCombi2;
+            //
+            //      for il_Op4 := 0 to OItem4.Values.Count - 1 do
+            //      begin
+            //        if OItem4.OpActive then
+            //        begin
+            //          sl_RegCombi := sl_RegCombi3 + ', ' + OItem4.Values[il_Op4];
+            //        end
+            //        else sl_RegCombi := sl_RegCombi3;
+            //
+            //        if (sl_RegCombi <> '') and
+            //           (
+            //            (OItem1.OpActive and (OItem1.OpTyp in OTMEMTYPES)) or
+            //            (OItem2.OpActive and (OItem2.OpTyp in OTMEMTYPES)) or
+            //            (OItem3.OpActive and (OItem3.OpTyp in OTMEMTYPES)) or
+            //            (OItem4.OpActive and (OItem4.OpTyp in OTMEMTYPES))
+            //           ) then
+            //        begin
+            //          //result.Add(format('%-20s%s', [aInst, sl_RegCombi]));
+            //          result.Add(sl_Inst + sl_RegCombi);
+            //
+            //
+            //
+            //          sl_RegCombi := '';
+            //        end;
+            //      end;
+            //    end;
+            //  end;
+            //end;
           end;
         finally
           FreeAndNil(OItem4);

+ 4 - 4
tests/utils/avx/avxopcodes.pas

@@ -42,7 +42,7 @@ uses SysUtils, AsmTestGenerator, Dialogs;
 
 constructor TAVXTestGenerator.Create;
 var
-  i: integer;	
+  i: integer;
 begin
   inherited;
 
@@ -3546,7 +3546,7 @@ begin
                   slFooter.Add('  end;');
                   slFooter.Add('end.');
                 end;
-         tfFPCMRef: 
+         tfFPCMRef:
                 begin
                   writeln(format('outputformat: fpc  platform: %s  path: %s',
                                  [cPlatform[aX64], aDestPath]));
@@ -3646,8 +3646,8 @@ begin
                   slHeader.Add('   asm');
                   for i := 1 to 10 do
                    slHeader.Add('    NOP');
-                  
-			  
+
+
                   for i := 1 to 10 do
                    slFooter.Add('    NOP');
 

+ 0 - 3
tests/utils/avx/avxtestgenerator.lpi

@@ -21,9 +21,6 @@
       <Version Value="2"/>
     </PublishOptions>
     <RunParams>
-      <local>
-        <CommandLineParams Value="-px8664 -ffpc -o\home\torsten\tmp\fpc\fpc -z -mvgatherqpd"/>
-      </local>
       <FormatVersion Value="2"/>
       <Modes Count="1">
         <Mode0 Name="default">