VirtualBox

Changeset 96976 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Oct 4, 2022 9:31:56 AM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
153899
Message:

VMM/IEM: Fix some cvt* instructions which have the source and destination operands backwards, bugref:9898

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r96955 r96976  
    36783678
    36793679        IEM_MC_REF_MXCSR(pfMxcsr);
    3680         IEM_MC_FETCH_XREG_XMM(Dst, IEM_GET_MODRM_RM(pVCpu, bRm)); /* Need it because the high quadword remains unchanged. */
    3681         IEM_MC_FETCH_MREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, bRm));
     3680        IEM_MC_FETCH_XREG_XMM(Dst, IEM_GET_MODRM_REG(pVCpu, bRm)); /* Need it because the high quadword remains unchanged. */
     3681        IEM_MC_FETCH_MREG_U64(u64Src, IEM_GET_MODRM_RM(pVCpu, bRm));
    36823682
    36833683        IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtpi2ps_u128, pfMxcsr, pDst, u64Src);
     
    36853685            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    36863686        IEM_MC_ELSE()
    3687             IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_RM(pVCpu, bRm), Dst);
     3687            IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_REG(pVCpu, bRm), Dst);
    36883688        IEM_MC_ENDIF();
    36893689
     
    37163716            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    37173717        IEM_MC_ELSE()
    3718             IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_RM(pVCpu, bRm), Dst);
     3718            IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_REG(pVCpu, bRm), Dst);
    37193719        IEM_MC_ENDIF();
    37203720
     
    37483748
    37493749        IEM_MC_REF_MXCSR(pfMxcsr);
    3750         IEM_MC_FETCH_MREG_U64(u64Src, IEM_GET_MODRM_REG(pVCpu, bRm));
     3750        IEM_MC_FETCH_MREG_U64(u64Src, IEM_GET_MODRM_RM(pVCpu, bRm));
    37513751
    37523752        IEM_MC_CALL_VOID_AIMPL_3(iemAImpl_cvtpi2pd_u128, pfMxcsr, pDst, u64Src);
     
    37543754            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    37553755        IEM_MC_ELSE()
    3756             IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_RM(pVCpu, bRm), Dst);
     3756            IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_REG(pVCpu, bRm), Dst);
    37573757        IEM_MC_ENDIF();
    37583758
     
    37853785            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    37863786        IEM_MC_ELSE()
    3787             IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_RM(pVCpu, bRm), Dst);
     3787            IEM_MC_STORE_XREG_XMM(IEM_GET_MODRM_REG(pVCpu, bRm), Dst);
    37883788        IEM_MC_ENDIF();
    37893789
     
    38173817            IEM_MC_PREPARE_SSE_USAGE(); /** @todo: This is superfluous because IEM_MC_CALL_SSE_AIMPL_3() is calling this but the tstIEMCheckMc testcase depends on it. */
    38183818
    3819             IEM_MC_REF_GREG_I64_CONST(pi64Src, IEM_GET_MODRM_REG(pVCpu, bRm));
     3819            IEM_MC_REF_GREG_I64_CONST(pi64Src, IEM_GET_MODRM_RM(pVCpu, bRm));
    38203820            IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsi2ss_r32_i64, pfMxcsr, pr32Dst, pi64Src);
    38213821            IEM_MC_SSE_UPDATE_MXCSR(fMxcsr);
     
    38233823                IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    38243824            IEM_MC_ELSE()
    3825                 IEM_MC_STORE_XREG_R32(IEM_GET_MODRM_RM(pVCpu, bRm), r32Dst);
     3825                IEM_MC_STORE_XREG_R32(IEM_GET_MODRM_REG(pVCpu, bRm), r32Dst);
    38263826            IEM_MC_ENDIF();
    38273827
     
    38523852                IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    38533853            IEM_MC_ELSE()
    3854                 IEM_MC_STORE_XREG_R32(IEM_GET_MODRM_RM(pVCpu, bRm), r32Dst);
     3854                IEM_MC_STORE_XREG_R32(IEM_GET_MODRM_REG(pVCpu, bRm), r32Dst);
    38553855            IEM_MC_ENDIF();
    38563856
     
    38753875            IEM_MC_PREPARE_SSE_USAGE(); /** @todo: This is superfluous because IEM_MC_CALL_SSE_AIMPL_3() is calling this but the tstIEMCheckMc testcase depends on it. */
    38763876
    3877             IEM_MC_REF_GREG_I32_CONST(pi32Src, IEM_GET_MODRM_REG(pVCpu, bRm));
     3877            IEM_MC_REF_GREG_I32_CONST(pi32Src, IEM_GET_MODRM_RM(pVCpu, bRm));
    38783878            IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsi2ss_r32_i32, pfMxcsr, pr32Dst, pi32Src);
    38793879            IEM_MC_SSE_UPDATE_MXCSR(fMxcsr);
     
    38813881                IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    38823882            IEM_MC_ELSE()
    3883                 IEM_MC_STORE_XREG_R32(IEM_GET_MODRM_RM(pVCpu, bRm), r32Dst);
     3883                IEM_MC_STORE_XREG_R32(IEM_GET_MODRM_REG(pVCpu, bRm), r32Dst);
    38843884            IEM_MC_ENDIF();
    38853885
     
    39103910                IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    39113911            IEM_MC_ELSE()
    3912                 IEM_MC_STORE_XREG_R32(IEM_GET_MODRM_RM(pVCpu, bRm), r32Dst);
     3912                IEM_MC_STORE_XREG_R32(IEM_GET_MODRM_REG(pVCpu, bRm), r32Dst);
    39133913            IEM_MC_ENDIF();
    39143914
     
    39433943            IEM_MC_PREPARE_SSE_USAGE(); /** @todo: This is superfluous because IEM_MC_CALL_SSE_AIMPL_3() is calling this but the tstIEMCheckMc testcase depends on it. */
    39443944
    3945             IEM_MC_REF_GREG_I64_CONST(pi64Src, IEM_GET_MODRM_REG(pVCpu, bRm));
     3945            IEM_MC_REF_GREG_I64_CONST(pi64Src, IEM_GET_MODRM_RM(pVCpu, bRm));
    39463946            IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsi2sd_r64_i64, pfMxcsr, pr64Dst, pi64Src);
    39473947            IEM_MC_SSE_UPDATE_MXCSR(fMxcsr);
     
    39493949                IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    39503950            IEM_MC_ELSE()
    3951                 IEM_MC_STORE_XREG_R64(IEM_GET_MODRM_RM(pVCpu, bRm), r64Dst);
     3951                IEM_MC_STORE_XREG_R64(IEM_GET_MODRM_REG(pVCpu, bRm), r64Dst);
    39523952            IEM_MC_ENDIF();
    39533953
     
    39783978                IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    39793979            IEM_MC_ELSE()
    3980                 IEM_MC_STORE_XREG_R64(IEM_GET_MODRM_RM(pVCpu, bRm), r64Dst);
     3980                IEM_MC_STORE_XREG_R64(IEM_GET_MODRM_REG(pVCpu, bRm), r64Dst);
    39813981            IEM_MC_ENDIF();
    39823982
     
    40014001            IEM_MC_PREPARE_SSE_USAGE(); /** @todo: This is superfluous because IEM_MC_CALL_SSE_AIMPL_3() is calling this but the tstIEMCheckMc testcase depends on it. */
    40024002
    4003             IEM_MC_REF_GREG_I32_CONST(pi32Src, IEM_GET_MODRM_REG(pVCpu, bRm));
     4003            IEM_MC_REF_GREG_I32_CONST(pi32Src, IEM_GET_MODRM_RM(pVCpu, bRm));
    40044004            IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_cvtsi2sd_r64_i32, pfMxcsr, pr64Dst, pi32Src);
    40054005            IEM_MC_SSE_UPDATE_MXCSR(fMxcsr);
     
    40074007                IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    40084008            IEM_MC_ELSE()
    4009                 IEM_MC_STORE_XREG_R64(IEM_GET_MODRM_RM(pVCpu, bRm), r64Dst);
     4009                IEM_MC_STORE_XREG_R64(IEM_GET_MODRM_REG(pVCpu, bRm), r64Dst);
    40104010            IEM_MC_ENDIF();
    40114011
     
    40364036                IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    40374037            IEM_MC_ELSE()
    4038                 IEM_MC_STORE_XREG_R64(IEM_GET_MODRM_RM(pVCpu, bRm), r64Dst);
     4038                IEM_MC_STORE_XREG_R64(IEM_GET_MODRM_REG(pVCpu, bRm), r64Dst);
    40394039            IEM_MC_ENDIF();
    40404040
     
    41584158            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    41594159        IEM_MC_ELSE()
    4160             IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm), u64Dst);
     4160            IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), u64Dst);
    41614161        IEM_MC_ENDIF();
    41624162
     
    41894189            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    41904190        IEM_MC_ELSE()
    4191             IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm), u64Dst);
     4191            IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), u64Dst);
    41924192        IEM_MC_ENDIF();
    41934193
     
    45504550            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    45514551        IEM_MC_ELSE()
    4552             IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm), u64Dst);
     4552            IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), u64Dst);
    45534553        IEM_MC_ENDIF();
    45544554
     
    45814581            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
    45824582        IEM_MC_ELSE()
    4583             IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm), u64Dst);
     4583            IEM_MC_STORE_MREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), u64Dst);
    45844584        IEM_MC_ENDIF();
    45854585
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette