VirtualBox

Changeset 104150 in vbox for trunk


Ignore:
Timestamp:
Apr 4, 2024 8:54:42 AM (10 months ago)
Author:
vboxsync
Message:

VMM/IEM: Rework the [v][u]comis[sd] instruction emulations to work by value instead by reference and drop the IEM_MC_FETCH_MEM_XMM_U32/IEM_MC_FETCH_XMM_U64 microcode statements, enables recompilation of those instructions, bugref:10614

Location:
trunk/src/VBox/VMM
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm

    r104139 r104150  
    61756175; @param    A0_32   The guest's MXCSR register value to use (input).
    61766176; @param    A1      Pointer to the EFLAGS value (input/output).
    6177 ; @param    A2      Pointer to the first source operand (aka readonly destination).
    6178 ; @param    A3      Pointer to the second source operand.
     6177; @param    A2_32   The first source operand.
     6178; @param    A3_32   The second source operand.
    61796179;
    61806180BEGINPROC_FASTCALL  iemAImpl_ucomiss_u128, 16
     
    61836183        SSE_AVX_LD_MXCSR A0_32
    61846184
    6185         movdqu  xmm0, [A2]
    6186         movdqu  xmm1, [A3]
     6185        movd    xmm0, A2_32
     6186        movd    xmm1, A3_32
    61876187        ucomiss xmm0, xmm1
    61886188        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
     
    61986198        SSE_AVX_LD_MXCSR A0_32
    61996199
    6200         movdqu  xmm0, [A2]
    6201         movdqu  xmm1, [A3]
     6200        movd    xmm0, [A2]
     6201        movd    xmm1, [A3]
    62026202        vucomiss xmm0, xmm1
    62036203        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
     
    62156215; @param    A0_32   The guest's MXCSR register value to use (input).
    62166216; @param    A1      Pointer to the EFLAGS value (input/output).
    6217 ; @param    A2      Pointer to the first source operand (aka readonly destination).
    6218 ; @param    A3      Pointer to the second source operand.
     6217; @param    A2      The first source operand.
     6218; @param    A3      The second source operand.
    62196219;
    62206220BEGINPROC_FASTCALL  iemAImpl_ucomisd_u128, 16
     
    62236223        SSE_AVX_LD_MXCSR A0_32
    62246224
    6225         movdqu  xmm0, [A2]
    6226         movdqu  xmm1, [A3]
     6225        movq    xmm0, A2
     6226        movq    xmm1, A3
    62276227        ucomisd xmm0, xmm1
    62286228        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
     
    62386238        SSE_AVX_LD_MXCSR A0_32
    62396239
    6240         movdqu  xmm0, [A2]
    6241         movdqu  xmm1, [A3]
     6240        movq    xmm0, A2
     6241        movq    xmm1, A3
    62426242        vucomisd xmm0, xmm1
    62436243        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
     
    62546254; @param    A0_32   The guest's MXCSR register value to use (input).
    62556255; @param    A1      Pointer to the EFLAGS value (input/output).
    6256 ; @param    A2      Pointer to the first source operand (aka readonly destination).
    6257 ; @param    A3      Pointer to the second source operand.
     6256; @param    A2_32   The first source operand.
     6257; @param    A3_32   The second source operand.
    62586258;
    62596259BEGINPROC_FASTCALL  iemAImpl_comiss_u128, 16
     
    62626262        SSE_AVX_LD_MXCSR A0_32
    62636263
    6264         movdqu  xmm0, [A2]
    6265         movdqu  xmm1, [A3]
     6264        movd    xmm0, A2_32
     6265        movd    xmm1, A3_32
    62666266        comiss xmm0, xmm1
    62676267        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
     
    62776277        SSE_AVX_LD_MXCSR A0_32
    62786278
    6279         movdqu  xmm0, [A2]
    6280         movdqu  xmm1, [A3]
     6279        movd    xmm0, A2_32
     6280        movd    xmm1, A3_32
    62816281        vcomiss xmm0, xmm1
    62826282        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
     
    62946294; @param    A0_32   The guest's MXCSR register value to use (input).
    62956295; @param    A1      Pointer to the EFLAGS value (input/output).
    6296 ; @param    A2      Pointer to the first source operand (aka readonly destination).
    6297 ; @param    A3      Pointer to the second source operand.
     6296; @param    A2      The first source operand.
     6297; @param    A3      The second source operand.
    62986298;
    62996299BEGINPROC_FASTCALL  iemAImpl_comisd_u128, 16
     
    63026302        SSE_AVX_LD_MXCSR A0_32
    63036303
    6304         movdqu  xmm0, [A2]
    6305         movdqu  xmm1, [A3]
     6304        movq    xmm0, A2
     6305        movq    xmm1, A3
    63066306        comisd xmm0, xmm1
    63076307        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
     
    63176317        SSE_AVX_LD_MXCSR A0_32
    63186318
    6319         movdqu  xmm0, [A2]
    6320         movdqu  xmm1, [A3]
     6319        movq    xmm0, A2
     6320        movq    xmm1, A3
    63216321        vcomisd xmm0, xmm1
    63226322        IEM_SAVE_FLAGS A1, X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF, 0, X86_EFL_OF | X86_EFL_SF | X86_EFL_AF
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp

    r104133 r104150  
    1817618176 */
    1817718177#ifdef IEM_WITHOUT_ASSEMBLY
    18178 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_ucomiss_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
     18178IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_ucomiss_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT32U uSrc1, RTFLOAT32U uSrc2))
    1817918179{
    1818018180    uint32_t fEFlagsNew = *pfEFlags & ~X86_EFL_STATUS_BITS;
    1818118181
    18182     if (RTFLOAT32U_IS_SIGNALLING_NAN(&puSrc1->ar32[0]) || RTFLOAT32U_IS_SIGNALLING_NAN(&puSrc2->ar32[0]))
     18182    if (RTFLOAT32U_IS_SIGNALLING_NAN(&uSrc1) || RTFLOAT32U_IS_SIGNALLING_NAN(&uSrc2))
    1818318183    {
    1818418184        uMxCsrIn   |= X86_MXCSR_IE;
    1818518185        fEFlagsNew |= X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF; /* UNORDERED 111 */
    1818618186    }
    18187     else if (RTFLOAT32U_IS_QUIET_NAN(&puSrc1->ar32[0]) || RTFLOAT32U_IS_QUIET_NAN(&puSrc2->ar32[0]))
     18187    else if (RTFLOAT32U_IS_QUIET_NAN(&uSrc1) || RTFLOAT32U_IS_QUIET_NAN(&uSrc2))
    1818818188    {
    1818918189        /* ucomiss doesn't raise \#IE for quiet NaNs. */
     
    1819518195
    1819618196        RTFLOAT32U r32Src1, r32Src2;
    18197         uint32_t fDe  = iemSsePrepareValueR32(&r32Src1, uMxCsrIn, &puSrc1->ar32[0]);
    18198                  fDe |= iemSsePrepareValueR32(&r32Src2, uMxCsrIn, &puSrc2->ar32[0]);
     18197        uint32_t fDe  = iemSsePrepareValueR32(&r32Src1, uMxCsrIn, &uSrc1);
     18198                 fDe |= iemSsePrepareValueR32(&r32Src2, uMxCsrIn, &uSrc2);
    1819918199
    1820018200        float32_t f32Src1 = iemFpSoftF32FromIprt(&r32Src1);
     
    1821418214#endif
    1821518215
    18216 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vucomiss_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
    18217 {
    18218     return iemAImpl_ucomiss_u128(uMxCsrIn, pfEFlags, puSrc1, puSrc2);
     18216IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vucomiss_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT32U uSrc1, RTFLOAT32U uSrc2))
     18217{
     18218    return iemAImpl_ucomiss_u128(uMxCsrIn, pfEFlags, uSrc1, uSrc2);
    1821918219}
    1822018220
     
    1822418224 */
    1822518225#ifdef IEM_WITHOUT_ASSEMBLY
    18226 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_ucomisd_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
     18226IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_ucomisd_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT64U uSrc1, RTFLOAT64U uSrc2))
    1822718227{
    1822818228    uint32_t fEFlagsNew = *pfEFlags & ~X86_EFL_STATUS_BITS;
    1822918229
    18230     if (RTFLOAT64U_IS_SIGNALLING_NAN(&puSrc1->ar64[0]) || RTFLOAT64U_IS_SIGNALLING_NAN(&puSrc2->ar64[0]))
     18230    if (RTFLOAT64U_IS_SIGNALLING_NAN(&uSrc1) || RTFLOAT64U_IS_SIGNALLING_NAN(&uSrc2))
    1823118231    {
    1823218232        uMxCsrIn   |= X86_MXCSR_IE;
    1823318233        fEFlagsNew |= X86_EFL_ZF | X86_EFL_PF | X86_EFL_CF; /* UNORDERED 111 */
    1823418234    }
    18235     else if (RTFLOAT64U_IS_QUIET_NAN(&puSrc1->ar64[0]) || RTFLOAT64U_IS_QUIET_NAN(&puSrc2->ar64[0]))
     18235    else if (RTFLOAT64U_IS_QUIET_NAN(&uSrc1) || RTFLOAT64U_IS_QUIET_NAN(&uSrc2))
    1823618236    {
    1823718237        /* ucomiss doesn't raise \#IE for quiet NaNs. */
     
    1824318243
    1824418244        RTFLOAT64U r64Src1, r64Src2;
    18245         uint32_t fDe = iemSsePrepareValueR64(&r64Src1, uMxCsrIn, &puSrc1->ar64[0])
    18246                      | iemSsePrepareValueR64(&r64Src2, uMxCsrIn, &puSrc2->ar64[0]);
     18245        uint32_t fDe = iemSsePrepareValueR64(&r64Src1, uMxCsrIn, &uSrc1)
     18246                     | iemSsePrepareValueR64(&r64Src2, uMxCsrIn, &uSrc2);
    1824718247
    1824818248        float64_t f64Src1 = iemFpSoftF64FromIprt(&r64Src1);
     
    1826218262#endif
    1826318263
    18264 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vucomisd_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
    18265 {
    18266     return iemAImpl_ucomisd_u128(uMxCsrIn, pfEFlags, puSrc1, puSrc2);
     18264IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vucomisd_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT64U uSrc1, RTFLOAT64U uSrc2))
     18265{
     18266    return iemAImpl_ucomisd_u128(uMxCsrIn, pfEFlags, uSrc1, uSrc2);
    1826718267}
    1826818268
     
    1827218272 */
    1827318273#ifdef IEM_WITHOUT_ASSEMBLY
    18274 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_comiss_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
     18274IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_comiss_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT32U uSrc1, RTFLOAT32U uSrc2))
    1827518275{
    1827618276    uint32_t fEFlagsNew = *pfEFlags & ~X86_EFL_STATUS_BITS;
    1827718277
    18278     if (   RTFLOAT32U_IS_SIGNALLING_NAN(&puSrc1->ar32[0]) || RTFLOAT32U_IS_SIGNALLING_NAN(&puSrc2->ar32[0])
    18279         || RTFLOAT32U_IS_QUIET_NAN(&puSrc1->ar32[0]) || RTFLOAT32U_IS_QUIET_NAN(&puSrc2->ar32[0]))
     18278    if (   RTFLOAT32U_IS_SIGNALLING_NAN(&uSrc1) || RTFLOAT32U_IS_SIGNALLING_NAN(&uSrc2)
     18279        || RTFLOAT32U_IS_QUIET_NAN(&uSrc1) || RTFLOAT32U_IS_QUIET_NAN(&uSrc2))
    1828018280    {
    1828118281        uMxCsrIn   |= X86_MXCSR_IE;
     
    1828718287
    1828818288        RTFLOAT32U r32Src1, r32Src2;
    18289         uint32_t fDe = iemSsePrepareValueR32(&r32Src1, uMxCsrIn, &puSrc1->ar32[0])
    18290                      | iemSsePrepareValueR32(&r32Src2, uMxCsrIn, &puSrc2->ar32[0]);
     18289        uint32_t fDe = iemSsePrepareValueR32(&r32Src1, uMxCsrIn, &uSrc1)
     18290                     | iemSsePrepareValueR32(&r32Src2, uMxCsrIn, &uSrc2);
    1829118291
    1829218292        float32_t f32Src1 = iemFpSoftF32FromIprt(&r32Src1);
     
    1830718307
    1830818308
    18309 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vcomiss_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
    18310 {
    18311     return iemAImpl_comiss_u128(uMxCsrIn, pfEFlags, puSrc1, puSrc2);
     18309IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vcomiss_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT32U uSrc1, RTFLOAT32U uSrc2))
     18310{
     18311    return iemAImpl_comiss_u128(uMxCsrIn, pfEFlags, uSrc1, uSrc2);
    1831218312}
    1831318313
     
    1831718317 */
    1831818318#ifdef IEM_WITHOUT_ASSEMBLY
    18319 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_comisd_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
     18319IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_comisd_u128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT64U uSrc1, RTFLOAT64U uSrc2))
    1832018320{
    1832118321    uint32_t fEFlagsNew = *pfEFlags & ~X86_EFL_STATUS_BITS;
    1832218322
    18323     if (   RTFLOAT64U_IS_SIGNALLING_NAN(&puSrc1->ar64[0]) || RTFLOAT64U_IS_SIGNALLING_NAN(&puSrc2->ar64[0])
    18324         || RTFLOAT64U_IS_QUIET_NAN(&puSrc1->ar64[0]) || RTFLOAT64U_IS_QUIET_NAN(&puSrc2->ar64[0]))
     18323    if (   RTFLOAT64U_IS_SIGNALLING_NAN(&uSrc1) || RTFLOAT64U_IS_SIGNALLING_NAN(&uSrc2)
     18324        || RTFLOAT64U_IS_QUIET_NAN(&uSrc1) || RTFLOAT64U_IS_QUIET_NAN(&uSrc2))
    1832518325    {
    1832618326        uMxCsrIn   |= X86_MXCSR_IE;
     
    1833218332
    1833318333        RTFLOAT64U r64Src1, r64Src2;
    18334         uint32_t fDe  = iemSsePrepareValueR64(&r64Src1, uMxCsrIn, &puSrc1->ar64[0]);
    18335                  fDe |= iemSsePrepareValueR64(&r64Src2, uMxCsrIn, &puSrc2->ar64[0]);
     18334        uint32_t fDe  = iemSsePrepareValueR64(&r64Src1, uMxCsrIn, &uSrc1);
     18335                 fDe |= iemSsePrepareValueR64(&r64Src2, uMxCsrIn, &uSrc2);
    1833618336
    1833718337        float64_t f64Src1 = iemFpSoftF64FromIprt(&r64Src1);
     
    1835118351#endif
    1835218352
    18353 IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vcomisd_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
    18354 {
    18355     return iemAImpl_comisd_u128(uMxCsrIn, pfEFlags, puSrc1, puSrc2);
     18353IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vcomisd_u128_fallback,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT64U uSrc1, RTFLOAT64U uSrc2))
     18354{
     18355    return iemAImpl_comisd_u128(uMxCsrIn, pfEFlags, uSrc1, uSrc2);
    1835618356}
    1835718357
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py

    r104143 r104150  
    30913091    'IEM_MC_FETCH_MEM_XMM_ALIGN_SSE':                            (McBlock.parseMcGeneric,           True,  True,  g_fNativeSimd),
    30923092    'IEM_MC_FETCH_MEM_XMM_NO_AC':                                (McBlock.parseMcGeneric,           True,  True,  False, ),
    3093     'IEM_MC_FETCH_MEM_XMM_U32':                                  (McBlock.parseMcGeneric,           True,  True,  False, ),
    3094     'IEM_MC_FETCH_MEM_XMM_U64':                                  (McBlock.parseMcGeneric,           True,  True,  False, ),
    30953093    'IEM_MC_FETCH_MEM_XMM_ALIGN_SSE_AND_XREG_XMM':               (McBlock.parseMcGeneric,           True,  True,  False, ),
    30963094    'IEM_MC_FETCH_MEM_XMM_U32_AND_XREG_XMM':                     (McBlock.parseMcGeneric,           True,  True,  False, ),
     
    31103108    'IEM_MC_FETCH_SREG_ZX_U32':                                  (McBlock.parseMcGeneric,           False, False, True,  ),
    31113109    'IEM_MC_FETCH_SREG_ZX_U64':                                  (McBlock.parseMcGeneric,           False, False, True,  ),
     3110    'IEM_MC_FETCH_XREG_R32':                                     (McBlock.parseMcGeneric,           False, False, g_fNativeSimd),
     3111    'IEM_MC_FETCH_XREG_R64':                                     (McBlock.parseMcGeneric,           False, False, g_fNativeSimd),
    31123112    'IEM_MC_FETCH_XREG_U128':                                    (McBlock.parseMcGeneric,           False, False, g_fNativeSimd),
    31133113    'IEM_MC_FETCH_XREG_U16':                                     (McBlock.parseMcGeneric,           False, False, g_fNativeSimd),
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h

    r104129 r104150  
    46544654        IEM_MC_LOCAL(uint32_t, fEFlags);
    46554655        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    4656         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    4657         IEM_MC_ARG(PCX86XMMREG,                 puSrc2,             2);
     4656        IEM_MC_ARG(RTFLOAT32U,                  uSrc1,              1);
     4657        IEM_MC_ARG(RTFLOAT32U,                  uSrc2,              2);
    46584658        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    46594659        IEM_MC_PREPARE_SSE_USAGE();
    46604660        IEM_MC_FETCH_EFLAGS(fEFlags);
    4661         IEM_MC_REF_XREG_XMM_CONST(puSrc1,      IEM_GET_MODRM_REG(pVCpu, bRm));
    4662         IEM_MC_REF_XREG_XMM_CONST(puSrc2,      IEM_GET_MODRM_RM(pVCpu, bRm));
    4663         IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomiss_u128, pEFlags, puSrc1, puSrc2);
     4661        IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/);
     4662        IEM_MC_FETCH_XREG_R32(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm), 0 /*a_iDWord*/);
     4663        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomiss_u128, pEFlags, uSrc1, uSrc2);
    46644664        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    46654665            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    46794679        IEM_MC_LOCAL(uint32_t, fEFlags);
    46804680        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    4681         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    4682         IEM_MC_LOCAL(X86XMMREG,                 uSrc2);
    4683         IEM_MC_ARG_LOCAL_REF(PCX86XMMREG,       puSrc2, uSrc2,      2);
     4681        IEM_MC_ARG(RTFLOAT32U,                  uSrc1,              1);
     4682        IEM_MC_ARG(RTFLOAT32U,                  uSrc2,              2);
    46844683        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    46854684
     
    46874686        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    46884687        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    4689         IEM_MC_FETCH_MEM_XMM_U32(uSrc2, 0 /*a_DWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     4688        IEM_MC_FETCH_MEM_R32(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    46904689
    46914690        IEM_MC_PREPARE_SSE_USAGE();
    46924691        IEM_MC_FETCH_EFLAGS(fEFlags);
    4693         IEM_MC_REF_XREG_XMM_CONST(puSrc1,       IEM_GET_MODRM_REG(pVCpu, bRm));
    4694         IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomiss_u128, pEFlags, puSrc1, puSrc2);
     4692        IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/);
     4693        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomiss_u128, pEFlags, uSrc1, uSrc2);
    46954694        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    46964695            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    47244723        IEM_MC_LOCAL(uint32_t, fEFlags);
    47254724        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    4726         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    4727         IEM_MC_ARG(PCX86XMMREG,                 puSrc2,             2);
     4725        IEM_MC_ARG(RTFLOAT64U,                  uSrc1,             1);
     4726        IEM_MC_ARG(RTFLOAT64U,                  uSrc2,              2);
    47284727        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    47294728        IEM_MC_PREPARE_SSE_USAGE();
    47304729        IEM_MC_FETCH_EFLAGS(fEFlags);
    4731         IEM_MC_REF_XREG_XMM_CONST(puSrc1,      IEM_GET_MODRM_REG(pVCpu, bRm));
    4732         IEM_MC_REF_XREG_XMM_CONST(puSrc2,      IEM_GET_MODRM_RM(pVCpu, bRm));
    4733         IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomisd_u128, pEFlags, puSrc1, puSrc2);
     4730        IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/);
     4731        IEM_MC_FETCH_XREG_R64(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm),  0 /*a_iQWord*/);
     4732        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomisd_u128, pEFlags, uSrc1, uSrc2);
    47344733        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    47354734            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    47494748        IEM_MC_LOCAL(uint32_t, fEFlags);
    47504749        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    4751         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    4752         IEM_MC_LOCAL(X86XMMREG,                 uSrc2);
    4753         IEM_MC_ARG_LOCAL_REF(PCX86XMMREG,       puSrc2, uSrc2,      2);
     4750        IEM_MC_ARG(RTFLOAT64U,                  uSrc1,              1);
     4751        IEM_MC_ARG(RTFLOAT64U,                  uSrc2,              2);
    47544752        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    47554753
     
    47574755        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    47584756        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    4759         IEM_MC_FETCH_MEM_XMM_U64(uSrc2, 0 /*a_QWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     4757        IEM_MC_FETCH_MEM_R64(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    47604758
    47614759        IEM_MC_PREPARE_SSE_USAGE();
    47624760        IEM_MC_FETCH_EFLAGS(fEFlags);
    4763         IEM_MC_REF_XREG_XMM_CONST(puSrc1,       IEM_GET_MODRM_REG(pVCpu, bRm));
    4764         IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomisd_u128, pEFlags, puSrc1, puSrc2);
     4761        IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/);
     4762        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_ucomisd_u128, pEFlags, uSrc1, uSrc2);
    47654763        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    47664764            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    47984796        IEM_MC_LOCAL(uint32_t, fEFlags);
    47994797        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    4800         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    4801         IEM_MC_ARG(PCX86XMMREG,                 puSrc2,             2);
     4798        IEM_MC_ARG(RTFLOAT32U,                  uSrc1,              1);
     4799        IEM_MC_ARG(RTFLOAT32U,                  uSrc2,              2);
    48024800        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    48034801        IEM_MC_PREPARE_SSE_USAGE();
    48044802        IEM_MC_FETCH_EFLAGS(fEFlags);
    4805         IEM_MC_REF_XREG_XMM_CONST(puSrc1,      IEM_GET_MODRM_REG(pVCpu, bRm));
    4806         IEM_MC_REF_XREG_XMM_CONST(puSrc2,      IEM_GET_MODRM_RM(pVCpu, bRm));
    4807         IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comiss_u128, pEFlags, puSrc1, puSrc2);
     4803        IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/);
     4804        IEM_MC_FETCH_XREG_R32(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm),  0 /*a_iDWord*/);
     4805        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comiss_u128, pEFlags, uSrc1, uSrc2);
    48084806        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    48094807            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    48234821        IEM_MC_LOCAL(uint32_t, fEFlags);
    48244822        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    4825         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    4826         IEM_MC_LOCAL(X86XMMREG,                 uSrc2);
    4827         IEM_MC_ARG_LOCAL_REF(PCX86XMMREG,       puSrc2, uSrc2,      2);
     4823        IEM_MC_ARG(RTFLOAT32U,                  uSrc1,              1);
     4824        IEM_MC_ARG(RTFLOAT32U,                  uSrc2,              2);
    48284825        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    48294826
     
    48314828        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse);
    48324829        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    4833         IEM_MC_FETCH_MEM_XMM_U32(uSrc2, 0 /*a_DWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     4830        IEM_MC_FETCH_MEM_R32(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    48344831
    48354832        IEM_MC_PREPARE_SSE_USAGE();
    48364833        IEM_MC_FETCH_EFLAGS(fEFlags);
    4837         IEM_MC_REF_XREG_XMM_CONST(puSrc1,       IEM_GET_MODRM_REG(pVCpu, bRm));
    4838         IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comiss_u128, pEFlags, puSrc1, puSrc2);
     4834        IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/);
     4835        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comiss_u128, pEFlags, uSrc1, uSrc2);
    48394836        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    48404837            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    48684865        IEM_MC_LOCAL(uint32_t, fEFlags);
    48694866        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    4870         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    4871         IEM_MC_ARG(PCX86XMMREG,                 puSrc2,             2);
     4867        IEM_MC_ARG(RTFLOAT64U,                  uSrc1,              1);
     4868        IEM_MC_ARG(RTFLOAT64U,                  uSrc2,              2);
    48724869        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    48734870        IEM_MC_PREPARE_SSE_USAGE();
    48744871        IEM_MC_FETCH_EFLAGS(fEFlags);
    4875         IEM_MC_REF_XREG_XMM_CONST(puSrc1,      IEM_GET_MODRM_REG(pVCpu, bRm));
    4876         IEM_MC_REF_XREG_XMM_CONST(puSrc2,      IEM_GET_MODRM_RM(pVCpu, bRm));
    4877         IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comisd_u128, pEFlags, puSrc1, puSrc2);
     4872        IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/);
     4873        IEM_MC_FETCH_XREG_R64(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm),  0 /*a_iQWord*/);
     4874        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comisd_u128, pEFlags, uSrc1, uSrc2);
    48784875        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    48794876            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    48934890        IEM_MC_LOCAL(uint32_t, fEFlags);
    48944891        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    4895         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    4896         IEM_MC_LOCAL(X86XMMREG,                 uSrc2);
    4897         IEM_MC_ARG_LOCAL_REF(PCX86XMMREG,       puSrc2, uSrc2,      2);
     4892        IEM_MC_ARG(RTFLOAT64U,                  uSrc1,              1);
     4893        IEM_MC_ARG(RTFLOAT64U,                  uSrc2,              2);
    48984894        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    48994895
     
    49014897        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse2);
    49024898        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
    4903         IEM_MC_FETCH_MEM_XMM_U64(uSrc2, 0 /*a_QWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     4899        IEM_MC_FETCH_MEM_R64(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    49044900
    49054901        IEM_MC_PREPARE_SSE_USAGE();
    49064902        IEM_MC_FETCH_EFLAGS(fEFlags);
    4907         IEM_MC_REF_XREG_XMM_CONST(puSrc1,       IEM_GET_MODRM_REG(pVCpu, bRm));
    4908         IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comisd_u128, pEFlags, puSrc1, puSrc2);
     4903        IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/);
     4904        IEM_MC_CALL_SSE_AIMPL_3(iemAImpl_comisd_u128, pEFlags, uSrc1, uSrc2);
    49094905        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    49104906            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h

    r104135 r104150  
    23362336        IEM_MC_LOCAL(uint32_t, fEFlags);
    23372337        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    2338         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    2339         IEM_MC_ARG(PCX86XMMREG,                 puSrc2,             2);
     2338        IEM_MC_ARG(RTFLOAT32U,                  uSrc1,              1);
     2339        IEM_MC_ARG(RTFLOAT32U,                  uSrc2,              2);
    23402340        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    23412341        IEM_MC_PREPARE_AVX_USAGE();
    23422342        IEM_MC_FETCH_EFLAGS(fEFlags);
    2343         IEM_MC_REF_XREG_XMM_CONST(puSrc1,      IEM_GET_MODRM_REG(pVCpu, bRm));
    2344         IEM_MC_REF_XREG_XMM_CONST(puSrc2,      IEM_GET_MODRM_RM(pVCpu, bRm));
     2343        IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/);
     2344        IEM_MC_FETCH_XREG_R32(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm),  0 /*a_iDWord*/);
    23452345        IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vucomiss_u128, iemAImpl_vucomiss_u128_fallback),
    2346                                 pEFlags, puSrc1, puSrc2);
     2346                                pEFlags, uSrc1, uSrc2);
    23472347        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    23482348            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    23622362        IEM_MC_LOCAL(uint32_t, fEFlags);
    23632363        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    2364         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    2365         IEM_MC_LOCAL(X86XMMREG,                 uSrc2);
    2366         IEM_MC_ARG_LOCAL_REF(PCX86XMMREG,       puSrc2, uSrc2,      2);
     2364        IEM_MC_ARG(RTFLOAT32U,                  uSrc1,              1);
     2365        IEM_MC_ARG(RTFLOAT32U,                  uSrc2,              2);
    23672366        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    23682367
     
    23702369        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx);
    23712370        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    2372         IEM_MC_FETCH_MEM_XMM_U32(uSrc2, 0 /*a_DWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     2371        IEM_MC_FETCH_MEM_R32(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    23732372
    23742373        IEM_MC_PREPARE_AVX_USAGE();
    23752374        IEM_MC_FETCH_EFLAGS(fEFlags);
    2376         IEM_MC_REF_XREG_XMM_CONST(puSrc1,       IEM_GET_MODRM_REG(pVCpu, bRm));
     2375        IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/);
    23772376        IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vucomiss_u128, iemAImpl_vucomiss_u128_fallback),
    2378                                 pEFlags, puSrc1, puSrc2);
     2377                                pEFlags, uSrc1, uSrc2);
    23792378        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    23802379            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    24082407        IEM_MC_LOCAL(uint32_t, fEFlags);
    24092408        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    2410         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    2411         IEM_MC_ARG(PCX86XMMREG,                 puSrc2,             2);
     2409        IEM_MC_ARG(RTFLOAT64U,                  uSrc1,              1);
     2410        IEM_MC_ARG(RTFLOAT64U,                  uSrc2,              2);
    24122411        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    24132412        IEM_MC_PREPARE_AVX_USAGE();
    24142413        IEM_MC_FETCH_EFLAGS(fEFlags);
    2415         IEM_MC_REF_XREG_XMM_CONST(puSrc1,      IEM_GET_MODRM_REG(pVCpu, bRm));
    2416         IEM_MC_REF_XREG_XMM_CONST(puSrc2,      IEM_GET_MODRM_RM(pVCpu, bRm));
     2414        IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/);
     2415        IEM_MC_FETCH_XREG_R64(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm),  0 /*a_iQWord*/);
    24172416        IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vucomisd_u128, iemAImpl_vucomisd_u128_fallback),
    2418                                 pEFlags, puSrc1, puSrc2);
     2417                                pEFlags, uSrc1, uSrc2);
    24192418        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    24202419            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    24342433        IEM_MC_LOCAL(uint32_t, fEFlags);
    24352434        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    2436         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    2437         IEM_MC_LOCAL(X86XMMREG,                 uSrc2);
    2438         IEM_MC_ARG_LOCAL_REF(PCX86XMMREG,       puSrc2, uSrc2,      2);
     2435        IEM_MC_ARG(RTFLOAT64U,                  uSrc1,              1);
     2436        IEM_MC_ARG(RTFLOAT64U,                  uSrc2,              2);
    24392437        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    24402438
     
    24422440        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx);
    24432441        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    2444         IEM_MC_FETCH_MEM_XMM_U32(uSrc2, 0 /*a_DWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     2442        IEM_MC_FETCH_MEM_R64(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    24452443
    24462444        IEM_MC_PREPARE_AVX_USAGE();
    24472445        IEM_MC_FETCH_EFLAGS(fEFlags);
    2448         IEM_MC_REF_XREG_XMM_CONST(puSrc1,       IEM_GET_MODRM_REG(pVCpu, bRm));
     2446        IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/);
    24492447        IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vucomisd_u128, iemAImpl_vucomisd_u128_fallback),
    2450                                 pEFlags, puSrc1, puSrc2);
     2448                                pEFlags, uSrc1, uSrc2);
    24512449        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    24522450            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    24832481        IEM_MC_LOCAL(uint32_t, fEFlags);
    24842482        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    2485         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    2486         IEM_MC_ARG(PCX86XMMREG,                 puSrc2,             2);
     2483        IEM_MC_ARG(RTFLOAT32U,                  uSrc1,              1);
     2484        IEM_MC_ARG(RTFLOAT32U,                  uSrc2,              2);
    24872485        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    24882486        IEM_MC_PREPARE_AVX_USAGE();
    24892487        IEM_MC_FETCH_EFLAGS(fEFlags);
    2490         IEM_MC_REF_XREG_XMM_CONST(puSrc1,      IEM_GET_MODRM_REG(pVCpu, bRm));
    2491         IEM_MC_REF_XREG_XMM_CONST(puSrc2,      IEM_GET_MODRM_RM(pVCpu, bRm));
     2488        IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/);
     2489        IEM_MC_FETCH_XREG_R32(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm),  0 /*a_iDWord*/);
    24922490        IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vcomiss_u128, iemAImpl_vcomiss_u128_fallback),
    2493                                 pEFlags, puSrc1, puSrc2);
     2491                                pEFlags, uSrc1, uSrc2);
    24942492        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    24952493            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    25092507        IEM_MC_LOCAL(uint32_t, fEFlags);
    25102508        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    2511         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    2512         IEM_MC_LOCAL(X86XMMREG,                 uSrc2);
    2513         IEM_MC_ARG_LOCAL_REF(PCX86XMMREG,       puSrc2, uSrc2,      2);
     2509        IEM_MC_ARG(RTFLOAT32U,                  uSrc1,              1);
     2510        IEM_MC_ARG(RTFLOAT32U,                  uSrc2,              2);
    25142511        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    25152512
     
    25172514        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx);
    25182515        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    2519         IEM_MC_FETCH_MEM_XMM_U32(uSrc2, 0 /*a_DWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     2516        IEM_MC_FETCH_MEM_R32(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    25202517
    25212518        IEM_MC_PREPARE_AVX_USAGE();
    25222519        IEM_MC_FETCH_EFLAGS(fEFlags);
    2523         IEM_MC_REF_XREG_XMM_CONST(puSrc1,       IEM_GET_MODRM_REG(pVCpu, bRm));
     2520        IEM_MC_FETCH_XREG_R32(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iDWord*/);
    25242521        IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vcomiss_u128, iemAImpl_vcomiss_u128_fallback),
    2525                                 pEFlags, puSrc1, puSrc2);
     2522                                pEFlags, uSrc1, uSrc2);
    25262523        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    25272524            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    25552552        IEM_MC_LOCAL(uint32_t, fEFlags);
    25562553        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    2557         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    2558         IEM_MC_ARG(PCX86XMMREG,                 puSrc2,             2);
     2554        IEM_MC_ARG(RTFLOAT64U,                  uSrc1,              1);
     2555        IEM_MC_ARG(RTFLOAT64U,                  uSrc2,              2);
    25592556        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    25602557        IEM_MC_PREPARE_AVX_USAGE();
    25612558        IEM_MC_FETCH_EFLAGS(fEFlags);
    2562         IEM_MC_REF_XREG_XMM_CONST(puSrc1,      IEM_GET_MODRM_REG(pVCpu, bRm));
    2563         IEM_MC_REF_XREG_XMM_CONST(puSrc2,      IEM_GET_MODRM_RM(pVCpu, bRm));
     2559        IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/);
     2560        IEM_MC_FETCH_XREG_R64(uSrc2, IEM_GET_MODRM_RM(pVCpu, bRm),  0 /*a_iQWord*/);
    25642561        IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vcomisd_u128, iemAImpl_vcomisd_u128_fallback),
    2565                                 pEFlags, puSrc1, puSrc2);
     2562                                pEFlags, uSrc1, uSrc2);
    25662563        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    25672564            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
     
    25812578        IEM_MC_LOCAL(uint32_t, fEFlags);
    25822579        IEM_MC_ARG_LOCAL_REF(uint32_t *,        pEFlags, fEFlags,   0);
    2583         IEM_MC_ARG(PCX86XMMREG,                 puSrc1,             1);
    2584         IEM_MC_LOCAL(X86XMMREG,                 uSrc2);
    2585         IEM_MC_ARG_LOCAL_REF(PCX86XMMREG,       puSrc2, uSrc2,      2);
     2580        IEM_MC_ARG(RTFLOAT64U,                  uSrc1,              1);
     2581        IEM_MC_ARG(RTFLOAT64U,                  uSrc2,              2);
    25862582        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    25872583
     
    25892585        IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx);
    25902586        IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
    2591         IEM_MC_FETCH_MEM_XMM_U32(uSrc2, 0 /*a_DWord*/, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
     2587        IEM_MC_FETCH_MEM_R64(uSrc2, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);
    25922588
    25932589        IEM_MC_PREPARE_AVX_USAGE();
    25942590        IEM_MC_FETCH_EFLAGS(fEFlags);
    2595         IEM_MC_REF_XREG_XMM_CONST(puSrc1,       IEM_GET_MODRM_REG(pVCpu, bRm));
     2591        IEM_MC_FETCH_XREG_R64(uSrc1, IEM_GET_MODRM_REG(pVCpu, bRm), 0 /*a_iQWord*/);
    25962592        IEM_MC_CALL_AVX_AIMPL_3(IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vcomisd_u128, iemAImpl_vcomisd_u128_fallback),
    2597                                 pEFlags, puSrc1, puSrc2);
     2593                                pEFlags, uSrc1, uSrc2);
    25982594        IEM_MC_IF_MXCSR_XCPT_PENDING() {
    25992595            IEM_MC_RAISE_SSE_AVX_SIMD_FP_OR_UD_XCPT();
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veLiveness.cpp

    r104135 r104150  
    681681#define IEM_MC_FETCH_XREG_XMM(a_XmmValue, a_iXReg)                  NOP()
    682682#define IEM_MC_FETCH_XREG_U64(a_u64Value, a_iXReg, a_iQWord)        NOP()
     683#define IEM_MC_FETCH_XREG_R64(a_r64Value, a_iXReg, a_iQWord)        NOP()
    683684#define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg, a_iDWord)        NOP()
     685#define IEM_MC_FETCH_XREG_R32(a_r32Value, a_iXReg, a_iDWord)        NOP()
    684686#define IEM_MC_FETCH_XREG_U16(a_u16Value, a_iXReg, a_iWord)         NOP()
    685687#define IEM_MC_FETCH_XREG_U8( a_u8Value,  a_iXReg, a_iByte)         NOP()
     
    810812#define IEM_MC_FETCH_MEM_XMM_NO_AC(a_XmmDst, a_iSeg, a_GCPtrMem)                                IEM_LIVENESS_MEM(a_iSeg)
    811813#define IEM_MC_FETCH_MEM_XMM_ALIGN_SSE(a_XmmDst, a_iSeg, a_GCPtrMem)                            IEM_LIVENESS_MEM(a_iSeg)
    812 #define IEM_MC_FETCH_MEM_XMM_U32(a_XmmDst, a_iDWord, a_iSeg, a_GCPtrMem)                        IEM_LIVENESS_MEM(a_iSeg)
    813 #define IEM_MC_FETCH_MEM_XMM_U64(a_XmmDst, a_iQWord, a_iSeg, a_GCPtrMem)                        IEM_LIVENESS_MEM(a_iSeg)
    814814
    815815#define IEM_MC_FETCH_MEM_FLAT_U128(a_u128Dst, a_GCPtrMem)                                       IEM_LIVENESS_MEM_FLAT()
     
    820820#define IEM_MC_FETCH_MEM_FLAT_XMM_NO_AC(a_XmmDst, a_GCPtrMem)                                   IEM_LIVENESS_MEM_FLAT()
    821821#define IEM_MC_FETCH_MEM_FLAT_XMM_ALIGN_SSE(a_XmmDst, a_GCPtrMem)                               IEM_LIVENESS_MEM_FLAT()
    822 #define IEM_MC_FETCH_MEM_FLAT_XMM_U32(a_XmmDst, a_iDWord, a_GCPtrMem)                           IEM_LIVENESS_MEM_FLAT()
    823 #define IEM_MC_FETCH_MEM_FLAT_XMM_U64(a_XmmDst, a_iQWord, a_GCPtrMem)                           IEM_LIVENESS_MEM_FLAT()
    824822
    825823#define IEM_MC_FETCH_MEM_U128_AND_XREG_U128(a_Dst, a_iXReg1, a_iSeg2, a_GCPtrMem2)              IEM_LIVENESS_MEM(a_iSeg)
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8vePython.py

    r104143 r104150  
    164164    'IEM_MC_FETCH_MEM_FLAT_U8_ZX_U64':                                   (None, True,  True,  True,  ),
    165165    'IEM_MC_FETCH_MEM_FLAT_XMM_ALIGN_SSE':                               (None, True,  True,  g_fNativeSimd),
    166     'IEM_MC_FETCH_MEM_FLAT_XMM_U32':                                     (None, True,  True,  False, ),
    167     'IEM_MC_FETCH_MEM_FLAT_XMM_U64':                                     (None, True,  True,  False, ),
    168166    'IEM_MC_FETCH_MEM_FLAT_U128_AND_XREG_U128':                          (None, True,  True,  False, ),
    169167    'IEM_MC_FETCH_MEM_FLAT_XMM_ALIGN_SSE_AND_XREG_XMM':                  (None, True,  True,  False, ),
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h

    r104143 r104150  
    77647764    off = iemNativeEmitSimdFetchXregU64(pReNative, off, a_u64Value, a_iXReg, a_iQWord)
    77657765
     7766#define IEM_MC_FETCH_XREG_R64(a_r64Value, a_iXReg, a_iQWord) \
     7767    off = iemNativeEmitSimdFetchXregU64(pReNative, off, a_r64Value, a_iXReg, a_iQWord)
     7768
    77667769/** Emits code for IEM_MC_FETCH_XREG_U64. */
    77677770DECL_INLINE_THROW(uint32_t)
     
    77877790
    77887791
    7789 #define IEM_MC_FETCH_XREG_U32(a_u64Value, a_iXReg, a_iDWord) \
    7790     off = iemNativeEmitSimdFetchXregU32(pReNative, off, a_u64Value, a_iXReg, a_iDWord)
    7791 
    7792 /** Emits code for IEM_MC_FETCH_XREG_U32. */
     7792#define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg, a_iDWord) \
     7793    off = iemNativeEmitSimdFetchXregU32(pReNative, off, a_u32Value, a_iXReg, a_iDWord)
     7794
     7795#define IEM_MC_FETCH_XREG_R32(a_r32Value, a_iXReg, a_iDWord) \
     7796    off = iemNativeEmitSimdFetchXregU32(pReNative, off, a_r32Value, a_iXReg, a_iDWord)
     7797
     7798/** Emits code for IEM_MC_FETCH_XREG_U32/IEM_MC_FETCH_XREG_R32. */
    77937799DECL_INLINE_THROW(uint32_t)
    77947800iemNativeEmitSimdFetchXregU32(PIEMRECOMPILERSTATE pReNative, uint32_t off, uint8_t idxDstVar, uint8_t iXReg, uint8_t iDWord)
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r104147 r104150  
    38823882
    38833883
    3884 typedef IEM_DECL_IMPL_TYPE(uint32_t, FNIEMAIMPLF2EFLMXCSR128,(uint32_t uMxCsrIn, uint32_t *pfEFlags, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2));
    3885 typedef FNIEMAIMPLF2EFLMXCSR128 *PFNIEMAIMPLF2EFLMXCSR128;
    3886 
    3887 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_ucomiss_u128;
    3888 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_vucomiss_u128, iemAImpl_vucomiss_u128_fallback;
    3889 
    3890 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_ucomisd_u128;
    3891 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_vucomisd_u128, iemAImpl_vucomisd_u128_fallback;
    3892 
    3893 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_comiss_u128;
    3894 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_vcomiss_u128, iemAImpl_vcomiss_u128_fallback;
    3895 
    3896 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_comisd_u128;
    3897 FNIEMAIMPLF2EFLMXCSR128 iemAImpl_vcomisd_u128, iemAImpl_vcomisd_u128_fallback;
     3884typedef IEM_DECL_IMPL_TYPE(uint32_t, FNIEMAIMPLF2EFLMXCSRR32R32,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT32U uSrc1, RTFLOAT32U uSrc2));
     3885typedef FNIEMAIMPLF2EFLMXCSRR32R32 *PFNIEMAIMPLF2EFLMXCSRR32R32;
     3886
     3887typedef IEM_DECL_IMPL_TYPE(uint32_t, FNIEMAIMPLF2EFLMXCSRR64R64,(uint32_t uMxCsrIn, uint32_t *pfEFlags, RTFLOAT64U uSrc1, RTFLOAT64U uSrc2));
     3888typedef FNIEMAIMPLF2EFLMXCSRR64R64 *PFNIEMAIMPLF2EFLMXCSRR64R64;
     3889
     3890FNIEMAIMPLF2EFLMXCSRR32R32 iemAImpl_ucomiss_u128;
     3891FNIEMAIMPLF2EFLMXCSRR32R32 iemAImpl_vucomiss_u128, iemAImpl_vucomiss_u128_fallback;
     3892
     3893FNIEMAIMPLF2EFLMXCSRR64R64 iemAImpl_ucomisd_u128;
     3894FNIEMAIMPLF2EFLMXCSRR64R64 iemAImpl_vucomisd_u128, iemAImpl_vucomisd_u128_fallback;
     3895
     3896FNIEMAIMPLF2EFLMXCSRR32R32 iemAImpl_comiss_u128;
     3897FNIEMAIMPLF2EFLMXCSRR32R32 iemAImpl_vcomiss_u128, iemAImpl_vcomiss_u128_fallback;
     3898
     3899FNIEMAIMPLF2EFLMXCSRR64R64 iemAImpl_comisd_u128;
     3900FNIEMAIMPLF2EFLMXCSRR64R64 iemAImpl_vcomisd_u128, iemAImpl_vcomisd_u128_fallback;
    38983901
    38993902
  • trunk/src/VBox/VMM/include/IEMMc.h

    r104135 r104150  
    487487#define IEM_MC_FETCH_XREG_U64(a_u64Value, a_iXReg, a_iQWord) \
    488488    do { (a_u64Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au64[(a_iQWord)]; } while (0)
     489#define IEM_MC_FETCH_XREG_R64(a_r64Value, a_iXReg, a_iQWord) \
     490    do { (a_r64Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].ar64[(a_iQWord)]; } while (0)
    489491#define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg, a_iDWord) \
    490492    do { (a_u32Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au32[(a_iDWord)]; } while (0)
     493#define IEM_MC_FETCH_XREG_R32(a_r32Value, a_iXReg, a_iDWord) \
     494    do { (a_r32Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].ar32[(a_iDWord)]; } while (0)
    491495#define IEM_MC_FETCH_XREG_U16(a_u16Value, a_iXReg, a_iWord) \
    492496    do { (a_u16Value) = pVCpu->cpum.GstCtx.XState.x87.aXMM[(a_iXReg)].au16[(a_iWord)]; } while (0)
     
    10531057# define IEM_MC_FETCH_MEM_XMM_ALIGN_SSE(a_XmmDst, a_iSeg, a_GCPtrMem) \
    10541058    IEM_MC_RETURN_ON_FAILURE(iemMemFetchDataU128AlignedSse(pVCpu, &(a_XmmDst).uXmm, (a_iSeg), (a_GCPtrMem)))
    1055 # define IEM_MC_FETCH_MEM_XMM_U32(a_XmmDst, a_iDWord, a_iSeg, a_GCPtrMem) \
    1056     IEM_MC_RETURN_ON_FAILURE(iemMemFetchDataU32(pVCpu, &(a_XmmDst).au32[(a_iDWord)], (a_iSeg), (a_GCPtrMem)))
    1057 # define IEM_MC_FETCH_MEM_XMM_U64(a_XmmDst, a_iQWord, a_iSeg, a_GCPtrMem) \
    1058     IEM_MC_RETURN_ON_FAILURE(iemMemFetchDataU64(pVCpu, &(a_XmmDst).au64[(a_iQWord)], (a_iSeg), (a_GCPtrMem)))
    10591059
    10601060# define IEM_MC_FETCH_MEM_U128_NO_AC_AND_XREG_U128(a_u128Dst, a_iXReg1, a_iSeg2, a_GCPtrMem2) do { \
     
    11141114# define IEM_MC_FETCH_MEM_XMM_ALIGN_SSE(a_XmmDst, a_iSeg, a_GCPtrMem) \
    11151115    iemMemFetchDataU128AlignedSseJmp(pVCpu, &(a_XmmDst).uXmm, (a_iSeg), (a_GCPtrMem))
    1116 # define IEM_MC_FETCH_MEM_XMM_U32(a_XmmDst, a_iDWord, a_iSeg, a_GCPtrMem) \
    1117     (a_XmmDst).au32[(a_iDWord)] = iemMemFetchDataU32Jmp(pVCpu, (a_iSeg), (a_GCPtrMem))
    1118 # define IEM_MC_FETCH_MEM_XMM_U64(a_XmmDst, a_iQWord, a_iSeg, a_GCPtrMem) \
    1119     (a_XmmDst).au64[(a_iQWord)] = iemMemFetchDataU64Jmp(pVCpu, (a_iSeg), (a_GCPtrMem))
    11201116
    11211117# define IEM_MC_FETCH_MEM_FLAT_U128(a_u128Dst, a_GCPtrMem) \
     
    11321128# define IEM_MC_FETCH_MEM_FLAT_XMM_ALIGN_SSE(a_XmmDst, a_GCPtrMem) \
    11331129    iemMemFlatFetchDataU128AlignedSseJmp(pVCpu, &(a_XmmDst).uXmm, (a_GCPtrMem))
    1134 # define IEM_MC_FETCH_MEM_FLAT_XMM_U32(a_XmmDst, a_iDWord, a_GCPtrMem) \
    1135     (a_XmmDst).au32[(a_iDWord)] = iemMemFlatFetchDataU32Jmp(pVCpu, (a_GCPtrMem))
    1136 # define IEM_MC_FETCH_MEM_FLAT_XMM_U64(a_XmmDst, a_iQWord, a_GCPtrMem) \
    1137     (a_XmmDst).au64[(a_iQWord)] = iemMemFlatFetchDataU64Jmp(pVCpu, (a_GCPtrMem))
    11381130
    11391131# define IEM_MC_FETCH_MEM_U128_AND_XREG_U128(a_Dst, a_iXReg1, a_iSeg2, a_GCPtrMem2) do { \
  • trunk/src/VBox/VMM/testcase/tstIEMAImpl.cpp

    r104129 r104150  
    74867486 * Compare SSE operations on single single-precision floating point values - outputting only EFLAGS.
    74877487 */
    7488 TYPEDEF_SUBTEST_TYPE(SSE_COMPARE_EFL_R32_R32_T, SSE_COMPARE_EFL_R32_R32_TEST_T, PFNIEMAIMPLF2EFLMXCSR128);
     7488TYPEDEF_SUBTEST_TYPE(SSE_COMPARE_EFL_R32_R32_T, SSE_COMPARE_EFL_R32_R32_TEST_T, PFNIEMAIMPLF2EFLMXCSRR32R32);
    74897489
    74907490static SSE_COMPARE_EFL_R32_R32_T g_aSseCompareEflR32R32[] =
     
    75187518    for (size_t iFn = 0; iFn < RT_ELEMENTS(g_aSseCompareEflR32R32); iFn++)
    75197519    {
    7520         PFNIEMAIMPLF2EFLMXCSR128 const pfn = g_aSseCompareEflR32R32[iFn].pfnNative ? g_aSseCompareEflR32R32[iFn].pfnNative : g_aSseCompareEflR32R32[iFn].pfn;
     7520        PFNIEMAIMPLF2EFLMXCSRR32R32 const pfn = g_aSseCompareEflR32R32[iFn].pfnNative ? g_aSseCompareEflR32R32[iFn].pfnNative : g_aSseCompareEflR32R32[iFn].pfn;
    75217521
    75227522        IEMBINARYOUTPUT BinOut;
     
    75277527        {
    75287528            SSE_COMPARE_EFL_R32_R32_TEST_T TestData; RT_ZERO(TestData);
    7529             X86XMMREG ValIn1; RT_ZERO(ValIn1);
    7530             X86XMMREG ValIn2; RT_ZERO(ValIn2);
    75317529
    75327530            TestData.r32ValIn1 = iTest < cTests ? RandR32Src(iTest) : s_aSpecials[iTest - cTests].Val1;
    75337531            TestData.r32ValIn2 = iTest < cTests ? RandR32Src(iTest) : s_aSpecials[iTest - cTests].Val2;
    7534 
    7535             ValIn1.ar32[0] = TestData.r32ValIn1;
    7536             ValIn2.ar32[0] = TestData.r32ValIn2;
    75377532
    75387533            if (   RTFLOAT32U_IS_NORMAL(&TestData.r32ValIn1)
     
    75587553                        uint32_t fMxcsrM  = fMxcsrIn;
    75597554                        uint32_t fEFlagsM = fEFlags;
    7560                         fMxcsrM = pfn(fMxcsrIn, &fEFlagsM, &ValIn1, &ValIn2);
     7555                        fMxcsrM = pfn(fMxcsrIn, &fEFlagsM, TestData.r32ValIn1, TestData.r32ValIn2);
    75617556                        TestData.fMxcsrIn   = fMxcsrIn;
    75627557                        TestData.fMxcsrOut  = fMxcsrM;
     
    75687563                        uint32_t fMxcsrU  = fMxcsrIn;
    75697564                        uint32_t fEFlagsU = fEFlags;
    7570                         fMxcsrU = pfn(fMxcsrIn, &fEFlagsU, &ValIn1, &ValIn2);
     7565                        fMxcsrU = pfn(fMxcsrIn, &fEFlagsU, TestData.r32ValIn1, TestData.r32ValIn2);
    75717566                        TestData.fMxcsrIn   = fMxcsrIn;
    75727567                        TestData.fMxcsrOut  = fMxcsrU;
     
    75817576                            uint32_t fMxcsr1  = fMxcsrIn;
    75827577                            uint32_t fEFlags1 = fEFlags;
    7583                             fMxcsr1 = pfn(fMxcsrIn, &fEFlags1, &ValIn1, &ValIn2);
     7578                            fMxcsr1 = pfn(fMxcsrIn, &fEFlags1, TestData.r32ValIn1, TestData.r32ValIn2);
    75847579                            TestData.fMxcsrIn   = fMxcsrIn;
    75857580                            TestData.fMxcsrOut  = fMxcsr1;
     
    75947589                                uint32_t fMxcsr2  = fMxcsrIn;
    75957590                                uint32_t fEFlags2 = fEFlags;
    7596                                 fMxcsr2 = pfn(fMxcsrIn, &fEFlags2, &ValIn1, &ValIn2);
     7591                                fMxcsr2 = pfn(fMxcsrIn, &fEFlags2, TestData.r32ValIn1, TestData.r32ValIn2);
    75977592                                TestData.fMxcsrIn   = fMxcsrIn;
    75987593                                TestData.fMxcsrOut  = fMxcsr2;
     
    76087603                                        uint32_t fMxcsr3  = fMxcsrIn;
    76097604                                        uint32_t fEFlags3 = fEFlags;
    7610                                         fMxcsr3 = pfn(fMxcsrIn, &fEFlags3, &ValIn1, &ValIn2);
     7605                                        fMxcsr3 = pfn(fMxcsrIn, &fEFlags3, TestData.r32ValIn1, TestData.r32ValIn2);
    76117606                                        TestData.fMxcsrIn   = fMxcsrIn;
    76127607                                        TestData.fMxcsrOut  = fMxcsr3;
     
    76347629        SSE_COMPARE_EFL_R32_R32_TEST_T const * const    paTests = g_aSseCompareEflR32R32[iFn].paTests;
    76357630        uint32_t const                                  cTests  = g_aSseCompareEflR32R32[iFn].cTests;
    7636         PFNIEMAIMPLF2EFLMXCSR128                        pfn     = g_aSseCompareEflR32R32[iFn].pfn;
     7631        PFNIEMAIMPLF2EFLMXCSRR32R32                     pfn     = g_aSseCompareEflR32R32[iFn].pfn;
    76377632        uint32_t const                                  cVars   = COUNT_VARIATIONS(g_aSseCompareEflR32R32[iFn]);
    76387633        if (!cTests) RTTestSkipped(g_hTest, "no tests");
     
    76417636            for (uint32_t iTest = 0; iTest < cTests; iTest++)
    76427637            {
    7643                 X86XMMREG ValIn1; RT_ZERO(ValIn1);
    7644                 X86XMMREG ValIn2; RT_ZERO(ValIn2);
    7645 
    7646                 ValIn1.ar32[0] = paTests[iTest].r32ValIn1;
    7647                 ValIn2.ar32[0] = paTests[iTest].r32ValIn2;
    76487638                uint32_t fEFlags = paTests[iTest].fEflIn;
    7649                 uint32_t fMxcsr = pfn(paTests[iTest].fMxcsrIn, &fEFlags, &ValIn1, &ValIn2);
     7639                uint32_t fMxcsr = pfn(paTests[iTest].fMxcsrIn, &fEFlags, paTests[iTest].r32ValIn1, paTests[iTest].r32ValIn2);
    76507640                if (   fMxcsr != paTests[iTest].fMxcsrOut
    76517641                    || fEFlags != paTests[iTest].fEflOut)
     
    76717661 * Compare SSE operations on single single-precision floating point values - outputting only EFLAGS.
    76727662 */
    7673 TYPEDEF_SUBTEST_TYPE(SSE_COMPARE_EFL_R64_R64_T, SSE_COMPARE_EFL_R64_R64_TEST_T, PFNIEMAIMPLF2EFLMXCSR128);
     7663TYPEDEF_SUBTEST_TYPE(SSE_COMPARE_EFL_R64_R64_T, SSE_COMPARE_EFL_R64_R64_TEST_T, PFNIEMAIMPLF2EFLMXCSRR64R64);
    76747664
    76757665static SSE_COMPARE_EFL_R64_R64_T g_aSseCompareEflR64R64[] =
     
    77037693    for (size_t iFn = 0; iFn < RT_ELEMENTS(g_aSseCompareEflR64R64); iFn++)
    77047694    {
    7705         PFNIEMAIMPLF2EFLMXCSR128 const pfn = g_aSseCompareEflR64R64[iFn].pfnNative ? g_aSseCompareEflR64R64[iFn].pfnNative : g_aSseCompareEflR64R64[iFn].pfn;
     7695        PFNIEMAIMPLF2EFLMXCSRR64R64 const pfn = g_aSseCompareEflR64R64[iFn].pfnNative ? g_aSseCompareEflR64R64[iFn].pfnNative : g_aSseCompareEflR64R64[iFn].pfn;
    77067696
    77077697        IEMBINARYOUTPUT BinOut;
     
    77127702        {
    77137703            SSE_COMPARE_EFL_R64_R64_TEST_T TestData; RT_ZERO(TestData);
    7714             X86XMMREG ValIn1; RT_ZERO(ValIn1);
    7715             X86XMMREG ValIn2; RT_ZERO(ValIn2);
    77167704
    77177705            TestData.r64ValIn1 = iTest < cTests ? RandR64Src(iTest) : s_aSpecials[iTest - cTests].Val1;
    77187706            TestData.r64ValIn2 = iTest < cTests ? RandR64Src(iTest) : s_aSpecials[iTest - cTests].Val2;
    7719 
    7720             ValIn1.ar64[0] = TestData.r64ValIn1;
    7721             ValIn2.ar64[0] = TestData.r64ValIn2;
    77227707
    77237708            if (   RTFLOAT64U_IS_NORMAL(&TestData.r64ValIn1)
     
    77437728                        uint32_t fMxcsrM  = fMxcsrIn;
    77447729                        uint32_t fEFlagsM = fEFlags;
    7745                         fMxcsrM = pfn(fMxcsrIn, &fEFlagsM, &ValIn1, &ValIn2);
     7730                        fMxcsrM = pfn(fMxcsrIn, &fEFlagsM, TestData.r64ValIn1, TestData.r64ValIn2);
    77467731                        TestData.fMxcsrIn   = fMxcsrIn;
    77477732                        TestData.fMxcsrOut  = fMxcsrM;
     
    77537738                        uint32_t fMxcsrU  = fMxcsrIn;
    77547739                        uint32_t fEFlagsU = fEFlags;
    7755                         fMxcsrU = pfn(fMxcsrIn, &fEFlagsU, &ValIn1, &ValIn2);
     7740                        fMxcsrU = pfn(fMxcsrIn, &fEFlagsU, TestData.r64ValIn1, TestData.r64ValIn2);
    77567741                        TestData.fMxcsrIn   = fMxcsrIn;
    77577742                        TestData.fMxcsrOut  = fMxcsrU;
     
    77667751                            uint32_t fMxcsr1  = fMxcsrIn;
    77677752                            uint32_t fEFlags1 = fEFlags;
    7768                             fMxcsr1 = pfn(fMxcsrIn, &fEFlags1, &ValIn1, &ValIn2);
     7753                            fMxcsr1 = pfn(fMxcsrIn, &fEFlags1, TestData.r64ValIn1, TestData.r64ValIn2);
    77697754                            TestData.fMxcsrIn   = fMxcsrIn;
    77707755                            TestData.fMxcsrOut  = fMxcsr1;
     
    77797764                                uint32_t fMxcsr2  = fMxcsrIn;
    77807765                                uint32_t fEFlags2 = fEFlags;
    7781                                 fMxcsr2 = pfn(fMxcsrIn, &fEFlags2, &ValIn1, &ValIn2);
     7766                                fMxcsr2 = pfn(fMxcsrIn, &fEFlags2, TestData.r64ValIn1, TestData.r64ValIn2);
    77827767                                TestData.fMxcsrIn   = fMxcsrIn;
    77837768                                TestData.fMxcsrOut  = fMxcsr2;
     
    77937778                                        uint32_t fMxcsr3  = fMxcsrIn;
    77947779                                        uint32_t fEFlags3 = fEFlags;
    7795                                         fMxcsr3 = pfn(fMxcsrIn, &fEFlags3, &ValIn1, &ValIn2);
     7780                                        fMxcsr3 = pfn(fMxcsrIn, &fEFlags3, TestData.r64ValIn1, TestData.r64ValIn2);
    77967781                                        TestData.fMxcsrIn   = fMxcsrIn;
    77977782                                        TestData.fMxcsrOut  = fMxcsr3;
     
    78197804        SSE_COMPARE_EFL_R64_R64_TEST_T const * const    paTests = g_aSseCompareEflR64R64[iFn].paTests;
    78207805        uint32_t const                                  cTests  = g_aSseCompareEflR64R64[iFn].cTests;
    7821         PFNIEMAIMPLF2EFLMXCSR128                        pfn     = g_aSseCompareEflR64R64[iFn].pfn;
     7806        PFNIEMAIMPLF2EFLMXCSRR64R64                     pfn     = g_aSseCompareEflR64R64[iFn].pfn;
    78227807        uint32_t const                                  cVars   = COUNT_VARIATIONS(g_aSseCompareEflR64R64[iFn]);
    78237808        if (!cTests) RTTestSkipped(g_hTest, "no tests");
     
    78267811            for (uint32_t iTest = 0; iTest < cTests; iTest++)
    78277812            {
    7828                 X86XMMREG ValIn1; RT_ZERO(ValIn1);
    7829                 X86XMMREG ValIn2; RT_ZERO(ValIn2);
    7830 
    7831                 ValIn1.ar64[0] = paTests[iTest].r64ValIn1;
    7832                 ValIn2.ar64[0] = paTests[iTest].r64ValIn2;
    78337813                uint32_t fEFlags = paTests[iTest].fEflIn;
    7834                 uint32_t fMxcsr = pfn(paTests[iTest].fMxcsrIn, &fEFlags, &ValIn1, &ValIn2);
     7814                uint32_t fMxcsr = pfn(paTests[iTest].fMxcsrIn, &fEFlags, paTests[iTest].r64ValIn1, paTests[iTest].r64ValIn2);
    78357815                if (   fMxcsr != paTests[iTest].fMxcsrOut
    78367816                    || fEFlags != paTests[iTest].fEflOut)
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r104135 r104150  
    804804#define IEM_MC_FETCH_XREG_XMM(a_XmmValue, a_iXReg)          do { CHK_XREG_IDX(a_iXReg); CHK_VAR(a_XmmValue);  (a_XmmValue) = g_XmmZero; CHK_TYPE(X86XMMREG, a_XmmValue); (void)fSseRead;  (void)fMcBegin; } while (0)
    805805#define IEM_MC_FETCH_XREG_U64(a_u64Value, a_iXReg, a_iQWord)    do { CHK_XREG_IDX(a_iXReg); CHK_VAR(a_u64Value); (a_u64Value) = 0; CHK_TYPE(uint64_t, a_u64Value); (void)fSseRead; (void)fMcBegin; } while (0)
     806#define IEM_MC_FETCH_XREG_R64(a_r64Value, a_iXReg, a_iQWord)    do { CHK_XREG_IDX(a_iXReg); CHK_VAR(a_r64Value); (a_r64Value).u = 0; CHK_TYPE(RTFLOAT64U, a_r64Value); (void)fSseRead; (void)fMcBegin; } while (0)
    806807#define IEM_MC_FETCH_XREG_U32(a_u32Value, a_iXReg, a_iDWord)    do { CHK_XREG_IDX(a_iXReg); CHK_VAR(a_u32Value); (a_u32Value) = 0; CHK_TYPE(uint32_t, a_u32Value); (void)fSseRead; (void)fMcBegin; } while (0)
     808#define IEM_MC_FETCH_XREG_R32(a_r32Value, a_iXReg, a_iDWord)    do { CHK_XREG_IDX(a_iXReg); CHK_VAR(a_r32Value); (a_r32Value).u = 0; CHK_TYPE(RTFLOAT32U, a_r32Value); (void)fSseRead; (void)fMcBegin; } while (0)
    807809#define IEM_MC_FETCH_XREG_U16(a_u16Value, a_iXReg, a_iWord )    do { CHK_XREG_IDX(a_iXReg); CHK_VAR(a_u16Value); (a_u16Value) = 0; CHK_TYPE(uint16_t, a_u16Value); (void)fSseRead; (void)fMcBegin; } while (0)
    808810#define IEM_MC_FETCH_XREG_U8( a_u8Value,  a_iXReg, a_iByte)     do { CHK_XREG_IDX(a_iXReg); CHK_VAR(a_u8Value);  (a_u8Value)  = 0; CHK_TYPE(uint8_t,  a_u8Value);  (void)fSseRead; (void)fMcBegin; } while (0)
     
    909911#define IEM_MC_FETCH_MEM_XMM_NO_AC(a_XmmDst, a_iSeg, a_GCPtrMem)        do { CHK_SEG_IDX(a_iSeg); CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_VAR(a_XmmDst);  CHK_TYPE(X86XMMREG,  a_XmmDst);  (void)fMcBegin; } while (0)
    910912#define IEM_MC_FETCH_MEM_XMM_ALIGN_SSE(a_XmmDst, a_iSeg, a_GCPtrMem)    do { CHK_SEG_IDX(a_iSeg); CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_VAR(a_XmmDst);  CHK_TYPE(X86XMMREG,  a_XmmDst);  (void)fMcBegin; } while (0)
    911 #define IEM_MC_FETCH_MEM_XMM_U32(a_XmmDst, a_iDWord, a_iSeg, a_GCPtrMem) do{ CHK_SEG_IDX(a_iSeg); CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_VAR(a_XmmDst);  CHK_TYPE(X86XMMREG,  a_XmmDst);  AssertCompile((a_iDWord) < RT_ELEMENTS((a_XmmDst).au32)); (void)fMcBegin; } while (0)
    912 #define IEM_MC_FETCH_MEM_XMM_U64(a_XmmDst, a_iQWord, a_iSeg, a_GCPtrMem) do{ CHK_SEG_IDX(a_iSeg); CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_VAR(a_XmmDst);  CHK_TYPE(X86XMMREG,  a_XmmDst);  AssertCompile((a_iQWord) < RT_ELEMENTS((a_XmmDst).au64)); (void)fMcBegin; } while (0)
    913913#define IEM_MC_FETCH_MEM_U256(a_u256Dst, a_iSeg, a_GCPtrMem)            do { CHK_SEG_IDX(a_iSeg); CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_VAR(a_u256Dst); CHK_TYPE(RTUINT256U, a_u256Dst); (void)fMcBegin; } while (0)
    914914#define IEM_MC_FETCH_MEM_U256_NO_AC(a_u256Dst, a_iSeg, a_GCPtrMem)      do { CHK_SEG_IDX(a_iSeg); CHK_GCPTR(a_GCPtrMem); CHK_VAR(a_GCPtrMem); CHK_VAR(a_u256Dst); CHK_TYPE(RTUINT256U, a_u256Dst); (void)fMcBegin; } while (0)
Note: See TracChangeset for help on using the changeset viewer.

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