Changeset 40247 in vbox
- Timestamp:
- Feb 24, 2012 12:59:44 PM (13 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r40246 r40247 3729 3729 3730 3730 /** 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 */ 3736 static 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 /** 3731 3747 * Updates the FSW, FOP, FPUIP, FPUCS, FPUDP, and FPUDS, then pops the stack. 3732 3748 * … … 3818 3834 iemFpuUpdateOpcodeAndIpWorker(pIemCpu, pCtx); 3819 3835 iemFpuStackUnderflowOnly(pIemCpu, iStReg, pCtx); 3836 iemFpuMaybePopOne(pCtx); 3837 } 3838 3839 3840 DECL_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); 3820 3846 iemFpuMaybePopOne(pCtx); 3821 3847 } … … 5974 6000 #define IEM_MC_FETCH_MEM_U32_DISP(a_u32Dst, a_iSeg, a_GCPtrMem, a_offDisp) \ 5975 6001 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))) 5976 6004 5977 6005 #define IEM_MC_FETCH_MEM_S32_SX_U64(a_u64Dst, a_iSeg, a_GCPtrMem) \ … … 6320 6348 #define IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(a_u16FSW, a_iEffSeg, a_GCPtrEff) \ 6321 6349 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) 6322 6353 6323 6354 /** Raises a FPU stack underflow exception. Sets FPUIP, FPUCS and FOP. */ … … 6336 6367 #define IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(a_iStDst, a_iEffSeg, a_GCPtrEff) \ 6337 6368 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) 6338 6373 /** Raises a FPU stack underflow exception for an instruction pushing a result 6339 6374 * value onto the stack. Sets FPUIP, FPUCS and FOP. */ -
trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
r40244 r40247 1324 1324 1325 1325 1326 ; 1327 ;---------------------- 32-bit signed integer operations ---------------------- 1328 ; 1329 1330 1326 1331 ;; 1327 1332 ; Converts a 80-bit floating point value to a 32-bit signed integer. … … 1348 1353 ENDPROC iemAImpl_fpu_r80_to_i32 1349 1354 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 ; 1364 BEGINPROC_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 1378 ENDPROC 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 1392 BEGINPROC_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 1408 ENDPROC iemAImpl_ %+ %1 %+ _r80_by_i32 1409 %endmacro 1410 1411 IEMIMPL_FPU_R80_BY_I32 fiadd 1412 IEMIMPL_FPU_R80_BY_I32 fimul 1413 IEMIMPL_FPU_R80_BY_I32 fisub 1414 IEMIMPL_FPU_R80_BY_I32 fisubr 1415 IEMIMPL_FPU_R80_BY_I32 fidiv 1416 IEMIMPL_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 1431 BEGINPROC_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 1445 ENDPROC iemAImpl_ %+ %1 %+ _r80_by_i32 1446 %endmacro 1447 1448 IEMIMPL_FPU_R80_BY_I32_FSW ficom 1350 1449 1351 1450 … … 1443 1542 1444 1543 ;; 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, 1446 1545 ; only returning FSW. 1447 1546 ; -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r40246 r40247 11329 11329 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11330 11330 11331 IEM_MC_BEGIN(0, 2); 11332 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); 11331 IEM_MC_BEGIN(0, 1); 11333 11332 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 11334 11333 … … 11357 11356 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11358 11357 11359 IEM_MC_BEGIN(0, 2); 11360 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); 11358 IEM_MC_BEGIN(0, 1); 11361 11359 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 11362 11360 … … 11385 11383 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11386 11384 11387 IEM_MC_BEGIN(0, 2); 11388 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); 11385 IEM_MC_BEGIN(0, 1); 11389 11386 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 11390 11387 … … 11413 11410 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11414 11411 11415 IEM_MC_BEGIN(0, 2); 11416 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); 11412 IEM_MC_BEGIN(0, 1); 11417 11413 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 11418 11414 … … 11436 11432 11437 11433 /** Opcode 0xda 0xe9. */ 11438 FNIEMOP_STUB(iemOp_fucompp); 11434 FNIEMOP_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 */ 11466 FNIEMOP_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 11439 11496 /** Opcode 0xda !11/0. */ 11440 FNIEMOP_STUB_1(iemOp_fiadd_m32i, uint8_t, bRm); 11497 FNIEMOP_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 11441 11504 /** Opcode 0xda !11/1. */ 11442 FNIEMOP_STUB_1(iemOp_fimul_m32i, uint8_t, bRm); 11505 FNIEMOP_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 11443 11512 /** Opcode 0xda !11/2. */ 11444 FNIEMOP_STUB_1(iemOp_ficom_m32i, uint8_t, bRm); 11513 FNIEMOP_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 11445 11545 /** Opcode 0xda !11/3. */ 11446 FNIEMOP_STUB_1(iemOp_ficomp_m32i, uint8_t, bRm); 11546 FNIEMOP_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 11447 11578 /** Opcode 0xda !11/4. */ 11448 FNIEMOP_STUB_1(iemOp_fisub_m32i, uint8_t, bRm); 11579 FNIEMOP_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 11449 11586 /** Opcode 0xda !11/5. */ 11450 FNIEMOP_STUB_1(iemOp_fisubr_m32i, uint8_t, bRm); 11587 FNIEMOP_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 11451 11594 /** Opcode 0xda !11/6. */ 11452 FNIEMOP_STUB_1(iemOp_fidiv_m32i, uint8_t, bRm); 11595 FNIEMOP_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 11453 11602 /** Opcode 0xda !11/7. */ 11454 FNIEMOP_STUB_1(iemOp_fidivr_m32i, uint8_t, bRm); 11603 FNIEMOP_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 11455 11609 11456 11610 /** Opcode 0xda. */ … … 11550 11704 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11551 11705 11552 IEM_MC_BEGIN(0, 2); 11553 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); 11706 IEM_MC_BEGIN(0, 1); 11554 11707 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 11555 11708 … … 11578 11731 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11579 11732 11580 IEM_MC_BEGIN(0, 2); 11581 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); 11733 IEM_MC_BEGIN(0, 1); 11582 11734 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 11583 11735 … … 11606 11758 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11607 11759 11608 IEM_MC_BEGIN(0, 2); 11609 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); 11760 IEM_MC_BEGIN(0, 1); 11610 11761 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 11611 11762 … … 11634 11785 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11635 11786 11636 IEM_MC_BEGIN(0, 2); 11637 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); 11787 IEM_MC_BEGIN(0, 1); 11638 11788 IEM_MC_LOCAL(PCRTFLOAT80U, pr80ValueN); 11639 11789 -
trunk/src/VBox/VMM/include/IEMInternal.h
r40244 r40247 810 810 typedef FNIEMAIMPLFPUR80FSW *PFNIEMAIMPLFPUR80FSW; 811 811 FNIEMAIMPLFPUR80FSW iemAImpl_fcom_r80_by_r80; 812 FNIEMAIMPLFPUR80FSW iemAImpl_fucom_r80_by_r80; 812 813 813 814 typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUR80UNARY,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes, PCRTFLOAT80U pr80Val)); … … 848 849 /** @name FPU operations taking a 32-bit signed integer argument 849 850 * @{ */ 850 typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPU S32OUT,(PCX86FXSTATE pFpuState, uint16_t *pu16FSW,851 typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUI32OUT,(PCX86FXSTATE pFpuState, uint16_t *pu16FSW, 851 852 int32_t *pi32Dst, PCRTFLOAT80U pr80Value)); 852 typedef FNIEMAIMPLFPUS32OUT *PFNIEMAIMPLFPUS32OUT; 853 854 FNIEMAIMPLFPUS32OUT iemAImpl_fpu_r80_to_i32; 855 853 typedef FNIEMAIMPLFPUI32OUT *PFNIEMAIMPLFPUI32OUT; 854 855 FNIEMAIMPLFPUI32OUT iemAImpl_fpu_r80_to_i32; 856 857 typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUI32,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes, 858 PCRTFLOAT80U pr80Val1, int32_t const *pi32Val2)); 859 typedef FNIEMAIMPLFPUI32 *PFNIEMAIMPLFPUI32; 860 861 FNIEMAIMPLFPUI32 iemAImpl_fiadd_r80_by_i32; 862 FNIEMAIMPLFPUI32 iemAImpl_fimul_r80_by_i32; 863 FNIEMAIMPLFPUI32 iemAImpl_fisub_r80_by_i32; 864 FNIEMAIMPLFPUI32 iemAImpl_fisubr_r80_by_i32; 865 FNIEMAIMPLFPUI32 iemAImpl_fidiv_r80_by_i32; 866 FNIEMAIMPLFPUI32 iemAImpl_fidivr_r80_by_i32; 867 868 IEM_DECL_IMPL_DEF(void, iemAImpl_ficom_r80_by_i32,(PCX86FXSTATE pFpuState, uint16_t *pu16Fsw, 869 PCRTFLOAT80U pr80Val1, int32_t const *pi322Val2)); 856 870 /** @} */ 857 871 -
trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp
r40246 r40247 193 193 194 194 #define iemAImpl_fcom_r80_by_r80 NULL 195 #define iemAImpl_fucom_r80_by_r80 NULL 195 196 #define iemAImpl_fabs_r80 NULL 196 197 #define iemAImpl_fchs_r80 NULL … … 215 216 #define iemAImpl_fxtract_r80_r80 NULL 216 217 #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 217 225 218 226 #define iemCImpl_callf NULL … … 403 411 #define IEM_MC_FETCH_MEM_U16(a_u16Dst, a_iSeg, a_GCPtrMem) do { CHK_GCPTR(a_GCPtrMem); } while (0) 404 412 #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) 405 414 #define IEM_MC_FETCH_MEM_S32_SX_U64(a_u64Dst, a_iSeg, a_GCPtrMem) do { CHK_GCPTR(a_GCPtrMem); } while (0) 406 415 #define IEM_MC_FETCH_MEM_U64(a_u64Dst, a_iSeg, a_GCPtrMem) do { CHK_GCPTR(a_GCPtrMem); } while (0) … … 475 484 #define IEM_MC_STORE_FPU_RESULT_MEM_OP_THEN_POP(a_FpuData, a_iStReg, a_iEffSeg, a_GCPtrEff) do { } while (0) 476 485 #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) 477 487 #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)479 488 #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) 480 490 #define IEM_MC_FPU_STACK_PUSH_UNDERFLOW() do { } while (0) 481 491 #define IEM_MC_FPU_STACK_PUSH_UNDERFLOW_TWO() do { } while (0) … … 487 497 #define IEM_MC_UPDATE_FSW_THEN_POP(a_u16FSW) do { } while (0) 488 498 #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) 489 500 #define IEM_MC_UPDATE_FPU_OPCODE_IP() do { } while (0) 490 501
Note:
See TracChangeset
for help on using the changeset viewer.