From: Tonu Naks <n...@adacore.com>

gcc/ada/ChangeLog:

        * libgnat/a-ngelfu.adb: conditional computation of X^2

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/libgnat/a-ngelfu.adb | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/gcc/ada/libgnat/a-ngelfu.adb b/gcc/ada/libgnat/a-ngelfu.adb
index 7ce2a4c87ce..d7b6c0c47f0 100644
--- a/gcc/ada/libgnat/a-ngelfu.adb
+++ b/gcc/ada/libgnat/a-ngelfu.adb
@@ -965,7 +965,6 @@ is
 
       P, Q, R : Float_Type'Base;
       Y : constant Float_Type'Base := abs X;
-      G : constant Float_Type'Base := Y * Y;
 
       Float_Type_Digits_15_Or_More : constant Boolean :=
         Float_Type'Digits > 14;
@@ -983,10 +982,14 @@ is
       elsif Y < Half_Ln3
         and then Float_Type_Digits_15_Or_More
       then
-         P := (P2 * G + P1) * G + P0;
-         Q := ((Q3 * G + Q2) * G + Q1) * G + Q0;
-         R := G * (P / Q);
-         return X + X * R;
+         declare
+            G : constant Float_Type'Base := Y * Y;
+         begin
+            P := (P2 * G + P1) * G + P0;
+            Q := ((Q3 * G + Q2) * G + Q1) * G + Q0;
+            R := G * (P / Q);
+            return X + X * R;
+         end;
 
       else
          return Aux.Tanh (X);
-- 
2.43.0

Reply via email to