Commit Graph

257 Commits

Author SHA1 Message Date
Ed Schouten 06dbb6e72b Use more uniform style of including headers.
Put external headers before internal ones. While there, replace a lot of
occurences of "openlibm.h" with <openlibm.h>. It should be thought of as
an external header, as it is installed along with the library.
2015-01-09 14:24:24 +01:00
Ed Schouten f6b045b4cd Add bits to openlibm headers to switch between using the host headers. 2015-01-09 14:11:11 +01:00
Ed Schouten 8429b82a93 Use proper floating point literals.
signbit() and friends should always take floating point arguments. This
fixes a compiler error when using FreeBSD's own <math.h>.
2015-01-09 14:09:57 +01:00
Ed Schouten 410e6ebb59 Move CMPLX() into <openlibm_complex.h>, as it is normally part of <complex.h>.
While there, make CMPLX() work with Clang by using compound literals.
Now that cimag*() uses __imag__, we can also just inline the unions.
There is no need for the separate types anymore.

Also just define CMPLX() unconditionally now, as we no longer pull in
the host's <complex.h>.
2015-01-09 14:04:44 +01:00
Ed Schouten a249c5ebb3 Simply use __imag__ to implement cimag().
We already use this construct in cabs() to call hypot(), so I guess we
can assume our targeted compilers support this construct.
2015-01-09 13:40:29 +01:00
Ed Schouten 08dbb2b517 Never include <complex.h>. Include <openlibm_complex.h> instead.
If we ship with a separate copy of <complex.h>, we should also use this
one instead of the one provided by the system.
2015-01-09 13:30:44 +01:00
Ed Schouten beb387c4b2 Use <openlibm.h> consistently. 2015-01-09 13:15:01 +01:00
Ed Schouten 17688c4487 Rename include/fenv.h to <openlibm_fenv.h>.
OpenLibm has an implementation of fenv.h internally. This may be
problematic in case you want it to build against the host system's
implementation, as it would require you to somehow take the fenv.h file
out of the compiler search path.

Simply use a different naming scheme, similar to openlibm.h and
openlibm_complex.h. If we want to build against the host's fenv.h, we
can simply add an '#include <fenv.h>' from within this header.
2015-01-09 13:11:12 +01:00
Viral B. Shah f5377fda83 Merge pull request #75 from NuxiNL/signgam
Clean up handling of signgam
2015-01-08 18:58:31 +05:30
Keno Fischer 8b38bd1b0c Merge pull request #76 from NuxiNL/cmplx
Change existing code to use CMPLX*() instead of cpack*() where possible.
2015-01-08 14:20:24 +01:00
Ed Schouten 5d6cb09b96 Change existing code to use CMPLX*() instead of cpack*() where possible.
I am currently working on building openlibm against stock copies of
<math.h>, instead of the openlibm.h header. It seems that a C compliant
<math.h> header can be used as a drop-in replacement for openlibm.h,
with the exception that it lacks cpack*().

In FreeBSD SVN r275819 I patched up the math library by replacing
cpack*() by CMPLX*(). That way many functions become less tied to the
intrinsics of the math library. Make the same change to openlibm.
2015-01-08 12:02:56 +01:00
Ed Schouten 55ac462808 Add lgammal_r().
We already provide lgammaf_r() and lgamma_r(). It's not hard to also add
lgammal_r(), for consistency.

I am currently working on porting openlibm to an environment where
global state, and thus signgam, is not available. By adding lgammal_r(),
I can trivially disable support for signgam by just patching up
src/e_lgamma{f,,l}.c. That way there is no need to patch up the actual
algorithms.
2015-01-08 11:23:28 +01:00
Ed Schouten 24cec16fcc Remove references to _DECLARE_C99_LDBL_MATH.
When building openlibm with Clang, I seem to get a lot of warnings in
ld80/ related to some prototypes for long double functions that are
missing. This seems to be because we don't define _DECLARE_C99_LDBL_MATH
anywhere.

It seems that this definition only existed on FreeBSD, as certain C99
math functions were not present yet. The prototypes were simply there as
placeholders. This flag has been removed upstream (FreeBSD SVN r236148).
2015-01-08 11:07:03 +01:00
Ed Schouten b6cd89849e Don't let tgammal() modify signgam. Only lgamma*() should modify it.
Letting tgammal() modify signgam has two disadvantages:

- It breaks valid code that assumes that the value of signgam is not
  clobbered by calls to tgammal().
- It makes this function depend on the presence of signgam. signgam is
  an X/Open System Interface. It is not part of the C standard.
2015-01-08 09:49:31 +01:00
Viral B. Shah 0b2a647742 Merge pull request #74 from NuxiNL/master
Portability fixes
2015-01-08 11:09:22 +05:30
Ed Schouten 78f622e84a Use endianness definitions provided by GCC or Clang if available.
Instead of using all sorts of operating system specific constructs, we
can just query the compiler which byte order is being used. This has the
advantage that the code builds on new platforms without any tweaks.
2015-01-07 22:33:54 +01:00
Ed Schouten 9a48c87386 Don't attempt to pull in <sys/cdefs.h> directly.
<sys/cdefs.h> is not a standard header. Instead, we'd better pull in a
common header like <stdio.h>. It is very likely that such a header
already provides the necessary bits.
2015-01-07 22:22:52 +01:00
Ed Schouten f9fd21c96f Don't define __ISO_C_VISIBLE unconditionally.
__ISO_C_VISIBLE is already defined on FreeBSD. By default, it has a
value of 2011. This causes a lot of compiler warnings.
2015-01-07 22:20:56 +01:00
Ed Schouten f835657bd8 Remove checks against header guards.
It seems that this header conditionally tests whether <complex.h> is
included, as the 'complex' keyword is otherwise not available. This
version of math_private.h includes <complex.h> unconditionally, so there
is no need to test against this.
2015-01-07 22:11:36 +01:00
Ed Schouten 71f60ec632 Prevent the use of deprecated or internal functions if possible.
The finite() function has been superseded by isfinite(). There is also
no need to use scalb(), as the exponent is also an integer value. We can
simply use scalbn().

There is also no need to use __isnanf(). The values passed are
guaranteed to be of type float, meaning we can safely use the standard
isnan().
2015-01-07 22:07:48 +01:00
Ed Schouten 7df63d456e Remove unneeded tests for <sys/cdefs.h>.
This test is also present in FreeBSD's <machine/ieeefp.h>. For FreeBSD
it makes sense, but for a portable math library, we cannot assume that
the system has a header file like <sys/cdefs.h> and that it uses a
common header guard.
2015-01-07 22:02:40 +01:00
Viral B. Shah b44ec547f1 Merge pull request #73 from tkelman/cp-dashf
add -f flag to cp in install target
2015-01-07 22:30:03 +05:30
Tony Kelman ecfaad0dec try being consistent about quoting to disable arm build from osx 2015-01-06 21:37:28 -08:00
Tony Kelman 619f810223 add -f flag to cp in install target 2015-01-06 21:26:48 -08:00
Viral B. Shah bfc0987270 Fix broken travis file. 2015-01-06 09:27:02 +05:30
Viral B. Shah 15007d5476 Exclude arm32 builds on os x. 2015-01-06 09:24:06 +05:30
Viral B. Shah 769a422f06 Enable tests on OS X too.
Add Travis badge.
2015-01-05 23:48:29 +05:30
Viral B. Shah 79affe971d Disable email notifications in Travis. 2015-01-05 23:33:12 +05:30
Viral B. Shah 443e13ece7 Merge pull request #72 from talex5/travis
Fix build on ARM and add Travis tests
2015-01-05 23:24:04 +05:30
Thomas Leonard 9101f61238 Added Travis test script
This builds Openlibm on the Travis build host (x86) and also
cross-compiles to ARM.

Note: the tests currently fail on ARM, as noted in
https://github.com/JuliaLang/openlibm/issues/18
2015-01-05 11:36:43 +00:00
Thomas Leonard 9c1af7f81e Don't build complex long double functions on ARM
ARM doesn't have long doubles.
2015-01-05 11:36:43 +00:00
Thomas Leonard 3ac6130b34 Remove test binaries too on "make clean" 2015-01-05 10:35:11 +00:00
Viral B. Shah c0137793e2 Merge pull request #70 from JuliaLang/sb/bench
change include path to build on linux, fix .gitignore
2014-12-05 15:23:09 +05:30
Simon Byrne d5140c2d34 change include path to build on linux, fix .gitignore 2014-12-05 09:33:07 +00:00
Viral B. Shah 73efb79032 Remove architectures that haven't been tested. 2014-12-05 10:42:57 +05:30
Viral B. Shah 168467f09a As discussed in #69, this only requires a minor version number bump. 2014-12-05 10:35:30 +05:30
Viral B. Shah 557ac71eaf Add license information to libm-bench.cpp 2014-12-05 10:34:39 +05:30
Viral B. Shah e5c38c3e8b README and LICENSE updates. 2014-12-05 00:44:29 +05:30
Viral B. Shah d8c909a980 Add all the complex declarations to openlibm.h. 2014-12-05 00:37:39 +05:30
Viral B. Shah b7da33c990 Replace math.h with openlibm.h in the new complex math functions. 2014-12-05 00:29:54 +05:30
Viral B. Shah 9b7fb281fa Update Make.files 2014-12-05 00:24:55 +05:30
Viral B. Shah da782e78d9 Add various complex math routines from OpenBSD. 2014-12-05 00:13:36 +05:30
Viral B. Shah f876e59885 Merge pull request #69 from JuliaLang/vs/longdouble
Long double versions of math functions
2014-12-04 23:58:57 +05:30
Viral B. Shah 9ecf223fc1 Get the ld80 routines from OpenBSD to build on mac and linux.
Bump version number and SO major version, since we have
introduced new long double APIs.
2014-12-04 23:56:11 +05:30
Viral B. Shah 52c901a68c Import long double versions from OpenBSD. 2014-12-04 23:11:16 +05:30
Viral B. Shah 691b989ba3 Remove files with problematic license. Fix #33. 2014-12-04 21:50:53 +05:30
Viral B. Shah 1367cb053b Update licenses - the test files are LGPL'ed. 2014-12-04 21:50:28 +05:30
Viral B. Shah 8b3b520675 Fix #35 2014-12-04 21:41:37 +05:30
Viral B. Shah d64cc364e0 Add `make bench` for building the benchmarks 2014-12-04 21:27:19 +05:30
Viral B. Shah 1baf1d3e47 Update gitignore 2014-12-04 17:47:20 +05:30