Changeset 94447 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Apr 1, 2022 6:54:16 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r94423 r94447 4558 4558 IEM_DECL_IMPL_DEF(void, iemAImpl_ftst_r80,(PCX86FXSTATE pFpuState, uint16_t *pu16Fsw, PCRTFLOAT80U pr80Val)) 4559 4559 { 4560 RT_NOREF(pFpuState, pu16Fsw, pr80Val); 4561 AssertReleaseFailed(); 4560 uint16_t fFsw = (7 << X86_FSW_TOP_SHIFT); 4561 4562 if (RTFLOAT80U_IS_ZERO(pr80Val)) 4563 fFsw |= X86_FSW_C3; 4564 else if (RTFLOAT80U_IS_NORMAL(pr80Val) || RTFLOAT80U_IS_INF(pr80Val)) 4565 fFsw |= pr80Val->s.fSign ? X86_FSW_C0 : 0; 4566 else if (RTFLOAT80U_IS_DENORMAL(pr80Val) || RTFLOAT80U_IS_PSEUDO_DENORMAL(pr80Val)) 4567 { 4568 fFsw |= pr80Val->s.fSign ? X86_FSW_C0 | X86_FSW_DE : X86_FSW_DE; 4569 if (!(pFpuState->FCW & X86_FCW_DM)) 4570 fFsw |= X86_FSW_ES | X86_FSW_B; 4571 } 4572 else 4573 { 4574 fFsw |= X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3 | X86_FSW_IE; 4575 if (!(pFpuState->FCW & X86_FCW_IM)) 4576 fFsw |= X86_FSW_ES | X86_FSW_B; 4577 } 4578 4579 *pu16Fsw = fFsw; 4562 4580 } 4563 4581 … … 4565 4583 IEM_DECL_IMPL_DEF(void, iemAImpl_fxam_r80,(PCX86FXSTATE pFpuState, uint16_t *pu16Fsw, PCRTFLOAT80U pr80Val)) 4566 4584 { 4567 RT_NOREF(pFpuState, pu16Fsw, pr80Val); 4568 AssertReleaseFailed(); 4585 RT_NOREF(pFpuState); 4586 uint16_t fFsw = (7 << X86_FSW_TOP_SHIFT); 4587 4588 /* C1 = sign bit (always, even if empty Intel says). */ 4589 if (pr80Val->s.fSign) 4590 fFsw |= X86_FSW_C1; 4591 4592 /* Classify the value in C0, C2, C3. */ 4593 if (!(pFpuState->FTW & RT_BIT_32(X86_FSW_TOP_GET(pFpuState->FSW)))) 4594 fFsw |= X86_FSW_C0 | X86_FSW_C3; /* empty */ 4595 else if (RTFLOAT80U_IS_NORMAL(pr80Val)) 4596 fFsw |= X86_FSW_C2; 4597 else if (RTFLOAT80U_IS_ZERO(pr80Val)) 4598 fFsw |= X86_FSW_C3; 4599 else if (RTFLOAT80U_IS_QUIET_OR_SIGNALLING_NAN(pr80Val)) 4600 fFsw |= X86_FSW_C0; 4601 else if (RTFLOAT80U_IS_INF(pr80Val)) 4602 fFsw |= X86_FSW_C0 | X86_FSW_C2; 4603 else if (RTFLOAT80U_IS_DENORMAL(pr80Val) || RTFLOAT80U_IS_PSEUDO_DENORMAL(pr80Val)) 4604 fFsw |= X86_FSW_C2 | X86_FSW_C3; 4605 /* whatever else: 0 */ 4606 4607 *pu16Fsw = fFsw; 4569 4608 } 4570 4609 … … 4685 4724 IEM_DECL_IMPL_DEF(void, iemAImpl_fabs_r80,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes, PCRTFLOAT80U pr80Val)) 4686 4725 { 4687 RT_NOREF(pFpuState, pFpuRes, pr80Val); 4688 AssertReleaseFailed(); 4726 pFpuRes->FSW = (pFpuState->FSW & (X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3)) | (7 << X86_FSW_TOP_SHIFT); 4727 pFpuRes->r80Result = *pr80Val; 4728 pFpuRes->r80Result.s.fSign = 0; 4689 4729 } 4690 4730 … … 4692 4732 IEM_DECL_IMPL_DEF(void, iemAImpl_fchs_r80,(PCX86FXSTATE pFpuState, PIEMFPURESULT pFpuRes, PCRTFLOAT80U pr80Val)) 4693 4733 { 4694 RT_NOREF(pFpuState, pFpuRes, pr80Val); 4695 AssertReleaseFailed(); 4734 pFpuRes->FSW = (pFpuState->FSW & (X86_FSW_C0 | X86_FSW_C2 | X86_FSW_C3)) | (7 << X86_FSW_TOP_SHIFT); 4735 pFpuRes->r80Result = *pr80Val; 4736 pFpuRes->r80Result.s.fSign = !pr80Val->s.fSign; 4696 4737 } 4697 4738
Note:
See TracChangeset
for help on using the changeset viewer.