summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortg74 <tg74@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-01-27 15:48:20 +0000
committertg74 <tg74@3ad0048d-3df7-0310-abae-a5850022a9f2>2021-01-27 15:48:20 +0000
commit48031099b215d84119a426119f81afaf0b94a3b0 (patch)
tree4b88b94199b9ca75c6646bddb00242ac3e85cbe9
parent435bf921784c413f84b2f70ea482e7b76fdd8f6b (diff)
downloadfpc-48031099b215d84119a426119f81afaf0b94a3b0.tar.gz
avxtestgenerator: working on new testmethods avx512-memref-operands - 'compressed disp8*N'
git-svn-id: https://svn.freepascal.org/svn/fpc/branches/tg74@48437 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--avx512-0037785/tests/utils/avx/asmtestgenerator.pas332
-rw-r--r--avx512-0037785/tests/utils/avx/avxopcodes.pas21
-rw-r--r--avx512-0037785/tests/utils/avx/avxtestgenerator.pp2
3 files changed, 183 insertions, 172 deletions
diff --git a/avx512-0037785/tests/utils/avx/asmtestgenerator.pas b/avx512-0037785/tests/utils/avx/asmtestgenerator.pas
index f7bcafeb29..ecbd0a6694 100644
--- a/avx512-0037785/tests/utils/avx/asmtestgenerator.pas
+++ b/avx512-0037785/tests/utils/avx/asmtestgenerator.pas
@@ -4740,8 +4740,8 @@ begin
(OItem3.OpTyp in MEMTYPES) then OpMode := omKZM
else if (OItem1.OpTyp = otXMMReg) and
- (OItem2.OpTyp = otXMMReg) and
- (OItem3.OpTyp in MEMTYPES) then OpMode := omXXM
+ (OItem2.OpTyp = otXMMReg) and
+ (OItem3.OpTyp in MEMTYPES) then OpMode := omXXM
else if (OItem1.OpTyp = otXMMReg) and
(OItem2.OpTyp = otXMMReg) and
(OItem3.OpTyp = otB32) then OpMode := omXXB32
@@ -4830,148 +4830,183 @@ begin
else;
end;
-
- sInstruction := format('%20s', [aInst]);
-
- for il_Op1 := 0 to OItem1.Values.Count - 1 do
+ if OpMode <> omUnknown then
begin
- for il_Op2 := 0 to OItem2.Values.Count - 1 do
+ sInstruction := format('%20s', [aInst]);
+
+ for il_Op1 := 0 to OItem1.Values.Count - 1 do
begin
- for il_Op3 := 0 to OItem3.Values.Count - 1 do
+ for il_Op2 := 0 to OItem2.Values.Count - 1 do
begin
- for il_Op4 := 0 to OItem4.Values.Count - 1 do
+ for il_Op3 := 0 to OItem3.Values.Count - 1 do
begin
- sRegCombi := '';
-
- if OItem1.OpActive then
+ for il_Op4 := 0 to OItem4.Values.Count - 1 do
begin
- if sRegCombi <> '' then sRegCombi := sRegCombi + ', ';
- sRegCombi := sRegCombi + OItem1.Values[il_Op1];
- end;
+ sRegCombi := '';
- if OItem2.OpActive then
- begin
- if sRegCombi <> '' then sRegCombi := sRegCombi + ', ';
- sRegCombi := sRegCombi + OItem2.Values[il_Op2];
- end;
+ if OItem1.OpActive then
+ begin
+ if sRegCombi <> '' then sRegCombi := sRegCombi + ', ';
+ sRegCombi := sRegCombi + OItem1.Values[il_Op1];
+ end;
- if OItem3.OpActive then
- begin
- if sRegCombi <> '' then sRegCombi := sRegCombi + ', ';
- sRegCombi := sRegCombi + OItem3.Values[il_Op3];
- end;
+ if OItem2.OpActive then
+ begin
+ if sRegCombi <> '' then sRegCombi := sRegCombi + ', ';
+ sRegCombi := sRegCombi + OItem2.Values[il_Op2];
+ end;
- if OItem4.OpActive then
- begin
- if sRegCombi <> '' then sRegCombi := sRegCombi + ', ';
- sRegCombi := sRegCombi + OItem4.Values[il_Op4];
- end;
+ if OItem3.OpActive then
+ begin
+ if sRegCombi <> '' then sRegCombi := sRegCombi + ', ';
+ sRegCombi := sRegCombi + OItem3.Values[il_Op3];
+ end;
- if sRegCombi <> '' then
- begin
- //result.Add(format('%-20s%s', [aInst, sl_RegCombi]));
- result.Add(format('%-20s %6s', [sInstruction, sRegCombi]));
-
- case OpMode of
- omKXM: begin
- result.Add(format('%20s%6s,%6s, %s + $00', [aInst, OItem1.Values[il_Op1], 'XMM1', OItem3.Values[il_Op3] ]));
- //result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'XMM1']));
- //result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
- result.Add('');
- end;
- omXB32I,
- omXB64I: begin
- sMREF := OItem2.Values[il_Op2];
- if Pos('{1to4}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to4}', '{1to2}', [])
- else if Pos('{1to8}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to8}', '{1to4}', [])
- else if Pos('{1to16}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to16}', '{1to8}', []);
-
- result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', sMREF, OItem3.Values[il_Op3]]));
- result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'XMM1']));
- result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
- result.Add('');
- end;
- omXXM: begin
- result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', 'XMM1', OItem3.Values[il_Op3] ]));
- result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'XMM1']));
- result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
- result.Add('');
- end;
- omXXB32,
- omXXB64: begin
- sMREF := OItem3.Values[il_Op3];
-
- result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', 'XMM1', sMREF]));
- result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'XMM1']));
- result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
- result.Add('');
- end;
- omXMI: begin
- result.Add(format('%20s%6s,%6s + $00, %s', [aInst, 'XMM1', OItem2.Values[il_Op2], OItem3.Values[il_Op3]]));
- result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'XMM1']));
- result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
- result.Add('');
- end;
+ if OItem4.OpActive then
+ begin
+ if sRegCombi <> '' then sRegCombi := sRegCombi + ', ';
+ sRegCombi := sRegCombi + OItem4.Values[il_Op4];
+ end;
- omYB32I,
- omYB64I: begin
+ if sRegCombi <> '' then
+ begin
+ //result.Add(format('%-20s%s', [aInst, sl_RegCombi]));
+ result.Add(format('%-20s %6s', [sInstruction, sRegCombi]));
+
+ case OpMode of
+ omKXM: begin
+ result.Add(format('%20s%6s,%6s, %s + $00', [aInst, OItem1.Values[il_Op1], 'XMM1', OItem3.Values[il_Op3] ]));
+ //result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'XMM1']));
+ //result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
+ result.Add('');
+ end;
+ omXB32I,
+ omXB64I: begin
sMREF := OItem2.Values[il_Op2];
if Pos('{1to4}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to4}', '{1to2}', [])
else if Pos('{1to8}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to8}', '{1to4}', [])
else if Pos('{1to16}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to16}', '{1to8}', []);
- result.Add(format('%20s%6s,%6s + $00, %s', [aInst, 'XMM1', sMREF, OItem3.Values[il_Op3]]));
- result.Add(format('%20s%6s,%6s + $10, %s', [aInst, 'XMM2', sMREF, OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', sMREF, OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'XMM1']));
+ result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
+ result.Add('');
+ end;
+ omXXM: begin
+ result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', 'XMM1', OItem3.Values[il_Op3] ]));
+ result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'XMM1']));
+ result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
+ result.Add('');
+ end;
+ omXXB32,
+ omXXB64: begin
+ sMREF := OItem3.Values[il_Op3];
+
+ result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', 'XMM1', sMREF]));
+ result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'XMM1']));
+ result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
+ result.Add('');
+ end;
+ omXMI: begin
+ result.Add(format('%20s%6s,%6s + $00, %s', [aInst, 'XMM1', OItem2.Values[il_Op2], OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'XMM1']));
+ result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
+ result.Add('');
+ end;
+
+ omYB32I,
+ omYB64I: begin
+ sMREF := OItem2.Values[il_Op2];
+ if Pos('{1to4}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to4}', '{1to2}', [])
+ else if Pos('{1to8}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to8}', '{1to4}', [])
+ else if Pos('{1to16}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to16}', '{1to8}', []);
+
+ result.Add(format('%20s%6s,%6s + $00, %s', [aInst, 'XMM1', sMREF, OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s + $10, %s', [aInst, 'XMM2', sMREF, OItem3.Values[il_Op3]]));
+
+ result.Add(format('%20s%6s,%6s, %s, 01', ['vinserti32x4', 'YMM1', 'YMM1', 'XMM2']));
+ result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'YMM1']));
+ result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
+ result.Add('');
+ end;
+
+ omYYM: begin
+ result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', 'XMM1', OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s, %s + $10', [aInst, 'XMM2', 'XMM2', OItem3.Values[il_Op3]]));
+
+ result.Add(format('%20s%6s,%6s, %s, 01', ['vinserti32x4', 'YMM1', 'YMM1', 'XMM2']));
+ result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'YMM1']));
+ result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
+ result.Add('');
+ end;
+ omYYB32,
+ omYYB64: begin
+ sMREF := OItem3.Values[il_Op3];
+ if Pos('{1to4}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to4}', '{1to2}', [])
+ else if Pos('{1to8}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to8}', '{1to4}', [])
+ else if Pos('{1to16}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to16}', '{1to8}', []);
+
+ result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', 'XMM1', sMREF]));
+ result.Add(format('%20s%6s,%6s, %s + $10', [aInst, 'XMM2', 'XMM2', sMREF]));
+
+ result.Add(format('%20s%6s,%6s, %s, 01', ['vinserti32x4', 'YMM1', 'YMM1', 'XMM2']));
+ result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'YMM1']));
+ result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
+ result.Add('');
+ end;
+ omYMI: begin
+ result.Add(format('%20s%6s,%6s + $00, %s', [aInst, 'XMM1', OItem2.Values[il_Op2], OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s + $10, %s', [aInst, 'XMM2', OItem2.Values[il_Op2], OItem3.Values[il_Op3]]));
result.Add(format('%20s%6s,%6s, %s, 01', ['vinserti32x4', 'YMM1', 'YMM1', 'XMM2']));
result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'YMM1']));
result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
result.Add('');
end;
+ omZB32I,
+ omZB64I:
+ begin
+ sMREF := OItem2.Values[il_Op2];
+ if Pos('{1to8}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to8}', '{1to2}', [])
+ else if Pos('{1to16}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to16}', '{1to4}', []);
+
+ result.Add(format('%20s%6s,%6s + $00, %s', [aInst, 'XMM1', sMREF, OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s + $10, %s', [aInst, 'XMM2', sMREF, OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s + $20, %s', [aInst, 'XMM3', sMREF, OItem3.Values[il_Op3]]));
+
+ result.Add(format('%20s%6s,%6s, %s, 01', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM2']));
+ result.Add(format('%20s%6s,%6s, %s, 02', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM3']));
+ result.Add(format('%20s%6s,%6s, %s, 03', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM4']));
+
+ result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'ZMM1']));
+ result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
+ result.Add('');
+ end;
+
+ omZZM: begin
+ result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', 'XMM1', OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s, %s + $10', [aInst, 'XMM2', 'XMM2', OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s, %s + $20', [aInst, 'XMM3', 'XMM3', OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s, %s + $30', [aInst, 'XMM4', 'XMM4', OItem3.Values[il_Op3]]));
- omYYM: begin
- result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', 'XMM1', OItem3.Values[il_Op3]]));
- result.Add(format('%20s%6s,%6s, %s + $10', [aInst, 'XMM2', 'XMM2', OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s, %s, 01', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM2']));
+ result.Add(format('%20s%6s,%6s, %s, 02', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM3']));
+ result.Add(format('%20s%6s,%6s, %s, 03', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM4']));
- result.Add(format('%20s%6s,%6s, %s, 01', ['vinserti32x4', 'YMM1', 'YMM1', 'XMM2']));
- result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'YMM1']));
- result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
- result.Add('');
- end;
- omYYB32,
- omYYB64: begin
- sMREF := OItem3.Values[il_Op3];
- if Pos('{1to4}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to4}', '{1to2}', [])
- else if Pos('{1to8}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to8}', '{1to4}', [])
- else if Pos('{1to16}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to16}', '{1to8}', []);
-
- result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', 'XMM1', sMREF]));
- result.Add(format('%20s%6s,%6s, %s + $10', [aInst, 'XMM2', 'XMM2', sMREF]));
-
- result.Add(format('%20s%6s,%6s, %s, 01', ['vinserti32x4', 'YMM1', 'YMM1', 'XMM2']));
- result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'YMM1']));
- result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
- result.Add('');
- end;
- omYMI: begin
- result.Add(format('%20s%6s,%6s + $00, %s', [aInst, 'XMM1', OItem2.Values[il_Op2], OItem3.Values[il_Op3]]));
- result.Add(format('%20s%6s,%6s + $10, %s', [aInst, 'XMM2', OItem2.Values[il_Op2], OItem3.Values[il_Op3]]));
-
- result.Add(format('%20s%6s,%6s, %s, 01', ['vinserti32x4', 'YMM1', 'YMM1', 'XMM2']));
- result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'YMM1']));
- result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
- result.Add('');
- end;
- omZB32I,
- omZB64I:
- begin
- sMREF := OItem2.Values[il_Op2];
+ result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'ZMM1']));
+ result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
+ result.Add('');
+ end;
+ omZZB32,
+ omZZB64: begin
+ sMREF := OItem3.Values[il_Op3];
if Pos('{1to8}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to8}', '{1to2}', [])
else if Pos('{1to16}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to16}', '{1to4}', []);
- result.Add(format('%20s%6s,%6s + $00, %s', [aInst, 'XMM1', sMREF, OItem3.Values[il_Op3]]));
- result.Add(format('%20s%6s,%6s + $10, %s', [aInst, 'XMM2', sMREF, OItem3.Values[il_Op3]]));
- result.Add(format('%20s%6s,%6s + $20, %s', [aInst, 'XMM3', sMREF, OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', 'XMM1', sMREF]));
+ result.Add(format('%20s%6s,%6s, %s + $10', [aInst, 'XMM2', 'XMM2', sMREF]));
+ result.Add(format('%20s%6s,%6s, %s + $20', [aInst, 'XMM3', 'XMM3', sMREF]));
+ result.Add(format('%20s%6s,%6s, %s + $30', [aInst, 'XMM4', 'XMM4', sMREF]));
result.Add(format('%20s%6s,%6s, %s, 01', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM2']));
result.Add(format('%20s%6s,%6s, %s, 02', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM3']));
@@ -4981,58 +5016,25 @@ begin
result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
result.Add('');
end;
+ omZMI: begin
+ result.Add(format('%20s%6s,%6s + $00, %s', [aInst, 'XMM1', OItem2.Values[il_Op2], OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s + $10, %s', [aInst, 'XMM2', OItem2.Values[il_Op2], OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s + $20, %s', [aInst, 'XMM3', OItem2.Values[il_Op2], OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s + $30, %s', [aInst, 'XMM4', OItem2.Values[il_Op2], OItem3.Values[il_Op3]]));
- omZZM: begin
- result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', 'XMM1', OItem3.Values[il_Op3]]));
- result.Add(format('%20s%6s,%6s, %s + $10', [aInst, 'XMM2', 'XMM2', OItem3.Values[il_Op3]]));
- result.Add(format('%20s%6s,%6s, %s + $20', [aInst, 'XMM3', 'XMM3', OItem3.Values[il_Op3]]));
- result.Add(format('%20s%6s,%6s, %s + $30', [aInst, 'XMM4', 'XMM4', OItem3.Values[il_Op3]]));
+ result.Add(format('%20s%6s,%6s, %s, 01', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM2']));
+ result.Add(format('%20s%6s,%6s, %s, 02', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM3']));
+ result.Add(format('%20s%6s,%6s, %s, 03', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM4']));
- result.Add(format('%20s%6s,%6s, %s, 01', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM2']));
- result.Add(format('%20s%6s,%6s, %s, 02', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM3']));
- result.Add(format('%20s%6s,%6s, %s, 03', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM4']));
+ result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'ZMM1']));
+ result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
+ result.Add('');
+ end;
- result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'ZMM1']));
- result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
- result.Add('');
- end;
- omZZB32,
- omZZB64: begin
- sMREF := OItem3.Values[il_Op3];
- if Pos('{1to8}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to8}', '{1to2}', [])
- else if Pos('{1to16}', sMREF) > 0 then sMREF := StringReplace(sMREF, '{1to16}', '{1to4}', []);
-
- result.Add(format('%20s%6s,%6s, %s + $00', [aInst, 'XMM1', 'XMM1', sMREF]));
- result.Add(format('%20s%6s,%6s, %s + $10', [aInst, 'XMM2', 'XMM2', sMREF]));
- result.Add(format('%20s%6s,%6s, %s + $20', [aInst, 'XMM3', 'XMM3', sMREF]));
- result.Add(format('%20s%6s,%6s, %s + $30', [aInst, 'XMM4', 'XMM4', sMREF]));
-
- result.Add(format('%20s%6s,%6s, %s, 01', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM2']));
- result.Add(format('%20s%6s,%6s, %s, 02', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM3']));
- result.Add(format('%20s%6s,%6s, %s, 03', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM4']));
-
- result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'ZMM1']));
- result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
- result.Add('');
- end;
- omZMI: begin
- result.Add(format('%20s%6s,%6s + $00, %s', [aInst, 'XMM1', OItem2.Values[il_Op2], OItem3.Values[il_Op3]]));
- result.Add(format('%20s%6s,%6s + $10, %s', [aInst, 'XMM2', OItem2.Values[il_Op2], OItem3.Values[il_Op3]]));
- result.Add(format('%20s%6s,%6s + $20, %s', [aInst, 'XMM3', OItem2.Values[il_Op2], OItem3.Values[il_Op3]]));
- result.Add(format('%20s%6s,%6s + $30, %s', [aInst, 'XMM4', OItem2.Values[il_Op2], OItem3.Values[il_Op3]]));
-
- result.Add(format('%20s%6s,%6s, %s, 01', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM2']));
- result.Add(format('%20s%6s,%6s, %s, 02', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM3']));
- result.Add(format('%20s%6s,%6s, %s, 03', ['vinserti32x4', 'ZMM1', 'ZMM1', 'XMM4']));
-
- result.Add(format('%20s%6s,%6s, %s', ['vpcmpeqb', 'K2', OItem1.Values[il_Op1], 'ZMM1']));
- result.Add(format('%20s%6s,%6s, %s', ['kandq', 'K1', 'K1', 'K2']));
- result.Add('');
- end;
+ end;
+ sRegCombi := '';
end;
-
- sRegCombi := '';
end;
end;
end;
diff --git a/avx512-0037785/tests/utils/avx/avxopcodes.pas b/avx512-0037785/tests/utils/avx/avxopcodes.pas
index 7ac99be1e7..50b8571065 100644
--- a/avx512-0037785/tests/utils/avx/avxopcodes.pas
+++ b/avx512-0037785/tests/utils/avx/avxopcodes.pas
@@ -3466,8 +3466,15 @@ begin
if NewOpCode <> '' then
begin
- if (not(aX64) and (sl[1] = '1')) or // i386
- (aX64 and (sl[2] = '1')) then // x86_64
+ if (
+ (not(aX64) and (sl[1] = '1')) or // i386
+ (aX64 and (sl[2] = '1'))
+ ) and
+ (
+ sl[3] = '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))]);
@@ -3487,10 +3494,12 @@ begin
TAsmTestGenerator.CalcTestDataCDisp8(aX64, aAVX512 and (sl[3] = '1'), aSAE, sl[0], sl[4], sl[5], sl[6], sl[7], slAsm);
end;
- sDestFile := 'CDISP8_' + sDestFile;
- SaveFile(slAsm, sDestFile, aDestPath, aFileExt, slLocalHeader, aFooterList);
- writeln(format('%s%s%s', [aDestPath, sDestFile, aFileExt]));
-
+ if trim(slAsm.Text) <> '' then
+ begin
+ sDestFile := 'CDISP8_' + sDestFile;
+ SaveFile(slAsm, sDestFile, aDestPath, aFileExt, slLocalHeader, aFooterList);
+ writeln(format('%s%s%s', [aDestPath, sDestFile, aFileExt]));
+ end;
finally
FreeAndNil(slLocalHeader);
end;
diff --git a/avx512-0037785/tests/utils/avx/avxtestgenerator.pp b/avx512-0037785/tests/utils/avx/avxtestgenerator.pp
index 680c7a1ed6..dd483c2cf3 100644
--- a/avx512-0037785/tests/utils/avx/avxtestgenerator.pp
+++ b/avx512-0037785/tests/utils/avx/avxtestgenerator.pp
@@ -62,7 +62,7 @@ begin
'n': MakeTestFiles(tfNasm, x64, AVX512, false, Path, Filemask);
'I': MakeTestFiles(tfFPCInc, x64, AVX512, false, Path, Filemask);
'm': MakeTestFiles(tfFPCMRef, x64, AVX512, false, Path, Filemask);
- 'd': MakeTestFiles(tfFPCCDisp8, x64, AVX512, false, Path, Filemask);
+ 'd': MakeTestFiles(tfFPCCDisp8, x64, true, false, Path, Filemask);
'l': ListMemRefState;
end;
end;