HomeFreeBSD

Implementations of cexpl()

Description

Implementations of cexpl()

The change implements cexpl() for both ld80 and ld128 architectures.
Testing was done on x86_64 and aarch64 systems.

Along the way sincos[fl]() use an optimization that reduces the argument
to being done one rather than twice. This optimization actually pointed
to a bug in the ld128 version of sincosl(), which is now fixed. In
addition, the minmax polynomial coefficients for sincosl() have been
updated.

A concise log of the file-by-file changes follows.

  • include/complex.h: . Add a prototype for cexpl().
  • lib/msun/Makefile: . Add s_cexpl.c to the build. . Setup a link for cexpl.3 to cexp.3.
  • lib/msun/Symbol.map: . Expose cexpl symbol in libm shared library.
  • lib/msun/ld128/s_cexpl.c:
    • Implementation of cexpl() for 128-bit long double architectures. Tested on an aarch64 system.
  • lib/msun/ld80/s_cexpl.c:
    • Implementation of cexpl() for Intel 80-bit long double.
  • lib/msun/man/cexp.3: . Document cexpl().
  • lib/msun/man/complex.3: . Add a BUGS section about cpow[fl].
  • lib/msun/src/s_cexp.c: . Include float.h for weak references on 53-bit long double targets. . Use sincos() to reduce argument reduction cost.
  • lib/msun/src/s_cexpf.c: . Use sincosf() to reduce argument reduction cost.
  • lib/msun/src/k_sincosl.h: . Catch up with the new minmax polynomial coefficients for the kernel for the 128-bit cosl() implementation. . BUG FIX: *cs was used where *sn should have been. This means that sinl() was no computed correctly when iy != 0.
  • lib/msun/src/s_cosl.c: . Include fpmath.h to get access to IEEEl2bits. . Replace M_PI_4 with pio4, a 64-bit or 113-bit approximation for pi / 4.

PR: 216862
MFC after: 1 week

Details

Provenance
Steve Kargl <kargl@FreeBSD.org>Authored on Nov 5 2021, 2:04 AM
kibCommitted on Nov 5 2021, 11:51 AM
Parents
rG8b57ee7e0107: sdhci_fsl_fdt: Provide more accurate clk calculation
Branches
Unknown
Tags
Unknown