diff --git a/components/fpdebug/fpdbgdisasx86.pp b/components/fpdebug/fpdbgdisasx86.pp index 02b99325aa..a366746dc2 100644 --- a/components/fpdebug/fpdbgdisasx86.pp +++ b/components/fpdebug/fpdbgdisasx86.pp @@ -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; diff --git a/components/lazdebuggers/lazdebuggerfp/test/testasm.pas b/components/lazdebuggers/lazdebuggerfp/test/testasm.pas index c9263db478..920152f987 100644 --- a/components/lazdebuggers/lazdebuggerfp/test/testasm.pas +++ b/components/lazdebuggers/lazdebuggerfp/test/testasm.pas @@ -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;