summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/builtins/divtf3.c
diff options
context:
space:
mode:
Diffstat (limited to 'compiler-rt/lib/builtins/divtf3.c')
-rw-r--r--compiler-rt/lib/builtins/divtf3.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/compiler-rt/lib/builtins/divtf3.c b/compiler-rt/lib/builtins/divtf3.c
index 17273749b5b..ba5de99f995 100644
--- a/compiler-rt/lib/builtins/divtf3.c
+++ b/compiler-rt/lib/builtins/divtf3.c
@@ -181,6 +181,18 @@ COMPILER_RT_ABI fp_t __divtf3(fp_t a, fp_t b) {
return fromRep(infRep | quotientSign);
}
else if (writtenExponent < 1) {
+ if (writtenExponent == 0) {
+ // Check whether the rounded result is normal.
+ const bool round = (residual << 1) > bSignificand;
+ // Clear the implicit bit.
+ rep_t absResult = quotient & significandMask;
+ // Round.
+ absResult += round;
+ if (absResult & ~significandMask) {
+ // The rounded result is normal; return it.
+ return fromRep(absResult | quotientSign);
+ }
+ }
// Flush denormals to zero. In the future, it would be nice to add
// code to round them correctly.
return fromRep(quotientSign);
OpenPOWER on IntegriCloud