Skip to content

Commit

Permalink
Use hex float constants in sysdeps/ieee754/dbl-64/e_sqrt.c.
Browse files Browse the repository at this point in the history
Various sysdeps/ieee754/dbl-64 functions use double constants defined
using a union between a double and two ints, with separate big-endian
and little-endian definitions of the constants.

With modern C, this is unnecessary complication; hex float constants
(or __builtin_inf etc.) suffice to specify the exact value desired,
and so can avoid separate versions for each endianness.  Having this
complication also complicates cleanups such as removing slow paths
from these library functions, as they need to make sure to remove both
copies of variables that are no longer used after such a cleanup (and
in at least one case, proper removal of a slow path will also involve
removing slow-path-only values from the middle of an array - an array
with both big-endian and little-endian copies - and adjusting other
references to that array).

So it makes sense to clean up the code to define these constants using
hex floats and so eliminate the endianness conditional.  This patch
does so in the case of sqrt, where the two constants are such that it
makes sense just to put them directly in the code using them and
eliminate the names for them altogether.

Tested for arm (the code generated for sqrt does change, though not in
any significant way).

	* sysdeps/ieee754/dbl-64/e_sqrt.c: Do not include uroot.h.
	(__ieee754_sqrt): Use hex float constants instead of tm256.x and
	t512.x.
	* sysdeps/ieee754/dbl-64/uroot.h: Remove file.
  • Loading branch information
Joseph Myers committed Dec 1, 2015
1 parent 9627da3 commit 60f435b
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 46 deletions.
7 changes: 7 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
2015-12-01 Joseph Myers <joseph@codesourcery.com>

* sysdeps/ieee754/dbl-64/e_sqrt.c: Do not include uroot.h.
(__ieee754_sqrt): Use hex float constants instead of tm256.x and
t512.x.
* sysdeps/ieee754/dbl-64/uroot.h: Remove file.

2015-11-30 Amit Pawar <amit.pawar@amd.com>

[BZ #19214]
Expand Down
5 changes: 2 additions & 3 deletions sysdeps/ieee754/dbl-64/e_sqrt.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
/* */
/* FUNCTION: usqrt */
/* */
/* FILES NEEDED: dla.h endian.h mydefs.h uroot.h */
/* FILES NEEDED: dla.h endian.h mydefs.h */
/* uroot.tbl */
/* */
/* An ultimate sqrt routine. Given an IEEE double machine number x */
Expand All @@ -47,7 +47,6 @@
double
__ieee754_sqrt (double x)
{
#include "uroot.h"
static const double
rt0 = 9.99999999859990725855365213134618E-01,
rt1 = 4.99999999495955425917856814202739E-01,
Expand Down Expand Up @@ -134,7 +133,7 @@ __ieee754_sqrt (double x)
return x; /* sqrt(+0)=+0, sqrt(-0)=-0 */
if (k < 0)
return (x - x) / (x - x); /* sqrt(-ve)=sNaN */
return tm256.x * __ieee754_sqrt (x * t512.x);
return 0x1p-256 * __ieee754_sqrt (x * 0x1p512);
}
}
strong_alias (__ieee754_sqrt, __sqrt_finite)
43 changes: 0 additions & 43 deletions sysdeps/ieee754/dbl-64/uroot.h

This file was deleted.

0 comments on commit 60f435b

Please sign in to comment.