From a520ff954b20bf6ce376b512867b8d4865708c9d Mon Sep 17 00:00:00 2001
From: Richard Henderson <rth@redhat.com>
Date: Mon, 23 Sep 2002 04:26:40 -0700
Subject: [PATCH] * real.c (do_multiply): Normalize U before addition.

From-SVN: r57435
---
 gcc/ChangeLog | 4 ++++
 gcc/real.c    | 6 +++---
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fd6d5ad45f55..64a48018ca6d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2002-09-23  Richard Henderson  <rth@redhat.com>
+
+	* real.c (do_multiply): Normalize U before addition.
+
 2002-09-23  Mark Mitchell  <mark@codesourcery.com>
 
 	* c-common.c (flag_abi_version): New variable.
diff --git a/gcc/real.c b/gcc/real.c
index 1f73f9de2e95..ad0b160f3d50 100644
--- a/gcc/real.c
+++ b/gcc/real.c
@@ -741,9 +741,6 @@ do_multiply (r, a, b)
     rr = r;
   get_zero (rr, 0);
 
-  u.class = rvc_normal;
-  u.sign = 0;
-
   /* Collect all the partial products.  Since we don't have sure access
      to a widening multiply, we split each long into two half-words.
 
@@ -784,6 +781,8 @@ do_multiply (r, a, b)
 	    /* Would underflow to zero, which we shouldn't bother adding.  */
 	    continue;
 
+	  u.class = rvc_normal;
+	  u.sign = 0;
 	  u.exp = exp;
 
 	  for (k = j; k < SIGSZ * 2; k += 2)
@@ -797,6 +796,7 @@ do_multiply (r, a, b)
 	      u.sig[k / 2] = ai * bi;
 	    }
 
+	  normalize (&u);
 	  do_add (rr, rr, &u, 0);
 	}
     }
-- 
GitLab