VirtualBox

Changeset 40247 in vbox


Ignore:
Timestamp:
Feb 24, 2012 12:59:44 PM (13 years ago)
Author:
vboxsync
Message:

IEM: Completed FPU instruction starting with 0xdb. Fixed build break from previous commit.

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

Legend:

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

    r40246 r40247  
    37293729
    37303730/**
     3731 * Updates the FSW, FOP, FPUIP, and FPUCS, then pops the stack twice.
     3732 *
     3733 * @param   pIemCpu             The IEM per CPU data.
     3734 * @param   u16FSW              The FSW from the current instruction.
     3735 */
     3736static void iemFpuUpdateFSWThenPopPop(PIEMCPU pIemCpu, uint16_t u16FSW)
     3737{
     3738    PCPUMCTX pCtx = pIemCpu->CTX_SUFF(pCtx);
     3739    iemFpuUpdateOpcodeAndIpWorker(pIemCpu, pCtx);
     3740    iemFpuUpdateFSWOnly(pCtx, u16FSW);
     3741    iemFpuMaybePopOne(pCtx);
     3742    iemFpuMaybePopOne(pCtx);
     3743}
     3744
     3745
     3746/**
    37313747 * Updates the FSW, FOP, FPUIP, FPUCS, FPUDP, and FPUDS, then pops the stack.
    37323748 *
     
    38183834    iemFpuUpdateOpcodeAndIpWorker(pIemCpu, pCtx);
    38193835    iemFpuStackUnderflowOnly(pIemCpu, iStReg, pCtx);
     3836    iemFpuMaybePopOne(pCtx);
     3837}
     3838
     3839
     3840DECL_NO_INLINE(static, void) iemFpuStackUnderflowThenPopPop(PIEMCPU pIemCpu)
     3841{
     3842    PCPUMCTX pCtx = pIemCpu->CTX_SUFF(pCtx);
     3843    iemFpuUpdateOpcodeAndIpWorker(pIemCpu, pCtx);
     3844    iemFpuStackUnderflowOnly(pIemCpu, UINT8_MAX, pCtx);
     3845    iemFpuMaybePopOne(pCtx);
    38203846    iemFpuMaybePopOne(pCtx);
    38213847}
     
    59746000#define IEM_MC_FETCH_MEM_U32_DISP(a_u32Dst, a_iSeg, a_GCPtrMem, a_offDisp) \
    59756001    IEM_MC_RETURN_ON_FAILURE(iemMemFetchDataU32(pIemCpu, &(a_u32Dst), (a_iSeg), (a_GCPtrMem) + (a_offDisp)))
     6002#define IEM_MC_FETCH_MEM_I32(a_i32Dst, a_iSeg, a_GCPtrMem) \
     6003    IEM_MC_RETURN_ON_FAILURE(iemMemFetchDataU32(pIemCpu, (uint32_t *)&(a_i32Dst), (a_iSeg), (a_GCPtrMem)))
    59766004
    59776005#define IEM_MC_FETCH_MEM_S32_SX_U64(a_u64Dst, a_iSeg, a_GCPtrMem) \
     
    63206348#define IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(a_u16FSW, a_iEffSeg, a_GCPtrEff) \
    63216349    iemFpuUpdateFSWWithMemOpThenPop(pIemCpu, a_u16FSW, a_iEffSeg, a_GCPtrEff)
     6350/** Updates the FSW, FOP, FPUIP, and FPUCS, and then pops the stack twice. */
     6351#define IEM_MC_UPDATE_FSW_THEN_POP_POP(a_u16FSW) \
     6352    iemFpuUpdateFSWThenPop(pIemCpu, a_u16FSW)
    63226353
    63236354/** Raises a FPU stack underflow exception.  Sets FPUIP, FPUCS and FOP. */
     
    63366367#define IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(a_iStDst, a_iEffSeg, a_GCPtrEff) \
    63376368    iemFpuStackUnderflowWithMemOpThenPop(pIemCpu, a_iStDst, a_iEffSeg, a_GCPtrEff)
     6369/** Raises a FPU stack underflow exception.  Sets FPUIP, FPUCS and FOP. Pops
     6370 *  stack twice. */
     6371#define IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP() \
     6372    iemFpuStackUnderflowThenPopPop(pIemCpu)
    63386373/** Raises a FPU stack underflow exception for an instruction pushing a result
    63396374 *  value onto the stack. Sets FPUIP, FPUCS and FOP. */
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm

    r40244 r40247  
    13241324
    13251325
     1326;
     1327;---------------------- 32-bit signed integer operations ----------------------
     1328;
     1329
     1330
    13261331;;
    13271332; Converts a 80-bit floating point value to a 32-bit signed integer.
     
    13481353ENDPROC iemAImpl_fpu_r80_to_i32
    13491354
     1355
     1356;;
     1357; Store a 80-bit floating point value (register) as a 32-bit signed integer (memory).
     1358;
     1359; @param    A0      FPU context (fxsave).
     1360; @param    A1      Where to return the output FSW.
     1361; @param    A2      Where to store the 32-bit signed integer value.
     1362; @param    A3      Pointer to the 80-bit value.
     1363;
     1364BEGINPROC_FASTCALL iemAImpl_fst_r80_to_i32, 12
     1365        PROLOGUE_3_ARGS
     1366        sub     xSP, 20h
     1367
     1368        fninit
     1369        fld     tword [A3]
     1370        FPU_LD_FXSTATE_FCW_AND_SAFE_FSW A0
     1371        fist    dword [A2]
     1372
     1373        fnstsw  word  [A1]
     1374
     1375        fninit
     1376        add     xSP, 20h
     1377        EPILOGUE_3_ARGS 0
     1378ENDPROC iemAImpl_fst_r80_to_i32
     1379
     1380
     1381;;
     1382; FPU instruction working on one 80-bit and one 32-bit signed integer value.
     1383;
     1384; @param    1       The instruction
     1385;
     1386; @param    A0      FPU context (fxsave).
     1387; @param    A1      Pointer to a IEMFPURESULT for the output.
     1388; @param    A2      Pointer to the 80-bit value.
     1389; @param    A3      Pointer to the 32-bit value.
     1390;
     1391%macro IEMIMPL_FPU_R80_BY_I32 1
     1392BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _r80_by_i32, 16
     1393        PROLOGUE_4_ARGS
     1394        sub     xSP, 20h
     1395
     1396        fninit
     1397        fld     tword [A2]
     1398        FPU_LD_FXSTATE_FCW_AND_SAFE_FSW A0
     1399        %1      dword [A3]
     1400
     1401        fnstsw  word  [A1 + IEMFPURESULT.FSW]
     1402        fnclex
     1403        fstp    tword [A1 + IEMFPURESULT.r80Result]
     1404
     1405        fninit
     1406        add     xSP, 20h
     1407        EPILOGUE_4_ARGS 8
     1408ENDPROC iemAImpl_ %+ %1 %+ _r80_by_i32
     1409%endmacro
     1410
     1411IEMIMPL_FPU_R80_BY_I32 fiadd
     1412IEMIMPL_FPU_R80_BY_I32 fimul
     1413IEMIMPL_FPU_R80_BY_I32 fisub
     1414IEMIMPL_FPU_R80_BY_I32 fisubr
     1415IEMIMPL_FPU_R80_BY_I32 fidiv
     1416IEMIMPL_FPU_R80_BY_I32 fidivr
     1417
     1418
     1419;;
     1420; FPU instruction working on one 80-bit and one 32-bit signed integer value,
     1421; only returning FSW.
     1422;
     1423; @param    1       The instruction
     1424;
     1425; @param    A0      FPU context (fxsave).
     1426; @param    A1      Where to store the output FSW.
     1427; @param    A2      Pointer to the 80-bit value.
     1428; @param    A3      Pointer to the 64-bit value.
     1429;
     1430%macro IEMIMPL_FPU_R80_BY_I32_FSW 1
     1431BEGINPROC_FASTCALL iemAImpl_ %+ %1 %+ _r80_by_i32, 16
     1432        PROLOGUE_4_ARGS
     1433        sub     xSP, 20h
     1434
     1435        fninit
     1436        fld     tword [A2]
     1437        FPU_LD_FXSTATE_FCW_AND_SAFE_FSW A0
     1438        %1      dword [A3]
     1439
     1440        fnstsw  word  [A1]
     1441
     1442        fninit
     1443        add     xSP, 20h
     1444        EPILOGUE_4_ARGS 8
     1445ENDPROC iemAImpl_ %+ %1 %+ _r80_by_i32
     1446%endmacro
     1447
     1448IEMIMPL_FPU_R80_BY_I32_FSW ficom
    13501449
    13511450
     
    14431542
    14441543;;
    1445 ; FPU instruction working on one 80-bit and one 64-bit floating point value,
     1544; FPU instruction working on one 80-bit and one 32-bit floating point value,
    14461545; only returning FSW.
    14471546;
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h

    r40246 r40247  
    1132911329    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1133011330
    11331     IEM_MC_BEGIN(0, 2);
    11332     IEM_MC_LOCAL(IEMFPURESULT,      FpuRes);
     11331    IEM_MC_BEGIN(0, 1);
    1133311332    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    1133411333
     
    1135711356    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1135811357
    11359     IEM_MC_BEGIN(0, 2);
    11360     IEM_MC_LOCAL(IEMFPURESULT,      FpuRes);
     11358    IEM_MC_BEGIN(0, 1);
    1136111359    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    1136211360
     
    1138511383    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1138611384
    11387     IEM_MC_BEGIN(0, 2);
    11388     IEM_MC_LOCAL(IEMFPURESULT,      FpuRes);
     11385    IEM_MC_BEGIN(0, 1);
    1138911386    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    1139011387
     
    1141311410    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1141411411
    11415     IEM_MC_BEGIN(0, 2);
    11416     IEM_MC_LOCAL(IEMFPURESULT,      FpuRes);
     11412    IEM_MC_BEGIN(0, 1);
    1141711413    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    1141811414
     
    1143611432
    1143711433/** Opcode 0xda 0xe9. */
    11438 FNIEMOP_STUB(iemOp_fucompp);
     11434FNIEMOP_DEF(iemOp_fucompp)
     11435{
     11436    IEMOP_MNEMONIC("fucompp st0,stN");
     11437    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     11438
     11439    IEM_MC_BEGIN(3, 1);
     11440    IEM_MC_LOCAL(uint16_t,              u16Fsw);
     11441    IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Fsw,        u16Fsw,     0);
     11442    IEM_MC_ARG(PCRTFLOAT80U,            pr80Value1,                 1);
     11443    IEM_MC_ARG(PCRTFLOAT80U,            pr80Value2,                 2);
     11444
     11445    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     11446    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     11447    IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, 0, pr80Value2, 1)
     11448        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fucom_r80_by_r80, pu16Fsw, pr80Value1, pr80Value2);
     11449        IEM_MC_UPDATE_FSW_THEN_POP_POP(u16Fsw);
     11450    IEM_MC_ELSE()
     11451        IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP();
     11452    IEM_MC_ENDIF();
     11453    IEM_MC_ADVANCE_RIP();
     11454
     11455    IEM_MC_END();
     11456    return VINF_SUCCESS;
     11457}
     11458
     11459
     11460/**
     11461 * Common worker for FPU instructions working on ST0 and an m32i, and storing
     11462 * the result in ST0.
     11463 *
     11464 * @param   pfnAImpl    Pointer to the instruction implementation (assembly).
     11465 */
     11466FNIEMOP_DEF_2(iemOpHlpFpu_st0_m32i, uint8_t, bRm, PFNIEMAIMPLFPUI32, pfnAImpl)
     11467{
     11468    IEM_MC_BEGIN(3, 3);
     11469    IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     11470    IEM_MC_LOCAL(IEMFPURESULT,              FpuRes);
     11471    IEM_MC_LOCAL(int32_t,                   i32Val2);
     11472    IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT,     pFpuRes,        FpuRes,     0);
     11473    IEM_MC_ARG(PCRTFLOAT80U,                pr80Value1,                 1);
     11474    IEM_MC_ARG_LOCAL_REF(int32_t const *,   pi32Val2,       i32Val2,    2);
     11475
     11476    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm);
     11477    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     11478
     11479    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     11480    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     11481    IEM_MC_FETCH_MEM_I32(i32Val2, pIemCpu->iEffSeg, GCPtrEffSrc);
     11482
     11483    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0)
     11484        IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pi32Val2);
     11485        IEM_MC_STORE_FPU_RESULT(FpuRes, 0);
     11486    IEM_MC_ELSE()
     11487        IEM_MC_FPU_STACK_UNDERFLOW(0);
     11488    IEM_MC_ENDIF();
     11489    IEM_MC_ADVANCE_RIP();
     11490
     11491    IEM_MC_END();
     11492    return VINF_SUCCESS;
     11493}
     11494
     11495
    1143911496/** Opcode 0xda !11/0. */
    11440 FNIEMOP_STUB_1(iemOp_fiadd_m32i,  uint8_t, bRm);
     11497FNIEMOP_DEF_1(iemOp_fiadd_m32i,  uint8_t, bRm)
     11498{
     11499    IEMOP_MNEMONIC("fiadd m32i");
     11500    return FNIEMOP_CALL_2(iemOpHlpFpu_st0_m32i, bRm, iemAImpl_fiadd_r80_by_i32);
     11501}
     11502
     11503
    1144111504/** Opcode 0xda !11/1. */
    11442 FNIEMOP_STUB_1(iemOp_fimul_m32i,  uint8_t, bRm);
     11505FNIEMOP_DEF_1(iemOp_fimul_m32i,  uint8_t, bRm)
     11506{
     11507    IEMOP_MNEMONIC("fimul m32i");
     11508    return FNIEMOP_CALL_2(iemOpHlpFpu_st0_m32i, bRm, iemAImpl_fimul_r80_by_i32);
     11509}
     11510
     11511
    1144311512/** Opcode 0xda !11/2. */
    11444 FNIEMOP_STUB_1(iemOp_ficom_m32i,  uint8_t, bRm);
     11513FNIEMOP_DEF_1(iemOp_ficom_m32i,  uint8_t, bRm)
     11514{
     11515    IEMOP_MNEMONIC("ficom st0,m32i");
     11516
     11517    IEM_MC_BEGIN(3, 3);
     11518    IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     11519    IEM_MC_LOCAL(uint16_t,                  u16Fsw);
     11520    IEM_MC_LOCAL(int32_t,                   i32Val2);
     11521    IEM_MC_ARG_LOCAL_REF(uint16_t *,        pu16Fsw,        u16Fsw,     0);
     11522    IEM_MC_ARG(PCRTFLOAT80U,                pr80Value1,                 1);
     11523    IEM_MC_ARG_LOCAL_REF(int32_t const *,   pi32Val2,       i32Val2,    2);
     11524
     11525    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm);
     11526    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     11527
     11528    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     11529    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     11530    IEM_MC_FETCH_MEM_I32(i32Val2, pIemCpu->iEffSeg, GCPtrEffSrc);
     11531
     11532    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0)
     11533        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_ficom_r80_by_i32, pu16Fsw, pr80Value1, pi32Val2);
     11534        IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pIemCpu->iEffSeg, GCPtrEffSrc);
     11535    IEM_MC_ELSE()
     11536        IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffSrc);
     11537    IEM_MC_ENDIF();
     11538    IEM_MC_ADVANCE_RIP();
     11539
     11540    IEM_MC_END();
     11541    return VINF_SUCCESS;
     11542}
     11543
     11544
    1144511545/** Opcode 0xda !11/3. */
    11446 FNIEMOP_STUB_1(iemOp_ficomp_m32i, uint8_t, bRm);
     11546FNIEMOP_DEF_1(iemOp_ficomp_m32i, uint8_t, bRm)
     11547{
     11548    IEMOP_MNEMONIC("ficomp st0,m32i");
     11549
     11550    IEM_MC_BEGIN(3, 3);
     11551    IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     11552    IEM_MC_LOCAL(uint16_t,                  u16Fsw);
     11553    IEM_MC_LOCAL(int32_t,                   i32Val2);
     11554    IEM_MC_ARG_LOCAL_REF(uint16_t *,        pu16Fsw,        u16Fsw,     0);
     11555    IEM_MC_ARG(PCRTFLOAT80U,                pr80Value1,                 1);
     11556    IEM_MC_ARG_LOCAL_REF(int32_t const *,   pi32Val2,       i32Val2,    2);
     11557
     11558    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm);
     11559    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     11560
     11561    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     11562    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     11563    IEM_MC_FETCH_MEM_I32(i32Val2, pIemCpu->iEffSeg, GCPtrEffSrc);
     11564
     11565    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value1, 0)
     11566        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_ficom_r80_by_i32, pu16Fsw, pr80Value1, pi32Val2);
     11567        IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pIemCpu->iEffSeg, GCPtrEffSrc);
     11568    IEM_MC_ELSE()
     11569        IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffSrc);
     11570    IEM_MC_ENDIF();
     11571    IEM_MC_ADVANCE_RIP();
     11572
     11573    IEM_MC_END();
     11574    return VINF_SUCCESS;
     11575}
     11576
     11577
    1144711578/** Opcode 0xda !11/4. */
    11448 FNIEMOP_STUB_1(iemOp_fisub_m32i,  uint8_t, bRm);
     11579FNIEMOP_DEF_1(iemOp_fisub_m32i,  uint8_t, bRm)
     11580{
     11581    IEMOP_MNEMONIC("fisub m32i");
     11582    return FNIEMOP_CALL_2(iemOpHlpFpu_st0_m32i, bRm, iemAImpl_fisub_r80_by_i32);
     11583}
     11584
     11585
    1144911586/** Opcode 0xda !11/5. */
    11450 FNIEMOP_STUB_1(iemOp_fisubr_m32i, uint8_t, bRm);
     11587FNIEMOP_DEF_1(iemOp_fisubr_m32i, uint8_t, bRm)
     11588{
     11589    IEMOP_MNEMONIC("fisubr m32i");
     11590    return FNIEMOP_CALL_2(iemOpHlpFpu_st0_m32i, bRm, iemAImpl_fisubr_r80_by_i32);
     11591}
     11592
     11593
    1145111594/** Opcode 0xda !11/6. */
    11452 FNIEMOP_STUB_1(iemOp_fidiv_m32i,  uint8_t, bRm);
     11595FNIEMOP_DEF_1(iemOp_fidiv_m32i,  uint8_t, bRm)
     11596{
     11597    IEMOP_MNEMONIC("fidiv m32i");
     11598    return FNIEMOP_CALL_2(iemOpHlpFpu_st0_m32i, bRm, iemAImpl_fidiv_r80_by_i32);
     11599}
     11600
     11601
    1145311602/** Opcode 0xda !11/7. */
    11454 FNIEMOP_STUB_1(iemOp_fidivr_m32i, uint8_t, bRm);
     11603FNIEMOP_DEF_1(iemOp_fidivr_m32i, uint8_t, bRm)
     11604{
     11605    IEMOP_MNEMONIC("fidivr m32i");
     11606    return FNIEMOP_CALL_2(iemOpHlpFpu_st0_m32i, bRm, iemAImpl_fidivr_r80_by_i32);
     11607}
     11608
    1145511609
    1145611610/** Opcode 0xda. */
     
    1155011704    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1155111705
    11552     IEM_MC_BEGIN(0, 2);
    11553     IEM_MC_LOCAL(IEMFPURESULT,      FpuRes);
     11706    IEM_MC_BEGIN(0, 1);
    1155411707    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    1155511708
     
    1157811731    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1157911732
    11580     IEM_MC_BEGIN(0, 2);
    11581     IEM_MC_LOCAL(IEMFPURESULT,      FpuRes);
     11733    IEM_MC_BEGIN(0, 1);
    1158211734    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    1158311735
     
    1160611758    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1160711759
    11608     IEM_MC_BEGIN(0, 2);
    11609     IEM_MC_LOCAL(IEMFPURESULT,      FpuRes);
     11760    IEM_MC_BEGIN(0, 1);
    1161011761    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    1161111762
     
    1163411785    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    1163511786
    11636     IEM_MC_BEGIN(0, 2);
    11637     IEM_MC_LOCAL(IEMFPURESULT,      FpuRes);
     11787    IEM_MC_BEGIN(0, 1);
    1163811788    IEM_MC_LOCAL(PCRTFLOAT80U,      pr80ValueN);
    1163911789
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r40244 r40247  
    810810typedef FNIEMAIMPLFPUR80FSW *PFNIEMAIMPLFPUR80FSW;
    811811FNIEMAIMPLFPUR80FSW         iemAImpl_fcom_r80_by_r80;
     812FNIEMAIMPLFPUR80FSW         iemAImpl_fucom_r80_by_r80;
    812813
    813814typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUR80UNARY,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes, PCRTFLOAT80U pr80Val));
     
    848849/** @name FPU operations taking a 32-bit signed integer argument
    849850 * @{  */
    850 typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUS32OUT,(PCX86FXSTATE pFpuState, uint16_t *pu16FSW,
     851typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUI32OUT,(PCX86FXSTATE pFpuState, uint16_t *pu16FSW,
    851852                                                     int32_t *pi32Dst, PCRTFLOAT80U pr80Value));
    852 typedef FNIEMAIMPLFPUS32OUT *PFNIEMAIMPLFPUS32OUT;
    853 
    854 FNIEMAIMPLFPUS32OUT iemAImpl_fpu_r80_to_i32;
    855 
     853typedef FNIEMAIMPLFPUI32OUT *PFNIEMAIMPLFPUI32OUT;
     854
     855FNIEMAIMPLFPUI32OUT iemAImpl_fpu_r80_to_i32;
     856
     857typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUI32,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes,
     858                                                   PCRTFLOAT80U pr80Val1, int32_t const *pi32Val2));
     859typedef FNIEMAIMPLFPUI32    *PFNIEMAIMPLFPUI32;
     860
     861FNIEMAIMPLFPUI32    iemAImpl_fiadd_r80_by_i32;
     862FNIEMAIMPLFPUI32    iemAImpl_fimul_r80_by_i32;
     863FNIEMAIMPLFPUI32    iemAImpl_fisub_r80_by_i32;
     864FNIEMAIMPLFPUI32    iemAImpl_fisubr_r80_by_i32;
     865FNIEMAIMPLFPUI32    iemAImpl_fidiv_r80_by_i32;
     866FNIEMAIMPLFPUI32    iemAImpl_fidivr_r80_by_i32;
     867
     868IEM_DECL_IMPL_DEF(void, iemAImpl_ficom_r80_by_i32,(PCX86FXSTATE pFpuState, uint16_t *pu16Fsw,
     869                                                   PCRTFLOAT80U pr80Val1, int32_t const *pi322Val2));
    856870/** @}  */
    857871
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r40246 r40247  
    193193
    194194#define iemAImpl_fcom_r80_by_r80        NULL
     195#define iemAImpl_fucom_r80_by_r80       NULL
    195196#define iemAImpl_fabs_r80               NULL
    196197#define iemAImpl_fchs_r80               NULL
     
    215216#define iemAImpl_fxtract_r80_r80        NULL
    216217#define iemAImpl_fsincos_r80_r80        NULL
     218
     219#define iemAImpl_fiadd_r80_by_i32       NULL
     220#define iemAImpl_fimul_r80_by_i32       NULL
     221#define iemAImpl_fisub_r80_by_i32       NULL
     222#define iemAImpl_fisubr_r80_by_i32      NULL
     223#define iemAImpl_fidiv_r80_by_i32       NULL
     224#define iemAImpl_fidivr_r80_by_i32      NULL
    217225
    218226#define iemCImpl_callf                  NULL
     
    403411#define IEM_MC_FETCH_MEM_U16(a_u16Dst, a_iSeg, a_GCPtrMem)              do { CHK_GCPTR(a_GCPtrMem); } while (0)
    404412#define IEM_MC_FETCH_MEM_U32(a_u32Dst, a_iSeg, a_GCPtrMem)              do { CHK_GCPTR(a_GCPtrMem); } while (0)
     413#define IEM_MC_FETCH_MEM_I32(a_i32Dst, a_iSeg, a_GCPtrMem)              do { CHK_GCPTR(a_GCPtrMem); CHK_TYPE(int32_t, a_i32Dst); } while (0)
    405414#define IEM_MC_FETCH_MEM_S32_SX_U64(a_u64Dst, a_iSeg, a_GCPtrMem)       do { CHK_GCPTR(a_GCPtrMem); } while (0)
    406415#define IEM_MC_FETCH_MEM_U64(a_u64Dst, a_iSeg, a_GCPtrMem)              do { CHK_GCPTR(a_GCPtrMem); } while (0)
     
    475484#define IEM_MC_STORE_FPU_RESULT_MEM_OP_THEN_POP(a_FpuData, a_iStReg, a_iEffSeg, a_GCPtrEff)     do { } while (0)
    476485#define IEM_MC_FPU_STACK_UNDERFLOW(a_iStReg)                                                    do { } while (0)
     486#define IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(a_iStReg, a_iEffSeg, a_GCPtrEff)                      do { } while (0)
    477487#define IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(a_iStReg)                                           do { } while (0)
    478 #define IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(a_iStReg, a_iEffSeg, a_GCPtrEff)                      do { } while (0)
    479488#define IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(a_iStReg, a_iEffSeg, a_GCPtrEff)             do { } while (0)
     489#define IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP_POP(a_iStReg)                                       do { } while (0)
    480490#define IEM_MC_FPU_STACK_PUSH_UNDERFLOW()                                                       do { } while (0)
    481491#define IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO()                                                   do { } while (0)
     
    487497#define IEM_MC_UPDATE_FSW_THEN_POP(a_u16FSW)                                                    do { } while (0)
    488498#define IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(a_u16FSW, a_iEffSeg, a_GCPtrEff)                 do { } while (0)
     499#define IEM_MC_UPDATE_FSW_THEN_POP_POP(a_u16FSW)                                                do { } while (0)
    489500#define IEM_MC_UPDATE_FPU_OPCODE_IP()                                                           do { } while (0)
    490501
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