Changeset 40210 in vbox
- Timestamp:
- Feb 22, 2012 12:56:53 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 76383
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r40209 r40210 10638 10638 10639 10639 /** Opcode 0xd9 !11/2 mem32real */ 10640 FNIEMOP_STUB_1(iemOp_fst_m32r, uint8_t, bRm); 10640 FNIEMOP_DEF_1(iemOp_fst_m32r, uint8_t, bRm) 10641 { 10642 IEMOP_MNEMONIC("fst m32r"); 10643 IEM_MC_BEGIN(3, 2); 10644 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10645 IEM_MC_LOCAL(uint16_t, u16FSW); 10646 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16FSW, u16FSW, 0); 10647 IEM_MC_ARG(PRTFLOAT32U, pr32Dst, 1); 10648 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2); 10649 10650 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm); 10651 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10652 10653 IEM_MC_MEM_MAP(pr32Dst, IEM_ACCESS_DATA_W, pIemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/); 10654 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 10655 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r32, pu16FSW, pr32Dst, pr80Value); 10656 IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W); 10657 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16FSW, pIemCpu->iEffSeg, GCPtrEffDst); 10658 IEM_MC_ELSE() 10659 IEM_MC_MEM_COMMIT_AND_UNMAP_UNLESS_FPU_XCPT(pr32Dst, IEM_ACCESS_DATA_W, u16FSW); 10660 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst); 10661 IEM_MC_ENDIF(); 10662 IEM_MC_ADVANCE_RIP(); 10663 IEM_MC_END(); 10664 return VINF_SUCCESS; 10665 } 10666 10641 10667 10642 10668 /** Opcode 0xd9 !11/3 */ 10643 FNIEMOP_STUB_1(iemOp_fstp_m32r, uint8_t, bRm); 10669 FNIEMOP_DEF_1(iemOp_fstp_m32r, uint8_t, bRm) 10670 { 10671 IEMOP_MNEMONIC("fstp m32r"); 10672 IEM_MC_BEGIN(3, 2); 10673 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 10674 IEM_MC_LOCAL(uint16_t, u16FSW); 10675 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16FSW, u16FSW, 0); 10676 IEM_MC_ARG(PRTFLOAT32U, pr32Dst, 1); 10677 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2); 10678 10679 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm); 10680 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 10681 10682 IEM_MC_MEM_MAP(pr32Dst, IEM_ACCESS_DATA_W, pIemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/); 10683 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 10684 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r32, pu16FSW, pr32Dst, pr80Value); 10685 IEM_MC_MEM_COMMIT_AND_UNMAP(pr32Dst, IEM_ACCESS_DATA_W); 10686 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16FSW, pIemCpu->iEffSeg, GCPtrEffDst); 10687 IEM_MC_ELSE() 10688 IEM_MC_MEM_COMMIT_AND_UNMAP_UNLESS_FPU_XCPT(pr32Dst, IEM_ACCESS_DATA_W, u16FSW); 10689 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst); 10690 IEM_MC_ENDIF(); 10691 IEM_MC_ADVANCE_RIP(); 10692 IEM_MC_END(); 10693 return VINF_SUCCESS; 10694 } 10695 10644 10696 10645 10697 /** Opcode 0xd9 !11/4 */ … … 11311 11363 FNIEMOP_STUB_1(iemOp_fisttp_m64i, uint8_t, bRm); 11312 11364 11365 11313 11366 /** Opcode 0xdd !11/0. */ 11314 FNIEMOP_STUB_1(iemOp_fst_m64r, uint8_t, bRm); 11367 FNIEMOP_DEF_1(iemOp_fst_m64r, uint8_t, bRm) 11368 { 11369 IEMOP_MNEMONIC("fst m64r"); 11370 IEM_MC_BEGIN(3, 2); 11371 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 11372 IEM_MC_LOCAL(uint16_t, u16FSW); 11373 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16FSW, u16FSW, 0); 11374 IEM_MC_ARG(PRTFLOAT64U, pr64Dst, 1); 11375 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2); 11376 11377 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm); 11378 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11379 11380 IEM_MC_MEM_MAP(pr64Dst, IEM_ACCESS_DATA_W, pIemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/); 11381 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 11382 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r64, pu16FSW, pr64Dst, pr80Value); 11383 IEM_MC_MEM_COMMIT_AND_UNMAP(pr64Dst, IEM_ACCESS_DATA_W); 11384 IEM_MC_UPDATE_FSW_WITH_MEM_OP(u16FSW, pIemCpu->iEffSeg, GCPtrEffDst); 11385 IEM_MC_ELSE() 11386 IEM_MC_MEM_COMMIT_AND_UNMAP_UNLESS_FPU_XCPT(pr64Dst, IEM_ACCESS_DATA_W, u16FSW); 11387 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst); 11388 IEM_MC_ENDIF(); 11389 IEM_MC_ADVANCE_RIP(); 11390 IEM_MC_END(); 11391 return VINF_SUCCESS; 11392 } 11393 11394 11395 11315 11396 11316 11397 /** Opcode 0xdd !11/0. */ 11317 FNIEMOP_STUB_1(iemOp_fstp_m64r, uint8_t, bRm); 11398 FNIEMOP_DEF_1(iemOp_fstp_m64r, uint8_t, bRm) 11399 { 11400 IEMOP_MNEMONIC("fstp m64r"); 11401 IEM_MC_BEGIN(3, 2); 11402 IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst); 11403 IEM_MC_LOCAL(uint16_t, u16FSW); 11404 IEM_MC_ARG_LOCAL_REF(uint16_t *, pu16FSW, u16FSW, 0); 11405 IEM_MC_ARG(PRTFLOAT64U, pr64Dst, 1); 11406 IEM_MC_ARG(PCRTFLOAT80U, pr80Value, 2); 11407 11408 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm); 11409 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 11410 11411 IEM_MC_MEM_MAP(pr64Dst, IEM_ACCESS_DATA_W, pIemCpu->iEffSeg, GCPtrEffDst, 1 /*arg*/); 11412 IEM_MC_IF_FPUREG_NOT_EMPTY_REF_R80(pr80Value, 0) 11413 IEM_MC_CALL_FPU_AIMPL_3(iemAImpl_fst_r80_to_r64, pu16FSW, pr64Dst, pr80Value); 11414 IEM_MC_MEM_COMMIT_AND_UNMAP(pr64Dst, IEM_ACCESS_DATA_W); 11415 IEM_MC_UPDATE_FSW_WITH_MEM_OP_THEN_POP(u16FSW, pIemCpu->iEffSeg, GCPtrEffDst); 11416 IEM_MC_ELSE() 11417 IEM_MC_MEM_COMMIT_AND_UNMAP_UNLESS_FPU_XCPT(pr64Dst, IEM_ACCESS_DATA_W, u16FSW); 11418 IEM_MC_FPU_STACK_UNDERFLOW_MEM_OP_THEN_POP(UINT8_MAX, pIemCpu->iEffSeg, GCPtrEffDst); 11419 IEM_MC_ENDIF(); 11420 IEM_MC_ADVANCE_RIP(); 11421 IEM_MC_END(); 11422 return VINF_SUCCESS; 11423 } 11424 11318 11425 11319 11426 /** Opcode 0xdd !11/0. */ -
trunk/src/VBox/VMM/include/IEMInternal.h
r40209 r40210 728 728 /** @name FPU operations taking a 32-bit float argument 729 729 * @{ */ 730 typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUR32U,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes, PCRTFLOAT32U pr32Val));731 typedef FNIEMAIMPLFPUR32U *PFNIEMAIMPLFPUR32U;732 730 typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUR32FSW,(PCX86FXSTATE pFpuState, uint16_t *pFSW, 733 731 PCRTFLOAT80U pr80Val1, PCRTFLOAT32U pr32Val2)); 734 732 typedef FNIEMAIMPLFPUR32FSW *PFNIEMAIMPLFPUR32FSW; 733 735 734 typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUR32,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes, 736 735 PCRTFLOAT80U pr80Val1, PCRTFLOAT32U pr32Val2)); 737 typedef FNIEMAIMPLFPUR32 *PFNIEMAIMPLFPUR32; 738 739 FNIEMAIMPLFPUR32U iemAImpl_fld_r32_to_r80; 736 typedef FNIEMAIMPLFPUR32 *PFNIEMAIMPLFPUR32; 737 740 738 FNIEMAIMPLFPUR32FSW iemAImpl_fcom_r80_by_r32; 741 739 FNIEMAIMPLFPUR32 iemAImpl_fadd_r80_by_r32; … … 745 743 FNIEMAIMPLFPUR32 iemAImpl_fdiv_r80_by_r32; 746 744 FNIEMAIMPLFPUR32 iemAImpl_fdivr_r80_by_r32; 745 746 IEM_DECL_IMPL_DEF(void, iemAImpl_fld_r32_to_r80,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes, PCRTFLOAT32U pr32Val)); 747 IEM_DECL_IMPL_DEF(void, iemAImpl_fst_r80_to_r32,(PCX86FXSTATE pFpuState, uint16_t *pu16FSW, 748 PRTFLOAT32U pr32Val, PCRTFLOAT80U pr80Val)); 747 749 /** @} */ 748 750 … … 752 754 PCRTFLOAT80U pr80Val1, PCRTFLOAT64U pr64Val2)); 753 755 typedef FNIEMAIMPLFPUR64 *PFNIEMAIMPLFPUR64; 754 typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUR64U,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes, PCRTFLOAT64U pr64Val)); 755 typedef FNIEMAIMPLFPUR64U *PFNIEMAIMPLFPUR64U; 756 757 FNIEMAIMPLFPUR64U iemAImpl_fld_r64_to_r80; 756 758 757 FNIEMAIMPLFPUR64 iemAImpl_fadd_r80_by_r64; 759 758 FNIEMAIMPLFPUR64 iemAImpl_fmul_r80_by_r64; … … 763 762 FNIEMAIMPLFPUR64 iemAImpl_fdiv_r80_by_r64; 764 763 FNIEMAIMPLFPUR64 iemAImpl_fdivr_r80_by_r64; 764 765 IEM_DECL_IMPL_DEF(void, iemAImpl_fld_r64_to_r80,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes, PCRTFLOAT64U pr64Val)); 766 IEM_DECL_IMPL_DEF(void, iemAImpl_fst_r80_to_r64,(PCX86FXSTATE pFpuState, uint16_t *pu16FSW, 767 PRTFLOAT64U pr32Val, PCRTFLOAT80U pr80Val)); 765 768 /** @} */ 766 769 … … 770 773 PCRTFLOAT80U pr80Val1, PCRTFLOAT80U pr80Val2)); 771 774 typedef FNIEMAIMPLFPUR80FSW *PFNIEMAIMPLFPUR80FSW; 775 772 776 typedef IEM_DECL_IMPL_TYPE(void, FNIEMAIMPLFPUR80,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes, 773 777 PCRTFLOAT80U pr80Val1, PCRTFLOAT80U pr80Val2));
Note:
See TracChangeset
for help on using the changeset viewer.