diff --git a/src/common/fp/op/FPConvert.cpp b/src/common/fp/op/FPConvert.cpp index 49524906..87f965a7 100644 --- a/src/common/fp/op/FPConvert.cpp +++ b/src/common/fp/op/FPConvert.cpp @@ -93,7 +93,7 @@ FPT_TO FPConvert(FPT_FROM op, FPCR fpcr, RoundingMode rounding_mode, FPSR& fpsr) return FPInfo::Zero(sign); } - return FPRoundBase(value, fpcr, rounding_mode, fpsr); + return FPRoundCV(value, fpcr, rounding_mode, fpsr); } template u64 FPConvert(u32 op, FPCR fpcr, RoundingMode rounding_mode, FPSR& fpsr); diff --git a/src/common/fp/unpacked.h b/src/common/fp/unpacked.h index 943ee461..ae206c19 100644 --- a/src/common/fp/unpacked.h +++ b/src/common/fp/unpacked.h @@ -69,6 +69,12 @@ FPT FPRound(FPUnpacked op, FPCR fpcr, RoundingMode rounding, FPSR& fpsr) { return FPRoundBase(op, fpcr, rounding, fpsr); } +template +FPT FPRoundCV(FPUnpacked op, FPCR fpcr, RoundingMode rounding, FPSR& fpsr) { + fpcr.FZ16(false); + return FPRoundBase(op, fpcr, rounding, fpsr); +} + template FPT FPRound(FPUnpacked op, FPCR fpcr, FPSR& fpsr) { return FPRound(op, fpcr, fpcr.RMode(), fpsr);