Summary: | [libm] Fix powl, cpow, cpowf, and cpowl imports from OpenBSD | ||||||
---|---|---|---|---|---|---|---|
Product: | Base System | Reporter: | sgk | ||||
Component: | bin | Assignee: | Dimitry Andric <dim> | ||||
Status: | Closed FIXED | ||||||
Severity: | Affects Only Me | CC: | dim, numerics, pi, rhurlin | ||||
Priority: | --- | Keywords: | patch | ||||
Version: | CURRENT | Flags: | dim:
mfc-stable11+
dim: mfc-stable10+ |
||||
Hardware: | Any | ||||||
OS: | Any | ||||||
Attachments: |
|
Description
sgk
2018-07-18 22:17:50 UTC
Created attachment 195262 [details]
patch
Version 2. After applying the patch, one can % svn delete libm/msun/src/polevll.c % svn commit libm/msun/src/polevll.c * lib/msun/Makefile: . Remove polevll.c * lib/msun/ld80/e_powl.c: . Copy contents of polevll.c to here. This is the only consumer of these functions. Make functions 'static inline'. . Make reducl a 'static inline' function. * lib/msun/man/exp.3: . Remove BUGS section that no longer applies. * lib/msun/src/math_private.h: . Remove prototypes of __p1evll() and __polevll() * lib/msun/src/s_cpow.c: * lib/msun/src/s_cpowf.c: * lib/msun/src/s_cpowl.c . Use the CMPLX macro from either C99 or math_private.h (depends of compiler support) instead of the problematic use of complex I. A commit references this bug: Author: dim Date: Thu Jul 19 18:44:12 UTC 2018 New revision: 336497 URL: https://svnweb.freebsd.org/changeset/base/336497 Log: Fix powl, cpow, cpowf, and cpowl imports from OpenBSD This is a follow-up to r336299. * lib/msun/Makefile: . Remove polevll.c * lib/msun/ld80/e_powl.c: . Copy contents of polevll.c to here. This is the only consumer of these functions. Make functions 'static inline'. . Make reducl a 'static inline' function. * lib/msun/man/exp.3: . Remove BUGS section that no longer applies. * lib/msun/src/math_private.h: . Remove prototypes of __p1evll() and __polevll() * lib/msun/src/s_cpow.c: * lib/msun/src/s_cpowf.c: * lib/msun/src/s_cpowl.c . Use the CMPLX macro from either C99 or math_private.h (depends of compiler support) instead of the problematic use of complex I. Submitted by: Steve Kargl <sgk@troutmask.apl.washington.edu> PR: 229876 MFC after: 1 week Changes: head/lib/msun/Makefile head/lib/msun/ld80/e_powl.c head/lib/msun/man/exp.3 head/lib/msun/src/math_private.h head/lib/msun/src/polevll.c head/lib/msun/src/s_cpow.c head/lib/msun/src/s_cpowf.c head/lib/msun/src/s_cpowl.c You can fix the gcc problems with the missing CMPLX macros by adding #include "math_private.h" to the 3 files. A commit references this bug: Author: dim Date: Fri Jul 20 18:27:31 UTC 2018 New revision: 336563 URL: https://svnweb.freebsd.org/changeset/base/336563 Log: Recommit r336497: Fix powl, cpow, cpowf, and cpowl imports from OpenBSD This is a follow-up to r336299. * lib/msun/Makefile: . Remove polevll.c * lib/msun/ld80/e_powl.c: . Copy contents of polevll.c to here. This is the only consumer of these functions. Make functions 'static inline'. . Make reducl a 'static inline' function. * lib/msun/man/exp.3: . Remove BUGS section that no longer applies. * lib/msun/src/math_private.h: . Remove prototypes of __p1evll() and __polevll() * lib/msun/src/s_cpow.c: * lib/msun/src/s_cpowf.c: * lib/msun/src/s_cpowl.c . Include math_private.h. . Use the CMPLX macro from either C99 or math_private.h (depends on compiler support) instead of the problematic use of complex I. Submitted by: Steve Kargl <sgk@troutmask.apl.washington.edu> PR: 229876 MFC after: 1 week Changes: head/lib/msun/Makefile head/lib/msun/ld80/e_powl.c head/lib/msun/man/exp.3 head/lib/msun/src/math_private.h head/lib/msun/src/polevll.c head/lib/msun/src/s_cpow.c head/lib/msun/src/s_cpowf.c head/lib/msun/src/s_cpowl.c dim, Thanks for taking care of this bug. Sorry about missing the inclusion of math_private.h in he original patch. steve A commit references this bug: Author: dim Date: Fri Jul 27 17:39:39 UTC 2018 New revision: 336767 URL: https://svnweb.freebsd.org/changeset/base/336767 Log: MFC r327400 (by eadler): cacos(3): correct spelling of 'I' In some cases we had 'i' instead of 'I'. PR: 195517 Submitted by: stephen MFC r329259 (by eadler): msun: signed overflow in atan2 As a component of atan2(y, x), the case of x == 1.0 is farmed out to atan(y). The current implementation of this comparison is vulnerable to signed integer underflow (that is, undefined behavior), and it's performed in a somewhat more complicated way than it need be. Change it to not be quite so cute, rather directly comparing the high/low bits of x to the specific IEEE-754 bit pattern that encodes 1.0. Note that while there are three different e_atan* files in the relevant directory, only this one needs fixing. e_atan2f.c already compares against the full bit pattern encoding 1.0f, while e_atan2l.cuses bitwise-ands/ors/nots and so doesn't require a change. Closes #130 Submitted by: Jeff Walden (@jswalden github PR #130) Reviewed by: bde MFC r334721 (by cem): clog.3, complex.3: Fix typos and igor style issues PR: 228783 Reported by: Karsten <freebsd-bugzilla AT kkoenig.net> MFC r336299 (by mmacy): msun: add ld80/ld128 powl, cpow, cpowf, cpowl from openbsd This corresponds to the latest status (hasn't changed in 9+ years) from openbsd of ld80/ld128 powl, and source cpowf, cpow, cpowl (the complex power functions for float complex, double complex, and long double complex) which are required for C99 compliance and were missing from FreeBSD. Also required for some numerical codes using complex numbered Hamiltonians. Thanks to jhb for tracking down the issue with making weak_reference compile on powerpc. When asked to review, bde said "I don't like it" - but provided no actionable feedback or superior implementations. Discussed with: jhb Submitted by: jmd Differential Revision: https://reviews.freebsd.org/D15919 MFC r336563: Recommit r336497: Fix powl, cpow, cpowf, and cpowl imports from OpenBSD This is a follow-up to r336299. * lib/msun/Makefile: . Remove polevll.c * lib/msun/ld80/e_powl.c: . Copy contents of polevll.c to here. This is the only consumer of these functions. Make functions 'static inline'. . Make reducl a 'static inline' function. * lib/msun/man/exp.3: . Remove BUGS section that no longer applies. * lib/msun/src/math_private.h: . Remove prototypes of __p1evll() and __polevll() * lib/msun/src/s_cpow.c: * lib/msun/src/s_cpowf.c: * lib/msun/src/s_cpowl.c . Include math_private.h. . Use the CMPLX macro from either C99 or math_private.h (depends on compiler support) instead of the problematic use of complex I. Submitted by: Steve Kargl <sgk@troutmask.apl.washington.edu> PR: 229876 Changes: _U stable/11/ stable/11/include/complex.h stable/11/lib/msun/Makefile stable/11/lib/msun/Symbol.map stable/11/lib/msun/ld128/e_powl.c stable/11/lib/msun/ld80/e_powl.c stable/11/lib/msun/man/cacos.3 stable/11/lib/msun/man/clog.3 stable/11/lib/msun/man/complex.3 stable/11/lib/msun/man/cpow.3 stable/11/lib/msun/man/exp.3 stable/11/lib/msun/src/e_atan2.c stable/11/lib/msun/src/e_pow.c stable/11/lib/msun/src/imprecise.c stable/11/lib/msun/src/math_private.h stable/11/lib/msun/src/s_cpow.c stable/11/lib/msun/src/s_cpowf.c stable/11/lib/msun/src/s_cpowl.c |