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

git-svn-id: branches/tg74/avx512-0037785@48189 -
This commit is contained in:
tg74 2021-01-19 11:01:32 +00:00 committed by Michaël Van Canneyt
parent fb6a892d9e
commit ef621e7014
3 changed files with 181 additions and 125 deletions

View File

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

View File

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

View File

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