VirtualBox

Changeset 65194 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Jan 8, 2017 10:34:40 PM (8 years ago)
Author:
vboxsync
Message:

IEM: Fixed FYL2X implementation.

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

Legend:

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

    r62478 r65194  
    24832483
    24842484IEMIMPL_FPU_R80_BY_R80_ST1_ST0_POP fpatan
     2485IEMIMPL_FPU_R80_BY_R80_ST1_ST0_POP fyl2x
    24852486IEMIMPL_FPU_R80_BY_R80_ST1_ST0_POP fyl2xp1
    24862487
     
    25892590IEMIMPL_FPU_R80 fabs
    25902591IEMIMPL_FPU_R80 f2xm1
    2591 IEMIMPL_FPU_R80 fyl2x
    25922592IEMIMPL_FPU_R80 fsqrt
    25932593IEMIMPL_FPU_R80 frndint
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h

    r64545 r65194  
    1428614286
    1428714287
     14288/**
     14289 * Common worker for FPU instructions working on STn and ST0, storing the result
     14290 * in STn, and popping the stack unless IE, DE or ZE was raised.
     14291 *
     14292 * @param   pfnAImpl    Pointer to the instruction implementation (assembly).
     14293 */
     14294FNIEMOP_DEF_2(iemOpHlpFpu_stN_st0_pop, uint8_t, bRm, PFNIEMAIMPLFPUR80, pfnAImpl)
     14295{
     14296    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     14297
     14298    IEM_MC_BEGIN(3, 1);
     14299    IEM_MC_LOCAL(IEMFPURESULT,          FpuRes);
     14300    IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT, pFpuRes,        FpuRes,     0);
     14301    IEM_MC_ARG(PCRTFLOAT80U,            pr80Value1,                 1);
     14302    IEM_MC_ARG(PCRTFLOAT80U,            pr80Value2,                 2);
     14303
     14304    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     14305    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     14306
     14307    IEM_MC_PREPARE_FPU_USAGE();
     14308    IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, bRm & X86_MODRM_RM_MASK, pr80Value2, 0)
     14309        IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pr80Value2);
     14310        IEM_MC_STORE_FPU_RESULT_THEN_POP(FpuRes, bRm & X86_MODRM_RM_MASK);
     14311    IEM_MC_ELSE()
     14312        IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(bRm & X86_MODRM_RM_MASK);
     14313    IEM_MC_ENDIF();
     14314    IEM_MC_ADVANCE_RIP();
     14315
     14316    IEM_MC_END();
     14317    return VINF_SUCCESS;
     14318}
     14319
     14320
    1428814321/** Opcode 0xd9 0xf1. */
    14289 FNIEMOP_DEF(iemOp_fylx2)
    14290 {
    14291     IEMOP_MNEMONIC(fylx2_st0, "fylx2 st0");
    14292     return FNIEMOP_CALL_1(iemOpHlpFpu_st0, iemAImpl_fyl2x_r80);
     14322FNIEMOP_DEF(iemOp_fyl2x)
     14323{
     14324    IEMOP_MNEMONIC(fyl2x_st0, "fyl2x st1,st0");
     14325    return FNIEMOP_CALL_2(iemOpHlpFpu_stN_st0_pop, 1, iemAImpl_fyl2x_r80_by_r80);
    1429314326}
    1429414327
     
    1433014363    IEMOP_MNEMONIC(fptan_st0, "fptan st0");
    1433114364    return FNIEMOP_CALL_1(iemOpHlpFpuReplace_st0_push, iemAImpl_fptan_r80_r80);
    14332 }
    14333 
    14334 
    14335 /**
    14336  * Common worker for FPU instructions working on STn and ST0, storing the result
    14337  * in STn, and popping the stack unless IE, DE or ZE was raised.
    14338  *
    14339  * @param   pfnAImpl    Pointer to the instruction implementation (assembly).
    14340  */
    14341 FNIEMOP_DEF_2(iemOpHlpFpu_stN_st0_pop, uint8_t, bRm, PFNIEMAIMPLFPUR80, pfnAImpl)
    14342 {
    14343     IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    14344 
    14345     IEM_MC_BEGIN(3, 1);
    14346     IEM_MC_LOCAL(IEMFPURESULT,          FpuRes);
    14347     IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT, pFpuRes,        FpuRes,     0);
    14348     IEM_MC_ARG(PCRTFLOAT80U,            pr80Value1,                 1);
    14349     IEM_MC_ARG(PCRTFLOAT80U,            pr80Value2,                 2);
    14350 
    14351     IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
    14352     IEM_MC_MAYBE_RAISE_FPU_XCPT();
    14353 
    14354     IEM_MC_PREPARE_FPU_USAGE();
    14355     IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, bRm & X86_MODRM_RM_MASK, pr80Value2, 0)
    14356         IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pr80Value2);
    14357         IEM_MC_STORE_FPU_RESULT_THEN_POP(FpuRes, bRm & X86_MODRM_RM_MASK);
    14358     IEM_MC_ELSE()
    14359         IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(bRm & X86_MODRM_RM_MASK);
    14360     IEM_MC_ENDIF();
    14361     IEM_MC_ADVANCE_RIP();
    14362 
    14363     IEM_MC_END();
    14364     return VINF_SUCCESS;
    1436514365}
    1436614366
     
    1452214522    /* 0xef */  iemOp_Invalid,
    1452314523    /* 0xf0 */  iemOp_f2xm1,
    14524     /* 0xf1 */  iemOp_fylx2,
     14524    /* 0xf1 */  iemOp_fyl2x,
    1452514525    /* 0xf2 */  iemOp_fptan,
    1452614526    /* 0xf3 */  iemOp_fpatan,
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r64547 r65194  
    13401340
    13411341FNIEMAIMPLFPUR80            iemAImpl_fpatan_r80_by_r80;
     1342FNIEMAIMPLFPUR80            iemAImpl_fyl2x_r80_by_r80;
    13421343FNIEMAIMPLFPUR80            iemAImpl_fyl2xp1_r80_by_r80;
    13431344
     
    13591360FNIEMAIMPLFPUR80UNARY       iemAImpl_fchs_r80;
    13601361FNIEMAIMPLFPUR80UNARY       iemAImpl_f2xm1_r80;
    1361 FNIEMAIMPLFPUR80UNARY       iemAImpl_fyl2x_r80;
    13621362FNIEMAIMPLFPUR80UNARY       iemAImpl_fsqrt_r80;
    13631363FNIEMAIMPLFPUR80UNARY       iemAImpl_frndint_r80;
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r64545 r65194  
    240240
    241241#define iemAImpl_fpatan_r80_by_r80      NULL
     242#define iemAImpl_fyl2x_r80_by_r80       NULL
    242243#define iemAImpl_fyl2xp1_r80_by_r80     NULL
    243244
     
    249250#define iemAImpl_fxam_r80               NULL
    250251#define iemAImpl_f2xm1_r80              NULL
    251 #define iemAImpl_fyl2x_r80              NULL
    252252#define iemAImpl_fsqrt_r80              NULL
    253253#define iemAImpl_frndint_r80            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