VirtualBox

Changeset 105252 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Jul 10, 2024 8:23:04 AM (7 months ago)
Author:
vboxsync
Message:

VMM/IEM: Implement instruction emulation for vrsqrtps, vrsqrtss, bugref:9898

Location:
trunk/src/VBox/VMM/VMMAll
Files:
2 edited

Legend:

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

    r105238 r105252  
    1713417134
    1713517135
    17136 #ifdef IEM_WITHOUT_ASSEMBLY
    1713717136/**
    17138  * RSQRTPS
     17137 * [V]RSQRTPS
    1713917138 */
    1714017139static uint32_t iemAImpl_rsqrt_worker(PRTFLOAT32U pr32Res, uint32_t fMxcsr, PCRTFLOAT32U pr32Val)
     
    1716217161
    1716317162
     17163#ifdef IEM_WITHOUT_ASSEMBLY
    1716417164IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_rsqrtps_u128,(uint32_t uMxCsrIn, PX86XMMREG pResult, PCX86XMMREG puSrc1, PCX86XMMREG puSrc2))
    1716517165{
     
    1717117171           | iemAImpl_rsqrt_worker(&pResult->ar32[3], uMxCsrIn, &puSrc2->ar32[3]);
    1717217172}
     17173#endif
     17174
     17175
     17176IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vrsqrtps_u128_fallback,(uint32_t uMxCsrIn, PX86XMMREG pResult, PCX86XMMREG puSrc))
     17177{
     17178    return   iemAImpl_rsqrt_worker(&pResult->ar32[0], uMxCsrIn, &puSrc->ar32[0])
     17179           | iemAImpl_rsqrt_worker(&pResult->ar32[1], uMxCsrIn, &puSrc->ar32[1])
     17180           | iemAImpl_rsqrt_worker(&pResult->ar32[2], uMxCsrIn, &puSrc->ar32[2])
     17181           | iemAImpl_rsqrt_worker(&pResult->ar32[3], uMxCsrIn, &puSrc->ar32[3]);
     17182}
     17183
     17184
     17185IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vrsqrtps_u256_fallback,(uint32_t uMxCsrIn, PX86YMMREG pResult, PCX86YMMREG puSrc))
     17186{
     17187    return   iemAImpl_rsqrt_worker(&pResult->ar32[0], uMxCsrIn, &puSrc->ar32[0])
     17188           | iemAImpl_rsqrt_worker(&pResult->ar32[1], uMxCsrIn, &puSrc->ar32[1])
     17189           | iemAImpl_rsqrt_worker(&pResult->ar32[2], uMxCsrIn, &puSrc->ar32[2])
     17190           | iemAImpl_rsqrt_worker(&pResult->ar32[3], uMxCsrIn, &puSrc->ar32[3])
     17191           | iemAImpl_rsqrt_worker(&pResult->ar32[4], uMxCsrIn, &puSrc->ar32[4])
     17192           | iemAImpl_rsqrt_worker(&pResult->ar32[5], uMxCsrIn, &puSrc->ar32[5])
     17193           | iemAImpl_rsqrt_worker(&pResult->ar32[6], uMxCsrIn, &puSrc->ar32[6])
     17194           | iemAImpl_rsqrt_worker(&pResult->ar32[7], uMxCsrIn, &puSrc->ar32[7]);
     17195}
    1717317196
    1717417197
     
    1717617199 * RSQRTSS
    1717717200 */
     17201#ifdef IEM_WITHOUT_ASSEMBLY
    1717817202IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_rsqrtss_u128_r32,(uint32_t uMxCsrIn, PX86XMMREG pResult, PCX86XMMREG puSrc1, PCRTFLOAT32U pr32Src2))
    1717917203{
     
    1718417208}
    1718517209#endif
     17210
     17211
     17212IEM_DECL_IMPL_DEF(uint32_t, iemAImpl_vrsqrtss_u128_r32_fallback,(uint32_t uMxCsrIn, PX86XMMREG pResult, PCX86XMMREG puSrc1, PCRTFLOAT32U pr32Src2))
     17213{
     17214    pResult->ar32[1] = puSrc1->ar32[1];
     17215    pResult->ar32[2] = puSrc1->ar32[2];
     17216    pResult->ar32[3] = puSrc1->ar32[3];
     17217    return iemAImpl_rsqrt_worker(&pResult->ar32[0], uMxCsrIn, pr32Src2);
     17218}
    1718617219
    1718717220
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h

    r105238 r105252  
    29872987
    29882988/** Opcode VEX.0F 0x52 - vrsqrtps Vps, Wps */
    2989 FNIEMOP_STUB(iemOp_vrsqrtps_Vps_Wps);
     2989FNIEMOP_DEF(iemOp_vrsqrtps_Vps_Wps)
     2990{
     2991    IEMOP_MNEMONIC2(VEX_RM, VRSQRTPS, vrsqrtps, Vps, Wps, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0);
     2992    IEMOPMEDIAF2_INIT_VARS(           vrsqrtps);
     2993    return FNIEMOP_CALL_1(iemOpCommonAvxAvx2_Vx_Wx, IEM_SELECT_HOST_OR_FALLBACK(fAvx, &s_Host, &s_Fallback));
     2994}
     2995
     2996
    29902997/*  Opcode VEX.66.0F 0x52 - invalid */
     2998
     2999
    29913000/** Opcode VEX.F3.0F 0x52 - vrsqrtss Vss, Hss, Wss */
    2992 FNIEMOP_STUB(iemOp_vrsqrtss_Vss_Hss_Wss);
     3001FNIEMOP_DEF(iemOp_vrsqrtss_Vss_Hss_Wss)
     3002{
     3003    IEMOP_MNEMONIC3(VEX_RVM, VRSQRTSS, vrsqrtss, Vps, Hps, Wss, DISOPTYPE_HARMLESS | DISOPTYPE_X86_AVX, 0);
     3004    return FNIEMOP_CALL_1(iemOpCommonAvx_Vx_Hx_R32,
     3005                          IEM_SELECT_HOST_OR_FALLBACK(fAvx, iemAImpl_vrsqrtss_u128_r32, iemAImpl_vrsqrtss_u128_r32_fallback));
     3006}
     3007
     3008
    29933009/*  Opcode VEX.F2.0F 0x52 - invalid */
    29943010
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