From e3b2eb57b5c538b36c4423b10b8b9aab6ef30f4e Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sun, 14 Apr 2019 20:51:58 -0400 Subject: [PATCH] common/fp/op/FPRSqrtStepFused: Add half-precision specialization for FPRSqrtStepFused --- src/common/fp/op/FPRSqrtStepFused.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/common/fp/op/FPRSqrtStepFused.cpp b/src/common/fp/op/FPRSqrtStepFused.cpp index e3ecf2ae..84a193b4 100644 --- a/src/common/fp/op/FPRSqrtStepFused.cpp +++ b/src/common/fp/op/FPRSqrtStepFused.cpp @@ -19,9 +19,9 @@ template FPT FPRSqrtStepFused(FPT op1, FPT op2, FPCR fpcr, FPSR& fpsr) { op1 = FPNeg(op1); - const auto [type1, sign1, value1] = FPUnpack(op1, fpcr, fpsr); - const auto [type2, sign2, value2] = FPUnpack(op2, fpcr, fpsr); - + const auto [type1, sign1, value1] = FPUnpack(op1, fpcr, fpsr); + const auto [type2, sign2, value2] = FPUnpack(op2, fpcr, fpsr); + if (const auto maybe_nan = FPProcessNaNs(type1, type2, op1, op2, fpcr, fpsr)) { return *maybe_nan; } @@ -37,7 +37,7 @@ FPT FPRSqrtStepFused(FPT op1, FPT op2, FPCR fpcr, FPSR& fpsr) { } if (inf1 || inf2) { - return FPInfo::Infinity(sign1 != sign2); + return FPT(FPInfo::Infinity(sign1 != sign2)); } // result_value = (3.0 + (value1 * value2)) / 2.0 @@ -45,11 +45,12 @@ FPT FPRSqrtStepFused(FPT op1, FPT op2, FPCR fpcr, FPSR& fpsr) { result_value.exponent--; if (result_value.mantissa == 0) { - return FPInfo::Zero(fpcr.RMode() == RoundingMode::TowardsMinusInfinity); + return FPT(FPInfo::Zero(fpcr.RMode() == RoundingMode::TowardsMinusInfinity)); } return FPRound(result_value, fpcr, fpsr); } +template u16 FPRSqrtStepFused(u16 op1, u16 op2, FPCR fpcr, FPSR& fpsr); template u32 FPRSqrtStepFused(u32 op1, u32 op2, FPCR fpcr, FPSR& fpsr); template u64 FPRSqrtStepFused(u64 op1, u64 op2, FPCR fpcr, FPSR& fpsr);