178c178
< fixNan(FPSCR fpscr, fpType val, fpType op1, fpType op2)
---
> fixDest(FPSCR fpscr, fpType val, fpType op1, fpType op2)
180c180,182
< if (std::isnan(val)) {
---
> int fpClass = std::fpclassify(val);
> fpType junk = 0.0;
> if (fpClass == FP_NAN) {
187d188
< fpType junk = 0.0;
198a200,204
> } else if (fpClass == FP_SUBNORMAL && fpscr.fz == 1) {
> // Turn val into a zero with the correct sign;
> uint64_t bitMask = ULL(0x1) << (sizeof(fpType) * 8 - 1);
> val = bitsToFp(fpToBits(val) & bitMask, junk);
> feraiseexcept(FeUnderflow);