VirtualBox

Changeset 40248 in vbox


Ignore:
Timestamp:
Feb 24, 2012 4:12:05 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
76461
Message:

IEM: fst[p], fist[p] and fisttp implementations and fixes.

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

Legend:

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

    r40247 r40248  
    61046104#define IEM_MC_STORE_MEM_U8_CONST(a_iSeg, a_GCPtrMem, a_u8C) \
    61056105    IEM_MC_RETURN_ON_FAILURE(iemMemStoreDataU8(pIemCpu, (a_iSeg), (a_GCPtrMem), (a_u8C)))
     6106#define IEM_MC_STORE_MEM_U16_CONST(a_iSeg, a_GCPtrMem, a_u16C) \
     6107    IEM_MC_RETURN_ON_FAILURE(iemMemStoreDataU16(pIemCpu, (a_iSeg), (a_GCPtrMem), (a_u16C)))
     6108#define IEM_MC_STORE_MEM_U32_CONST(a_iSeg, a_GCPtrMem, a_u32C) \
     6109    IEM_MC_RETURN_ON_FAILURE(iemMemStoreDataU32(pIemCpu, (a_iSeg), (a_GCPtrMem), (a_u32C)))
     6110#define IEM_MC_STORE_MEM_U64_CONST(a_iSeg, a_GCPtrMem, a_u64C) \
     6111    IEM_MC_RETURN_ON_FAILURE(iemMemStoreDataU64(pIemCpu, (a_iSeg), (a_GCPtrMem), (a_u64C)))
     6112
     6113#define IEM_MC_STORE_MEM_I8_CONST_BY_REF( a_pi8Dst,  a_i8C)     *(a_pi8Dst)  = (a_i8C)
     6114#define IEM_MC_STORE_MEM_I16_CONST_BY_REF(a_pi16Dst, a_i16C)    *(a_pi16Dst) = (a_i16C)
     6115#define IEM_MC_STORE_MEM_I32_CONST_BY_REF(a_pi32Dst, a_i32C)    *(a_pi32Dst) = (a_i32C)
     6116#define IEM_MC_STORE_MEM_I64_CONST_BY_REF(a_pi64Dst, a_i64C)    *(a_pi64Dst) = (a_i64C)
     6117#define IEM_MC_STORE_MEM_NEG_QNAN_R32_BY_REF(a_pr32Dst)         (a_pr32Dst)->u32     = UINT32_C(0xffc00000)
     6118#define IEM_MC_STORE_MEM_NEG_QNAN_R64_BY_REF(a_pr64Dst)         (a_pr64Dst)->au64[0] = UINT64_C(0xfff8000000000000)
     6119#define IEM_MC_STORE_MEM_NEG_QNAN_R80_BY_REF(a_pr80Dst) \
     6120    do { \
     6121        (a_pr80Dst)->au64[1] = UINT32_C(0xc000000000000000); \
     6122        (a_pr80Dst)->au16[4] = UINT16_C(0xffff); \
     6123    } while (0)
     6124
    61066125
    61076126#define IEM_MC_PUSH_U16(a_u16Value) \
     
    61406159
    61416160/** Commits the memory and unmaps the guest memory unless the FPU status word
    6142  * indicates an exception (FSW.ES).
    6143  * @remarks     May return (for now anyway).
    6144  */
    6145 #define IEM_MC_MEM_COMMIT_AND_UNMAP_UNLESS_FPU_XCPT(a_pvMem, a_fAccess, a_u16FSW) \
     6161 * indicates (@a a_u16FSW) and FPU control word indicates a pending exception
     6162 * that would cause FLD not to store.
     6163 *
     6164 * The current understanding is that \#O, \#U, \#IA and \#IS will prevent a
     6165 * store, while \#P will not.
     6166 *
     6167 * @remarks     May in theory return - for now.
     6168 */
     6169#define IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(a_pvMem, a_fAccess, a_u16FSW) \
    61466170    do { \
    6147         if (!(a_u16FSW & X86_FSW_ES)) \
     6171        if (   !(a_u16FSW & X86_FSW_ES) \
     6172            || !(  (a_u16FSW & (X86_FSW_UE | X86_FSW_OE | X86_FSW_IE)) \
     6173                 & ~(pIemCpu->CTX_SUFF(pCtx)->fpu.FCW & X86_FCW_MASK_ALL) ) ) \
    61486174            IEM_MC_RETURN_ON_FAILURE(iemMemCommitAndUnmap(pIemCpu, (a_pvMem), (a_fAccess))); \
    61496175    } while (0)
     
    64416467#define IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80_FIRST(a_pr80Dst0, a_iSt0, a_iSt1) \
    64426468    if (iemFpu2StRegsNotEmptyRefFirst(pIemCpu, (a_iSt0), &(a_pr80Dst0), (a_iSt1)) == VINF_SUCCESS) {
     6469#define IEM_MC_IF_FCW_IM() \
     6470    if (pIemCpu->CTX_SUFF(pCtx)->fpu.FCW & X86_FCW_IM) {
    64436471
    64446472#define IEM_MC_ELSE()                                   } else {
  • trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm

    r40247 r40248  
    13251325
    13261326;
     1327;---------------------- 16-bit signed integer operations ----------------------
     1328;
     1329
     1330
     1331;;
     1332; Converts a 16-bit floating point value to a 80-bit one (fpu register).
     1333;
     1334; @param    A0      FPU context (fxsave).
     1335; @param    A1      Pointer to a IEMFPURESULT for the output.
     1336; @param    A2      Pointer to the 16-bit floating point value to convert.
     1337;
     1338BEGINPROC_FASTCALL iemAImpl_fild_i16_to_r80, 12
     1339        PROLOGUE_3_ARGS
     1340        sub     xSP, 20h
     1341
     1342        fninit
     1343        FPU_LD_FXSTATE_FCW_AND_SAFE_FSW A0
     1344        fild    word [A2]
     1345
     1346        fnstsw  word  [A1 + IEMFPURESULT.FSW]
     1347        fnclex
     1348        fstp    tword [A1 + IEMFPURESULT.r80Result]
     1349
     1350        fninit
     1351        add     xSP, 20h
     1352        EPILOGUE_3_ARGS 0
     1353ENDPROC iemAImpl_fild_i16_to_r80
     1354
     1355
     1356;;
     1357; Store a 80-bit floating point value (register) as a 16-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 16-bit signed integer value.
     1362; @param    A3      Pointer to the 80-bit value.
     1363;
     1364BEGINPROC_FASTCALL iemAImpl_fist_r80_to_i16, 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        fistp   word [A2]
     1372
     1373        fnstsw  word  [A1]
     1374
     1375        fninit
     1376        add     xSP, 20h
     1377        EPILOGUE_3_ARGS 0
     1378ENDPROC iemAImpl_fist_r80_to_i16
     1379
     1380
     1381;;
     1382; Store a 80-bit floating point value (register) as a 16-bit signed integer
     1383; (memory) with truncation.
     1384;
     1385; @param    A0      FPU context (fxsave).
     1386; @param    A1      Where to return the output FSW.
     1387; @param    A2      Where to store the 16-bit signed integer value.
     1388; @param    A3      Pointer to the 80-bit value.
     1389;
     1390BEGINPROC_FASTCALL iemAImpl_fistt_r80_to_i16, 12
     1391        PROLOGUE_3_ARGS
     1392        sub     xSP, 20h
     1393
     1394        fninit
     1395        fld     tword [A3]
     1396        FPU_LD_FXSTATE_FCW_AND_SAFE_FSW A0
     1397        fisttp  dword [A2]
     1398
     1399        fnstsw  word  [A1]
     1400
     1401        fninit
     1402        add     xSP, 20h
     1403        EPILOGUE_3_ARGS 0
     1404ENDPROC iemAImpl_fistt_r80_to_i16
     1405
     1406
     1407
     1408;
    13271409;---------------------- 32-bit signed integer operations ----------------------
    13281410;
     
    13301412
    13311413;;
    1332 ; Converts a 80-bit floating point value to a 32-bit signed integer.
    1333 ;
    1334 ; @param    A0      FPU context (fxsave).
    1335 ; @param    A1      Pointer to a 16-bit FSW output variable.
    1336 ; @param    A2      Pointer to the 32-bit signed integer output variable.
    1337 ; @param    A3      Pointer to the 80-bit floating point value to convert.
    1338 ;
    1339 BEGINPROC_FASTCALL iemAImpl_fpu_r80_to_i32, 12
    1340         PROLOGUE_4_ARGS
    1341         sub     xSP, 20h
    1342 
    1343         fninit
    1344         fld     tword [A3]
    1345         FPU_LD_FXSTATE_FCW_AND_SAFE_FSW A0
    1346         fistp   dword [A2]
    1347 
    1348         fnstsw  word  [A1]
     1414; Converts a 32-bit floating point value to a 80-bit one (fpu register).
     1415;
     1416; @param    A0      FPU context (fxsave).
     1417; @param    A1      Pointer to a IEMFPURESULT for the output.
     1418; @param    A2      Pointer to the 32-bit floating point value to convert.
     1419;
     1420BEGINPROC_FASTCALL iemAImpl_fild_i32_to_r80, 12
     1421        PROLOGUE_3_ARGS
     1422        sub     xSP, 20h
     1423
     1424        fninit
     1425        FPU_LD_FXSTATE_FCW_AND_SAFE_FSW A0
     1426        fild    dword [A2]
     1427
     1428        fnstsw  word  [A1 + IEMFPURESULT.FSW]
    13491429        fnclex
    1350 
    1351         add     xSP, 20h
    1352         EPILOGUE_4_ARGS 0
    1353 ENDPROC iemAImpl_fpu_r80_to_i32
     1430        fstp    tword [A1 + IEMFPURESULT.r80Result]
     1431
     1432        fninit
     1433        add     xSP, 20h
     1434        EPILOGUE_3_ARGS 0
     1435ENDPROC iemAImpl_fild_i32_to_r80
    13541436
    13551437
     
    13621444; @param    A3      Pointer to the 80-bit value.
    13631445;
    1364 BEGINPROC_FASTCALL iemAImpl_fst_r80_to_i32, 12
     1446BEGINPROC_FASTCALL iemAImpl_fist_r80_to_i32, 12
    13651447        PROLOGUE_3_ARGS
    13661448        sub     xSP, 20h
     
    13691451        fld     tword [A3]
    13701452        FPU_LD_FXSTATE_FCW_AND_SAFE_FSW A0
    1371         fist    dword [A2]
     1453        fistp   dword [A2]
    13721454
    13731455        fnstsw  word  [A1]
     
    13761458        add     xSP, 20h
    13771459        EPILOGUE_3_ARGS 0
    1378 ENDPROC iemAImpl_fst_r80_to_i32
     1460ENDPROC iemAImpl_fist_r80_to_i32
     1461
     1462
     1463;;
     1464; Store a 80-bit floating point value (register) as a 32-bit signed integer
     1465; (memory) with truncation.
     1466;
     1467; @param    A0      FPU context (fxsave).
     1468; @param    A1      Where to return the output FSW.
     1469; @param    A2      Where to store the 32-bit signed integer value.
     1470; @param    A3      Pointer to the 80-bit value.
     1471;
     1472BEGINPROC_FASTCALL iemAImpl_fistt_r80_to_i32, 12
     1473        PROLOGUE_3_ARGS
     1474        sub     xSP, 20h
     1475
     1476        fninit
     1477        fld     tword [A3]
     1478        FPU_LD_FXSTATE_FCW_AND_SAFE_FSW A0
     1479        fisttp  dword [A2]
     1480
     1481        fnstsw  word  [A1]
     1482
     1483        fninit
     1484        add     xSP, 20h
     1485        EPILOGUE_3_ARGS 0
     1486ENDPROC iemAImpl_fistt_r80_to_i32
    13791487
    13801488
     
    14471555
    14481556IEMIMPL_FPU_R80_BY_I32_FSW ficom
     1557
     1558
     1559
     1560;
     1561;---------------------- 64-bit signed integer operations ----------------------
     1562;
     1563
     1564
     1565;;
     1566; Converts a 64-bit floating point value to a 80-bit one (fpu register).
     1567;
     1568; @param    A0      FPU context (fxsave).
     1569; @param    A1      Pointer to a IEMFPURESULT for the output.
     1570; @param    A2      Pointer to the 64-bit floating point value to convert.
     1571;
     1572BEGINPROC_FASTCALL iemAImpl_fild_i64_to_r80, 12
     1573        PROLOGUE_3_ARGS
     1574        sub     xSP, 20h
     1575
     1576        fninit
     1577        FPU_LD_FXSTATE_FCW_AND_SAFE_FSW A0
     1578        fild    qword [A2]
     1579
     1580        fnstsw  word  [A1 + IEMFPURESULT.FSW]
     1581        fnclex
     1582        fstp    tword [A1 + IEMFPURESULT.r80Result]
     1583
     1584        fninit
     1585        add     xSP, 20h
     1586        EPILOGUE_3_ARGS 0
     1587ENDPROC iemAImpl_fild_i64_to_r80
     1588
     1589
     1590;;
     1591; Store a 80-bit floating point value (register) as a 64-bit signed integer (memory).
     1592;
     1593; @param    A0      FPU context (fxsave).
     1594; @param    A1      Where to return the output FSW.
     1595; @param    A2      Where to store the 64-bit signed integer value.
     1596; @param    A3      Pointer to the 80-bit value.
     1597;
     1598BEGINPROC_FASTCALL iemAImpl_fist_r80_to_i64, 12
     1599        PROLOGUE_3_ARGS
     1600        sub     xSP, 20h
     1601
     1602        fninit
     1603        fld     tword [A3]
     1604        FPU_LD_FXSTATE_FCW_AND_SAFE_FSW A0
     1605        fistp   qword [A2]
     1606
     1607        fnstsw  word  [A1]
     1608
     1609        fninit
     1610        add     xSP, 20h
     1611        EPILOGUE_3_ARGS 0
     1612ENDPROC iemAImpl_fist_r80_to_i64
     1613
     1614
     1615;;
     1616; Store a 80-bit floating point value (register) as a 64-bit signed integer
     1617; (memory) with truncation.
     1618;
     1619; @param    A0      FPU context (fxsave).
     1620; @param    A1      Where to return the output FSW.
     1621; @param    A2      Where to store the 64-bit signed integer value.
     1622; @param    A3      Pointer to the 80-bit value.
     1623;
     1624BEGINPROC_FASTCALL iemAImpl_fistt_r80_to_i64, 12
     1625        PROLOGUE_3_ARGS
     1626        sub     xSP, 20h
     1627
     1628        fninit
     1629        fld     tword [A3]
     1630        FPU_LD_FXSTATE_FCW_AND_SAFE_FSW A0
     1631        fisttp  qword [A2]
     1632
     1633        fnstsw  word  [A1]
     1634
     1635        fninit
     1636        add     xSP, 20h
     1637        EPILOGUE_3_ARGS 0
     1638ENDPROC iemAImpl_fistt_r80_to_i64
     1639
    14491640
    14501641
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h

    r40247 r40248  
    1064510645    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm);
    1064610646    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    10647 
    1064810647    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
    1064910648    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     10649
    1065010650    IEM_MC_MEM_MAP(pr32Dst, IEM_ACCESS_DATA_W, pIemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);
    1065110651    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0)
    1065210652        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r32, pu16Fsw, pr32Dst, pr80Value);
    10653         IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W);
     10653        IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr32Dst, IEM_ACCESS_DATA_W, u16Fsw);
    1065410654        IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pIemCpu->iEffSeg, GCPtrEffDst);
    1065510655    IEM_MC_ELSE()
    10656         IEM_MC_MEM_COMMIT_AND_UNMAP_UNLESS_FPU_XCPT(pr32Dst, IEM_ACCESS_DATA_W, u16Fsw);
     10656        IEM_MC_IF_FCW_IM()
     10657            IEM_MC_STORE_MEM_NEG_QNAN_R32_BY_REF(pr32Dst);
     10658            IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W);
     10659        IEM_MC_ENDIF();
    1065710660        IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst);
    1065810661    IEM_MC_ENDIF();
    1065910662    IEM_MC_ADVANCE_RIP();
     10663
    1066010664    IEM_MC_END();
    1066110665    return VINF_SUCCESS;
     
    1067610680    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm);
    1067710681    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    10678 
    1067910682    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
    1068010683    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     10684
    1068110685    IEM_MC_MEM_MAP(pr32Dst, IEM_ACCESS_DATA_W, pIemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);
    1068210686    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0)
    1068310687        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r32, pu16Fsw, pr32Dst, pr80Value);
    10684         IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W);
     10688        IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr32Dst, IEM_ACCESS_DATA_W, u16Fsw);
    1068510689        IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pIemCpu->iEffSeg, GCPtrEffDst);
    1068610690    IEM_MC_ELSE()
    10687         IEM_MC_MEM_COMMIT_AND_UNMAP_UNLESS_FPU_XCPT(pr32Dst, IEM_ACCESS_DATA_W, u16Fsw);
     10691        IEM_MC_IF_FCW_IM()
     10692            IEM_MC_STORE_MEM_NEG_QNAN_R32_BY_REF(pr32Dst);
     10693            IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W);
     10694        IEM_MC_ENDIF();
    1068810695        IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst);
    1068910696    IEM_MC_ENDIF();
    1069010697    IEM_MC_ADVANCE_RIP();
     10698
    1069110699    IEM_MC_END();
    1069210700    return VINF_SUCCESS;
     
    1165011658
    1165111659/** Opcode 0xdb !11/0. */
    11652 FNIEMOP_STUB_1(iemOp_fild_m32i, uint8_t, bRm);
     11660FNIEMOP_DEF_1(iemOp_fild_m32i, uint8_t, bRm)
     11661{
     11662    IEMOP_MNEMONIC("fild m32i");
     11663
     11664    IEM_MC_BEGIN(2, 3);
     11665    IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
     11666    IEM_MC_LOCAL(IEMFPURESULT,              FpuRes);
     11667    IEM_MC_LOCAL(int32_t,                   i32Val);
     11668    IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT,     pFpuRes,    FpuRes, 0);
     11669    IEM_MC_ARG_LOCAL_REF(int32_t const *,   pi32Val,    i32Val, 1);
     11670
     11671    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm);
     11672    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     11673
     11674    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     11675    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     11676    IEM_MC_FETCH_MEM_I32(i32Val, pIemCpu->iEffSeg, GCPtrEffSrc);
     11677
     11678    IEM_MC_IF_FPUREG_IS_EMPTY(7)
     11679        IEM_MC_CALL_FPU_AIMPL_2(iemAImpl_fild_i32_to_r80, pFpuRes, pi32Val);
     11680        IEM_MC_PUSH_FPU_RESULT_MEM_OP(FpuRes, pIemCpu->iEffSeg, GCPtrEffSrc);
     11681    IEM_MC_ELSE()
     11682        IEM_MC_FPU_STACK_PUSH_OVERFLOW_MEM_OP(pIemCpu->iEffSeg, GCPtrEffSrc);
     11683    IEM_MC_ENDIF();
     11684    IEM_MC_ADVANCE_RIP();
     11685
     11686    IEM_MC_END();
     11687    return VINF_SUCCESS;
     11688}
     11689
    1165311690
    1165411691/** Opcode 0xdb !11/1. */
    11655 FNIEMOP_STUB_1(iemOp_fisttp_m32i, uint8_t, bRm);
    11656 
    11657 /** Opcode 0xdb !11/2. */
    11658 FNIEMOP_STUB_1(iemOp_fist_m32i, uint8_t, bRm);
    11659 
    11660 
    11661 /** Opcode 0xdb !11/3. */
    11662 FNIEMOP_DEF_1(iemOp_fistp_m32i, uint8_t, bRm)
    11663 {
    11664     IEMOP_MNEMONIC("fistp m32i");
     11692FNIEMOP_DEF_1(iemOp_fisttp_m32i, uint8_t, bRm)
     11693{
     11694    IEMOP_MNEMONIC("fisttp m32i");
    1166511695    IEM_MC_BEGIN(3, 2);
    1166611696    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst);
     
    1167711707    IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, pIemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);
    1167811708    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0)
    11679         IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fpu_r80_to_i32, pu16Fsw, pi32Dst, pr80Value);
    11680         IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W);
     11709        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i32, pu16Fsw, pi32Dst, pr80Value);
     11710        IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi32Dst, IEM_ACCESS_DATA_W, u16Fsw);
    1168111711        IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pIemCpu->iEffSeg, GCPtrEffDst);
    1168211712    IEM_MC_ELSE()
    11683         IEM_MC_MEM_COMMIT_AND_UNMAP_UNLESS_FPU_XCPT(pi32Dst, IEM_ACCESS_DATA_W, u16Fsw);
     11713        IEM_MC_IF_FCW_IM()
     11714            IEM_MC_STORE_MEM_I32_CONST_BY_REF(pi32Dst, INT32_MIN /* (integer indefinite) */);
     11715            IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W);
     11716        IEM_MC_ENDIF();
    1168411717        IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst);
    1168511718    IEM_MC_ENDIF();
    1168611719    IEM_MC_ADVANCE_RIP();
     11720
    1168711721    IEM_MC_END();
    1168811722    return VINF_SUCCESS;
     
    1169011724
    1169111725
     11726/** Opcode 0xdb !11/2. */
     11727FNIEMOP_DEF_1(iemOp_fist_m32i, uint8_t, bRm)
     11728{
     11729    IEMOP_MNEMONIC("fist m32i");
     11730    IEM_MC_BEGIN(3, 2);
     11731    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst);
     11732    IEM_MC_LOCAL(uint16_t,              u16Fsw);
     11733    IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Fsw,    u16Fsw, 0);
     11734    IEM_MC_ARG(int32_t *,               pi32Dst,            1);
     11735    IEM_MC_ARG(PCRTFLOAT80U,            pr80Value,          2);
     11736
     11737    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm);
     11738    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     11739    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     11740    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     11741
     11742    IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, pIemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);
     11743    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0)
     11744        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i32, pu16Fsw, pi32Dst, pr80Value);
     11745        IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi32Dst, IEM_ACCESS_DATA_W, u16Fsw);
     11746        IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pIemCpu->iEffSeg, GCPtrEffDst);
     11747    IEM_MC_ELSE()
     11748        IEM_MC_IF_FCW_IM()
     11749            IEM_MC_STORE_MEM_I32_CONST_BY_REF(pi32Dst, INT32_MIN /* (integer indefinite) */);
     11750            IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W);
     11751        IEM_MC_ENDIF();
     11752        IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst);
     11753    IEM_MC_ENDIF();
     11754    IEM_MC_ADVANCE_RIP();
     11755
     11756    IEM_MC_END();
     11757    return VINF_SUCCESS;
     11758}
     11759
     11760
     11761/** Opcode 0xdb !11/3. */
     11762FNIEMOP_DEF_1(iemOp_fistp_m32i, uint8_t, bRm)
     11763{
     11764    IEMOP_MNEMONIC("fisttp m32i");
     11765    IEM_MC_BEGIN(3, 2);
     11766    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst);
     11767    IEM_MC_LOCAL(uint16_t,              u16Fsw);
     11768    IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Fsw,    u16Fsw, 0);
     11769    IEM_MC_ARG(int32_t *,               pi32Dst,            1);
     11770    IEM_MC_ARG(PCRTFLOAT80U,            pr80Value,          2);
     11771
     11772    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm);
     11773    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     11774    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     11775    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     11776
     11777    IEM_MC_MEM_MAP(pi32Dst, IEM_ACCESS_DATA_W, pIemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);
     11778    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0)
     11779        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i32, pu16Fsw, pi32Dst, pr80Value);
     11780        IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi32Dst, IEM_ACCESS_DATA_W, u16Fsw);
     11781        IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pIemCpu->iEffSeg, GCPtrEffDst);
     11782    IEM_MC_ELSE()
     11783        IEM_MC_IF_FCW_IM()
     11784            IEM_MC_STORE_MEM_I32_CONST_BY_REF(pi32Dst, INT32_MIN /* (integer indefinite) */);
     11785            IEM_MC_MEM_COMMIT_AND_UNMAP(pi32Dst, IEM_ACCESS_DATA_W);
     11786        IEM_MC_ENDIF();
     11787        IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst);
     11788    IEM_MC_ENDIF();
     11789    IEM_MC_ADVANCE_RIP();
     11790
     11791    IEM_MC_END();
     11792    return VINF_SUCCESS;
     11793}
     11794
     11795
    1169211796/** Opcode 0xdb !11/5. */
    11693 FNIEMOP_STUB_1(iemOp_fld_r80, uint8_t, bRm);
     11797FNIEMOP_STUB_1(iemOp_fld_m80r, uint8_t, bRm);
    1169411798
    1169511799
    1169611800/** Opcode 0xdb !11/7. */
    11697 FNIEMOP_STUB_1(iemOp_fstp_r80, uint8_t, bRm);
     11801FNIEMOP_STUB_1(iemOp_fstp_m80r, uint8_t, bRm);
    1169811802
    1169911803
     
    1193512039            case 3: return FNIEMOP_CALL_1(iemOp_fistp_m32i, bRm);
    1193612040            case 4: return IEMOP_RAISE_INVALID_OPCODE();
    11937             case 5: return FNIEMOP_CALL_1(iemOp_fld_r80,   bRm);
     12041            case 5: return FNIEMOP_CALL_1(iemOp_fld_m80r,   bRm);
    1193812042            case 6: return IEMOP_RAISE_INVALID_OPCODE();
    11939             case 7: return FNIEMOP_CALL_1(iemOp_fstp_r80,  bRm);
     12043            case 7: return FNIEMOP_CALL_1(iemOp_fstp_m80r,  bRm);
    1194012044            IEM_NOT_REACHED_DEFAULT_CASE_RET();
    1194112045        }
     
    1212812232
    1212912233/** Opcode 0xdd !11/0. */
    12130 FNIEMOP_STUB_1(iemOp_fisttp_m64i, uint8_t, bRm);
     12234FNIEMOP_DEF_1(iemOp_fisttp_m64i, uint8_t, bRm)
     12235{
     12236    IEMOP_MNEMONIC("fisttp m64i");
     12237    IEM_MC_BEGIN(3, 2);
     12238    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst);
     12239    IEM_MC_LOCAL(uint16_t,              u16Fsw);
     12240    IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Fsw,    u16Fsw, 0);
     12241    IEM_MC_ARG(int64_t *,               pi64Dst,            1);
     12242    IEM_MC_ARG(PCRTFLOAT80U,            pr80Value,          2);
     12243
     12244    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm);
     12245    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     12246    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     12247    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     12248
     12249    IEM_MC_MEM_MAP(pi64Dst, IEM_ACCESS_DATA_W, pIemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);
     12250    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0)
     12251        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i64, pu16Fsw, pi64Dst, pr80Value);
     12252        IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi64Dst, IEM_ACCESS_DATA_W, u16Fsw);
     12253        IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pIemCpu->iEffSeg, GCPtrEffDst);
     12254    IEM_MC_ELSE()
     12255        IEM_MC_IF_FCW_IM()
     12256            IEM_MC_STORE_MEM_I64_CONST_BY_REF(pi64Dst, INT64_MIN /* (integer indefinite) */);
     12257            IEM_MC_MEM_COMMIT_AND_UNMAP(pi64Dst, IEM_ACCESS_DATA_W);
     12258        IEM_MC_ENDIF();
     12259        IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst);
     12260    IEM_MC_ENDIF();
     12261    IEM_MC_ADVANCE_RIP();
     12262
     12263    IEM_MC_END();
     12264    return VINF_SUCCESS;
     12265}
    1213112266
    1213212267
     
    1215012285    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0)
    1215112286        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r64, pu16Fsw, pr64Dst, pr80Value);
    12152         IEM_MC_MEM_COMMIT_AND_UNMAP(pr64Dst, IEM_ACCESS_DATA_W);
     12287        IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr64Dst, IEM_ACCESS_DATA_W, u16Fsw);
    1215312288        IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pIemCpu->iEffSeg, GCPtrEffDst);
    1215412289    IEM_MC_ELSE()
    12155         IEM_MC_MEM_COMMIT_AND_UNMAP_UNLESS_FPU_XCPT(pr64Dst, IEM_ACCESS_DATA_W, u16Fsw);
     12290        IEM_MC_IF_FCW_IM()
     12291            IEM_MC_STORE_MEM_NEG_QNAN_R64_BY_REF(pr64Dst);
     12292            IEM_MC_MEM_COMMIT_AND_UNMAP(pr64Dst, IEM_ACCESS_DATA_W);
     12293        IEM_MC_ENDIF();
    1215612294        IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst);
    1215712295    IEM_MC_ENDIF();
    1215812296    IEM_MC_ADVANCE_RIP();
     12297
    1215912298    IEM_MC_END();
    1216012299    return VINF_SUCCESS;
     
    1218312322    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0)
    1218412323        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r64, pu16Fsw, pr64Dst, pr80Value);
    12185         IEM_MC_MEM_COMMIT_AND_UNMAP(pr64Dst, IEM_ACCESS_DATA_W);
     12324        IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pr64Dst, IEM_ACCESS_DATA_W, u16Fsw);
    1218612325        IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pIemCpu->iEffSeg, GCPtrEffDst);
    1218712326    IEM_MC_ELSE()
    12188         IEM_MC_MEM_COMMIT_AND_UNMAP_UNLESS_FPU_XCPT(pr64Dst, IEM_ACCESS_DATA_W, u16Fsw);
     12327        IEM_MC_IF_FCW_IM()
     12328            IEM_MC_STORE_MEM_NEG_QNAN_R64_BY_REF(pr64Dst);
     12329            IEM_MC_MEM_COMMIT_AND_UNMAP(pr64Dst, IEM_ACCESS_DATA_W);
     12330        IEM_MC_ENDIF();
    1218912331        IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst);
    1219012332    IEM_MC_ENDIF();
    1219112333    IEM_MC_ADVANCE_RIP();
     12334
    1219212335    IEM_MC_END();
    1219312336    return VINF_SUCCESS;
     
    1240112544FNIEMOP_STUB_1(iemOp_fild_m16i,   uint8_t, bRm);
    1240212545
     12546
    1240312547/** Opcode 0xdf !11/1. */
    12404 FNIEMOP_STUB_1(iemOp_fisttp_m16i, uint8_t, bRm);
     12548FNIEMOP_DEF_1(iemOp_fisttp_m16i, uint8_t, bRm)
     12549{
     12550    IEMOP_MNEMONIC("fisttp m16i");
     12551    IEM_MC_BEGIN(3, 2);
     12552    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst);
     12553    IEM_MC_LOCAL(uint16_t,              u16Fsw);
     12554    IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Fsw,    u16Fsw, 0);
     12555    IEM_MC_ARG(int16_t *,               pi16Dst,            1);
     12556    IEM_MC_ARG(PCRTFLOAT80U,            pr80Value,          2);
     12557
     12558    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm);
     12559    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     12560    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     12561    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     12562
     12563    IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, pIemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);
     12564    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0)
     12565        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fistt_r80_to_i16, pu16Fsw, pi16Dst, pr80Value);
     12566        IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi16Dst, IEM_ACCESS_DATA_W, u16Fsw);
     12567        IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pIemCpu->iEffSeg, GCPtrEffDst);
     12568    IEM_MC_ELSE()
     12569        IEM_MC_IF_FCW_IM()
     12570            IEM_MC_STORE_MEM_I16_CONST_BY_REF(pi16Dst, INT16_MIN /* (integer indefinite) */);
     12571            IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W);
     12572        IEM_MC_ENDIF();
     12573        IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst);
     12574    IEM_MC_ENDIF();
     12575    IEM_MC_ADVANCE_RIP();
     12576
     12577    IEM_MC_END();
     12578    return VINF_SUCCESS;
     12579}
     12580
    1240512581
    1240612582/** Opcode 0xdf !11/2. */
    12407 FNIEMOP_STUB_1(iemOp_fist_m16i,   uint8_t, bRm);
     12583FNIEMOP_DEF_1(iemOp_fist_m16i,   uint8_t, bRm)
     12584{
     12585    IEMOP_MNEMONIC("fistp m16i");
     12586    IEM_MC_BEGIN(3, 2);
     12587    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst);
     12588    IEM_MC_LOCAL(uint16_t,              u16Fsw);
     12589    IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Fsw,    u16Fsw, 0);
     12590    IEM_MC_ARG(int16_t *,               pi16Dst,            1);
     12591    IEM_MC_ARG(PCRTFLOAT80U,            pr80Value,          2);
     12592
     12593    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm);
     12594    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     12595    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     12596    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     12597
     12598    IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, pIemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);
     12599    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0)
     12600        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i16, pu16Fsw, pi16Dst, pr80Value);
     12601        IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi16Dst, IEM_ACCESS_DATA_W, u16Fsw);
     12602        IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16Fsw, pIemCpu->iEffSeg, GCPtrEffDst);
     12603    IEM_MC_ELSE()
     12604        IEM_MC_IF_FCW_IM()
     12605            IEM_MC_STORE_MEM_I16_CONST_BY_REF(pi16Dst, INT16_MIN /* (integer indefinite) */);
     12606            IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W);
     12607        IEM_MC_ENDIF();
     12608        IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst);
     12609    IEM_MC_ENDIF();
     12610    IEM_MC_ADVANCE_RIP();
     12611
     12612    IEM_MC_END();
     12613    return VINF_SUCCESS;
     12614}
     12615
    1240812616
    1240912617/** Opcode 0xdf !11/3. */
    12410 FNIEMOP_STUB_1(iemOp_fistp_m16i,  uint8_t, bRm);
     12618FNIEMOP_DEF_1(iemOp_fistp_m16i,  uint8_t, bRm)
     12619{
     12620    IEMOP_MNEMONIC("fistp m16i");
     12621    IEM_MC_BEGIN(3, 2);
     12622    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst);
     12623    IEM_MC_LOCAL(uint16_t,              u16Fsw);
     12624    IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Fsw,    u16Fsw, 0);
     12625    IEM_MC_ARG(int16_t *,               pi16Dst,            1);
     12626    IEM_MC_ARG(PCRTFLOAT80U,            pr80Value,          2);
     12627
     12628    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm);
     12629    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     12630    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     12631    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     12632
     12633    IEM_MC_MEM_MAP(pi16Dst, IEM_ACCESS_DATA_W, pIemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);
     12634    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0)
     12635        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i16, pu16Fsw, pi16Dst, pr80Value);
     12636        IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi16Dst, IEM_ACCESS_DATA_W, u16Fsw);
     12637        IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pIemCpu->iEffSeg, GCPtrEffDst);
     12638    IEM_MC_ELSE()
     12639        IEM_MC_IF_FCW_IM()
     12640            IEM_MC_STORE_MEM_I16_CONST_BY_REF(pi16Dst, INT16_MIN /* (integer indefinite) */);
     12641            IEM_MC_MEM_COMMIT_AND_UNMAP(pi16Dst, IEM_ACCESS_DATA_W);
     12642        IEM_MC_ENDIF();
     12643        IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst);
     12644    IEM_MC_ENDIF();
     12645    IEM_MC_ADVANCE_RIP();
     12646
     12647    IEM_MC_END();
     12648    return VINF_SUCCESS;
     12649}
     12650
    1241112651
    1241212652/** Opcode 0xdf !11/4. */
     
    1241912659FNIEMOP_STUB_1(iemOp_fbstp_m80d,  uint8_t, bRm);
    1242012660
     12661
    1242112662/** Opcode 0xdf !11/7. */
    12422 FNIEMOP_STUB_1(iemOp_fistp_m64i,  uint8_t, bRm);
     12663FNIEMOP_DEF_1(iemOp_fistp_m64i,  uint8_t, bRm)
     12664{
     12665    IEMOP_MNEMONIC("fistp m64i");
     12666    IEM_MC_BEGIN(3, 2);
     12667    IEM_MC_LOCAL(RTGCPTR,               GCPtrEffDst);
     12668    IEM_MC_LOCAL(uint16_t,              u16Fsw);
     12669    IEM_MC_ARG_LOCAL_REF(uint16_t *,    pu16Fsw,    u16Fsw, 0);
     12670    IEM_MC_ARG(int64_t *,               pi64Dst,            1);
     12671    IEM_MC_ARG(PCRTFLOAT80U,            pr80Value,          2);
     12672
     12673    IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm);
     12674    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     12675    IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();
     12676    IEM_MC_MAYBE_RAISE_FPU_XCPT();
     12677
     12678    IEM_MC_MEM_MAP(pi64Dst, IEM_ACCESS_DATA_W, pIemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/);
     12679    IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0)
     12680        IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fist_r80_to_i64, pu16Fsw, pi64Dst, pr80Value);
     12681        IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(pi64Dst, IEM_ACCESS_DATA_W, u16Fsw);
     12682        IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16Fsw, pIemCpu->iEffSeg, GCPtrEffDst);
     12683    IEM_MC_ELSE()
     12684        IEM_MC_IF_FCW_IM()
     12685            IEM_MC_STORE_MEM_I64_CONST_BY_REF(pi64Dst, INT64_MIN /* (integer indefinite) */);
     12686            IEM_MC_MEM_COMMIT_AND_UNMAP(pi64Dst, IEM_ACCESS_DATA_W);
     12687        IEM_MC_ENDIF();
     12688        IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst);
     12689    IEM_MC_ENDIF();
     12690    IEM_MC_ADVANCE_RIP();
     12691
     12692    IEM_MC_END();
     12693    return VINF_SUCCESS;
     12694}
    1242312695
    1242412696
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r40247 r40248  
    847847/** @} */
    848848
     849/** @name FPU operations taking a 16-bit signed integer argument
     850 * @{  */
     851typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUI16,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes,
     852                                                   PCRTFLOAT80U pr80Val1, int16_t const *pi16Val2));
     853typedef FNIEMAIMPLFPUI16    *PFNIEMAIMPLFPUI16;
     854
     855FNIEMAIMPLFPUI16    iemAImpl_fiadd_r80_by_i16;
     856FNIEMAIMPLFPUI16    iemAImpl_fimul_r80_by_i16;
     857FNIEMAIMPLFPUI16    iemAImpl_fisub_r80_by_i16;
     858FNIEMAIMPLFPUI16    iemAImpl_fisubr_r80_by_i16;
     859FNIEMAIMPLFPUI16    iemAImpl_fidiv_r80_by_i16;
     860FNIEMAIMPLFPUI16    iemAImpl_fidivr_r80_by_i16;
     861
     862IEM_DECL_IMPL_DEF(void, iemAImpl_ficom_r80_by_i16,(PCX86FXSTATE pFpuState, uint16_t *pu16Fsw,
     863                                                   PCRTFLOAT80U pr80Val1, int16_t const *pi16Val2));
     864
     865IEM_DECL_IMPL_DEF(void, iemAImpl_fild_i16_to_r80,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes, int16_t const *pi16Val));
     866IEM_DECL_IMPL_DEF(void, iemAImpl_fist_r80_to_i16,(PCX86FXSTATE pFpuState, uint16_t *pu16FSW,
     867                                                  int16_t *pi16Val, PCRTFLOAT80U pr80Val));
     868IEM_DECL_IMPL_DEF(void, iemAImpl_fistt_r80_to_i16,(PCX86FXSTATE pFpuState, uint16_t *pu16FSW,
     869                                                   int16_t *pi16Val, PCRTFLOAT80U pr80Val));
     870/** @}  */
     871
    849872/** @name FPU operations taking a 32-bit signed integer argument
    850873 * @{  */
    851 typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUI32OUT,(PCX86FXSTATE pFpuState, uint16_t *pu16FSW,
    852                                                      int32_t *pi32Dst, PCRTFLOAT80U pr80Value));
    853 typedef FNIEMAIMPLFPUI32OUT *PFNIEMAIMPLFPUI32OUT;
    854 
    855 FNIEMAIMPLFPUI32OUT iemAImpl_fpu_r80_to_i32;
    856 
    857874typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUI32,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes,
    858875                                                   PCRTFLOAT80U pr80Val1, int32_t const *pi32Val2));
     
    867884
    868885IEM_DECL_IMPL_DEF(void, iemAImpl_ficom_r80_by_i32,(PCX86FXSTATE pFpuState, uint16_t *pu16Fsw,
    869                                                    PCRTFLOAT80U pr80Val1, int32_t const *pi322Val2));
     886                                                   PCRTFLOAT80U pr80Val1, int32_t const *pi32Val2));
     887
     888IEM_DECL_IMPL_DEF(void, iemAImpl_fild_i32_to_r80,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes, int32_t const *pi32Val));
     889IEM_DECL_IMPL_DEF(void, iemAImpl_fist_r80_to_i32,(PCX86FXSTATE pFpuState, uint16_t *pu16FSW,
     890                                                  int32_t *pi32Val, PCRTFLOAT80U pr80Val));
     891IEM_DECL_IMPL_DEF(void, iemAImpl_fistt_r80_to_i32,(PCX86FXSTATE pFpuState, uint16_t *pu16FSW,
     892                                                   int32_t *pi32Val, PCRTFLOAT80U pr80Val));
     893/** @}  */
     894
     895/** @name FPU operations taking a 64-bit signed integer argument
     896 * @{  */
     897typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUI64,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes,
     898                                                   PCRTFLOAT80U pr80Val1, int64_t const *pi64Val2));
     899typedef FNIEMAIMPLFPUI64    *PFNIEMAIMPLFPUI64;
     900
     901FNIEMAIMPLFPUI64    iemAImpl_fiadd_r80_by_i64;
     902FNIEMAIMPLFPUI64    iemAImpl_fimul_r80_by_i64;
     903FNIEMAIMPLFPUI64    iemAImpl_fisub_r80_by_i64;
     904FNIEMAIMPLFPUI64    iemAImpl_fisubr_r80_by_i64;
     905FNIEMAIMPLFPUI64    iemAImpl_fidiv_r80_by_i64;
     906FNIEMAIMPLFPUI64    iemAImpl_fidivr_r80_by_i64;
     907
     908IEM_DECL_IMPL_DEF(void, iemAImpl_ficom_r80_by_i64,(PCX86FXSTATE pFpuState, uint16_t *pu16Fsw,
     909                                                   PCRTFLOAT80U pr80Val1, int64_t const *pi64Val2));
     910
     911IEM_DECL_IMPL_DEF(void, iemAImpl_fild_i64_to_r80,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes, int64_t const *pi64Val));
     912IEM_DECL_IMPL_DEF(void, iemAImpl_fist_r80_to_i64,(PCX86FXSTATE pFpuState, uint16_t *pu16FSW,
     913                                                  int64_t *pi64Val, PCRTFLOAT80U pr80Val));
     914IEM_DECL_IMPL_DEF(void, iemAImpl_fistt_r80_to_i64,(PCX86FXSTATE pFpuState, uint16_t *pu16FSW,
     915                                                   int64_t *pi32Val, PCRTFLOAT80U pr80Val));
    870916/** @}  */
    871917
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r40247 r40248  
    441441#define IEM_MC_FETCH_MEM_U32_SX_U64(a_u64Dst, a_iSeg, a_GCPtrMem)       do { CHK_GCPTR(a_GCPtrMem); } while (0)
    442442#define IEM_MC_STORE_MEM_U8(a_iSeg, a_GCPtrMem, a_u8Value)              do { CHK_GCPTR(a_GCPtrMem); CHK_TYPE(uint8_t,  a_u8Value);  CHK_SEG_IDX(a_iSeg); } while (0)
    443 #define IEM_MC_STORE_MEM_U16(a_iSeg, a_GCPtrMem, a_u16Value)            do { CHK_GCPTR(a_GCPtrMem); CHK_TYPE(uint16_t, a_u16Value); } while (0)
    444 #define IEM_MC_STORE_MEM_U32(a_iSeg, a_GCPtrMem, a_u32Value)            do { CHK_GCPTR(a_GCPtrMem); CHK_TYPE(uint32_t, a_u32Value); } while (0)
    445 #define IEM_MC_STORE_MEM_U64(a_iSeg, a_GCPtrMem, a_u64Value)            do { CHK_GCPTR(a_GCPtrMem); CHK_TYPE(uint64_t, a_u64Value); } while (0)
    446 #define IEM_MC_STORE_MEM_U8_CONST(a_iSeg, a_GCPtrMem, a_u8C)            do { CHK_GCPTR(a_GCPtrMem); CHK_CONST(uint8_t, a_u8C);      } while (0)
     443#define IEM_MC_STORE_MEM_U16(a_iSeg, a_GCPtrMem, a_u16Value)            do { CHK_GCPTR(a_GCPtrMem); CHK_TYPE(uint16_t, a_u16Value);      } while (0)
     444#define IEM_MC_STORE_MEM_U32(a_iSeg, a_GCPtrMem, a_u32Value)            do { CHK_GCPTR(a_GCPtrMem); CHK_TYPE(uint32_t, a_u32Value);      } while (0)
     445#define IEM_MC_STORE_MEM_U64(a_iSeg, a_GCPtrMem, a_u64Value)            do { CHK_GCPTR(a_GCPtrMem); CHK_TYPE(uint64_t, a_u64Value);      } while (0)
     446#define IEM_MC_STORE_MEM_U8_CONST(a_iSeg, a_GCPtrMem, a_u8C)            do { CHK_GCPTR(a_GCPtrMem); CHK_CONST(uint8_t,  a_u8C);          } while (0)
     447#define IEM_MC_STORE_MEM_U16_CONST(a_iSeg, a_GCPtrMem, a_u16C)          do { CHK_GCPTR(a_GCPtrMem); CHK_CONST(uint16_t, a_u16C);         } while (0)
     448#define IEM_MC_STORE_MEM_U32_CONST(a_iSeg, a_GCPtrMem, a_u32C)          do { CHK_GCPTR(a_GCPtrMem); CHK_CONST(uint32_t, a_u32C);         } while (0)
     449#define IEM_MC_STORE_MEM_U64_CONST(a_iSeg, a_GCPtrMem, a_u64C)          do { CHK_GCPTR(a_GCPtrMem); CHK_CONST(uint64_t, a_u64C);         } while (0)
     450#define IEM_MC_STORE_MEM_I8_CONST_BY_REF( a_pi8Dst,  a_i8C)             do { CHK_TYPE(int8_t *,  a_pi8Dst);  CHK_CONST(int8_t,  a_i8C);  } while (0)
     451#define IEM_MC_STORE_MEM_I16_CONST_BY_REF(a_pi16Dst, a_i16C)            do { CHK_TYPE(int16_t *, a_pi16Dst); CHK_CONST(int16_t, a_i16C); } while (0)
     452#define IEM_MC_STORE_MEM_I32_CONST_BY_REF(a_pi32Dst, a_i32C)            do { CHK_TYPE(int32_t *, a_pi32Dst); CHK_CONST(int32_t, a_i32C); } while (0)
     453#define IEM_MC_STORE_MEM_I64_CONST_BY_REF(a_pi64Dst, a_i64C)            do { CHK_TYPE(int64_t *, a_pi64Dst); CHK_CONST(int64_t, a_i64C); } while (0)
     454#define IEM_MC_STORE_MEM_NEG_QNAN_R32_BY_REF(a_pr32Dst)                 do { CHK_TYPE(PRTFLOAT32U, a_pr32Dst); } while (0)
     455#define IEM_MC_STORE_MEM_NEG_QNAN_R64_BY_REF(a_pr64Dst)                 do { CHK_TYPE(PRTFLOAT64U, a_pr64Dst); } while (0)
     456#define IEM_MC_STORE_MEM_NEG_QNAN_R80_BY_REF(a_pr80Dst)                 do { CHK_TYPE(PRTFLOAT80U, a_pr80Dst); } while (0)
    447457
    448458#define IEM_MC_PUSH_U16(a_u16Value)                                     do {} while (0)
     
    454464#define IEM_MC_MEM_MAP(a_pMem, a_fAccess, a_iSeg, a_GCPtrMem, a_iArg)   do { NOREF(a_fAccess); } while (0)
    455465#define IEM_MC_MEM_MAP_EX(a_pvMem, a_fAccess, a_cbMem, a_iSeg, a_GCPtrMem, a_iArg)  do {} while (0)
    456 #define IEM_MC_MEM_COMMIT_AND_UNMAP(a_pvMem, a_fAccess)                 do {} while (0)
    457 #define IEM_MC_MEM_COMMIT_AND_UNMAP_UNLESS_FPU_XCPT(a_pvMem, a_fAccess, a_u16FSW)   do {} while (0)
     466#define IEM_MC_MEM_COMMIT_AND_UNMAP(a_pvMem, a_fAccess)                             do {} while (0)
     467#define IEM_MC_MEM_COMMIT_AND_UNMAP_FOR_FPU_STORE(a_pvMem, a_fAccess, a_u16FSW)     do {} while (0)
    458468#define IEM_MC_CALC_RM_EFF_ADDR(a_GCPtrEff, bRm)                        do { (a_GCPtrEff) = 0; CHK_GCPTR(a_GCPtrEff); } while (0)
    459469#define IEM_MC_CALL_VOID_AIMPL_1(a_pfn, a0)                             do {} while (0)
     
    531541    p0 = NULL; \
    532542    if (g_fRandom) {
     543#define IEM_MC_IF_FCW_IM()                                              if (g_fRandom) {
    533544#define IEM_MC_ELSE()                                                   } else {
    534545#define IEM_MC_ENDIF()                                                  } do {} while (0)
  • trunk/src/VBox/VMM/testcase/tstX86-1A.asm

    r40246 r40248  
    7272g_r32_QNaN:     dd 07fc00000h
    7373g_r32_QNaNMax:  dd 07fffffffh
     74g_r32_NegQNaN:  dd 0ffc00000h
    7475
    7576g_r64_0dot1:    dq 0.1
     
    8788g_r64_SNaN:     dq 07ff0000000000001h
    8889g_r64_SNaNMax:  dq 07ff7ffffffffffffh
     90g_r64_NegQNaN:  dq 0fff8000000000000h
    8991g_r64_QNaN:     dq 07ff8000000000000h
    9092g_r64_QNaNMax:  dq 07fffffffffffffffh
     
    179181        jmp     .return
    180182%%ok:
     183%endmacro
     184
     185
     186;;
     187; Checks if a 32-bit floating point memory value is the same as the specified
     188; constant (also memory).
     189;
     190; @uses         eax
     191; @param        1       Address expression for the 32-bit floating point value
     192;                       to be checked.
     193; @param        2       The address expression of the constant.
     194;
     195%macro CheckMemoryR32ValueConst 2
     196        mov     eax, [%2]
     197        cmp     dword [%1], eax
     198        je      %%ok
     199%%bad:
     200        mov     eax, 90000000 + __LINE__
     201        jmp     .return
     202%%ok:
     203%endmacro
     204
     205
     206;;
     207; Checks if a 80-bit floating point memory value is the same as the specified
     208; constant (also memory).
     209;
     210; @uses         eax
     211; @param        1       Address expression for the FXSAVE image.
     212; @param        2       The address expression of the constant.
     213;
     214%macro CheckMemoryR80ValueConst 2
     215        mov     eax, [%2]
     216        cmp     dword [%1], eax
     217        je      %%ok1
     218%%bad:
     219        mov     eax, 92000000 + __LINE__
     220        jmp     .return
     221%%ok1:
     222        mov     eax, [4 + %2]
     223        cmp     dword [%1 + 4], eax
     224        jne     %%bad
     225        mov     ax, [8 + %2]
     226        cmp     word  [%1 + 8], ax
     227        jne     %%bad
    181228%endmacro
    182229
     
    30643111        FxSaveCheckStNValueConst xSP, 1, REF(g_r80_3dot2)
    30653112        FxSaveCheckStNValueConst xSP, 2, REF(g_r80_0dot1)
    3066 
     3113%endif
     3114
     3115        ;
     3116        ; FSTP M32R, ST0
     3117        ;
     3118        SetSubTest "FSTP M32R, ST0"
     3119
     3120        mov     xBX, [REF_EXTERN(g_pbEfExecPage)]
     3121        lea     xBX, [xBX + PAGE_SIZE - 4]
     3122
     3123        ; ## Normal operation. ##
     3124        FpuInitWithCW X86_FCW_PC_64 | X86_FCW_RC_NEAREST
     3125        fld     dword [REF(g_r32_Ten)]
     3126        FpuCheckOpcodeCsIp     { fstp dword [xBX] }
     3127        FxSaveCheckFSW xSP, 0, 0
     3128        FxSaveCheckSt0Empty xSP
     3129        CheckMemoryR32ValueConst xBX, REF(g_r32_Ten)
     3130
     3131        ; ## Masked exceptions. ##
     3132
     3133        ; Masked stack underflow.
     3134        fninit
     3135        FpuCheckOpcodeCsIp     { fstp dword [xBX] }
     3136        FxSaveCheckFSW xSP, X86_FSW_IE | X86_FSW_SF, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3
     3137        CheckMemoryR32ValueConst xBX, REF(g_r32_NegQNaN)
     3138
     3139        fninit
     3140        fld     tword [REF(g_r80_0dot1)]
     3141        fld     tword [REF(g_r80_3dot2)]
     3142        fld     tword [REF(g_r80_Ten)]
     3143        ffree   st0
     3144        FpuCheckOpcodeCsIp     { fstp dword [xBX] }
     3145        FxSaveCheckFSW xSP, X86_FSW_IE | X86_FSW_SF, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3
     3146        CheckMemoryR32ValueConst xBX, REF(g_r32_NegQNaN)
     3147        FxSaveCheckStNValueConst xSP, 0, REF(g_r80_3dot2)
     3148        FxSaveCheckStNValueConst xSP, 1, REF(g_r80_0dot1)
     3149
     3150        ; Masked #IA caused by SNaN.
     3151        fninit
     3152        fld     tword [REF(g_r80_SNaN)]
     3153        FpuCheckOpcodeCsIp     { fstp dword [xBX] }
     3154        FxSaveCheckFSW xSP, X86_FSW_IE, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3
     3155        CheckMemoryR32ValueConst xBX, REF(g_r32_QNaN)
     3156
     3157        ; Masked #U caused by a denormal value.
     3158        fninit
     3159        fld     tword [REF(g_r80_DnMin)]
     3160        FpuCheckOpcodeCsIp     { fstp dword [xBX] }
     3161        FxSaveCheckFSW xSP, X86_FSW_UE | X86_FSW_PE, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3
     3162        CheckMemoryR32ValueConst xBX, REF(g_r32_Zero)
     3163
     3164        ; Masked #P caused by a decimal value.
     3165        fninit
     3166        fld     tword [REF(g_r80_3dot2)]
     3167        FpuCheckOpcodeCsIp     { fstp dword [xBX] }
     3168        FxSaveCheckFSW xSP, X86_FSW_C1 | X86_FSW_PE, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3
     3169        CheckMemoryR32ValueConst xBX, REF(g_r32_3dot2)
     3170
     3171        ; ## Unmasked exceptions. ##
     3172
     3173        ; Stack underflow - nothing stored or popped.
     3174        FpuInitWithCW X86_FCW_PC_64 | X86_FCW_RC_NEAREST
     3175        mov     dword [xBX], 0xffeeddcc
     3176        FpuTrapOpcodeCsIp      { fstp dword [xBX] }
     3177        FxSaveCheckFSW xSP, X86_FSW_IE | X86_FSW_SF | X86_FSW_ES | X86_FSW_B, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3
     3178        CheckMemoryValue dword, xBX, 0xffeeddcc
     3179
     3180        FpuInitWithCW X86_FCW_PC_64 | X86_FCW_RC_NEAREST
     3181        fld     tword [REF(g_r80_0dot1)]
     3182        fld     tword [REF(g_r80_3dot2)]
     3183        fld     tword [REF(g_r80_Ten)]
     3184        ffree   st0
     3185        mov     dword [xBX], 0xffeeddcc
     3186        FpuTrapOpcodeCsIp      { fstp dword [xBX] }
     3187        FxSaveCheckFSW xSP, X86_FSW_IE | X86_FSW_SF | X86_FSW_ES | X86_FSW_B, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3
     3188        CheckMemoryValue dword, xBX, 0xffeeddcc
     3189        FxSaveCheckStNEmpty      xSP, 0
     3190        FxSaveCheckStNValueConst xSP, 1, REF(g_r80_3dot2)
     3191        FxSaveCheckStNValueConst xSP, 2, REF(g_r80_0dot1)
     3192
     3193        ; #IA caused by SNaN.
     3194        FpuInitWithCW X86_FCW_PC_64 | X86_FCW_RC_NEAREST
     3195        fld     tword [REF(g_r80_SNaN)]
     3196        mov     dword [xBX], 0xffeeddcc
     3197        FpuTrapOpcodeCsIp      { fstp dword [xBX] }
     3198        FxSaveCheckFSW xSP, X86_FSW_IE | X86_FSW_ES | X86_FSW_B, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3
     3199        CheckMemoryValue dword, xBX, 0xffeeddcc
     3200
     3201        ; #U caused by a denormal value - nothing written
     3202        FpuInitWithCW X86_FCW_PC_64 | X86_FCW_RC_NEAREST
     3203        fld     tword [REF(g_r80_DnMin)]
     3204        mov     dword [xBX], 0xffeeddcc
     3205        FpuTrapOpcodeCsIp      { fstp dword [xBX] }
     3206        FxSaveCheckFSW xSP, X86_FSW_UE | X86_FSW_ES | X86_FSW_B, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3
     3207        CheckMemoryValue dword, xBX, 0xffeeddcc
     3208
     3209        ; #U caused by a small value - nothing written
     3210        FpuInitWithCW X86_FCW_PC_64 | X86_FCW_RC_NEAREST
     3211        fld     tword [REF(g_r80_Min)]
     3212        mov     dword [xBX], 0xffeeddcc
     3213        FpuTrapOpcodeCsIp      { fstp dword [xBX] }
     3214        FxSaveCheckFSW xSP, X86_FSW_UE | X86_FSW_ES | X86_FSW_B, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3
     3215        CheckMemoryValue dword, xBX, 0xffeeddcc
     3216
     3217        ; #O caused by a small value - nothing written
     3218        FpuInitWithCW X86_FCW_PC_64 | X86_FCW_RC_NEAREST
     3219        fld     tword [REF(g_r80_Max)]
     3220        mov     dword [xBX], 0xffeeddcc
     3221        FpuTrapOpcodeCsIp      { fstp dword [xBX] }
     3222        FxSaveCheckFSW xSP, X86_FSW_OE | X86_FSW_ES | X86_FSW_B, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3
     3223        CheckMemoryValue dword, xBX, 0xffeeddcc
     3224
     3225        ; #P caused by a decimal value - rounded value is written just like if it was masked.
     3226        FpuInitWithCW X86_FCW_PC_64 | X86_FCW_RC_NEAREST
     3227        fld     tword [REF(g_r80_3dot2)]
     3228        mov     dword [xBX], 0xffeeddcc
     3229        FpuTrapOpcodeCsIp      { fstp dword [xBX] }
     3230        FxSaveCheckFSW xSP, X86_FSW_C1 | X86_FSW_PE | X86_FSW_ES | X86_FSW_B, X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3
     3231        CheckMemoryR32ValueConst xBX, REF(g_r32_3dot2)
     3232
     3233%if 0 ;; @todo implement me
    30673234        ;
    30683235        ; FISTP M32I, ST0
     
    31153282        FxSaveCheckStNValueConst xSP, 1, REF(g_r80_3dot2)
    31163283        FxSaveCheckStNValueConst xSP, 2, REF(g_r80_0dot1)
    3117 
     3284%endif
     3285%if 0
    31183286        ;
    31193287        ; FPTAN - calc, store ST0, push 1.0.
     
    31493317
    31503318        ;; @todo Finish FPTAN testcase.
    3151 %endif
    31523319
    31533320        ;
     
    32343401
    32353402        ;; @todo Finish FCMOVB testcase.
     3403%endif
    32363404
    32373405
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