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;
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}';
//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');
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('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}';
//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');
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('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];
if OItem1.OpActive then
begin
end;
finally
FreeAndNil(slRegCombi);
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;
//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);

View File

@ -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');

View File

@ -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">