VirtualBox

Changeset 102817 in vbox for trunk/src


Ignore:
Timestamp:
Jan 10, 2024 1:56:06 PM (13 months ago)
Author:
vboxsync
Message:

IEM: Added RCPSS/RCPPS assembly imlementation and C stubs.

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

Legend:

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

    r102656 r102817  
    48424842IEMIMPL_FP_F2 rsqrtps,   2
    48434843IEMIMPL_FP_F2 sqrtpd,    2
     4844IEMIMPL_FP_F2 rcpps,     2
    48444845IEMIMPL_FP_F2 cvtdq2ps,  2
    48454846IEMIMPL_FP_F2 cvtps2dq,  2
     
    49014902IEMIMPL_FP_F2_R32 sqrtss
    49024903IEMIMPL_FP_F2_R32 rsqrtss
     4904IEMIMPL_FP_F2_R32 rcpss
    49034905
    49044906
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp

    r102802 r102817  
    1613716137
    1613816138/**
     16139 * RCPPS
     16140 */
     16141#ifdef IEM_WITHOUT_ASSEMBLY
     16142static uint32_t iemAImpl_rcp_worker(PRTFLOAT32U pr32Res, uint32_t fMxcsr, PCRTFLOAT32U pr32Val)
     16143{
     16144    RT_NOREF(pr32Res); RT_NOREF(fMxcsr); RT_NOREF(pr32Val);
     16145    /** @todo implement using softfloat! */
     16146    Assert(0);
     16147    return 0;
     16148}
     16149
     16150
     16151IEM_DECL_IMPL_DEF(void, iemAImpl_rcpps_u128,(PX86FXSTATE pFpuState, PIEMSSERESULT pResult, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
     16152{
     16153    RT_NOREF(puSrc1);
     16154
     16155    pResult->MXCSR  = iemAImpl_rcp_worker(&pResult->uResult.ar32[0], pFpuState->MXCSR, &puSrc2->ar32[0]);
     16156    pResult->MXCSR |= iemAImpl_rcp_worker(&pResult->uResult.ar32[1], pFpuState->MXCSR, &puSrc2->ar32[1]);
     16157    pResult->MXCSR |= iemAImpl_rcp_worker(&pResult->uResult.ar32[2], pFpuState->MXCSR, &puSrc2->ar32[2]);
     16158    pResult->MXCSR |= iemAImpl_rcp_worker(&pResult->uResult.ar32[3], pFpuState->MXCSR, &puSrc2->ar32[3]);
     16159}
     16160
     16161
     16162/**
     16163 * RCPSS
     16164 */
     16165IEM_DECL_IMPL_DEF(void, iemAImpl_rcpss_u128_r32,(PX86FXSTATE pFpuState, PIEMSSERESULT pResult, PCX86XMMREG puSrc1, PCRTFLOAT32U pr32Src2))
     16166{
     16167    pResult->MXCSR = iemAImpl_rcp_worker(&pResult->uResult.ar32[0], pFpuState->MXCSR, pr32Src2);
     16168    pResult->uResult.ar32[1] = puSrc1->ar32[1];
     16169    pResult->uResult.ar32[2] = puSrc1->ar32[2];
     16170    pResult->uResult.ar32[3] = puSrc1->ar32[3];
     16171}
     16172#endif
     16173
     16174
     16175/**
    1613916176 * ADDSUBPS
    1614016177 */
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h

    r102784 r102817  
    56005600/*  Opcode 0xf2 0x0f 0x52 - invalid */
    56015601
     5602
    56025603/** Opcode      0x0f 0x53 - rcpps Vps, Wps */
    5603 FNIEMOP_STUB(iemOp_rcpps_Vps_Wps);
     5604FNIEMOP_DEF(iemOp_rcpps_Vps_Wps)
     5605{
     5606    IEMOP_MNEMONIC2(RM, RCPPS, rcpps, Vps, Wps, DISOPTYPE_HARMLESS, 0);
     5607    return FNIEMOP_CALL_1(iemOpCommonSseFp_FullFull_To_Full, iemAImpl_rcpps_u128);
     5608}
     5609
     5610
    56045611/*  Opcode 0x66 0x0f 0x53 - invalid */
     5612
     5613
    56055614/** Opcode 0xf3 0x0f 0x53 - rcpss Vss, Wss */
    5606 FNIEMOP_STUB(iemOp_rcpss_Vss_Wss);
     5615FNIEMOP_DEF(iemOp_rcpss_Vss_Wss)
     5616{
     5617    IEMOP_MNEMONIC2(RM, RCPSS, rcpss, Vss, Wss, DISOPTYPE_HARMLESS, 0);
     5618    return FNIEMOP_CALL_1(iemOpCommonSseFp_FullR32_To_Full, iemAImpl_rcpss_u128_r32);
     5619}
     5620
     5621
    56075622/*  Opcode 0xf2 0x0f 0x53 - invalid */
    56085623
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r102800 r102817  
    39403940FNIEMAIMPLFPSSEF2U128 iemAImpl_rsqrtps_u128;
    39413941FNIEMAIMPLFPSSEF2U128 iemAImpl_sqrtpd_u128;
     3942FNIEMAIMPLFPSSEF2U128 iemAImpl_rcpps_u128;
    39423943FNIEMAIMPLFPSSEF2U128 iemAImpl_addsubps_u128;
    39433944FNIEMAIMPLFPSSEF2U128 iemAImpl_addsubpd_u128;
     
    39693970FNIEMAIMPLFPSSEF2U128R64 iemAImpl_sqrtsd_u128_r64;
    39703971FNIEMAIMPLFPSSEF2U128R32 iemAImpl_rsqrtss_u128_r32;
     3972FNIEMAIMPLFPSSEF2U128R32 iemAImpl_rcpss_u128_r32;
    39713973
    39723974FNIEMAIMPLFPAVXF3U128 iemAImpl_vaddps_u128, iemAImpl_vaddps_u128_fallback;
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r102572 r102817  
    505505#define iemAImpl_sqrtpd_u128            NULL
    506506#define iemAImpl_rsqrtps_u128           NULL
     507#define iemAImpl_rcpps_u128             NULL
    507508#define iemAImpl_addsubps_u128          NULL
    508509#define iemAImpl_addsubpd_u128          NULL
     
    538539#define iemAImpl_roundsd_u128_r64       NULL
    539540#define iemAImpl_rsqrtss_u128_r32       NULL
     541#define iemAImpl_rcpss_u128_r32         NULL
    540542
    541543#define iemAImpl_cvtss2sd_u128_r32      NULL
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