FpDebug: fix disassembler "vround"/"vmovm" Issue #40525 #40524 patch by Red_prig (Pavel)

This commit is contained in:
Martin 2023-10-02 11:56:23 +02:00
parent 285b99cc42
commit 710fa6f135
2 changed files with 17 additions and 4 deletions

View File

@ -1693,12 +1693,12 @@ end;
procedure TX86Disassembler.AddUpd;
begin
AddModRM([modReg], os128, regXmm);
AddModRM([modReg], VectorSize, regXmm);
end;
procedure TX86Disassembler.AddUps;
begin
AddModRM([modReg], os128, regXmm);
AddModRM([modReg], VectorSize, regXmm);
end;
procedure TX86Disassembler.AddUq;
@ -3816,8 +3816,8 @@ begin
$06: begin SetOpcode(OPvperm2, OPSx_f128 ); AddVqq; AddHqq; AddWqq; AddIb; CheckVex; end;
$08: begin SetOpcode(OPround, OPSx_ps, True); AddVx; AddWx; AddIb; end;
$09: begin SetOpcode(OPround, OPSx_pd, True); AddVx; AddWx; AddIb; end;
$0A: begin SetOpcode(OPround, OPSx_ss, True); AddVss; AddWss; AddIb; end;
$0B: begin SetOpcode(OPround, OPSx_sd, True); AddVsd; AddWsd; AddIb; end;
$0A: begin SetOpcode(OPround, OPSx_ss, True); AddVss; AddHx; AddWss; AddIb; end;
$0B: begin SetOpcode(OPround, OPSx_sd, True); AddVsd; AddHx; AddWsd; AddIb; end;
$0C: begin SetOpcode(OPblend, OPSx_ps, True); AddVx; AddHx; AddWx; AddIb; end;
$0D: begin SetOpcode(OPblend, OPSx_pd, True); AddVx; AddHx; AddWx; AddIb; end;
$0E: begin SetOpcode(OPpblend, OPSx_w, True); AddVx; AddHx; AddWx; AddIb; end;

View File

@ -241,6 +241,13 @@ begin
TestDis('mov [$0000001a],eax', #$a3#$1a#$00#$00#$00#$00#$00#$00#$00, 'mov [$0000001a],eax');
TestDis('mov [$0000001a],rax', #$48#$a3#$1a#$00#$00#$00#$00#$00#$00#$00, 'mov [$0000001a],rax');
TestDis('vmovmskpd ecx,xmm1', #$C5#$F9#$50#$C9, 'vmovmskpd ecx,xmm1');
TestDis('vmovmskpd ecx,ymm1', #$C5#$FD#$50#$C9, 'vmovmskpd ecx,ymm1');
TestDis('vmovmskps ecx,xmm1', #$C5#$F8#$50#$C9, 'vmovmskps ecx,xmm1');
TestDis('vmovmskps ecx,ymm1', #$C5#$FC#$50#$C9, 'vmovmskps ecx,ymm1');
TestDis('vroundsd xmm1,xmm2,xmm3,$07', #$C4#$E3#$69#$0B#$CB#$07, 'vroundsd xmm1,xmm2,xmm3,$07');
TestDis('vroundss xmm1,xmm2,xmm3,$07', #$C4#$E3#$69#$0A#$CB#$07, 'vroundss xmm1,xmm2,xmm3,$07');
Process.NewMode := dm32;
@ -341,6 +348,12 @@ begin
TestDis('mov [$0000001a],ax ', #$66#$a3#$1a#$00#$00#$00, 'mov [$0000001a],ax');
TestDis('mov [$0000001a],eax', #$a3#$1a#$00#$00#$00, 'mov [$0000001a],eax');
TestDis('vmovmskpd ecx,xmm1', #$C5#$F9#$50#$C9, 'vmovmskpd ecx,xmm1');
TestDis('vmovmskpd ecx,ymm1', #$C5#$FD#$50#$C9, 'vmovmskpd ecx,ymm1');
TestDis('vmovmskps ecx,xmm1', #$C5#$F8#$50#$C9, 'vmovmskps ecx,xmm1');
TestDis('vmovmskps ecx,ymm1', #$C5#$FC#$50#$C9, 'vmovmskps ecx,ymm1');
TestDis('vroundsd xmm1,xmm2,xmm3,$07', #$C4#$E3#$69#$0B#$CB#$07, 'vroundsd xmm1,xmm2,xmm3,$07');
TestDis('vroundss xmm1,xmm2,xmm3,$07', #$C4#$E3#$69#$0A#$CB#$07, 'vroundss xmm1,xmm2,xmm3,$07');
Process.NewMode := dm64;