svn commit: r365922 - head/lib/msun/src
Stefan Eßer
se at FreeBSD.org
Sun Sep 20 05:32:54 UTC 2020
Author: se
Date: Sun Sep 20 05:32:53 2020
New Revision: 365922
URL: https://svnweb.freebsd.org/changeset/base/365922
Log:
Apply an opimization for the kernels used by cexp(x) and cexpf(x) submitted
by Steve Kargl:
- Use sincos[f] instead of a call to cos[f] and a call to sin[f].
- While here, alphabetize declaration.
Submitted by: sgk at troutmask.apl.washington.edu (Steve Kargl)
Modified:
head/lib/msun/src/k_exp.c
head/lib/msun/src/k_expf.c
Modified: head/lib/msun/src/k_exp.c
==============================================================================
--- head/lib/msun/src/k_exp.c Sun Sep 20 05:28:31 2020 (r365921)
+++ head/lib/msun/src/k_exp.c Sun Sep 20 05:32:53 2020 (r365922)
@@ -88,7 +88,7 @@ __ldexp_exp(double x, int expt)
double complex
__ldexp_cexp(double complex z, int expt)
{
- double x, y, exp_x, scale1, scale2;
+ double c, exp_x, s, scale1, scale2, x, y;
int ex_expt, half_expt;
x = creal(z);
@@ -105,6 +105,7 @@ __ldexp_cexp(double complex z, int expt)
half_expt = expt - half_expt;
INSERT_WORDS(scale2, (0x3ff + half_expt) << 20, 0);
- return (CMPLX(cos(y) * exp_x * scale1 * scale2,
- sin(y) * exp_x * scale1 * scale2));
+ sincos(y, &s, &c);
+ return (CMPLX(c * exp_x * scale1 * scale2,
+ s * exp_x * scale1 * scale2));
}
Modified: head/lib/msun/src/k_expf.c
==============================================================================
--- head/lib/msun/src/k_expf.c Sun Sep 20 05:28:31 2020 (r365921)
+++ head/lib/msun/src/k_expf.c Sun Sep 20 05:32:53 2020 (r365922)
@@ -71,7 +71,7 @@ __ldexp_expf(float x, int expt)
float complex
__ldexp_cexpf(float complex z, int expt)
{
- float x, y, exp_x, scale1, scale2;
+ float c, exp_x, s, scale1, scale2, x, y;
int ex_expt, half_expt;
x = crealf(z);
@@ -84,6 +84,7 @@ __ldexp_cexpf(float complex z, int expt)
half_expt = expt - half_expt;
SET_FLOAT_WORD(scale2, (0x7f + half_expt) << 23);
- return (CMPLXF(cosf(y) * exp_x * scale1 * scale2,
- sinf(y) * exp_x * scale1 * scale2));
+ sincosf(y, &s, &c);
+ return (CMPLXF(c * exp_x * scale1 * scale2,
+ s * exp_x * scale1 * scale2));
}
More information about the svn-src-all
mailing list