FpDebug: fix disassembler vzero... / test reg.l Issue #40546 and #40549 patch by Red_prig (Pavel)

(cherry picked from commit 9cff61c5a0)
This commit is contained in:
Martin 2023-10-13 13:34:54 +02:00
parent 07c3071d31
commit 7824207ffc
2 changed files with 12 additions and 2 deletions

View File

@ -3274,6 +3274,7 @@ begin
then begin then begin
if flagVex in Flags if flagVex in Flags
then begin then begin
Exclude(Flags,flagModRM);
if Vex.VectorLength = os128 if Vex.VectorLength = os128
then SetOpcode(OPvzeroupper) then SetOpcode(OPvzeroupper)
else SetOpcode(OPvzeroall); else SetOpcode(OPvzeroall);
@ -4351,7 +4352,7 @@ begin
$A9: begin $A9: begin
SetOpcode(OPtest); SetOpcode(OPtest);
AddReg(regGeneral, OperandSize, REG_A); AddReg(regGeneral, OperandSize, REG_A);
AddIv; AddIz;
end; end;
$AA: begin $AA: begin
SetOpcode(OPstos, OPSx_b); CheckRepeat; SetOpcode(OPstos, OPSx_b); CheckRepeat;

View File

@ -53,7 +53,7 @@ codeBytes, ' ', asmInstr,
r := TRegExpr.Create('(\$)0+([0-9a-fA-F])'); r := TRegExpr.Create('(\$)0+([0-9a-fA-F])');
s := LowerCase(asmInstr); s := Trim(LowerCase(asmInstr));
s := StringReplace(s, ' ', ' ', [rfReplaceAll]); // space s := StringReplace(s, ' ', ' ', [rfReplaceAll]); // space
s := StringReplace(s, ', ', ',', [rfReplaceAll]); // space s := StringReplace(s, ', ', ',', [rfReplaceAll]); // space
s := r.Replace(s, '$1$2', True); s := r.Replace(s, '$1$2', True);
@ -259,6 +259,11 @@ begin
TestDis('vmovd [rax],xmm0', #$C4#$E1#$79#$7E#$00, 'vmovd [rax],xmm0'); TestDis('vmovd [rax],xmm0', #$C4#$E1#$79#$7E#$00, 'vmovd [rax],xmm0');
TestDis('vmovq [rax],xmm0', #$C4#$E1#$F9#$7E#$00, 'vmovq [rax],xmm0'); TestDis('vmovq [rax],xmm0', #$C4#$E1#$F9#$7E#$00, 'vmovq [rax],xmm0');
TestDis('test rax,$FFFFFEFE', #$48#$A9#$FE#$FE#$FF#$FF, 'test rax,$FFFFFEFE');
TestDis('test eax,$FFFFFEFE', #$A9#$FE#$FE#$FF#$FF, 'test eax,$FFFFFEFE');
TestDis('vzeroupper', #$C5#$F8#$77, 'vzeroupper');
TestDis('vzeroall', #$C5#$FC#$77, 'vzeroall');
Process.NewMode := dm32; Process.NewMode := dm32;
@ -373,6 +378,10 @@ begin
TestDis('movd edi,xmm1', #$66#$0F#$7E#$CF, 'movd edi,xmm1'); TestDis('movd edi,xmm1', #$66#$0F#$7E#$CF, 'movd edi,xmm1');
TestDis('vmovd [eax],xmm0', #$C4#$E1#$79#$7E#$00, 'vmovd [eax],xmm0'); TestDis('vmovd [eax],xmm0', #$C4#$E1#$79#$7E#$00, 'vmovd [eax],xmm0');
TestDis('test eax,$FFFFFEFE', #$A9#$FE#$FE#$FF#$FF, 'test eax,$FFFFFEFE');
TestDis('vzeroupper', #$C5#$F8#$77, 'vzeroupper');
TestDis('vzeroall', #$C5#$FC#$77, 'vzeroall');
Process.NewMode := dm64; Process.NewMode := dm64;