mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-10 03:28:40 +02:00
working on new testmethods avx512-memref-operands - 'compressed disp8*N'
git-svn-id: branches/tg74/avx512-0037785@48189 -
This commit is contained in:
parent
fb6a892d9e
commit
ef621e7014
@ -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);
|
||||
|
@ -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');
|
||||
|
||||
|
@ -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">
|
||||
|
Loading…
Reference in New Issue
Block a user