Changeset 97337 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Oct 28, 2022 3:15:50 PM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllAImplC.cpp
r97319 r97337 6288 6288 { 6289 6289 pFpuRes->r80Result = *pr80Val; 6290 6291 6290 } 6292 6291 else … … 6314 6313 else if (RTFLOAT80U_IS_DENORMAL(pr80Val)) 6315 6314 { 6316 pFpuRes->r80Result = *pr80Val;6317 6315 fFsw |= X86_FSW_DE; 6318 6316 6319 6317 if (fFcw & X86_FCW_DM) 6320 6318 { 6319 if (fFcw & X86_FCW_UM) 6320 { 6321 pFpuRes->r80Result = *pr80Val; 6322 } 6323 else 6324 { 6325 /* Underflow signalling as described at 7.4 section of 1985 IEEE 754*/ 6326 uint64_t uMantissa = pr80Val->s.uMantissa; 6327 uint32_t uExponent = ASMBitLastSetU64(uMantissa); 6328 6329 uExponent = 64 - uExponent; 6330 uMantissa <<= uExponent; 6331 uExponent = RTFLOAT128U_EXP_BIAS_ADJUST - uExponent + 1; 6332 6333 pFpuRes->r80Result.s.fSign = pr80Val->s.fSign; 6334 pFpuRes->r80Result.s.uMantissa = uMantissa; 6335 pFpuRes->r80Result.s.uExponent = uExponent; 6336 } 6337 6321 6338 fFsw |= X86_FSW_UE | X86_FSW_PE; 6322 6339 6323 if (!(fFcw & X86_FCW_UM) || !(fFcw & X86_FCW_PM)) 6340 if ((fFcw & X86_FCW_UM) && (fFcw & X86_FCW_PM)) 6341 { 6342 /* All the exceptions are masked. */ 6343 } 6344 else 6324 6345 { 6325 6346 fFsw |= X86_FSW_ES | X86_FSW_B; … … 6328 6349 else 6329 6350 { 6351 pFpuRes->r80Result = *pr80Val; 6352 6330 6353 fFsw |= X86_FSW_ES | X86_FSW_B; 6331 6354 }
Note:
See TracChangeset
for help on using the changeset viewer.