avxtestgenerator: add new commandline param '-m', create only these testfile(s)

git-svn-id: branches/tg74/avx512-0037785@47864 -
This commit is contained in:
tg74 2020-12-28 04:56:47 +00:00 committed by Michaël Van Canneyt
parent 17cf72ff2d
commit 6d1553984e
4 changed files with 101 additions and 69 deletions

View File

@ -18,13 +18,13 @@ type
protected
procedure Init;
function InternalMakeTestFiles(aMRef, aX64, aAVX512, aSAE: boolean; aDestPath, aFileExt: String; aOpCodeList, aHeaderList, aFooterList: TStringList): boolean;
function InternalMakeTestFiles(aMRef, aX64, aAVX512, aSAE: boolean; aDestPath, aFilemask, aFileExt: String; aOpCodeList, aHeaderList, aFooterList: TStringList): boolean;
public
constructor Create;
destructor Destroy; override;
function MakeTestFiles(aTyp: TTestFileTyp; aX64, aAVX512, aSAE: boolean; aDestPath: String): boolean;
function MakeTestFiles(aTyp: TTestFileTyp; aX64, aAVX512, aSAE: boolean; aDestPath, aFilemask: String): boolean;
procedure ListMemRefState;
// function MakeTestFilesMREF(aTyp: TTestFileTyp; aX64, aAVX512, aSAE: boolean; aDestPath: String): boolean;
@ -924,9 +924,9 @@ begin
FOpCodeList.Add('vpextrd,1,1,1,RM32,XMMREG,IMM8,');
FOpCodeList.Add('vpextrq,1,1,1,RM64,XMMREG,IMM8,');
FOpCodeList.Add('vpextrw,1,1,1,MEM16,XMMREG,IMM8,');
FOpCodeList.Add('vpextrw,1,1,1,REG16,XMMREG,IMM8,');
//FOpCodeList.Add('vpextrw,1,1,1,REG16,XMMREG,IMM8,');
FOpCodeList.Add('vpextrw,1,1,1,REG32,XMMREG,IMM8,');
FOpCodeList.Add('vpextrw,1,1,1,REG64,XMMREG,IMM8,');
//FOpCodeList.Add('vpextrw,1,1,1,REG64,XMMREG,IMM8,');
FOpCodeList.Add('vphaddd,1,1,0,XMMREG,XMMREG,XMMRM,');
FOpCodeList.Add('vphaddd,1,1,0,YMMREG,YMMREG,YMMRM,');
FOpCodeList.Add('vphaddsw,1,1,0,XMMREG,XMMREG,XMMRM,');
@ -1401,20 +1401,20 @@ begin
FOpCodeList.Add('vpblendd,1,1,0,XMMREG,XMMREG,XMMRM,IMM8');
FOpCodeList.Add('vpbroadcastb,1,1,1,XMMREG_MZ,MEM8,,');
FOpCodeList.Add('vpbroadcastb,1,1,1,XMMREG_MZ,XMMREG,,');
FOpCodeList.Add('vpbroadcastb,1,1,1,XMMREG_MZ,REG8,,');
//FOpCodeList.Add('vpbroadcastb,1,1,1,XMMREG_MZ,REG8,,');
FOpCodeList.Add('vpbroadcastb,1,1,1,XMMREG_MZ,REG32,,');
FOpCodeList.Add('vpbroadcastb,1,1,1,XMMREG_MZ,REG64,,');
//FOpCodeList.Add('vpbroadcastb,1,1,1,XMMREG_MZ,REG64,,');
//FOpCodeList.Add('vpbroadcastb,1,1,1,XMMREG_MZ,REG16,,');
FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,MEM8,,');
FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,XMMREG,,');
FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,REG8,,');
//FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,REG8,,');
FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,REG32,,');
FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,REG64,,');
//FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,REG64,,');
//FOpCodeList.Add('vpbroadcastb,1,1,1,YMMREG_MZ,REG16,,');
FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,MEM8,,');
FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,REG8,,');
//FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,REG8,,');
FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,REG32,,');
FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,REG64,,');
//FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,REG64,,');
//FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,REG16,,');
FOpCodeList.Add('vpbroadcastb,1,1,1,ZMMREG_MZ,XMMREG,,');
FOpCodeList.Add('vpbroadcastd,1,1,1,XMMREG_MZ,MEM32,,');
@ -1437,18 +1437,18 @@ begin
FOpCodeList.Add('vpbroadcastq,1,1,1,ZMMREG_MZ,XMMREG,,');
FOpCodeList.Add('vpbroadcastw,1,1,1,XMMREG_MZ,MEM16,');
FOpCodeList.Add('vpbroadcastw,1,1,1,XMMREG_MZ,XMMREG,,');
FOpCodeList.Add('vpbroadcastw,1,1,1,XMMREG_MZ,REG16,');
//FOpCodeList.Add('vpbroadcastw,1,1,1,XMMREG_MZ,REG16,');
FOpCodeList.Add('vpbroadcastw,1,1,1,XMMREG_MZ,REG32,,');
FOpCodeList.Add('vpbroadcastw,1,1,1,XMMREG_MZ,REG64,,');
//FOpCodeList.Add('vpbroadcastw,1,1,1,XMMREG_MZ,REG64,,');
FOpCodeList.Add('vpbroadcastw,1,1,1,YMMREG_MZ,MEM16,');
FOpCodeList.Add('vpbroadcastw,1,1,1,YMMREG_MZ,XMMREG,,');
FOpCodeList.Add('vpbroadcastw,1,1,1,YMMREG_MZ,REG16,');
//FOpCodeList.Add('vpbroadcastw,1,1,1,YMMREG_MZ,REG16,');
FOpCodeList.Add('vpbroadcastw,1,1,1,YMMREG_MZ,REG32,,');
FOpCodeList.Add('vpbroadcastw,1,1,1,YMMREG_MZ,REG64,,');
//FOpCodeList.Add('vpbroadcastw,1,1,1,YMMREG_MZ,REG64,,');
FOpCodeList.Add('vpbroadcastw,1,1,1,ZMMREG_MZ,MEM16,');
FOpCodeList.Add('vpbroadcastw,1,1,1,ZMMREG_MZ,REG16,');
//FOpCodeList.Add('vpbroadcastw,1,1,1,ZMMREG_MZ,REG16,');
FOpCodeList.Add('vpbroadcastw,1,1,1,ZMMREG_MZ,REG32,,');
FOpCodeList.Add('vpbroadcastw,1,1,1,ZMMREG_MZ,REG64,,');
//FOpCodeList.Add('vpbroadcastw,1,1,1,ZMMREG_MZ,REG64,,');
FOpCodeList.Add('vpbroadcastw,1,1,1,ZMMREG_MZ,XMMREG,,');
FOpCodeList.Add('vperm2i128,1,1,0,YMMREG,YMMREG,YMMRM,IMM8');
FOpCodeList.Add('vpermd,1,1,1,YMMREG_MZ,YMMREG,YMMRM,');
@ -1530,7 +1530,7 @@ begin
FOpCodeList.Add('vgatherqpd,1,1,1,XMMREG_M,XMEM64,,');
FOpCodeList.Add('vgatherqpd,1,1,0,YMMREG,YMEM64,YMMREG,');
FOpCodeList.Add('vgatherqpd,1,1,1,YMMREG_M,YMEM64,,');
FOpCodeList.Add('vgatherqpd,1,1,1,ZMMREG_M,ZMEM32,,');
FOpCodeList.Add('vgatherqpd,1,1,1,ZMMREG_M,ZMEM64,,');
FOpCodeList.Add('vgatherqps,1,1,0,XMMREG,XMEM32,XMMREG,');
FOpCodeList.Add('vgatherqps,1,1,0,XMMREG,YMEM32,XMMREG,');
FOpCodeList.Add('vgatherqps,1,1,1,XMMREG_M,XMEM32,,');
@ -3257,18 +3257,20 @@ begin
FOpCodeList.Add('VPSHUFBITQMB,1,1,1,kreg_m,zmmreg,zmmrm,');
end;
function TAVXTestGenerator.InternalMakeTestFiles(aMRef, aX64, aAVX512, aSAE: boolean; aDestPath, aFileExt: String;
function TAVXTestGenerator.InternalMakeTestFiles(aMRef, aX64, aAVX512, aSAE: boolean; aDestPath, aFilemask, aFileExt: String;
aOpCodeList, aHeaderList, aFooterList: TStringList): boolean;
var
i: integer;
i,j: integer;
sData: string;
sDestFile: string;
sLocalVarDataTyp: string;
sl: TStringList;
slAsm: TStringList;
slLocalHeader: TStringList;
slFilemask: TStringList;
LastOpCode: String;
NewOpCode: String;
FoundNewOpcode: boolean;
function SaveFile(aAsmList: TStringList; aOpcode, aDestPath, aFileExt: String; aHeaderList, aFooterList: TStringList): boolean;
begin
@ -3292,61 +3294,78 @@ begin
try
slAsm := TStringList.Create;
try
LastOpCode := '';
slFilemask := TStringList.Create;
try
slFilemask.CommaText := ansilowercase(aFilemask);
for i := 0 to aOpCodeList.Count - 1 do
//for i := 0 to 0 do
begin
sl.Clear;
sl.CommaText := aOpCodeList[i];
LastOpCode := '';
while sl.Count < 8 do sl.Add('');
NewOpCode := ansilowercase(sl[0]);
if NewOpCode <> '' then
for i := 0 to aOpCodeList.Count - 1 do
begin
if (not(aX64) and (sl[1] = '1')) or // i386
(aX64 and (sl[2] = '1')) then // x86_64
sl.Clear;
sl.CommaText := aOpCodeList[i];
while sl.Count < 8 do sl.Add('');
NewOpCode := ansilowercase(sl[0]);
FoundNewOpcode := false;
for j := 0 to slFilemask.Count - 1 do
begin
sDestFile := format('%s_%d%s', [NewOpcode, i, trim(copy(sl[4],1,1) + copy(sl[5],1,1) + copy(sl[6],1,1) + copy(sl[7],1,1))]);
if Pos(slFilemask[j], NewOpCode) = 1 then
FoundNewOpcode := true;
end;
slLocalHeader := TStringList.Create;
try
slLocalHeader.Text := aHeaderList.text;
if not(FoundNewOpcode) and (slFilemask.Count > 0) then
NewOpcode := '';
if (sl[4] = '') and
(sl[5] = '') and
(sl[6] = '') and
(sl[7] = '') then
begin // Opcode with no Params, e.g. VZEROALL
slAsm.Add(' ' + sl[0]);
end
else
begin
if aMREF then
if NewOpCode <> '' then
begin
if (not(aX64) and (sl[1] = '1')) or // i386
(aX64 and (sl[2] = '1')) then // x86_64
begin
sDestFile := format('%s_%d%s', [NewOpcode, i, trim(copy(sl[4],1,1) + copy(sl[5],1,1) + copy(sl[6],1,1) + copy(sl[7],1,1))]);
slLocalHeader := TStringList.Create;
try
slLocalHeader.Text := aHeaderList.text;
if (sl[4] = '') and
(sl[5] = '') and
(sl[6] = '') and
(sl[7] = '') then
begin // Opcode with no Params, e.g. VZEROALL
slAsm.Add(' ' + sl[0]);
end
else
begin
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 aMREF then
begin
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
sLocalVarDataTyp := 'byte';
if trim(sLocalVarDataTyp) = '' then
sLocalVarDataTyp := 'byte';
slLocalHeader.Text := StringReplace(aHeaderList.Text, '$$$LOCALVARDATATYP$$$', sLocalVarDataTyp, [rfReplaceAll]);
end
else TAsmTestGenerator.CalcTestData(aX64, aAVX512 and (sl[3] = '1'), aSAE, sl[0], sl[4], sl[5], sl[6], sl[7], slAsm);
end;
slLocalHeader.Text := StringReplace(aHeaderList.Text, '$$$LOCALVARDATATYP$$$', sLocalVarDataTyp, [rfReplaceAll]);
end
else TAsmTestGenerator.CalcTestData(aX64, aAVX512 and (sl[3] = '1'), aSAE, sl[0], sl[4], sl[5], sl[6], sl[7], slAsm);
end;
SaveFile(slAsm, sDestFile, aDestPath, aFileExt, slLocalHeader, aFooterList);
writeln(format('%s%s%s', [aDestPath, sDestFile, aFileExt]));
SaveFile(slAsm, sDestFile, aDestPath, aFileExt, slLocalHeader, aFooterList);
writeln(format('%s%s%s', [aDestPath, sDestFile, aFileExt]));
finally
FreeAndNil(slLocalHeader);
finally
FreeAndNil(slLocalHeader);
end;
slAsm.Clear;
end;
slAsm.Clear;
end;
end;
finally
FreeAndNil(slFilemask);
end;
finally
FreeAndNil(slAsm);
@ -3357,7 +3376,7 @@ begin
end;
function TAVXTestGenerator.MakeTestFiles(aTyp: TTestFileTyp; aX64, aAVX512, aSAE: boolean;
aDestPath: String): boolean;
aDestPath, aFilemask: String): boolean;
var
slHeader: TStringList;
slFooter: TStringList;
@ -3578,7 +3597,7 @@ begin
end;
end;
InternalMakeTestFiles(aTyp = tfFPCMRef, aX64, aAVX512, aSAE, aDestPath, Fileext, FOpCodeList, slHeader, slFooter);
InternalMakeTestFiles(aTyp = tfFPCMRef, aX64, aAVX512, aSAE, aDestPath, aFilemask, Fileext, FOpCodeList, slHeader, slFooter);
finally
FreeAndNil(slFooter);

View File

@ -22,13 +22,13 @@
</PublishOptions>
<RunParams>
<local>
<CommandLineParams Value="-l"/>
<CommandLineParams Value="-px8664 -ffpc -o\home\torsten\tmp\fpc\fpc -z -mvgatherqpd"/>
</local>
<FormatVersion Value="2"/>
<Modes Count="1">
<Mode0 Name="default">
<local>
<CommandLineParams Value="-l"/>
<CommandLineParams Value="-px8664 -ffpc -o\home\torsten\tmp\fpc\fpc -z -mvgatherqpd"/>
</local>
</Mode0>
</Modes>
@ -60,7 +60,15 @@
<Filename Value="avxtestgenerator"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
</CompilerOptions>
<Debugging>
<Exceptions Count="1">
<Item1>
<Name Value="Unknown"/>
</Item1>
</Exceptions>
</Debugging>
</CONFIG>

View File

@ -44,6 +44,7 @@ begin
writeln('-h help');
writeln('-f [fpc,fpcmref,nasm,fasm,fpcinc] outputformat');
writeln('-l list opcode-memrefsize-states');
writeln('-m create only these testfile(s) (e.g. -mvgather,vpgather)');
writeln('-o destination path');
writeln('-p [x8664] codegenerator for x86_64 platform');
writeln('-z avx512');
@ -56,11 +57,11 @@ begin
//exit;
case OutputFormat of
'f': MakeTestFiles(tfFPC, x64, AVX512, false, Path);
'F': MakeTestFiles(tfFasm, x64, AVX512, false, Path);
'n': MakeTestFiles(tfNasm, x64, AVX512, false, Path);
'I': MakeTestFiles(tfFPCInc, x64, AVX512, false, Path);
'm': MakeTestFiles(tfFPCMRef, x64, AVX512, false, Path);
'f': MakeTestFiles(tfFPC, x64, AVX512, false, Path, Filemask);
'F': MakeTestFiles(tfFasm, x64, AVX512, false, Path, Filemask);
'n': MakeTestFiles(tfNasm, x64, AVX512, false, Path, Filemask);
'I': MakeTestFiles(tfFPCInc, x64, AVX512, false, Path, Filemask);
'm': MakeTestFiles(tfFPCMRef, x64, AVX512, false, Path, Filemask);
'l': ListMemRefState;
end;
end;

View File

@ -36,6 +36,7 @@ type
FOutputFormat: Char;
FPath: string;
FMemRef: boolean;
FFilemask: string;
public
constructor Create;
@ -47,6 +48,7 @@ type
property AVX512: boolean read FAVX512 write FAVX512;
property Path: string read FPath write FPath;
property MemRef: boolean read FMemref write FMemRef;
property Filemask: string read FFilemask write FFilemask;
end;
implementation
@ -63,6 +65,7 @@ begin
FOutputFormat := '?';
FPath := '';
FMemRef := false;
FFilemask := '';
end;
procedure TOptions.LoadParams;
@ -103,6 +106,7 @@ begin
else IsInvalidParam := true;
'l': FOutputFormat := 'l';
'z': FAVX512 := true;
'm': FFilemask := sValue;
'o': if sValue <> '' then
begin
FPath := IncludeTrailingBackslash(sValue);