about summary refs log tree commit diff
path: root/sysdeps/ieee754/dbl-64/mpa.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-10-25 00:56:33 -0400
committerUlrich Drepper <drepper@gmail.com>2011-10-25 00:56:33 -0400
commit31d3cc00b0cc5205b4b4efd73c911cfddff444c6 (patch)
tree89e95646d591fee083d62642085da77a01127292 /sysdeps/ieee754/dbl-64/mpa.c
parent202c9deb15ee43bcbe70b36fa9bae050b8633c27 (diff)
downloadglibc-31d3cc00b0cc5205b4b4efd73c911cfddff444c6.tar.gz
glibc-31d3cc00b0cc5205b4b4efd73c911cfddff444c6.tar.xz
glibc-31d3cc00b0cc5205b4b4efd73c911cfddff444c6.zip
Cleanup FMA4 patch
Move the FMA4 code into its own section.  Avoid some of the duplication
of data resulting from the double use of source files.
Diffstat (limited to 'sysdeps/ieee754/dbl-64/mpa.c')
-rw-r--r--sysdeps/ieee754/dbl-64/mpa.c61
1 files changed, 36 insertions, 25 deletions
diff --git a/sysdeps/ieee754/dbl-64/mpa.c b/sysdeps/ieee754/dbl-64/mpa.c
index ad5a639c4b..39c640882b 100644
--- a/sysdeps/ieee754/dbl-64/mpa.c
+++ b/sysdeps/ieee754/dbl-64/mpa.c
@@ -47,11 +47,18 @@
 #include "mpa.h"
 #include "mpa2.h"
 #include <sys/param.h>	/* For MIN() */
+
+#ifndef SECTION
+# define SECTION
+#endif
+
+#ifndef NO___ACR
 /* mcr() compares the sizes of the mantissas of two multiple precision  */
 /* numbers. Mantissas are compared regardless of the signs of the       */
 /* numbers, even if x->d[0] or y->d[0] are zero. Exponents are also     */
 /* disregarded.                                                         */
-static int mcr(const mp_no *x, const mp_no *y, int p) {
+static int
+mcr(const mp_no *x, const mp_no *y, int p) {
   int i;
   for (i=1; i<=p; i++) {
     if      (X[i] == Y[i])  continue;
@@ -61,9 +68,9 @@ static int mcr(const mp_no *x, const mp_no *y, int p) {
 }
 
 
-
 /* acr() compares the absolute values of two multiple precision numbers */
-static int __acr(const mp_no *x, const mp_no *y, int p) {
+int
+__acr(const mp_no *x, const mp_no *y, int p) {
   int i;
 
   if      (X[0] == ZERO) {
@@ -79,10 +86,11 @@ static int __acr(const mp_no *x, const mp_no *y, int p) {
 
   return i;
 }
+#endif
 
 
 #if 0
-/* cr90 compares the values of two multiple precision numbers           */
+/* cr() compares the values of two multiple precision numbers           */
 static int  __cr(const mp_no *x, const mp_no *y, int p) {
   int i;
 
@@ -119,8 +127,6 @@ static void __cpymn(const mp_no *x, int m, mp_no *y, int n) {
   EY = EX;     k=MIN(m,n);
   for (i=0; i <= k; i++)    Y[i] = X[i];
   for (   ; i <= n; i++)    Y[i] = ZERO;
-
-  return;
 }
 #endif
 
@@ -177,7 +183,6 @@ static void norm(const mp_no *x, double *y, int p)
   for (i=1; i>EX; i--)   c *= RADIXI;
 
   *y = c;
-  return;
 #undef R
 }
 
@@ -225,8 +230,6 @@ static void denorm(const mp_no *x, double *y, int p)
   c = X[0]*((z[1] + R*(z[2] + R*z[3])) - TWO10);
 
   *y = c*TWOM1032;
-  return;
-
 #undef R
 }
 
@@ -252,7 +255,9 @@ void __mp_dbl(const mp_no *x, double *y, int p) {
 /* number *y. If the precision p is too small the result is truncated. x is */
 /* left unchanged.                                                          */
 
-void __dbl_mp(double x, mp_no *y, int p) {
+void
+SECTION
+__dbl_mp(double x, mp_no *y, int p) {
 
   int i,n;
   double u;
@@ -273,7 +278,6 @@ void __dbl_mp(double x, mp_no *y, int p) {
     if (u>x)   u -= ONE;
     Y[i] = u;     x -= u;    x *= RADIX; }
   for (   ; i<=p; i++)     Y[i] = ZERO;
-  return;
 }
 
 
@@ -283,7 +287,9 @@ void __dbl_mp(double x, mp_no *y, int p) {
 /* No guard digit is used. The result equals the exact sum, truncated.      */
 /* *x & *y are left unchanged.                                              */
 
-static void add_magnitudes(const mp_no *x, const mp_no *y, mp_no *z, int p) {
+static void
+SECTION
+add_magnitudes(const mp_no *x, const mp_no *y, mp_no *z, int p) {
 
   int i,j,k;
 
@@ -325,7 +331,9 @@ static void add_magnitudes(const mp_no *x, const mp_no *y, mp_no *z, int p) {
 /* or y&z. One guard digit is used. The error is less than one ulp.         */
 /* *x & *y are left unchanged.                                              */
 
-static void sub_magnitudes(const mp_no *x, const mp_no *y, mp_no *z, int p) {
+static void
+SECTION
+sub_magnitudes(const mp_no *x, const mp_no *y, mp_no *z, int p) {
 
   int i,j,k;
 
@@ -372,8 +380,6 @@ static void sub_magnitudes(const mp_no *x, const mp_no *y, mp_no *z, int p) {
     Z[k++] = Z[i++];
   for (; k <= p; )
     Z[k++] = ZERO;
-
-  return;
 }
 
 
@@ -381,7 +387,9 @@ static void sub_magnitudes(const mp_no *x, const mp_no *y, mp_no *z, int p) {
 /* but not x&z or y&z. One guard digit is used. The error is less than    */
 /* one ulp. *x & *y are left unchanged.                                   */
 
-void __add(const mp_no *x, const mp_no *y, mp_no *z, int p) {
+void
+SECTION
+__add(const mp_no *x, const mp_no *y, mp_no *z, int p) {
 
   int n;
 
@@ -397,7 +405,6 @@ void __add(const mp_no *x, const mp_no *y, mp_no *z, int p) {
     else if (n == -1)        {sub_magnitudes(y,x,z,p);  Z[0] = Y[0]; }
     else                      Z[0] = ZERO;
   }
-  return;
 }
 
 
@@ -405,7 +412,9 @@ void __add(const mp_no *x, const mp_no *y, mp_no *z, int p) {
 /* overlap but not x&z or y&z. One guard digit is used. The error is      */
 /* less than one ulp. *x & *y are left unchanged.                         */
 
-void __sub(const mp_no *x, const mp_no *y, mp_no *z, int p) {
+void
+SECTION
+__sub(const mp_no *x, const mp_no *y, mp_no *z, int p) {
 
   int n;
 
@@ -421,7 +430,6 @@ void __sub(const mp_no *x, const mp_no *y, mp_no *z, int p) {
     else if (n == -1)        {sub_magnitudes(y,x,z,p);  Z[0] = -Y[0]; }
     else                      Z[0] = ZERO;
   }
-  return;
 }
 
 
@@ -430,7 +438,9 @@ void __sub(const mp_no *x, const mp_no *y, mp_no *z, int p) {
 /* truncated to p digits. In case p>3 the error is bounded by 1.001 ulp.   */
 /* *x & *y are left unchanged.                                             */
 
-void __mul(const mp_no *x, const mp_no *y, mp_no *z, int p) {
+void
+SECTION
+__mul(const mp_no *x, const mp_no *y, mp_no *z, int p) {
 
   int i, i1, i2, j, k, k2;
   double u;
@@ -461,7 +471,6 @@ void __mul(const mp_no *x, const mp_no *y, mp_no *z, int p) {
     EZ = EX + EY;
 
   Z[0] = X[0] * Y[0];
-  return;
 }
 
 
@@ -470,7 +479,9 @@ void __mul(const mp_no *x, const mp_no *y, mp_no *z, int p) {
 /* 2.001*r**(1-p) for p>3.                                                  */
 /* *x=0 is not permissible. *x is left unchanged.                           */
 
-static void __inv(const mp_no *x, mp_no *y, int p) {
+static
+SECTION
+void __inv(const mp_no *x, mp_no *y, int p) {
   int i;
 #if 0
   int l;
@@ -493,7 +504,6 @@ static void __inv(const mp_no *x, mp_no *y, int p) {
     __sub(&mptwo,y,&z,p);
     __mul(&w,&z,y,p);
   }
-  return;
 }
 
 
@@ -502,11 +512,12 @@ static void __inv(const mp_no *x, mp_no *y, int p) {
 /* Relative error bound = 2.001*r**(1-p) for p=2, 2.063*r**(1-p) for p=3     */
 /* and 3.001*r**(1-p) for p>3. *y=0 is not permissible.                      */
 
-void __dvd(const mp_no *x, const mp_no *y, mp_no *z, int p) {
+void
+SECTION
+__dvd(const mp_no *x, const mp_no *y, mp_no *z, int p) {
 
   mp_no w;
 
   if (X[0] == ZERO)    Z[0] = ZERO;
   else                {__inv(y,&w,p);   __mul(x,&w,z,p);}
-  return;
 }