diff --git a/tests/utils/avx/asmtestgenerator.pas b/tests/utils/avx/asmtestgenerator.pas index 323708e184..c8f3825de7 100644 --- a/tests/utils/avx/asmtestgenerator.pas +++ b/tests/utils/avx/asmtestgenerator.pas @@ -3741,7 +3741,7 @@ var end; end; - function AsmCodeBlockCompare(aAsmCounter: integer): String; + function AsmCodeBlockCompare(aAsmCounter: integer; aIsKortestQ: boolean = false): String; var sReg: string; begin @@ -3752,12 +3752,21 @@ var else sReg := 'EAX'; end; - result := result + format('%20s%6s ', [' push', sReg]) + #13#10 + - format('%20s%6s,%s', [' mov', sReg, inttostr(aAsmCounter)]) + #13#10 + - format('%20s%6s,%s', [' kmovd', 'K7', 'EAX']) + #13#10 + - format('%20s%6s', [' pop', sReg]) + #13#10 + - format('%20s%6s, %s', ['kortestb', 'K1', 'K2']) + #13#10 + - format('%20s %6s', [' jnc', '@@CHECKRESULT']) + #13#10 + #13#10; + with TStringList.Create do + try + Add(format('%20s%6s ', [' push', sReg])); + Add(format('%20s%6s,%s', [' mov', sReg, inttostr(aAsmCounter)])); + Add(format('%20s%6s,%s', [' kmovd', 'K7', 'EAX'])); + Add(format('%20s%6s', [' pop', sReg])); + if aIsKortestQ then Add(format('%20s%6s, %s', ['kortestq', 'K1', 'K2'])) + else Add(format('%20s%6s, %s', ['kortestb', 'K1', 'K2'])); + + Add(format('%20s %6s', [' jnc', '@@CHECKRESULT'])); + + result := Text; + finally + Free; + end; end; begin @@ -4583,13 +4592,7 @@ begin Item.OpTyp := otKREG; Item.OpActive := true; - sSuffix := ''; - if Pos('_M', AnsiUppercase(sl_Operand)) > 0 then sSuffix := ' {k1}'; - - if UsePrefix then sl_Prefix := ''; - - for i := 0 to FRegKREG.Count - 1 do - Item.Values.Add(FRegKREG[i] + sSuffix); + Item.Values.Add('K1'); end else if trim(sl_Operand) = '' then begin @@ -4931,13 +4934,12 @@ begin inc(iAsmCounter); case OpMode of - omKXM: begin - result.Add(format('%20s%6s,%6s, %s + $2000', [aInst, OItem1.Values[il_Op1], 'XMM1', OItem3.Values[il_Op3] ])); + omKXM, + omKYM, + omKZM: begin + result.Add(format('%20s%6s,%6s, %s + $2000', [aInst, 'K2', OItem2.Values[il_Op2], OItem3.Values[il_Op3] ])); - // TODO - //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(''); + result.Add(AsmCodeBlockCompare(iAsmCounter, true)); end; omXB32I, omXB64I: begin diff --git a/tests/utils/avx/avxopcodes.pas b/tests/utils/avx/avxopcodes.pas index 1c826a0f43..6444137b68 100644 --- a/tests/utils/avx/avxopcodes.pas +++ b/tests/utils/avx/avxopcodes.pas @@ -3675,6 +3675,7 @@ begin slHeader.Add('Program $$$OPCODE$$$;'); slHeader.Add('{$asmmode intel}'); + slHeader.Add('{$mode objfpc}{$H+}'); slHeader.Add('uses sysutils;'); @@ -3716,7 +3717,8 @@ begin slHeader.Add(' write(Paramstr(0) + '': '');'); - slHeader.Add(' asm'); + slHeader.Add(' try'); + slHeader.Add(' asm'); slHeader.Add(' vpxord zmm0, zmm0, zmm0'); slHeader.Add(' vpxord xmm1, xmm1, xmm1'); @@ -3758,6 +3760,17 @@ begin else slFooter.Add(' pop eax'); + slFooter.Add(' end;'); + slFooter.Add(' except'); + slFooter.Add(' on E: EInvalidOp do'); + slFooter.Add(' begin'); + slFooter.Add(' writeln(''Error - Invalid Op: '' + E.Message);'); + slFooter.Add(' end;'); + + slFooter.Add(' on E: Exception do'); + slFooter.Add(' begin'); + slFooter.Add(' writeln(''Fehler: '' + E.Message);'); + slFooter.Add(' end;'); slFooter.Add(' end;'); slFooter.Add('end.');