[PATCH] Improves __ieee754_exp() performance by greater than 5x on sparc/x86.
Joseph Myers
joseph@codesourcery.com
Thu Oct 26 17:20:00 GMT 2017
On Thu, 26 Oct 2017, Patrick McGehearty wrote:
> Replaced tables of double float constants with hex constants, taking special
> attention to correctly handle little endian and big endian versions.
> Using hex initialization also required changing variables to be declared
> as unions. Tables moved from e_exp.c to sysdeps/ieee754/dbl-64/eexp.tbl.
There should be no endian-dependent constants or tables of constants.
See my comments in the commit message for commit
60f435bb0c097ead2d4609aa7e45a203eb24e43c where I cleaned up some such
existing endian-dependent definitions.
Unless a particular constant, table etc. is needed in the code both as
integers and as double, just define it as double and initialize with a C99
hex float constant, without involving unions at all. This certainly
applies to some of your constants, possibly all of them.
If both the double and int parts of a union are actually referenced (and
while the code certainly references both parts for *variables*, it seems
less likely the integer parts are of use for *constants*), use C99
designated initializers to initialize the double part of the union, again
using a C99 hex float constant.
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Libc-alpha
mailing list