Browse Source

working on new testmethods (memref-operands)

git-svn-id: branches/tg74/avx512-0037785@47640 -
tg74 4 years ago
parent
commit
9758bec36c
3 changed files with 91 additions and 152 deletions
  1. 13 10
      compiler/ppcx64.lpi
  2. 53 138
      tests/utils/avx/asmtestgenerator.pas
  3. 25 4
      tests/utils/avx/avxopcodes.pas

+ 13 - 10
compiler/ppcx64.lpi

@@ -1,7 +1,7 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <CONFIG>
   <ProjectOptions>
-    <Version Value="9"/>
+    <Version Value="11"/>
     <PathDelim Value="\"/>
     <General>
       <Flags>
@@ -19,26 +19,30 @@
     </BuildModes>
     <PublishOptions>
       <Version Value="2"/>
-      <DestinationDirectory Value="$(TestDir)\publishedproject\"/>
-      <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
-      <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
     </PublishOptions>
     <RunParams>
       <local>
-        <FormatVersion Value="1"/>
-        <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+        <CommandLineParams Value="-O- \home\torsten\tmp\vfpclasps.pp -Fu\home\torsten\avx512\rtl\units\x86_64-linux"/>
+        <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
       </local>
+      <FormatVersion Value="2"/>
+      <Modes Count="1">
+        <Mode0 Name="default">
+          <local>
+            <CommandLineParams Value="-O- \home\torsten\tmp\vfpclasps.pp -Fu\home\torsten\avx512\rtl\units\x86_64-linux"/>
+            <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
+          </local>
+        </Mode0>
+      </Modes>
     </RunParams>
     <Units Count="2">
       <Unit0>
         <Filename Value="pp.pas"/>
         <IsPartOfProject Value="True"/>
-        <UnitName Value="pp"/>
       </Unit0>
       <Unit1>
         <Filename Value="x86\aasmcpu.pas"/>
         <IsPartOfProject Value="True"/>
-        <UnitName Value="aasmcpu"/>
       </Unit1>
     </Units>
   </ProjectOptions>
@@ -71,7 +75,6 @@
         <StopAfterErrCount Value="50"/>
       </ConfigFile>
       <CustomOptions Value="-dx86_64"/>
-      <CompilerPath Value="$(CompPath)"/>
     </Other>
   </CompilerOptions>
 </CONFIG>

+ 53 - 138
tests/utils/avx/asmtestgenerator.pas

@@ -88,13 +88,13 @@ type
     procedure VectorMemRegBaseIndexCombi(const aPrefix, aSuffix: String; aSLBaseReg, aSLIndexReg, aRList: TStringList);
 
     function InternalCalcTestData(const aInst, aOp1, aOp2, aOp3, aOp4: String): TStringList;
-    function InternalCalcTestDataMREF(const aInst, aOp1, aOp2, aOp3, aOp4: String; var aDatatyp: string): TStringList;
+    function InternalCalcTestDataMREF(const aInst, aOp1, aOp2, aOp3, aOp4: String): TStringList;
   public
     constructor Create;
     destructor Destroy; override;
 
     class procedure CalcTestData(aX64, aAVX512, aSAE: boolean; const aInst, aOp1, aOp2, aOp3, aOp4: String; aSL: TStringList);
-    class procedure CalcTestDataMREF(aX64, aAVX512, aSAE: boolean; const aInst, aOp1, aOp2, aOp3, aOp4: String; aSL: TStringList; var aLocalVarDataTyp: string);
+    class procedure CalcTestDataMREF(aX64, aAVX512, aSAE: boolean; const aInst, aOp1, aOp2, aOp3, aOp4: String; aSL: TStringList);
 
     class procedure CalcTestInstFile;
 
@@ -1864,7 +1864,7 @@ end;
 
 
 function TAsmTestGenerator.InternalCalcTestDataMREF(const aInst, aOp1, aOp2, aOp3,
-  aOp4: String; var aDatatyp: string): TStringList;
+  aOp4: String): TStringList;
 var
   i: integer;
   Item: TOperandListItem;
@@ -1904,8 +1904,6 @@ var
 begin
   result := TStringList.Create;
 
-  aDatatyp := '';
-
   OItem1 := TOperandListItem.Create;
   try
     OItem2 := TOperandListItem.Create;
@@ -1985,11 +1983,12 @@ begin
 
               if UsePrefix then sl_Prefix := 'oword ';
 
-              aDatatyp := 'array[0..15] of byte';
-	      
-              Item.Values.Add('v1');
-              Item.Values.Add(sl_Prefix + ' v1');
-              Item.Values.Add(sl_Prefix + ' [v1]');
+              Item.Values.Add(' lOWord');
+              Item.Values.Add(' gOWord');
+
+              Item.Values.Add(' oword lOWord');
+              Item.Values.Add(' oword gOWord');
+
             end
             else if (AnsiSameText(sl_Operand, 'XMMRM8')) or
                     (AnsiSameText(sl_Operand, 'XMMRM8_M')) or
@@ -2003,12 +2002,8 @@ begin
 
               if UsePrefix then sl_Prefix := 'byte ';
 
-              aDatatyp := 'byte';
-	      
-              Item.Values.Add('v1');
-              Item.Values.Add(sl_Prefix + ' v1');
-              Item.Values.Add(sl_Prefix + ' [v1]');
-
+              Item.Values.Add('lbyte');
+              Item.Values.Add('gbyte');
             end
             else if (AnsiSameText(sl_Operand, 'XMMRM16')) or
                     (AnsiSameText(sl_Operand, 'XMMRM16_M')) or
@@ -2021,14 +2016,8 @@ begin
               Item.OpTyp    := otXMMRM16;
               Item.OpActive := true;
 
-              if UsePrefix then sl_Prefix := 'word ';
-
-	      aDataTyp := 'word';
-	      
-              Item.Values.Add('v1');
-              Item.Values.Add(sl_Prefix + ' v1');
-              Item.Values.Add(sl_Prefix + ' [v1]');
-
+              Item.Values.Add('lword');
+              Item.Values.Add('gword');
             end
             else if (AnsiSameText(sl_Operand, 'YMMREG')) or
                     (AnsiSameText(sl_Operand, 'YMMREG_M')) or
@@ -2054,12 +2043,8 @@ begin
               Item.OpTyp    := otYMMRM;
               Item.OpActive := true;
 
-              if UsePrefix then sl_Prefix := 'yword ';
-	      aDatatyp := 'array [0..31] of byte';
-
-              Item.Values.Add('v1');
-              Item.Values.Add(sl_Prefix + ' v1');
-              Item.Values.Add(sl_Prefix + ' [v1]');
+              Item.Values.Add('lYWord');
+              Item.Values.Add('gYWord');
             end
             else if (AnsiSameText(sl_Operand, 'ZMMREG')) or
                     (AnsiSameText(sl_Operand, 'ZMMREG_M')) or
@@ -2085,13 +2070,8 @@ begin
               Item.OpTyp    := otZMMRM;
               Item.OpActive := true;
 
-              if UsePrefix then sl_Prefix := 'zword ';
-
-              aDatatyp := 'array[0..63] of byte';
-
-              Item.Values.Add('v1');
-              Item.Values.Add(sl_Prefix + ' v1');
-              Item.Values.Add(sl_Prefix + ' [v1]');
+              Item.Values.Add('lZWord');
+              Item.Values.Add('gZWord');
             end
             else if AnsiSameText(sl_Operand, 'MEM8') then
             begin
@@ -2099,16 +2079,8 @@ begin
               Item.OpTyp    := otMEM8;
               Item.OpActive := true;
 
-	      if UsePrefix then
-	      begin	     
-		sl_Prefix := 'byte ';
-	      end;
-
-              aDatatyp := 'byte';
-	      
-              Item.Values.Add('v1');
-              Item.Values.Add(sl_Prefix + ' v1');
-              Item.Values.Add(sl_Prefix + ' [v1]');
+              Item.Values.Add('lByte');
+              Item.Values.Add('gByte');
             end
             else if AnsiSameText(sl_Operand, 'MEM16') or
                     AnsiSameText(sl_Operand, 'MEM16_M') then
@@ -2117,16 +2089,8 @@ begin
               Item.OpTyp    := otMEM16;
               Item.OpActive := true;
 
-              if UsePrefix then
-	      begin 	      
-		sl_Prefix := 'word ';
-              end;
-
-              aDataTyp := 'word';
-
-              Item.Values.Add('v1');
-              Item.Values.Add(sl_Prefix + ' v1');
-              Item.Values.Add(sl_Prefix + ' [v1]');
+              Item.Values.Add('lWord');
+              Item.Values.Add('gWord');
             end
             else if AnsiSameText(sl_Operand, 'MEM32') or
                     AnsiSameText(sl_Operand, 'MEM32_M') or
@@ -2136,13 +2100,8 @@ begin
               Item.OpTyp    := otMEM32;
               Item.OpActive := true;
 
-              if UsePrefix then sl_Prefix := 'dword ';
-              aDataTyp := 'dword';
-
-
-              Item.Values.Add('v1');
-              Item.Values.Add(sl_Prefix + ' v1');
-              Item.Values.Add(sl_Prefix + ' [v1]');
+              Item.Values.Add('lDWord');
+              Item.Values.Add('gDWord');
             end
             else if (AnsiSameText(sl_Operand, 'MEM64')) or
                     (AnsiSameText(sl_Operand, 'MEM64_M')) or
@@ -2152,13 +2111,8 @@ begin
               Item.OpTyp    := otMEM64;
               Item.OpActive := true;
 
-              if UsePrefix then sl_Prefix := 'qword ';
-
-	      aDataTyp := 'qword';
-
-              Item.Values.Add('v1');
-              Item.Values.Add(sl_Prefix + ' v1');
-              Item.Values.Add(sl_Prefix + ' [v1]');
+              Item.Values.Add('lQWord');
+              Item.Values.Add('gQWord');
             end
             else if (AnsiSameText(sl_Operand, 'MEM128')) or
                     (AnsiSameText(sl_Operand, 'MEM128_M')) or
@@ -2168,13 +2122,8 @@ begin
               Item.OpTyp    := otMEM128;
               Item.OpActive := true;
 
-              if UsePrefix then sl_Prefix := 'oword ';
-
-	      aDatatyp := 'oword';
-
-              Item.Values.Add('v1');
-              Item.Values.Add(sl_Prefix + ' v1');
-              Item.Values.Add(sl_Prefix + ' [v1]');
+              Item.Values.Add('lOWord');
+              Item.Values.Add('gOWord');
             end
             else if (AnsiSameText(sl_Operand, 'MEM256')) or
                     (AnsiSameText(sl_Operand, 'MEM256_M')) or
@@ -2184,13 +2133,8 @@ begin
               Item.OpTyp    := otMEM256;
               Item.OpActive := true;
 
-              if UsePrefix then sl_Prefix := 'yword ';
-
-	      aDatatyp := 'yword';
-
-              Item.Values.Add('v1');
-              Item.Values.Add(sl_Prefix + ' v1');
-              Item.Values.Add(sl_Prefix + ' [v1]');
+              Item.Values.Add('lYWord');
+              Item.Values.Add('gYWord');
             end
             else if (AnsiSameText(sl_Operand, 'MEM512')) or
                     (AnsiSameText(sl_Operand, 'MEM512_M')) or
@@ -2200,13 +2144,8 @@ begin
               Item.OpTyp    := otMEM512;
               Item.OpActive := true;
 
-              if UsePrefix then sl_Prefix := 'zword ';
-
-	      aDatatyp := 'zword';
-
-              Item.Values.Add('v1');
-              Item.Values.Add(sl_Prefix + ' v1');
-              Item.Values.Add(sl_Prefix + ' [v1]');
+              Item.Values.Add('lZWord');
+              Item.Values.Add('gZWord');
             end
             else if AnsiSameText(sl_Operand, 'REG8') then
             begin
@@ -2246,15 +2185,8 @@ begin
               Item.OpTyp    := otRM32;
               Item.OpActive := true;
 
-              Item.Values.AddStrings(FReg32Base);
-
-              if UsePrefix then sl_Prefix := 'dword ';
-
-	      aDatatyp := 'dword';
-
-              Item.Values.Add('v1');
-              Item.Values.Add(sl_Prefix + ' v1');
-              Item.Values.Add(sl_Prefix + ' [v1]');
+              Item.Values.Add('lDWord');
+              Item.Values.Add('gDWord');
             end
             else if AnsiSameText(sl_Operand, 'RM64') then
             begin
@@ -2262,13 +2194,8 @@ begin
               Item.OpTyp    := otRM64;
               Item.OpActive := true;
 
-              if UsePrefix then sl_Prefix := 'qword ';
-
-	      aDatatyp := 'qword';
-
-              Item.Values.Add('v1');
-              Item.Values.Add(sl_Prefix + ' v1');
-              Item.Values.Add(sl_Prefix + ' [v1]');
+              Item.Values.Add('lQWord');
+              Item.Values.Add('gQWord');
             end
             else if AnsiSameText(sl_Operand, 'IMM8') then
             begin
@@ -2284,10 +2211,6 @@ begin
               Item.OpNumber := il_Op;
               Item.OpTyp    := otXMEM32;
               Item.OpActive := true;
-
-              if UsePrefix then sl_Prefix := 'oword ';
-
-	      aDatatyp := 'array[0.15] of byte';
             end
             else if AnsiSameText(sl_Operand, 'XMEM64') or
                     AnsiSameText(sl_Operand, 'XMEM64_M') then
@@ -2295,11 +2218,6 @@ begin
               Item.OpNumber := il_Op;
               Item.OpTyp    := otXMEM64;
               Item.OpActive := true;
-
-              if UsePrefix then sl_Prefix := 'oword ';
-
-
-
             end
             else if AnsiSameText(sl_Operand, 'YMEM32') or
                     AnsiSameText(sl_Operand, 'YMEM32_M') then
@@ -2307,9 +2225,6 @@ begin
               Item.OpNumber := il_Op;
               Item.OpTyp    := otYMEM32;
               Item.OpActive := true;
-
-              if UsePrefix then sl_Prefix := 'yword ';
-
             end
             else if AnsiSameText(sl_Operand, 'YMEM64') or
                     AnsiSameText(sl_Operand, 'YMEM64_M') then
@@ -2347,8 +2262,8 @@ begin
               Item.OpTyp    := otB32;
               Item.OpActive := true;
 
-              Item.Values.Add('v1 {1to2}');
-              Item.Values.Add('dword v1 {1to2}');
+              Item.Values.Add('lDWord {1to2}');
+              Item.Values.Add('gDWord {1to2}');
             end
             else if AnsiSameText(sl_Operand, '4B32') then
             begin
@@ -2356,8 +2271,8 @@ begin
               Item.OpTyp    := otB32;
               Item.OpActive := true;
 
-              Item.Values.Add('v1 {1to4}');
-              Item.Values.Add('dword v1 {1to4}');
+              Item.Values.Add('lDWord {1to4}');
+              Item.Values.Add('gDWord {1to4}');
             end
             else if AnsiSameText(sl_Operand, '8B32') then
             begin
@@ -2365,8 +2280,8 @@ begin
               Item.OpTyp    := otB32;
               Item.OpActive := true;
 
-              Item.Values.Add('v1 {1to8}');
-              Item.Values.Add('dword v1 {1to8}');
+              Item.Values.Add('lDWord {1to8}');
+              Item.Values.Add('gDWord {1to8}');
             end
             else if AnsiSameText(sl_Operand, '16B32') then
             begin
@@ -2374,8 +2289,8 @@ begin
               Item.OpTyp    := otB32;
               Item.OpActive := true;
 
-              Item.Values.Add('v1 {1to16}');
-              Item.Values.Add('dword v1 {1to16}');
+              Item.Values.Add('lDWord {1to16}');
+              Item.Values.Add('gDWord {1to16}');
            end
             else if AnsiSameText(sl_Operand, '2B64') then
             begin
@@ -2383,8 +2298,8 @@ begin
               Item.OpTyp    := otB64;
               Item.OpActive := true;
 
-              Item.Values.Add('v1 {1to2}');
-              Item.Values.Add('qword v1 {1to2}');
+              Item.Values.Add('lQWord {1to2}');
+              Item.Values.Add('gQWord {1to2}');
             end
             else if AnsiSameText(sl_Operand, '4B64') then
             begin
@@ -2392,8 +2307,8 @@ begin
               Item.OpTyp    := otB64;
               Item.OpActive := true;
 
-              Item.Values.Add('v1 {1to4}');
-              Item.Values.Add('qword v1 {1to4}');
+              Item.Values.Add('lQWord {1to4}');
+              Item.Values.Add('gQWord {1to4}');
             end
             else if AnsiSameText(sl_Operand, '8B64') then
             begin
@@ -2401,8 +2316,8 @@ begin
               Item.OpTyp    := otB64;
               Item.OpActive := true;
 
-              Item.Values.Add('v1 {1to8}');
-              Item.Values.Add('qword v1 {1to8}');
+              Item.Values.Add('lQWord {1to8}');
+              Item.Values.Add('gQWord {1to8}');
             end
             else if AnsiSameText(sl_Operand, '16B64') then
             begin
@@ -2410,8 +2325,8 @@ begin
               Item.OpTyp    := otB64;
               Item.OpActive := true;
 
-              Item.Values.Add('v1 {1to16}');
-              Item.Values.Add('qword v1 {1to16}');
+              Item.Values.Add('lQWord {1to16}');
+              Item.Values.Add('gQWord {1to16}');
            end
             else if AnsiSameText(sl_Operand, 'KREG') or
                     AnsiSameText(sl_Operand, 'KREG_M') then
@@ -2943,7 +2858,7 @@ begin
 end;
 
 class procedure TAsmTestGenerator.CalcTestDataMREF(aX64, aAVX512, aSAE: boolean; const aInst, aOp1, aOp2, aOp3,
-  aOp4: String;  aSL: TStringList; var aLocalVarDataTyp: string);
+  aOp4: String;  aSL: TStringList);
 var
   sl: TStringList;
 begin
@@ -2953,7 +2868,7 @@ begin
     FAVX512 := aAVX512;
     FSAE    := aSAE;
 
-    sl := InternalCalcTestDataMREF(aInst, aOp1, aOp2, aOp3, aOp4, aLocalVarDataTyp);
+    sl := InternalCalcTestDataMREF(aInst, aOp1, aOp2, aOp3, aOp4);
     try
       aSL.AddStrings(sl);
     finally

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

@@ -602,9 +602,9 @@ begin
   FOpCodeList.Add('vminpd,1,1,1,XMMREG_MZ,XMMREG,XMMRM,');
   FOpCodeList.Add('vminpd,1,1,1,XMMREG_MZ,XMMREG,2B64,');
   FOpCodeList.Add('vminpd,1,1,1,YMMREG_MZ,YMMREG,YMMRM,');
-  FOpCodeList.Add('vminpd,1,1,1,YMMREG_MZ,YMMREG,4B32,');
+  FOpCodeList.Add('vminpd,1,1,1,YMMREG_MZ,YMMREG,4B64,');
   FOpCodeList.Add('vminpd,1,1,1,ZMMREG_MZ,ZMMREG,MEM512,');
-  FOpCodeList.Add('vminpd,1,1,1,ZMMREG_MZ,ZMMREG,8B32,');
+  FOpCodeList.Add('vminpd,1,1,1,ZMMREG_MZ,ZMMREG,8B64,');
   FOpCodeList.Add('vminpd,1,1,1,ZMMREG_MZ,ZMMREG,ZMMREG_SAE,');
   FOpCodeList.Add('vminps,1,1,1,XMMREG_MZ,XMMREG,XMMRM,');
   FOpCodeList.Add('vminps,1,1,1,XMMREG_MZ,XMMREG,4B32,');
@@ -3323,7 +3323,7 @@ begin
                 if aMREF then
 	        begin
                   sLocalVarDataTyp := '';
- 	          TAsmTestGenerator.CalcTestDataMREF(aX64, aAVX512 and (sl[3] = '1'), aSAE, sl[0], sl[4], sl[5], sl[6], sl[7], slAsm, sLocalVarDataTyp);
+ 	          TAsmTestGenerator.CalcTestDataMREF(aX64, aAVX512 and (sl[3] = '1'), aSAE, sl[0], sl[4], sl[5], sl[6], sl[7], slAsm);
 		  sDestFile := 'MREF_' + sDestFile;
 
 		  if trim(sLocalVarDataTyp) = '' then
@@ -3399,9 +3399,30 @@ begin
 
                   slHeader.Add('Program $$$OPCODE$$$;');
                   slHeader.Add('{$asmmode intel}');
+
+
+		  slHeader.Add('var');
+		  slHeader.Add('   gByte: byte;');
+		  slHeader.Add('   gWord: word;');
+		  slHeader.Add('  gDWord: dword;');
+		  slHeader.Add('  gQWord: qword;');
+		  slHeader.Add('  gOWord: array[0..15] of byte;');
+		  slHeader.Add('  gYWord: array[0..31] of byte;');
+		  slHeader.Add('  gZWord: array[0..63] of byte;');
+
                   slHeader.Add(' procedure dummyproc;');
 		  slHeader.Add(' var');
-		  slHeader.Add('    v1: $$$LOCALVARDATATYP$$$;');
+		  slHeader.Add('     lByte: byte;');
+		  slHeader.Add('     lWord: word;');
+		  slHeader.Add('    lDWord: dword;');
+		  slHeader.Add('    lQWord: qword;');
+		  slHeader.Add('    lOWord: array[0..15] of byte;');
+		  slHeader.Add('    lYWord: array[0..31] of byte;');
+		  slHeader.Add('    lZWord: array[0..63] of byte;');
+
+		  slHeader.Add('    lSingle: single;');
+		  slHeader.Add('    lDouble: double;');
+
                   slHeader.Add(' begin');
                   slHeader.Add('   asm');
                   for i := 1 to 10 do