- Timestamp:
- Jan 8, 2017 10:34:40 PM (8 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImpl.asm
r62478 r65194 2483 2483 2484 2484 IEMIMPL_FPU_R80_BY_R80_ST1_ST0_POP fpatan 2485 IEMIMPL_FPU_R80_BY_R80_ST1_ST0_POP fyl2x 2485 2486 IEMIMPL_FPU_R80_BY_R80_ST1_ST0_POP fyl2xp1 2486 2487 … … 2589 2590 IEMIMPL_FPU_R80 fabs 2590 2591 IEMIMPL_FPU_R80 f2xm1 2591 IEMIMPL_FPU_R80 fyl2x2592 2592 IEMIMPL_FPU_R80 fsqrt 2593 2593 IEMIMPL_FPU_R80 frndint -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r64545 r65194 14286 14286 14287 14287 14288 /** 14289 * Common worker for FPU instructions working on STn and ST0, storing the result 14290 * in STn, and popping the stack unless IE, DE or ZE was raised. 14291 * 14292 * @param pfnAImpl Pointer to the instruction implementation (assembly). 14293 */ 14294 FNIEMOP_DEF_2(iemOpHlpFpu_stN_st0_pop, uint8_t, bRm, PFNIEMAIMPLFPUR80, pfnAImpl) 14295 { 14296 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 14297 14298 IEM_MC_BEGIN(3, 1); 14299 IEM_MC_LOCAL(IEMFPURESULT, FpuRes); 14300 IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT, pFpuRes, FpuRes, 0); 14301 IEM_MC_ARG(PCRTFLOAT80U, pr80Value1, 1); 14302 IEM_MC_ARG(PCRTFLOAT80U, pr80Value2, 2); 14303 14304 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE(); 14305 IEM_MC_MAYBE_RAISE_FPU_XCPT(); 14306 14307 IEM_MC_PREPARE_FPU_USAGE(); 14308 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, bRm & X86_MODRM_RM_MASK, pr80Value2, 0) 14309 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pr80Value2); 14310 IEM_MC_STORE_FPU_RESULT_THEN_POP(FpuRes, bRm & X86_MODRM_RM_MASK); 14311 IEM_MC_ELSE() 14312 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(bRm & X86_MODRM_RM_MASK); 14313 IEM_MC_ENDIF(); 14314 IEM_MC_ADVANCE_RIP(); 14315 14316 IEM_MC_END(); 14317 return VINF_SUCCESS; 14318 } 14319 14320 14288 14321 /** Opcode 0xd9 0xf1. */ 14289 FNIEMOP_DEF(iemOp_fyl x2)14290 { 14291 IEMOP_MNEMONIC(fyl x2_st0, "fylx2st0");14292 return FNIEMOP_CALL_ 1(iemOpHlpFpu_st0, iemAImpl_fyl2x_r80);14322 FNIEMOP_DEF(iemOp_fyl2x) 14323 { 14324 IEMOP_MNEMONIC(fyl2x_st0, "fyl2x st1,st0"); 14325 return FNIEMOP_CALL_2(iemOpHlpFpu_stN_st0_pop, 1, iemAImpl_fyl2x_r80_by_r80); 14293 14326 } 14294 14327 … … 14330 14363 IEMOP_MNEMONIC(fptan_st0, "fptan st0"); 14331 14364 return FNIEMOP_CALL_1(iemOpHlpFpuReplace_st0_push, iemAImpl_fptan_r80_r80); 14332 }14333 14334 14335 /**14336 * Common worker for FPU instructions working on STn and ST0, storing the result14337 * in STn, and popping the stack unless IE, DE or ZE was raised.14338 *14339 * @param pfnAImpl Pointer to the instruction implementation (assembly).14340 */14341 FNIEMOP_DEF_2(iemOpHlpFpu_stN_st0_pop, uint8_t, bRm, PFNIEMAIMPLFPUR80, pfnAImpl)14342 {14343 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();14344 14345 IEM_MC_BEGIN(3, 1);14346 IEM_MC_LOCAL(IEMFPURESULT, FpuRes);14347 IEM_MC_ARG_LOCAL_REF(PIEMFPURESULT, pFpuRes, FpuRes, 0);14348 IEM_MC_ARG(PCRTFLOAT80U, pr80Value1, 1);14349 IEM_MC_ARG(PCRTFLOAT80U, pr80Value2, 2);14350 14351 IEM_MC_MAYBE_RAISE_DEVICE_NOT_AVAILABLE();14352 IEM_MC_MAYBE_RAISE_FPU_XCPT();14353 14354 IEM_MC_PREPARE_FPU_USAGE();14355 IEM_MC_IF_TWO_FPUREGS_NOT_EMPTY_REF_R80(pr80Value1, bRm & X86_MODRM_RM_MASK, pr80Value2, 0)14356 IEM_MC_CALL_FPU_AIMPL_3(pfnAImpl, pFpuRes, pr80Value1, pr80Value2);14357 IEM_MC_STORE_FPU_RESULT_THEN_POP(FpuRes, bRm & X86_MODRM_RM_MASK);14358 IEM_MC_ELSE()14359 IEM_MC_FPU_STACK_UNDERFLOW_THEN_POP(bRm & X86_MODRM_RM_MASK);14360 IEM_MC_ENDIF();14361 IEM_MC_ADVANCE_RIP();14362 14363 IEM_MC_END();14364 return VINF_SUCCESS;14365 14365 } 14366 14366 … … 14522 14522 /* 0xef */ iemOp_Invalid, 14523 14523 /* 0xf0 */ iemOp_f2xm1, 14524 /* 0xf1 */ iemOp_fyl x2,14524 /* 0xf1 */ iemOp_fyl2x, 14525 14525 /* 0xf2 */ iemOp_fptan, 14526 14526 /* 0xf3 */ iemOp_fpatan, -
trunk/src/VBox/VMM/include/IEMInternal.h
r64547 r65194 1340 1340 1341 1341 FNIEMAIMPLFPUR80 iemAImpl_fpatan_r80_by_r80; 1342 FNIEMAIMPLFPUR80 iemAImpl_fyl2x_r80_by_r80; 1342 1343 FNIEMAIMPLFPUR80 iemAImpl_fyl2xp1_r80_by_r80; 1343 1344 … … 1359 1360 FNIEMAIMPLFPUR80UNARY iemAImpl_fchs_r80; 1360 1361 FNIEMAIMPLFPUR80UNARY iemAImpl_f2xm1_r80; 1361 FNIEMAIMPLFPUR80UNARY iemAImpl_fyl2x_r80;1362 1362 FNIEMAIMPLFPUR80UNARY iemAImpl_fsqrt_r80; 1363 1363 FNIEMAIMPLFPUR80UNARY iemAImpl_frndint_r80; -
trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp
r64545 r65194 240 240 241 241 #define iemAImpl_fpatan_r80_by_r80 NULL 242 #define iemAImpl_fyl2x_r80_by_r80 NULL 242 243 #define iemAImpl_fyl2xp1_r80_by_r80 NULL 243 244 … … 249 250 #define iemAImpl_fxam_r80 NULL 250 251 #define iemAImpl_f2xm1_r80 NULL 251 #define iemAImpl_fyl2x_r80 NULL252 252 #define iemAImpl_fsqrt_r80 NULL 253 253 #define iemAImpl_frndint_r80 NULL
Note:
See TracChangeset
for help on using the changeset viewer.