This work is based in part on code from NetBSD libm, libc and kernel. The library is partly public domain and partly BSD-style licensed.
69 lines
3.3 KiB
Text
69 lines
3.3 KiB
Text
Sortix Math Library
|
|
===================
|
|
|
|
This is the Sortix Math Library (libm). It is a full implemention of the
|
|
<complex.h>, <fenv.h>, <math.h>, and <tgmath.h> API as described in the C
|
|
standard. A modern compiler should be able to build the library without any
|
|
warnings as the code has been modernized. Some platforms have optimized versions
|
|
of some functions available, but all functions are available as C code assuming
|
|
IEEE floating point semantics.
|
|
|
|
The library is a fork of the NetBSD 9.1 Math Library, with a few missing pieces
|
|
taken from the NetBSD 9.1 libc and kernel. The code has been modified to be part
|
|
of the Sortix operating system. However, we have tried to make as few changes to
|
|
the source code files themselves, so it should be easy to upgrade this library
|
|
if the upstream versions are upgraded as well. The internal header structure
|
|
tries to be BSD-like so the code can include BSD headers provided internally.
|
|
Some GNU extensions are implemented as well.
|
|
|
|
License
|
|
-------
|
|
|
|
The library is partly public domain and partly BSD-style licensed, see the file
|
|
LEGAL for information about which licenses are used. The files in this library
|
|
carry their original copyright headers, although a few lack such headers and are
|
|
assumed to carry the standard NetBSD license.
|
|
|
|
Currently the e_exp.S file contains an advertisement clause from Winning
|
|
Strategies, Inc., but otherwise the library is free of such requirements.
|
|
|
|
Porting
|
|
-------
|
|
|
|
The source code is reasonable portable and compiles cleanly with gcc as C99,
|
|
however the headers needs to be hooked up against the C library. As an example,
|
|
they currently support Sortix libc and GNU libc. You will also want to redo the
|
|
build system and probably fork the library. If you are the type that considers
|
|
porting a libm, then you probably should be able to do it without too much pain.
|
|
|
|
Standards Compliance
|
|
--------------------
|
|
|
|
There are two options in making libm at compile time:
|
|
|
|
_IEEE_LIBM --- IEEE libm; smaller, and somewhat faster
|
|
_MULTI_LIBM --- Support multi-standard at runtime by
|
|
imposing wrapper functions defined in
|
|
fdlibm.h:
|
|
_IEEE_MODE -- IEEE
|
|
_XOPEN_MODE -- X/OPEN
|
|
_POSIX_MODE -- POSIX/ANSI
|
|
_SVID3_MODE -- SVID
|
|
|
|
Here is how to set up CPPFLAGS to create the desired libm at
|
|
compile time:
|
|
|
|
CPPFLAGS = -D_IEEE_LIBM ... IEEE libm (recommended)
|
|
CPPFLAGS = -D_SVID3_MODE ... Multi-standard supported
|
|
libm with SVID as the
|
|
default standard
|
|
CPPFLAGS = -D_XOPEN_MODE ... Multi-standard supported
|
|
libm with XOPEN as the
|
|
default standard
|
|
CPPFLAGS = -D_POSIX_MODE ... Multi-standard supported
|
|
libm with POSIX as the
|
|
default standard
|
|
CPPFLAGS = ... Multi-standard supported
|
|
libm with IEEE as the
|
|
default standard
|