| From 73f98d03d2cde34255c0a39ef18902bffdce0185 Mon Sep 17 00:00:00 2001 |
| From: Stefan Liebler <stli@linux.ibm.com> |
| Date: Wed, 11 Dec 2019 15:09:14 +0100 |
| Subject: [PATCH 02/28] Always use wordsize-64 version of s_rint.c. |
| |
| This patch replaces s_rint.c in sysdeps/dbl-64 with the one in |
| sysdeps/dbl-64/wordsize-64 and removes the latter one. |
| The code is not changed except changes in code style. |
| |
| Also adjusted the include path in x86_64 file. |
| |
| Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> |
| (cherry picked from commit ab48bdd098a675dddb360faafc497a61c4bd4334) |
| |
| sysdeps/ieee754/dbl-64/s_rint.c | 32 ++++++------ |
| sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c | 57 --------------------- |
| sysdeps/x86_64/fpu/multiarch/s_rint-c.c | 2 +- |
| 3 files changed, 17 insertions(+), 74 deletions(-) |
| delete mode 100644 sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c |
| |
| diff --git a/sysdeps/ieee754/dbl-64/s_rint.c b/sysdeps/ieee754/dbl-64/s_rint.c |
| index cb0f5ca298..7f3dc87b96 100644 |
| |
| |
| @@ -1,4 +1,3 @@ |
| -/* @(#)s_rint.c 5.1 93/09/24 */ |
| /* |
| * |
| * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. |
| @@ -25,38 +24,39 @@ |
| #include <libm-alias-double.h> |
| |
| static const double |
| - TWO52[2] = { |
| - 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ |
| - -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ |
| +TWO52[2] = { |
| + 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ |
| + -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ |
| }; |
| |
| double |
| __rint (double x) |
| { |
| - int32_t i0, j0, sx; |
| - double w, t; |
| - GET_HIGH_WORD (i0, x); |
| - sx = (i0 >> 31) & 1; |
| - j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; |
| + int64_t i0, sx; |
| + int32_t j0; |
| + EXTRACT_WORDS64 (i0, x); |
| + sx = (i0 >> 63) & 1; |
| + j0 = ((i0 >> 52) & 0x7ff) - 0x3ff; |
| if (j0 < 52) |
| { |
| if (j0 < 0) |
| { |
| - w = TWO52[sx] + x; |
| - t = w - TWO52[sx]; |
| - GET_HIGH_WORD (i0, t); |
| - SET_HIGH_WORD (t, (i0 & 0x7fffffff) | (sx << 31)); |
| + double w = TWO52[sx] + x; |
| + double t = w - TWO52[sx]; |
| + EXTRACT_WORDS64 (i0, t); |
| + INSERT_WORDS64 (t, (i0 & UINT64_C (0x7fffffffffffffff)) |
| + | (sx << 63)); |
| return t; |
| } |
| } |
| else |
| { |
| if (j0 == 0x400) |
| - return x + x; /* inf or NaN */ |
| + return x + x; /* inf or NaN */ |
| else |
| - return x; /* x is integral */ |
| + return x; /* x is integral */ |
| } |
| - w = TWO52[sx] + x; |
| + double w = TWO52[sx] + x; |
| return w - TWO52[sx]; |
| } |
| #ifndef __rint |
| diff --git a/sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c b/sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c |
| deleted file mode 100644 |
| index 622e479c5f..0000000000 |
| |
| |
| @@ -1,57 +0,0 @@ |
| -/* |
| - * ==================================================== |
| - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. |
| - * |
| - * Developed at SunPro, a Sun Microsystems, Inc. business. |
| - * Permission to use, copy, modify, and distribute this |
| - * software is freely granted, provided that this notice |
| - * is preserved. |
| - * ==================================================== |
| - */ |
| - |
| -/* |
| - * rint(x) |
| - * Return x rounded to integral value according to the prevailing |
| - * rounding mode. |
| - * Method: |
| - * Using floating addition. |
| - * Exception: |
| - * Inexact flag raised if x not equal to rint(x). |
| - */ |
| - |
| -#include <math.h> |
| -#include <math_private.h> |
| -#include <libm-alias-double.h> |
| - |
| -static const double |
| -TWO52[2]={ |
| - 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ |
| - -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ |
| -}; |
| - |
| -double |
| -__rint(double x) |
| -{ |
| - int64_t i0,sx; |
| - int32_t j0; |
| - EXTRACT_WORDS64(i0,x); |
| - sx = (i0>>63)&1; |
| - j0 = ((i0>>52)&0x7ff)-0x3ff; |
| - if(j0<52) { |
| - if(j0<0) { |
| - double w = TWO52[sx]+x; |
| - double t = w-TWO52[sx]; |
| - EXTRACT_WORDS64(i0,t); |
| - INSERT_WORDS64(t,(i0&UINT64_C(0x7fffffffffffffff))|(sx<<63)); |
| - return t; |
| - } |
| - } else { |
| - if(j0==0x400) return x+x; /* inf or NaN */ |
| - else return x; /* x is integral */ |
| - } |
| - double w = TWO52[sx]+x; |
| - return w-TWO52[sx]; |
| -} |
| -#ifndef __rint |
| -libm_alias_double (__rint, rint) |
| -#endif |
| diff --git a/sysdeps/x86_64/fpu/multiarch/s_rint-c.c b/sysdeps/x86_64/fpu/multiarch/s_rint-c.c |
| index 162a630ff9..b010150f52 100644 |
| |
| |
| @@ -1,3 +1,3 @@ |
| #undef __rint |
| #define __rint __rint_c |
| -#include <sysdeps/ieee754/dbl-64/wordsize-64/s_rint.c> |
| +#include <sysdeps/ieee754/dbl-64/s_rint.c> |
| -- |
| 2.18.2 |
| |