VirtualBox

Changeset 98132 in vbox


Ignore:
Timestamp:
Jan 19, 2023 9:28:51 AM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
155302
Message:

VMM/IEM: Implementation of roundxx SSE instructions, bugref:9898

File:
1 edited

Legend:

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

    r98103 r98132  
    1439314393}
    1439414394
    14395 
    14396 #ifdef IEM_WITHOUT_ASSEMBLY
    1439714395/**
    1439814396 * Converts from the packed IPRT 32-bit (single precision) floating point format to
     
    1479014788    return false;
    1479114789}
    14792 #endif
    1479314790
    1479414791
     
    1713217129static RTFLOAT32U iemAImpl_round_worker_r32(uint32_t *pfMxcsr, PCRTFLOAT32U pr32Src, uint8_t bImm)
    1713317130{
    17134     RTFLOAT32U  r32Dst;
    17135 
    17136     AssertReleaseFailed();
    1713717131    RT_NOREF(bImm);
    17138     RT_NOREF(pfMxcsr);
    17139     r32Dst = *pr32Src;
     17132    RTFLOAT32U r32Src, r32Dst;
     17133    float32_t f32Src;
     17134    softfloat_state_t SoftState = IEM_SOFTFLOAT_STATE_INITIALIZER_FROM_MXCSR(*pfMxcsr);
     17135
     17136    iemSsePrepareValueR32(&r32Src, *pfMxcsr, pr32Src);
     17137    f32Src = f32_roundToInt(iemFpSoftF32FromIprt(&r32Src), SoftState.roundingMode, true/*exact*/, &SoftState);
     17138
     17139    iemFpSoftF32ToIprt(&r32Dst, f32Src);
    1714017140    return r32Dst;
    1714117141}
    1714217142
    17143 
    1714417143static RTFLOAT64U iemAImpl_round_worker_r64(uint32_t *pfMxcsr, PCRTFLOAT64U pr64Src, uint8_t bImm)
    1714517144{
    17146     RTFLOAT64U  r64Dst;
    17147 
    17148     AssertReleaseFailed();
    1714917145    RT_NOREF(bImm);
    17150     RT_NOREF(pfMxcsr);
    17151     r64Dst = *pr64Src;
     17146    RTFLOAT64U r64Src, r64Dst;
     17147    float64_t f64Src;
     17148    softfloat_state_t SoftState = IEM_SOFTFLOAT_STATE_INITIALIZER_FROM_MXCSR(*pfMxcsr);
     17149
     17150    iemSsePrepareValueR64(&r64Src, *pfMxcsr, pr64Src);
     17151    f64Src = f64_roundToInt(iemFpSoftF64FromIprt(&r64Src), SoftState.roundingMode, true/*exact*/, &SoftState);
     17152
     17153    iemFpSoftF64ToIprt(&r64Dst, f64Src);
    1715217154    return r64Dst;
    1715317155}
    17154 
    17155 
    17156 IEM_DECL_IMPL_DEF(void, iemAImpl_roundps_u128_fallback,(uint32_t *pfMxcsr, PX86XMMREG puDst, PCIEMMEDIAF2XMMSRC pSrc, uint8_t bImm))
    17157 {
    17158     for (uint8_t i = 0; i < RT_ELEMENTS(puDst->ar32); i++)
    17159     {
    17160         puDst->ar32[i] = iemAImpl_round_worker_r32(pfMxcsr, &pSrc->uSrc2.ar32[i], bImm & 0x7);
    17161     }
    17162 }
    17163 
    17164 
    17165 IEM_DECL_IMPL_DEF(void, iemAImpl_roundpd_u128_fallback,(uint32_t *pfMxcsr, PX86XMMREG puDst, PCIEMMEDIAF2XMMSRC pSrc, uint8_t bImm))
    17166 {
    17167     for (uint8_t i = 0; i < RT_ELEMENTS(puDst->ar64); i++)
    17168     {
    17169         puDst->ar64[i] = iemAImpl_round_worker_r64(pfMxcsr, &pSrc->uSrc2.ar64[i], bImm & 0x7);
    17170     }
    17171 }
    17172 
    1717317156
    1717417157#ifdef IEM_WITHOUT_ASSEMBLY
     
    1718817171#endif
    1718917172
     17173IEM_DECL_IMPL_DEF(void, iemAImpl_roundps_u128_fallback,(uint32_t *pfMxcsr, PX86XMMREG puDst, PCIEMMEDIAF2XMMSRC pSrc, uint8_t bImm))
     17174{
     17175    for (uint8_t i = 0; i < RT_ELEMENTS(puDst->ar32); i++)
     17176    {
     17177        puDst->ar32[i] = iemAImpl_round_worker_r32(pfMxcsr, &pSrc->uSrc2.ar32[i], bImm & 0x7);
     17178    }
     17179}
     17180
     17181
     17182IEM_DECL_IMPL_DEF(void, iemAImpl_roundpd_u128_fallback,(uint32_t *pfMxcsr, PX86XMMREG puDst, PCIEMMEDIAF2XMMSRC pSrc, uint8_t bImm))
     17183{
     17184    for (uint8_t i = 0; i < RT_ELEMENTS(puDst->ar64); i++)
     17185    {
     17186        puDst->ar64[i] = iemAImpl_round_worker_r64(pfMxcsr, &pSrc->uSrc2.ar64[i], bImm & 0x7);
     17187    }
     17188}
    1719017189
    1719117190/**
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