[PATCH][ppc] merge in powerpc version of slowpow.c
Andreas Jaeger
aj@suse.com
Thu Jan 3 10:07:00 GMT 2013
On 01/03/2013 10:20 AM, Siddhesh Poyarekar wrote:
> Hi,
>
> The powerpc version of slowpow.c adds an extra pass with the long
> double functions, which reduces the number of values that fall back
> into the slow mpa phase. This should be useful for other
Do you have some examples that still fall in the slow mpa phase?
> architectures as well if they have support for a larger long double.
> Attached patch merges in the powerpc slowpow.c logic into the globally
> used code and removes the former. I have verified that the test suite
> does not regress on powerpc 32 and 64-bit as well as on x86_64.
>
> The test cases in http://entropymine.com/imageworsener/slowpow/ are
> now useless since all of those values get computed correctly using
> long double and return in a flash. The powerpc performance with this
So, for x86-64 this is a great improvement - thanks!
> change has improved by about 1%, which should be due to the favourable
> branch prediction, which is biased towards finding an accurate result
> using long double.
>
>
> Siddhesh
>
> * sysdeps/ieee754/dbl-64/slowpow.c (__slowpow)
> [!NO_LONG_DOUBLE]: Try computing pow using long double.
> * sysdeps/powerpc/powerpc32/power4/fpu/slowpow.c: Remove.
> * sysdeps/powerpc/powerpc64/power4/fpu/slowpow.c: Likewise.
>
> diff --git a/sysdeps/ieee754/dbl-64/slowpow.c b/sysdeps/ieee754/dbl-64/slowpow.c
> index c303eaa..eafd6e1 100644
> --- a/sysdeps/ieee754/dbl-64/slowpow.c
> +++ b/sysdeps/ieee754/dbl-64/slowpow.c
> @@ -47,13 +47,33 @@ double
> SECTION
> __slowpow(double x, double y, double z) {
> double res,res1;
> +
> + res = __halfulp (x, y); /* halfulp() returns -10 or x^y */
> + if (res >= 0)
> + return res; /* if result was really computed by halfulp */
> + /* else, if result was not really computed by halfulp */
> +
> +#ifndef NO_LONG_DOUBLE
> + long double ldw, ldz, ldpp;
> + static const long double ldeps = 0x4.0p-96;
Is that constant correct for all the various long double formats we have?
> +
> + /* Compute pow as long double, 106 bits */
The comment 106 bits is not correct and needs updating,
Andreas
> [...]
--
Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
More information about the Libc-alpha
mailing list