summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortg74 <tg74@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-01-19 11:01:32 +0000
committertg74 <tg74@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-01-19 11:01:32 +0000
commit80f09cee1a99c34f40d07acb64d57048643ca89b (patch)
treee297d5bb74299d7a8c882d86d5d55b492de45e87
parent65a4a920106d09ef8db6e6b8b2e4e970a0f0e77a (diff)
downloadfpc-80f09cee1a99c34f40d07acb64d57048643ca89b.tar.gz
working on new testmethods avx512-memref-operands - 'compressed disp8*N'
git-svn-id: https://svn.freepascal.org/svn/fpc/branches/tg74@48189 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--avx512-0037785/tests/utils/avx/asmtestgenerator.pas291
-rw-r--r--avx512-0037785/tests/utils/avx/avxopcodes.pas8
-rw-r--r--avx512-0037785/tests/utils/avx/avxtestgenerator.lpi3
3 files changed, 179 insertions, 123 deletions
diff --git a/avx512-0037785/tests/utils/avx/asmtestgenerator.pas b/avx512-0037785/tests/utils/avx/asmtestgenerator.pas
index 01df2c3afc..2789a550f9 100644
--- a/avx512-0037785/tests/utils/avx/asmtestgenerator.pas
+++ b/avx512-0037785/tests/utils/avx/asmtestgenerator.pas
@@ -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}';
-
- if Pos('_ER', sl_Operand) > 0 then sSuffix := ', {ru-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', 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('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}';
-
- 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}';
+ //
+ //Item.Values.Add('YMM0' + sSuffix);
+ //if (sSuffix <> '') and
+ // (MaskRegNeeded = false) then Item.Values.Add('YMM0');
- 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];
- end;
+ if OItem1.OpActive then
+ begin
- 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;
+ finally
+ FreeAndNil(slRegCombi);
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);
diff --git a/avx512-0037785/tests/utils/avx/avxopcodes.pas b/avx512-0037785/tests/utils/avx/avxopcodes.pas
index 4c4b6ba7db..3407637aca 100644
--- a/avx512-0037785/tests/utils/avx/avxopcodes.pas
+++ b/avx512-0037785/tests/utils/avx/avxopcodes.pas
@@ -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');
diff --git a/avx512-0037785/tests/utils/avx/avxtestgenerator.lpi b/avx512-0037785/tests/utils/avx/avxtestgenerator.lpi
index e0fadcd6ce..df0cac5f89 100644
--- a/avx512-0037785/tests/utils/avx/avxtestgenerator.lpi
+++ b/avx512-0037785/tests/utils/avx/avxtestgenerator.lpi
@@ -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">