History log of /openbsd-current/lib/libm/Makefile
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 1.124 29-Mar-2024 miod

Simplify the conditionals for architectures which do not need any particular
md files lists.
ok guenther@ deraadt@


Revision tags: OPENBSD_7_1_BASE OPENBSD_7_2_BASE OPENBSD_7_3_BASE OPENBSD_7_4_BASE OPENBSD_7_5_BASE
# 1.123 21-Jan-2022 gnezdo

Unplug assembly implementations of trig functions on x86 platforms

The same change was done by NetBSD some time back as:

Disable x87 implementations of sin, cos, tan.

The x87 hardware uses a bad approximation to pi for argument
reduction, and consequently yields bad answers for inputs near pi or
pi/2.

OK mbuhl@, tested by mbuhl@ and phessler@


Revision tags: OPENBSD_7_0_BASE
# 1.122 27-Apr-2021 drahn

riscv64 additions for libm
ok kettenis@


Revision tags: OPENBSD_6_9_BASE
# 1.121 07-Nov-2020 kettenis

Fix ilogb(3) implementation. The results have to match FP_ILOGB0 and
FP_ILOGBNAN which isn't the case for the amd64 and i386 assembly versions.
Drop these in favour of C implementations. Als reimplement ilogbl(3)
by providing separate ld80 and ld128 implementations that replace the
existing implementation which may hit an infinite loop when built for
quad-precision long double.

ok patrick@, gkoehler@


Revision tags: OPENBSD_6_8_BASE
# 1.120 28-Jun-2020 kettenis

Add powerpc64 support.


Revision tags: OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE
# 1.119 18-Jul-2018 naddy

Remove the unused leftovers of the 4.4BSD libm, which was only used
on non-IEEE platforms. Since the VAX port was discontinued, all
our remaining architectures use IEEE floating point, as will any
future ones.
ok millert@ tb@


Revision tags: OPENBSD_6_3_BASE
# 1.118 10-Mar-2018 kettenis

Implement sicos(3), sincosf(3) and sincosl(3). These functions are common
extensions and modern compilers (such as clang) will use them to optimize
separate calculations of sine and cosine.

ok tom@, patrick@, deraadt@, jmc@


# 1.117 28-Feb-2018 kettenis

Remove CFLAGS+=-mfloat-abi=softfp that I accidentally committed.


# 1.116 28-Feb-2018 kettenis

Change floating-point mode/environment control functions to operate on
both the hardfloat (FPU registers) and softfloat (software) state. This
makes these functions work correctly when mixing hardfloat and softfloat
code. Disable trapping for softfloat since most (if not all) ARMv7 and
ARMv8 hardware that is on the market doesn't support trapping of
floating-point exceptions.

ok patrick@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.115 11-Jan-2017 patrick

Add support for AArch64. Based on FreeBSD's msun header, modified
to look and feel like our code.


# 1.114 12-Sep-2016 guenther

Reduce libm's exports and make internal calls go direct.
All dependencies on libc are now via reserved/standardized names.

ok kettenis@ millert@ deraadt@


# 1.113 01-Sep-2016 tedu

remove references to sparc


Revision tags: OPENBSD_6_0_BASE
# 1.112 11-May-2016 deraadt

remove hppa64 port, which we never got going beyond broken single users.
hppa reverse-stack gives us a valuable test case, but most developers don't
have a 2nd one to proceed further with this.
ok kettenis


# 1.111 30-Mar-2016 jmc

for some time now mandoc has not required MLINKS to function
correctly - logically complete that now by removing MLINKS from base;

authors need only to ensure there is an entry in NAME for any function/
util being added. MLINKS will still work, and remain for perl to ease
upgrades;

ok nicm (curses) bcook (ssl)
ok schwarze, who provided a lot of feedback and assistance
ok tb natano jung


# 1.110 10-Mar-2016 jmc

no need for SUBDIR now that vax is gone; ok deraadt


# 1.109 09-Mar-2016 deraadt

We are done providing support for the vax.
lots of agreement.


Revision tags: OPENBSD_5_9_BASE
# 1.108 18-Sep-2015 miod

Move s_signgam.c to PURE_SRCS, so that it also gets built on vax.


Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
# 1.107 12-Sep-2014 kettenis

Provide a sparc64 version of sqrtl(3) that simply calls _Qp_sqrt.
The generic sqrtl(3) is not nearly accurate enough for quad-precision
floating point.


Revision tags: OPENBSD_5_6_BASE
# 1.106 18-Mar-2014 miod

Retire hp300, mvme68k and mvme88k ports. These ports have no users, keeping
this hardware alive is becoming increasingly difficult, and I should heed the
message sent by the three disks which have died on me over the last few days.

Noone sane will mourn these ports anyway. So long, and thanks for the fish.


Revision tags: OPENBSD_5_5_BASE
# 1.105 07-Aug-2013 espie

simple inaccurate implementation of lrint* functions on vax, just so
we have them.
Compiles on vax. okay martynas@


Revision tags: OPENBSD_5_4_BASE
# 1.104 15-Jul-2013 espie

use some generic code on vax, to do round/roundf/scalbln...
suggested by martynas@

okay miod@

(just rearranges the !vax makefile, no compile change there)


# 1.103 03-Jul-2013 espie

reorganize NOIEEE_SRCS so that files not compiled on vax because
of assembly version are obvious.
Move cproj/cprojf to the PURE club, as the asm support code provides
copysignf

okay martynas@


# 1.102 03-Jul-2013 espie

with DBL vs LDBL fixed, tedu some source in noieee which is actually the
same as code in generic src.
introduce PURE_SRCS for completely MI math code.
okau martynas@


Revision tags: OPENBSD_5_3_BASE
# 1.101 15-Sep-2012 miod

m88k does not have the m68k long double type actually (long double == double
on this platform), so don't pretend it does, and don't build long double libm
routines.


# 1.100 04-Sep-2012 okan

remove lint leftovers; ok guenther@


# 1.99 02-Aug-2012 okan

remove leftover NOLINT, WANTLINT, LINTFLAGS, LOBJ vars and lint targets.

ok guenther@


Revision tags: OPENBSD_5_1_BASE OPENBSD_5_2_BASE
# 1.98 22-Sep-2011 schwarze

install infnan(3/VAX) into man3/vax/ on all archs;
clean make build tested on i386;
ok deraadt@, no objections from martynas@


# 1.97 19-Aug-2011 kettenis

Bring libc and libm in line with the compiler now that we no longer have a
128-bit long double. Diff committed on behalf of martynas@


Revision tags: OPENBSD_5_0_BASE
# 1.96 24-Jul-2011 martynas

Document fma, fmaf, fmal, nexttoward, nexttowardf, nexttowardl.


# 1.95 20-Jul-2011 martynas

Document complex math library.


# 1.94 11-Jul-2011 martynas

Remove the GCC2 optimizer workaround for sparc. After switching
to GCC4 it doesn't generate broken code anymore.
From Brad. Tested and verified by myself.


# 1.93 09-Jul-2011 martynas

- Fix the cabs, and cabsf prototypes in the manual pages; it's
been C99 complex (not struct complex) for couple of years.
- Remove BUGS section; cabs is finally prototyped in complex.h.
- Also document cabsl.


# 1.92 09-Jul-2011 martynas

Don't reimplement the same thing twice. OK matthew@.


# 1.91 08-Jul-2011 martynas

Move fabs(3) manual page from libm to libc, for consistency. The
modf(3), frexp(3), ldexp(3), fpclassify(3) pages are in libc, too.


# 1.90 08-Jul-2011 martynas

Remove the stupid commented out fabs(3), frexp(3), and modf(3)
entries and unused implementations. It is clear that this situation
won't change.


# 1.89 08-Jul-2011 martynas

Revert (leaving the complex math part alone). Some stuff is depending
on this historical behavior; so we're stuck in this stupid situation.
No cookie for me.


# 1.88 08-Jul-2011 martynas

Finalize work on complex math routines, now that we have the
extended-precision support. Mostly from Cephes.


# 1.87 08-Jul-2011 martynas

Move fabs(3), frexp(3), and modf(3) to libm--nothing has been using
them in libc for a very long time. OK guenther@.


# 1.86 07-Jul-2011 martynas

Remove math(3). OK theo.


# 1.85 07-Jul-2011 martynas

Document extended-precision routines.


# 1.84 06-Jul-2011 martynas

Don't pull bsd.own.mk for NOPROFILE & NOPIC -- the libm_i387 thing
is gone since 1999.


# 1.83 06-Jul-2011 martynas

Finalize work on the math library. It's time to do this monster
commit, and deal with problems (if any) in tree.

Note that this adds the following functions. Ports with hacks might
need adjustments.

nexttoward(3), fma(3), nexttowardf(3), fmaf(3), acoshl(3), asinhl(3),
atanhl(3), coshl(3), sinhl(3), tanhl(3), expl(3), expm1l(3), logl(3),
log10l(3), log1pl(3), log2l(3), modfl(3), cbrtl(3), hypotl(3),
powl(3), erfl(3), erfcl(3), lgammal(3), tgammal(3), ceill(3),
floorl(3), lrintl(3), llrintl(3), roundl(3), lroundl(3), llroundl(3),
truncl(3), fmodl(3), remainderl(3), remquol(3), nextafterl(3),
nexttowardl(3), fmal(3).

With this commit, our library implements all functionality required
by C99. Documentation bits will follow.


# 1.82 28-May-2011 martynas

Adapt m68k MD functions to extended-precision.
Go for it miod@.


# 1.81 28-May-2011 martynas

Adapt m68k MD functions to single-precision.
Looked over by miod@.


# 1.80 25-May-2011 martynas

Document nearbyint, nearbyintf, nearbyintl.


# 1.79 25-May-2011 martynas

Document C99 floating-point environment.


# 1.78 28-Apr-2011 todd

fix build ok martynas@


# 1.77 28-Apr-2011 martynas

- enable fenv
- add nearbyint, nearbyintf and nearbyintl implemented using fenv


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
# 1.76 19-Jul-2010 millert

Add barebones manual pages for cimag(3), conj(3) and cproj(3)
OK kettenis@ jmc@


Revision tags: OPENBSD_4_7_BASE
# 1.75 03-Feb-2010 miod

Use MACHINE_CPU instead of MACHINE_ARCH to pick the correct machine dependent
files or directories when applicable.
The inspiration and name of MACHINE_CPU come from NetBSD, although the way to
provide it to Makefiles is completely different.
ok kettenis@


# 1.74 06-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok pirofti@


# 1.73 05-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok otto@


# 1.72 26-Oct-2009 kettenis

Add man pages for the fdim/fmin/fmax family of functions and make sure fdiml
is defined on all architectures.

ok jmc@ (man pages) and martynas@


# 1.71 24-Oct-2009 jmc

document log2() and log2f(); from thomas pfaff
ok otto millert martynas


# 1.70 29-Jul-2009 martynas

ieee, and ieeef aren't real, and the amount of functions it documents
is getting ridiculous. split them into groups of copysign, ilogb,
nextafter, scalbn. discussed long ago with millert@


# 1.69 28-Jul-2009 martynas

document scalbln, scalblnf, scalblnl


# 1.68 25-Jul-2009 martynas

int is big enough to fully represent exponents of all supported fp
formats. which even for 80-bit & 128-bit long doubles is only 15
bits. therefore, scalbln, scalblnf, scalblnl are essentially the
same as scalbn, scalbnf, scalbnl with bounds checking so that
LONG_MIN..INT_MIN, and INT_MAX..LONG_MAX ranges properly raise
exceptions & yield correct values. looks good to millert@


# 1.67 15-Jul-2009 martynas

round, roundf, trunc, truncf for hppa; ok kettenis@


Revision tags: OPENBSD_4_6_BASE
# 1.66 19-Apr-2009 martynas

make ldexpf behavior consistent with the double and extended-precision
versions; spotted by kettenis@
while here also remove unused ldexp; it lives in libc
ok kettenis@, "looks good" millert@


# 1.65 10-Apr-2009 martynas

lrint, llrint, lrintf, llrintf for amd64. ok kettenis@, oga@


# 1.64 05-Apr-2009 martynas

implement and use sqrt, sqrtf & fabsf in hardware; since it's
faster that way. tested by myself. discussed w/ & ok miod@, millert@


# 1.63 28-Mar-2009 martynas

add C99-conformant nan, nanf, nanl for vax. always return zero,
since its fp does not have distinguished values for qnans. tested
by naddy@; fixes libnova. ok theo


Revision tags: OPENBSD_4_5_BASE
# 1.62 12-Dec-2008 martynas

space


# 1.61 12-Dec-2008 martynas

document and mlink long double functions. ok jmc@


# 1.60 09-Dec-2008 martynas

pass CPPFLAGS+= -D__STDC__ for vax, to get the right definitions
from asm.h. discussed w/ millert@


# 1.59 09-Dec-2008 martynas

- 80-bit and quad precision trigonometric and other most
important functions: acosl, asinl, atanl, atan2l, cosl,
sinl, tanl, exp2l, frexpl, ilogbl, ldexpl, logbl, scalbnl,
fabsl, hypotl, powl, sqrtl, rintl, copysignl, nanl, fdiml,
fmaxl, fminl. mostly taken from freebsd, needed alot of
changes to adapt. note, these are all c versions; and are
quite slow when architectures have, e.g. sqrt. assembly
versions will be added afterwards
- make them .weak/__weak_alias to the double precision
versions on other archs
- no need to have two finites. finite() and finitef() are
non-standard 3BSD obsolete versions of isfinite. remove
from libm. make them weak_alias in libc to __isfinite and
__isfinitef instead. similarly make 3BSD obsolete versions
of isinf, isinff, isnan, isnanf weak_aliases to C99's
__isinf, __isinff, __isnan, __isnanf
- remove unused infinity.c. the c library has infinities
for each supported platform
- use STRICT_ASSIGN cast hack for _kernel_rem_pio2, so that
the double version has a chance of working on i386 with
extra precision
- avoid storing multiple copies of the pi/2 array, since
it won't vary
- bump major due to removed finite/finitef. although they
will be in libc, which anything is linked to, minor bump
might be enough
ok millert@. tested by sthen@, jsg@, ajacoutot@, kili@, naddy@


# 1.58 07-Oct-2008 martynas

- noieee_src: adapt complex versions of the functions it already
supports (which is all, except the float ones)
ok millert@


# 1.57 16-Sep-2008 martynas

gc unused files, the functions are in libc. ok millert@


# 1.56 11-Sep-2008 martynas

since these got no ieee-specific code anymore, add fmin, fmax, fdim,
fminf, fmaxf, fdimf, fdiml for VAX. looks good to millert@


# 1.55 09-Sep-2008 martynas

sigh, gamma got lost


# 1.54 07-Sep-2008 martynas

- replace dtoa w/ David's gdtoa, version 2008-03-15
- provide proper dtoa locks
- use the real strtof implementation
- add strtold, __hdtoa, __hldtoa
- add %a/%A support
- don't lose precision in printf, don't round to double anymore
- implement extended-precision versions of libc functions: fpclassify,
isnan, isinf, signbit, isnormal, isfinite, now that the ieee.h is
fixed
- separate vax versions of strtof, and __hdtoa
- add complex math support. added functions: cacos, casin, catan,
ccos, csin, ctan, cacosh, casinh, catanh, ccosh, csinh, ctanh, cexp,
clog, cabs, cpow, csqrt, carg, cimag, conj, cproj, creal, cacosf,
casinf, catanf, ccosf, csinf, ctanf, cacoshf, casinhf, catanhf,
ccoshf, csinhf, ctanhf, cexpf, clogf, cabsf, cpowf, csqrtf, cargf,
cimagf, conjf, cprojf, crealf
- add fdim, fmax, fmin
- add log2. (adapted implementation e_log.c. could be more acruate
& faster, but it's good enough for now)
- remove wrappers & cruft in libm, supposed to work-around mistakes
in SVID, etc.; use ieee versions. fixes issues in python 2.6 for
djm@
- make _digittoint static
- proper definitions for i386, and amd64 in ieee.h
- sh, powerpc don't really have extended-precision
- add missing definitions for mips64 (quad), m{6,8}k (96-bit) float.h
for LDBL_*
- merge lead to frac for m{6,8}k, for gdtoa to work properly
- add FRAC*BITS & EXT_TO_ARRAY32 definitions in ieee.h, for hdtoa&ldtoa
to use
- add EXT_IMPLICIT_NBIT definition, which indicates implicit
normalization bit
- add regression tests for libc: fpclassify and printf
- arith.h & gd_qnan.h definitions
- update ieee.h: hppa doesn't have quad-precision, hppa64 does
- add missing prototypes to gdtoaimp
- on 64-bit platforms make sure gdtoa doesn't use a long when it
really wants an int
- etc., what i may have forgotten...
- bump libm major, due to removed&changed symbols
- no libc bump, since this is riding on djm's libc major crank from
a day ago

discussed with / requested by / testing theo, sthen@, djm@, jsg@,
merdely@, jsing@, tedu@, brad@, jakemsr@, and others.
looks good to millert@
parts of the diff ok kettenis@

this commit does not include:
- man page changes


Revision tags: OPENBSD_4_4_BASE
# 1.53 30-Jul-2008 jmc

various markup/grammar fixes for previous, and a missing MLINK
for remquof.3;


# 1.52 29-Jul-2008 martynas

- add man pages for nan and remainder, from freebsd
- mlink drem, dremf, remainderf to remainder; nanf to nan
- describe that drem and dremf are obsolete aliases
- remove descriptions for remainder and remainderf from ieee
looked over by jmc@, but it's easier for him to work on when they
are in tree


# 1.51 29-Jul-2008 martynas

describe exp2, exp2f and mlink them


# 1.50 29-Jul-2008 martynas

remove finite from ieee.3, and unmlink from makefile


# 1.49 24-Jul-2008 martynas

- remove isinff, isnanf. this has been moved to libc
- remove never-enabled signbit. libc has is now
- add C99 implementations, from freebsd, for nan(), nanf() (needed
to write _digittoint for it), exp2(), exp2f(), remquo(), remquof(),
needed STRICT_ASSIGN macro for math_private.h
- bump major
man pages will follow
exp2{,f} has been requested by chl@
ok millert@


# 1.48 21-Jul-2008 martynas

NetBSD's C library supplies these functions -> OpenBSD's C library
supplies these functions. in comments


# 1.47 21-Jul-2008 martynas

rename lround.c lroundf.c llround.c llroundf.c to s_lround.c
s_lroundf.c s_llround.c s_llroundf.c, for naming consistency
looks fine to millert@


# 1.46 16-Jul-2008 martynas

install infnan.3 only for vax. pointed out by millert@
ok millert@


# 1.45 12-Jun-2008 jmc

Makefile: fix MLINKS
lgamma.3: fix STANDARDS and HISTORY


# 1.44 11-Jun-2008 martynas

- on non-ieee, rename gamma to tgamma, the 'true' gamma
- make gamma an alias of lgamma
- on ieee, add tgamma, based on gamma from non-ieee
- fixes for tgamma/lgamma/exp/log, esp. special cases (some from
freebsd); properly raise invalid fp operations on vax
- also some general cleanup, ansification, man page (which was ok
jmc@)
- bump minor
this makes some ports using tgamma possible; also consistifies
behavior across openbsd/ieee and openbsd/non-ieee, and other operating
systems
much thanks sthen@, johan@, steven@, Simon Kuhnle, Wiktor Izdebski
for testing
ok millert@


# 1.43 11-Jun-2008 martynas

drem{,f} are aliases for remainder{,f}, so:
- document and mlink drem{,f}
- drem->remainder on noieee, and make drem an alias
- finite returns integer, n_support.c
- general n_support.c ansification and cleanup
- drem is now an ALTENTRY for remainder, in n_support.S
help with man page from jmc@ and millert@
ok millert@


# 1.42 11-Jun-2008 martynas

add C99 round(), based on ieee_src, for noieee_src. tested on VAX
ok millert@


Revision tags: OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.41 25-Sep-2006 kettenis

Move llrint.c, llrintf.c, lrint.c and lrintf.c to s_llrint.c, s_llrintf.c,
s_lrint.c and s_lrintf.c, and add i387-specific assembler versions.

ok deraadt@, otto@


Revision tags: OPENBSD_4_0_BASE
# 1.40 12-Jul-2006 brad

add some more C99 functions: round(3) and roundf(3).

By Steven G. Kargl <kargl at troutmask dot apl dot washington.edu>
From FreeBSD


# 1.39 19-Mar-2006 kettenis

New amd64 exp(3).
tested by steven@, ok otto@


# 1.38 18-Mar-2006 brad

add some more C99 functions: trunc(3) and truncf(3).

From FreeBSD

ok deraadt@ millert@ otto@ jmc@


# 1.37 14-Mar-2006 otto

amd64 asm code is not correct for exp(+/-Inf), so until somebody
comes up with a correct asm version, use the C version of exp(3).
ok steven@ kettenis@


Revision tags: OPENBSD_3_9_BASE
# 1.36 24-Nov-2005 deraadt

use WANTLINT= (on all architectures)


# 1.35 17-Nov-2005 otto

Introduce a few c99 functions: {l,ll}{rint,round}{,f}. From NetBSD via
jason@. Man page fixes by jmc@, prodding by jsg@. ok mickey@


Revision tags: OPENBSD_3_6_BASE OPENBSD_3_7_BASE OPENBSD_3_8_BASE
# 1.34 06-Apr-2004 brad

remove optimization workaround for sparc64 now that we're using gcc3.

ok deraadt@


Revision tags: OPENBSD_3_5_BASE
# 1.33 28-Feb-2004 deraadt

reach into new amd64 directory


# 1.32 27-Feb-2004 deraadt

change amd64's MACHINE_ARCH from x86_64 to amd64. There are many many
reasons for this, quite a few of them technical, and not all of them
in response to Intel's broken ia32e crud. The gcc toolchain stays at
x86_64 for now.


# 1.31 08-Feb-2004 deraadt

add libm parts for amd64; much from netbsd, integration by mickey.
Instead of mixing the i387 & xmm register components, we decide to
explicitly seperate them. libm is already confusing enough as it is,
thank you very much


Revision tags: OPENBSD_3_3_BASE OPENBSD_3_4_BASE
# 1.30 27-Feb-2003 jason

ieee_test isn't real, rename it to logb.3 and make everything link to that instead.


# 1.29 03-Jan-2003 miod

Get the m88k libm to say no to drugs.


Revision tags: OPENBSD_3_2_BASE
# 1.28 22-May-2002 mickey

add reminder and roundings


# 1.27 22-May-2002 mickey

md sqrt() implementation


Revision tags: OPENBSD_3_1_BASE
# 1.26 30-Jan-2002 naddy

Add native implementations of copysign() and copysignf() on alpha.
From NetBSD; ok millert@


Revision tags: OPENBSD_3_0_BASE
# 1.25 28-Aug-2001 art

The sparc workaround is needed for sparc64 too.


# 1.24 26-Jun-2001 miod

Correctly handle mvme88k settings here.


Revision tags: OPENBSD_2_9_BASE
# 1.23 08-Nov-2000 deraadt

put infnan in there, even though it is depricated


Revision tags: OPENBSD_2_6_BASE OPENBSD_2_7_BASE OPENBSD_2_8_BASE
# 1.22 18-Jul-1999 deraadt

I think that libm_i387 has lived too long


# 1.21 01-Jul-1999 deraadt

provide MLINKS for "f" versions, and make sure they show up in whatis.db


# 1.20 28-Jun-1999 espie

Bye, bye work-around.


# 1.19 03-Jun-1999 deraadt

egcs generates broken code for -O2 on sparc


# 1.18 26-May-1999 espie

Work-around: a few files trigger Internal Compiler Errors if compiled with
-O2 on m68k.


Revision tags: OPENBSD_2_5_BASE
# 1.17 08-Mar-1999 millert

pull in bsd.own.mk for NOPROFILE and NOPIC


# 1.16 07-Mar-1999 deraadt

Never break the source tree builds if a _non-default compilation option_
has an issue. Fix it right, without breaking the source tree.


# 1.15 07-Mar-1999 deraadt

previous commit broke MLINKS install


# 1.14 04-Mar-1999 millert

move .include <bsd.lib.mk> up before NOPROFILE and NOPIC defines are used; evanc@concer.to


# 1.13 16-Nov-1998 deraadt

use _USE_WRITE


Revision tags: OPENBSD_2_3_BASE OPENBSD_2_4_BASE
# 1.12 02-Mar-1998 millert

protect internal "struct excpption" from conflicting one in gcc.


Revision tags: OPENBSD_2_2_BASE
# 1.11 01-Sep-1997 mickey

missing VAX manual for infnan(3), from 4.4 BSD


Revision tags: OPENBSD_2_1_BASE
# 1.10 25-Mar-1997 rahnds

Ok here is the mvme88k userland, minus a few important pieces.
as, ld change need to be merged. It is known that shared libraries and C++
do not work.
If anyone wants to step forward and take over the mvme88k port please do.
It was dumped on me when the original developer, Nivas, left his previous
job and started a new one.

I am trying to get the port in a shape that someone could take over.


# 1.9 14-Nov-1996 mickey

correct LINKS usage


# 1.8 27-Oct-1996 downsj

nopic


# 1.7 27-Oct-1996 deraadt

NOPROFILE; from Mathieu.Herrb@mipnet.fr


# 1.6 25-Oct-1996 downsj

We do i387 by default now.


Revision tags: OPENBSD_2_0_BASE
# 1.5 30-Sep-1996 maja

Add OpenBSD tag. -moj


# 1.4 30-Sep-1996 maja

Allow the Makefile to work on strange machines like VAX :-) -moj


# 1.3 25-Mar-1996 tholo

Somewhat better support for building lint library


# 1.2 14-Dec-1995 deraadt

from netbsd:
Changed w_gamma.c, w_gamma_r.c, w_gammaf.c, w_gammaf_r.c to call
__ieee754_lgamma_r or __ieee754_lgammaf_r.
Removed e_gamma.c, e_gamma_r.c, e_gammaf.c, e_gammaf_r.c, e_lgamma.c,
e_lgamma_f.c.


# 1.1 18-Oct-1995 deraadt

branches: 1.1.1;
Initial revision


# 1.123 21-Jan-2022 gnezdo

Unplug assembly implementations of trig functions on x86 platforms

The same change was done by NetBSD some time back as:

Disable x87 implementations of sin, cos, tan.

The x87 hardware uses a bad approximation to pi for argument
reduction, and consequently yields bad answers for inputs near pi or
pi/2.

OK mbuhl@, tested by mbuhl@ and phessler@


Revision tags: OPENBSD_7_0_BASE
# 1.122 27-Apr-2021 drahn

riscv64 additions for libm
ok kettenis@


Revision tags: OPENBSD_6_9_BASE
# 1.121 07-Nov-2020 kettenis

Fix ilogb(3) implementation. The results have to match FP_ILOGB0 and
FP_ILOGBNAN which isn't the case for the amd64 and i386 assembly versions.
Drop these in favour of C implementations. Als reimplement ilogbl(3)
by providing separate ld80 and ld128 implementations that replace the
existing implementation which may hit an infinite loop when built for
quad-precision long double.

ok patrick@, gkoehler@


Revision tags: OPENBSD_6_8_BASE
# 1.120 28-Jun-2020 kettenis

Add powerpc64 support.


Revision tags: OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE
# 1.119 18-Jul-2018 naddy

Remove the unused leftovers of the 4.4BSD libm, which was only used
on non-IEEE platforms. Since the VAX port was discontinued, all
our remaining architectures use IEEE floating point, as will any
future ones.
ok millert@ tb@


Revision tags: OPENBSD_6_3_BASE
# 1.118 10-Mar-2018 kettenis

Implement sicos(3), sincosf(3) and sincosl(3). These functions are common
extensions and modern compilers (such as clang) will use them to optimize
separate calculations of sine and cosine.

ok tom@, patrick@, deraadt@, jmc@


# 1.117 28-Feb-2018 kettenis

Remove CFLAGS+=-mfloat-abi=softfp that I accidentally committed.


# 1.116 28-Feb-2018 kettenis

Change floating-point mode/environment control functions to operate on
both the hardfloat (FPU registers) and softfloat (software) state. This
makes these functions work correctly when mixing hardfloat and softfloat
code. Disable trapping for softfloat since most (if not all) ARMv7 and
ARMv8 hardware that is on the market doesn't support trapping of
floating-point exceptions.

ok patrick@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.115 11-Jan-2017 patrick

Add support for AArch64. Based on FreeBSD's msun header, modified
to look and feel like our code.


# 1.114 12-Sep-2016 guenther

Reduce libm's exports and make internal calls go direct.
All dependencies on libc are now via reserved/standardized names.

ok kettenis@ millert@ deraadt@


# 1.113 01-Sep-2016 tedu

remove references to sparc


Revision tags: OPENBSD_6_0_BASE
# 1.112 11-May-2016 deraadt

remove hppa64 port, which we never got going beyond broken single users.
hppa reverse-stack gives us a valuable test case, but most developers don't
have a 2nd one to proceed further with this.
ok kettenis


# 1.111 30-Mar-2016 jmc

for some time now mandoc has not required MLINKS to function
correctly - logically complete that now by removing MLINKS from base;

authors need only to ensure there is an entry in NAME for any function/
util being added. MLINKS will still work, and remain for perl to ease
upgrades;

ok nicm (curses) bcook (ssl)
ok schwarze, who provided a lot of feedback and assistance
ok tb natano jung


# 1.110 10-Mar-2016 jmc

no need for SUBDIR now that vax is gone; ok deraadt


# 1.109 09-Mar-2016 deraadt

We are done providing support for the vax.
lots of agreement.


Revision tags: OPENBSD_5_9_BASE
# 1.108 18-Sep-2015 miod

Move s_signgam.c to PURE_SRCS, so that it also gets built on vax.


Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
# 1.107 12-Sep-2014 kettenis

Provide a sparc64 version of sqrtl(3) that simply calls _Qp_sqrt.
The generic sqrtl(3) is not nearly accurate enough for quad-precision
floating point.


Revision tags: OPENBSD_5_6_BASE
# 1.106 18-Mar-2014 miod

Retire hp300, mvme68k and mvme88k ports. These ports have no users, keeping
this hardware alive is becoming increasingly difficult, and I should heed the
message sent by the three disks which have died on me over the last few days.

Noone sane will mourn these ports anyway. So long, and thanks for the fish.


Revision tags: OPENBSD_5_5_BASE
# 1.105 07-Aug-2013 espie

simple inaccurate implementation of lrint* functions on vax, just so
we have them.
Compiles on vax. okay martynas@


Revision tags: OPENBSD_5_4_BASE
# 1.104 15-Jul-2013 espie

use some generic code on vax, to do round/roundf/scalbln...
suggested by martynas@

okay miod@

(just rearranges the !vax makefile, no compile change there)


# 1.103 03-Jul-2013 espie

reorganize NOIEEE_SRCS so that files not compiled on vax because
of assembly version are obvious.
Move cproj/cprojf to the PURE club, as the asm support code provides
copysignf

okay martynas@


# 1.102 03-Jul-2013 espie

with DBL vs LDBL fixed, tedu some source in noieee which is actually the
same as code in generic src.
introduce PURE_SRCS for completely MI math code.
okau martynas@


Revision tags: OPENBSD_5_3_BASE
# 1.101 15-Sep-2012 miod

m88k does not have the m68k long double type actually (long double == double
on this platform), so don't pretend it does, and don't build long double libm
routines.


# 1.100 04-Sep-2012 okan

remove lint leftovers; ok guenther@


# 1.99 02-Aug-2012 okan

remove leftover NOLINT, WANTLINT, LINTFLAGS, LOBJ vars and lint targets.

ok guenther@


Revision tags: OPENBSD_5_1_BASE OPENBSD_5_2_BASE
# 1.98 22-Sep-2011 schwarze

install infnan(3/VAX) into man3/vax/ on all archs;
clean make build tested on i386;
ok deraadt@, no objections from martynas@


# 1.97 19-Aug-2011 kettenis

Bring libc and libm in line with the compiler now that we no longer have a
128-bit long double. Diff committed on behalf of martynas@


Revision tags: OPENBSD_5_0_BASE
# 1.96 24-Jul-2011 martynas

Document fma, fmaf, fmal, nexttoward, nexttowardf, nexttowardl.


# 1.95 20-Jul-2011 martynas

Document complex math library.


# 1.94 11-Jul-2011 martynas

Remove the GCC2 optimizer workaround for sparc. After switching
to GCC4 it doesn't generate broken code anymore.
From Brad. Tested and verified by myself.


# 1.93 09-Jul-2011 martynas

- Fix the cabs, and cabsf prototypes in the manual pages; it's
been C99 complex (not struct complex) for couple of years.
- Remove BUGS section; cabs is finally prototyped in complex.h.
- Also document cabsl.


# 1.92 09-Jul-2011 martynas

Don't reimplement the same thing twice. OK matthew@.


# 1.91 08-Jul-2011 martynas

Move fabs(3) manual page from libm to libc, for consistency. The
modf(3), frexp(3), ldexp(3), fpclassify(3) pages are in libc, too.


# 1.90 08-Jul-2011 martynas

Remove the stupid commented out fabs(3), frexp(3), and modf(3)
entries and unused implementations. It is clear that this situation
won't change.


# 1.89 08-Jul-2011 martynas

Revert (leaving the complex math part alone). Some stuff is depending
on this historical behavior; so we're stuck in this stupid situation.
No cookie for me.


# 1.88 08-Jul-2011 martynas

Finalize work on complex math routines, now that we have the
extended-precision support. Mostly from Cephes.


# 1.87 08-Jul-2011 martynas

Move fabs(3), frexp(3), and modf(3) to libm--nothing has been using
them in libc for a very long time. OK guenther@.


# 1.86 07-Jul-2011 martynas

Remove math(3). OK theo.


# 1.85 07-Jul-2011 martynas

Document extended-precision routines.


# 1.84 06-Jul-2011 martynas

Don't pull bsd.own.mk for NOPROFILE & NOPIC -- the libm_i387 thing
is gone since 1999.


# 1.83 06-Jul-2011 martynas

Finalize work on the math library. It's time to do this monster
commit, and deal with problems (if any) in tree.

Note that this adds the following functions. Ports with hacks might
need adjustments.

nexttoward(3), fma(3), nexttowardf(3), fmaf(3), acoshl(3), asinhl(3),
atanhl(3), coshl(3), sinhl(3), tanhl(3), expl(3), expm1l(3), logl(3),
log10l(3), log1pl(3), log2l(3), modfl(3), cbrtl(3), hypotl(3),
powl(3), erfl(3), erfcl(3), lgammal(3), tgammal(3), ceill(3),
floorl(3), lrintl(3), llrintl(3), roundl(3), lroundl(3), llroundl(3),
truncl(3), fmodl(3), remainderl(3), remquol(3), nextafterl(3),
nexttowardl(3), fmal(3).

With this commit, our library implements all functionality required
by C99. Documentation bits will follow.


# 1.82 28-May-2011 martynas

Adapt m68k MD functions to extended-precision.
Go for it miod@.


# 1.81 28-May-2011 martynas

Adapt m68k MD functions to single-precision.
Looked over by miod@.


# 1.80 25-May-2011 martynas

Document nearbyint, nearbyintf, nearbyintl.


# 1.79 25-May-2011 martynas

Document C99 floating-point environment.


# 1.78 28-Apr-2011 todd

fix build ok martynas@


# 1.77 28-Apr-2011 martynas

- enable fenv
- add nearbyint, nearbyintf and nearbyintl implemented using fenv


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
# 1.76 19-Jul-2010 millert

Add barebones manual pages for cimag(3), conj(3) and cproj(3)
OK kettenis@ jmc@


Revision tags: OPENBSD_4_7_BASE
# 1.75 03-Feb-2010 miod

Use MACHINE_CPU instead of MACHINE_ARCH to pick the correct machine dependent
files or directories when applicable.
The inspiration and name of MACHINE_CPU come from NetBSD, although the way to
provide it to Makefiles is completely different.
ok kettenis@


# 1.74 06-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok pirofti@


# 1.73 05-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok otto@


# 1.72 26-Oct-2009 kettenis

Add man pages for the fdim/fmin/fmax family of functions and make sure fdiml
is defined on all architectures.

ok jmc@ (man pages) and martynas@


# 1.71 24-Oct-2009 jmc

document log2() and log2f(); from thomas pfaff
ok otto millert martynas


# 1.70 29-Jul-2009 martynas

ieee, and ieeef aren't real, and the amount of functions it documents
is getting ridiculous. split them into groups of copysign, ilogb,
nextafter, scalbn. discussed long ago with millert@


# 1.69 28-Jul-2009 martynas

document scalbln, scalblnf, scalblnl


# 1.68 25-Jul-2009 martynas

int is big enough to fully represent exponents of all supported fp
formats. which even for 80-bit & 128-bit long doubles is only 15
bits. therefore, scalbln, scalblnf, scalblnl are essentially the
same as scalbn, scalbnf, scalbnl with bounds checking so that
LONG_MIN..INT_MIN, and INT_MAX..LONG_MAX ranges properly raise
exceptions & yield correct values. looks good to millert@


# 1.67 15-Jul-2009 martynas

round, roundf, trunc, truncf for hppa; ok kettenis@


Revision tags: OPENBSD_4_6_BASE
# 1.66 19-Apr-2009 martynas

make ldexpf behavior consistent with the double and extended-precision
versions; spotted by kettenis@
while here also remove unused ldexp; it lives in libc
ok kettenis@, "looks good" millert@


# 1.65 10-Apr-2009 martynas

lrint, llrint, lrintf, llrintf for amd64. ok kettenis@, oga@


# 1.64 05-Apr-2009 martynas

implement and use sqrt, sqrtf & fabsf in hardware; since it's
faster that way. tested by myself. discussed w/ & ok miod@, millert@


# 1.63 28-Mar-2009 martynas

add C99-conformant nan, nanf, nanl for vax. always return zero,
since its fp does not have distinguished values for qnans. tested
by naddy@; fixes libnova. ok theo


Revision tags: OPENBSD_4_5_BASE
# 1.62 12-Dec-2008 martynas

space


# 1.61 12-Dec-2008 martynas

document and mlink long double functions. ok jmc@


# 1.60 09-Dec-2008 martynas

pass CPPFLAGS+= -D__STDC__ for vax, to get the right definitions
from asm.h. discussed w/ millert@


# 1.59 09-Dec-2008 martynas

- 80-bit and quad precision trigonometric and other most
important functions: acosl, asinl, atanl, atan2l, cosl,
sinl, tanl, exp2l, frexpl, ilogbl, ldexpl, logbl, scalbnl,
fabsl, hypotl, powl, sqrtl, rintl, copysignl, nanl, fdiml,
fmaxl, fminl. mostly taken from freebsd, needed alot of
changes to adapt. note, these are all c versions; and are
quite slow when architectures have, e.g. sqrt. assembly
versions will be added afterwards
- make them .weak/__weak_alias to the double precision
versions on other archs
- no need to have two finites. finite() and finitef() are
non-standard 3BSD obsolete versions of isfinite. remove
from libm. make them weak_alias in libc to __isfinite and
__isfinitef instead. similarly make 3BSD obsolete versions
of isinf, isinff, isnan, isnanf weak_aliases to C99's
__isinf, __isinff, __isnan, __isnanf
- remove unused infinity.c. the c library has infinities
for each supported platform
- use STRICT_ASSIGN cast hack for _kernel_rem_pio2, so that
the double version has a chance of working on i386 with
extra precision
- avoid storing multiple copies of the pi/2 array, since
it won't vary
- bump major due to removed finite/finitef. although they
will be in libc, which anything is linked to, minor bump
might be enough
ok millert@. tested by sthen@, jsg@, ajacoutot@, kili@, naddy@


# 1.58 07-Oct-2008 martynas

- noieee_src: adapt complex versions of the functions it already
supports (which is all, except the float ones)
ok millert@


# 1.57 16-Sep-2008 martynas

gc unused files, the functions are in libc. ok millert@


# 1.56 11-Sep-2008 martynas

since these got no ieee-specific code anymore, add fmin, fmax, fdim,
fminf, fmaxf, fdimf, fdiml for VAX. looks good to millert@


# 1.55 09-Sep-2008 martynas

sigh, gamma got lost


# 1.54 07-Sep-2008 martynas

- replace dtoa w/ David's gdtoa, version 2008-03-15
- provide proper dtoa locks
- use the real strtof implementation
- add strtold, __hdtoa, __hldtoa
- add %a/%A support
- don't lose precision in printf, don't round to double anymore
- implement extended-precision versions of libc functions: fpclassify,
isnan, isinf, signbit, isnormal, isfinite, now that the ieee.h is
fixed
- separate vax versions of strtof, and __hdtoa
- add complex math support. added functions: cacos, casin, catan,
ccos, csin, ctan, cacosh, casinh, catanh, ccosh, csinh, ctanh, cexp,
clog, cabs, cpow, csqrt, carg, cimag, conj, cproj, creal, cacosf,
casinf, catanf, ccosf, csinf, ctanf, cacoshf, casinhf, catanhf,
ccoshf, csinhf, ctanhf, cexpf, clogf, cabsf, cpowf, csqrtf, cargf,
cimagf, conjf, cprojf, crealf
- add fdim, fmax, fmin
- add log2. (adapted implementation e_log.c. could be more acruate
& faster, but it's good enough for now)
- remove wrappers & cruft in libm, supposed to work-around mistakes
in SVID, etc.; use ieee versions. fixes issues in python 2.6 for
djm@
- make _digittoint static
- proper definitions for i386, and amd64 in ieee.h
- sh, powerpc don't really have extended-precision
- add missing definitions for mips64 (quad), m{6,8}k (96-bit) float.h
for LDBL_*
- merge lead to frac for m{6,8}k, for gdtoa to work properly
- add FRAC*BITS & EXT_TO_ARRAY32 definitions in ieee.h, for hdtoa&ldtoa
to use
- add EXT_IMPLICIT_NBIT definition, which indicates implicit
normalization bit
- add regression tests for libc: fpclassify and printf
- arith.h & gd_qnan.h definitions
- update ieee.h: hppa doesn't have quad-precision, hppa64 does
- add missing prototypes to gdtoaimp
- on 64-bit platforms make sure gdtoa doesn't use a long when it
really wants an int
- etc., what i may have forgotten...
- bump libm major, due to removed&changed symbols
- no libc bump, since this is riding on djm's libc major crank from
a day ago

discussed with / requested by / testing theo, sthen@, djm@, jsg@,
merdely@, jsing@, tedu@, brad@, jakemsr@, and others.
looks good to millert@
parts of the diff ok kettenis@

this commit does not include:
- man page changes


Revision tags: OPENBSD_4_4_BASE
# 1.53 30-Jul-2008 jmc

various markup/grammar fixes for previous, and a missing MLINK
for remquof.3;


# 1.52 29-Jul-2008 martynas

- add man pages for nan and remainder, from freebsd
- mlink drem, dremf, remainderf to remainder; nanf to nan
- describe that drem and dremf are obsolete aliases
- remove descriptions for remainder and remainderf from ieee
looked over by jmc@, but it's easier for him to work on when they
are in tree


# 1.51 29-Jul-2008 martynas

describe exp2, exp2f and mlink them


# 1.50 29-Jul-2008 martynas

remove finite from ieee.3, and unmlink from makefile


# 1.49 24-Jul-2008 martynas

- remove isinff, isnanf. this has been moved to libc
- remove never-enabled signbit. libc has is now
- add C99 implementations, from freebsd, for nan(), nanf() (needed
to write _digittoint for it), exp2(), exp2f(), remquo(), remquof(),
needed STRICT_ASSIGN macro for math_private.h
- bump major
man pages will follow
exp2{,f} has been requested by chl@
ok millert@


# 1.48 21-Jul-2008 martynas

NetBSD's C library supplies these functions -> OpenBSD's C library
supplies these functions. in comments


# 1.47 21-Jul-2008 martynas

rename lround.c lroundf.c llround.c llroundf.c to s_lround.c
s_lroundf.c s_llround.c s_llroundf.c, for naming consistency
looks fine to millert@


# 1.46 16-Jul-2008 martynas

install infnan.3 only for vax. pointed out by millert@
ok millert@


# 1.45 12-Jun-2008 jmc

Makefile: fix MLINKS
lgamma.3: fix STANDARDS and HISTORY


# 1.44 11-Jun-2008 martynas

- on non-ieee, rename gamma to tgamma, the 'true' gamma
- make gamma an alias of lgamma
- on ieee, add tgamma, based on gamma from non-ieee
- fixes for tgamma/lgamma/exp/log, esp. special cases (some from
freebsd); properly raise invalid fp operations on vax
- also some general cleanup, ansification, man page (which was ok
jmc@)
- bump minor
this makes some ports using tgamma possible; also consistifies
behavior across openbsd/ieee and openbsd/non-ieee, and other operating
systems
much thanks sthen@, johan@, steven@, Simon Kuhnle, Wiktor Izdebski
for testing
ok millert@


# 1.43 11-Jun-2008 martynas

drem{,f} are aliases for remainder{,f}, so:
- document and mlink drem{,f}
- drem->remainder on noieee, and make drem an alias
- finite returns integer, n_support.c
- general n_support.c ansification and cleanup
- drem is now an ALTENTRY for remainder, in n_support.S
help with man page from jmc@ and millert@
ok millert@


# 1.42 11-Jun-2008 martynas

add C99 round(), based on ieee_src, for noieee_src. tested on VAX
ok millert@


Revision tags: OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.41 25-Sep-2006 kettenis

Move llrint.c, llrintf.c, lrint.c and lrintf.c to s_llrint.c, s_llrintf.c,
s_lrint.c and s_lrintf.c, and add i387-specific assembler versions.

ok deraadt@, otto@


Revision tags: OPENBSD_4_0_BASE
# 1.40 12-Jul-2006 brad

add some more C99 functions: round(3) and roundf(3).

By Steven G. Kargl <kargl at troutmask dot apl dot washington.edu>
From FreeBSD


# 1.39 19-Mar-2006 kettenis

New amd64 exp(3).
tested by steven@, ok otto@


# 1.38 18-Mar-2006 brad

add some more C99 functions: trunc(3) and truncf(3).

From FreeBSD

ok deraadt@ millert@ otto@ jmc@


# 1.37 14-Mar-2006 otto

amd64 asm code is not correct for exp(+/-Inf), so until somebody
comes up with a correct asm version, use the C version of exp(3).
ok steven@ kettenis@


Revision tags: OPENBSD_3_9_BASE
# 1.36 24-Nov-2005 deraadt

use WANTLINT= (on all architectures)


# 1.35 17-Nov-2005 otto

Introduce a few c99 functions: {l,ll}{rint,round}{,f}. From NetBSD via
jason@. Man page fixes by jmc@, prodding by jsg@. ok mickey@


Revision tags: OPENBSD_3_6_BASE OPENBSD_3_7_BASE OPENBSD_3_8_BASE
# 1.34 06-Apr-2004 brad

remove optimization workaround for sparc64 now that we're using gcc3.

ok deraadt@


Revision tags: OPENBSD_3_5_BASE
# 1.33 28-Feb-2004 deraadt

reach into new amd64 directory


# 1.32 27-Feb-2004 deraadt

change amd64's MACHINE_ARCH from x86_64 to amd64. There are many many
reasons for this, quite a few of them technical, and not all of them
in response to Intel's broken ia32e crud. The gcc toolchain stays at
x86_64 for now.


# 1.31 08-Feb-2004 deraadt

add libm parts for amd64; much from netbsd, integration by mickey.
Instead of mixing the i387 & xmm register components, we decide to
explicitly seperate them. libm is already confusing enough as it is,
thank you very much


Revision tags: OPENBSD_3_3_BASE OPENBSD_3_4_BASE
# 1.30 27-Feb-2003 jason

ieee_test isn't real, rename it to logb.3 and make everything link to that instead.


# 1.29 03-Jan-2003 miod

Get the m88k libm to say no to drugs.


Revision tags: OPENBSD_3_2_BASE
# 1.28 22-May-2002 mickey

add reminder and roundings


# 1.27 22-May-2002 mickey

md sqrt() implementation


Revision tags: OPENBSD_3_1_BASE
# 1.26 30-Jan-2002 naddy

Add native implementations of copysign() and copysignf() on alpha.
From NetBSD; ok millert@


Revision tags: OPENBSD_3_0_BASE
# 1.25 28-Aug-2001 art

The sparc workaround is needed for sparc64 too.


# 1.24 26-Jun-2001 miod

Correctly handle mvme88k settings here.


Revision tags: OPENBSD_2_9_BASE
# 1.23 08-Nov-2000 deraadt

put infnan in there, even though it is depricated


Revision tags: OPENBSD_2_6_BASE OPENBSD_2_7_BASE OPENBSD_2_8_BASE
# 1.22 18-Jul-1999 deraadt

I think that libm_i387 has lived too long


# 1.21 01-Jul-1999 deraadt

provide MLINKS for "f" versions, and make sure they show up in whatis.db


# 1.20 28-Jun-1999 espie

Bye, bye work-around.


# 1.19 03-Jun-1999 deraadt

egcs generates broken code for -O2 on sparc


# 1.18 26-May-1999 espie

Work-around: a few files trigger Internal Compiler Errors if compiled with
-O2 on m68k.


Revision tags: OPENBSD_2_5_BASE
# 1.17 08-Mar-1999 millert

pull in bsd.own.mk for NOPROFILE and NOPIC


# 1.16 07-Mar-1999 deraadt

Never break the source tree builds if a _non-default compilation option_
has an issue. Fix it right, without breaking the source tree.


# 1.15 07-Mar-1999 deraadt

previous commit broke MLINKS install


# 1.14 04-Mar-1999 millert

move .include <bsd.lib.mk> up before NOPROFILE and NOPIC defines are used; evanc@concer.to


# 1.13 16-Nov-1998 deraadt

use _USE_WRITE


Revision tags: OPENBSD_2_3_BASE OPENBSD_2_4_BASE
# 1.12 02-Mar-1998 millert

protect internal "struct excpption" from conflicting one in gcc.


Revision tags: OPENBSD_2_2_BASE
# 1.11 01-Sep-1997 mickey

missing VAX manual for infnan(3), from 4.4 BSD


Revision tags: OPENBSD_2_1_BASE
# 1.10 25-Mar-1997 rahnds

Ok here is the mvme88k userland, minus a few important pieces.
as, ld change need to be merged. It is known that shared libraries and C++
do not work.
If anyone wants to step forward and take over the mvme88k port please do.
It was dumped on me when the original developer, Nivas, left his previous
job and started a new one.

I am trying to get the port in a shape that someone could take over.


# 1.9 14-Nov-1996 mickey

correct LINKS usage


# 1.8 27-Oct-1996 downsj

nopic


# 1.7 27-Oct-1996 deraadt

NOPROFILE; from Mathieu.Herrb@mipnet.fr


# 1.6 25-Oct-1996 downsj

We do i387 by default now.


Revision tags: OPENBSD_2_0_BASE
# 1.5 30-Sep-1996 maja

Add OpenBSD tag. -moj


# 1.4 30-Sep-1996 maja

Allow the Makefile to work on strange machines like VAX :-) -moj


# 1.3 25-Mar-1996 tholo

Somewhat better support for building lint library


# 1.2 14-Dec-1995 deraadt

from netbsd:
Changed w_gamma.c, w_gamma_r.c, w_gammaf.c, w_gammaf_r.c to call
__ieee754_lgamma_r or __ieee754_lgammaf_r.
Removed e_gamma.c, e_gamma_r.c, e_gammaf.c, e_gammaf_r.c, e_lgamma.c,
e_lgamma_f.c.


# 1.1 18-Oct-1995 deraadt

branches: 1.1.1;
Initial revision


# 1.122 27-Apr-2021 drahn

riscv64 additions for libm
ok kettenis@


Revision tags: OPENBSD_6_9_BASE
# 1.121 07-Nov-2020 kettenis

Fix ilogb(3) implementation. The results have to match FP_ILOGB0 and
FP_ILOGBNAN which isn't the case for the amd64 and i386 assembly versions.
Drop these in favour of C implementations. Als reimplement ilogbl(3)
by providing separate ld80 and ld128 implementations that replace the
existing implementation which may hit an infinite loop when built for
quad-precision long double.

ok patrick@, gkoehler@


Revision tags: OPENBSD_6_8_BASE
# 1.120 28-Jun-2020 kettenis

Add powerpc64 support.


Revision tags: OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE
# 1.119 18-Jul-2018 naddy

Remove the unused leftovers of the 4.4BSD libm, which was only used
on non-IEEE platforms. Since the VAX port was discontinued, all
our remaining architectures use IEEE floating point, as will any
future ones.
ok millert@ tb@


Revision tags: OPENBSD_6_3_BASE
# 1.118 10-Mar-2018 kettenis

Implement sicos(3), sincosf(3) and sincosl(3). These functions are common
extensions and modern compilers (such as clang) will use them to optimize
separate calculations of sine and cosine.

ok tom@, patrick@, deraadt@, jmc@


# 1.117 28-Feb-2018 kettenis

Remove CFLAGS+=-mfloat-abi=softfp that I accidentally committed.


# 1.116 28-Feb-2018 kettenis

Change floating-point mode/environment control functions to operate on
both the hardfloat (FPU registers) and softfloat (software) state. This
makes these functions work correctly when mixing hardfloat and softfloat
code. Disable trapping for softfloat since most (if not all) ARMv7 and
ARMv8 hardware that is on the market doesn't support trapping of
floating-point exceptions.

ok patrick@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.115 11-Jan-2017 patrick

Add support for AArch64. Based on FreeBSD's msun header, modified
to look and feel like our code.


# 1.114 12-Sep-2016 guenther

Reduce libm's exports and make internal calls go direct.
All dependencies on libc are now via reserved/standardized names.

ok kettenis@ millert@ deraadt@


# 1.113 01-Sep-2016 tedu

remove references to sparc


Revision tags: OPENBSD_6_0_BASE
# 1.112 11-May-2016 deraadt

remove hppa64 port, which we never got going beyond broken single users.
hppa reverse-stack gives us a valuable test case, but most developers don't
have a 2nd one to proceed further with this.
ok kettenis


# 1.111 30-Mar-2016 jmc

for some time now mandoc has not required MLINKS to function
correctly - logically complete that now by removing MLINKS from base;

authors need only to ensure there is an entry in NAME for any function/
util being added. MLINKS will still work, and remain for perl to ease
upgrades;

ok nicm (curses) bcook (ssl)
ok schwarze, who provided a lot of feedback and assistance
ok tb natano jung


# 1.110 10-Mar-2016 jmc

no need for SUBDIR now that vax is gone; ok deraadt


# 1.109 09-Mar-2016 deraadt

We are done providing support for the vax.
lots of agreement.


Revision tags: OPENBSD_5_9_BASE
# 1.108 18-Sep-2015 miod

Move s_signgam.c to PURE_SRCS, so that it also gets built on vax.


Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
# 1.107 12-Sep-2014 kettenis

Provide a sparc64 version of sqrtl(3) that simply calls _Qp_sqrt.
The generic sqrtl(3) is not nearly accurate enough for quad-precision
floating point.


Revision tags: OPENBSD_5_6_BASE
# 1.106 18-Mar-2014 miod

Retire hp300, mvme68k and mvme88k ports. These ports have no users, keeping
this hardware alive is becoming increasingly difficult, and I should heed the
message sent by the three disks which have died on me over the last few days.

Noone sane will mourn these ports anyway. So long, and thanks for the fish.


Revision tags: OPENBSD_5_5_BASE
# 1.105 07-Aug-2013 espie

simple inaccurate implementation of lrint* functions on vax, just so
we have them.
Compiles on vax. okay martynas@


Revision tags: OPENBSD_5_4_BASE
# 1.104 15-Jul-2013 espie

use some generic code on vax, to do round/roundf/scalbln...
suggested by martynas@

okay miod@

(just rearranges the !vax makefile, no compile change there)


# 1.103 03-Jul-2013 espie

reorganize NOIEEE_SRCS so that files not compiled on vax because
of assembly version are obvious.
Move cproj/cprojf to the PURE club, as the asm support code provides
copysignf

okay martynas@


# 1.102 03-Jul-2013 espie

with DBL vs LDBL fixed, tedu some source in noieee which is actually the
same as code in generic src.
introduce PURE_SRCS for completely MI math code.
okau martynas@


Revision tags: OPENBSD_5_3_BASE
# 1.101 15-Sep-2012 miod

m88k does not have the m68k long double type actually (long double == double
on this platform), so don't pretend it does, and don't build long double libm
routines.


# 1.100 04-Sep-2012 okan

remove lint leftovers; ok guenther@


# 1.99 02-Aug-2012 okan

remove leftover NOLINT, WANTLINT, LINTFLAGS, LOBJ vars and lint targets.

ok guenther@


Revision tags: OPENBSD_5_1_BASE OPENBSD_5_2_BASE
# 1.98 22-Sep-2011 schwarze

install infnan(3/VAX) into man3/vax/ on all archs;
clean make build tested on i386;
ok deraadt@, no objections from martynas@


# 1.97 19-Aug-2011 kettenis

Bring libc and libm in line with the compiler now that we no longer have a
128-bit long double. Diff committed on behalf of martynas@


Revision tags: OPENBSD_5_0_BASE
# 1.96 24-Jul-2011 martynas

Document fma, fmaf, fmal, nexttoward, nexttowardf, nexttowardl.


# 1.95 20-Jul-2011 martynas

Document complex math library.


# 1.94 11-Jul-2011 martynas

Remove the GCC2 optimizer workaround for sparc. After switching
to GCC4 it doesn't generate broken code anymore.
From Brad. Tested and verified by myself.


# 1.93 09-Jul-2011 martynas

- Fix the cabs, and cabsf prototypes in the manual pages; it's
been C99 complex (not struct complex) for couple of years.
- Remove BUGS section; cabs is finally prototyped in complex.h.
- Also document cabsl.


# 1.92 09-Jul-2011 martynas

Don't reimplement the same thing twice. OK matthew@.


# 1.91 08-Jul-2011 martynas

Move fabs(3) manual page from libm to libc, for consistency. The
modf(3), frexp(3), ldexp(3), fpclassify(3) pages are in libc, too.


# 1.90 08-Jul-2011 martynas

Remove the stupid commented out fabs(3), frexp(3), and modf(3)
entries and unused implementations. It is clear that this situation
won't change.


# 1.89 08-Jul-2011 martynas

Revert (leaving the complex math part alone). Some stuff is depending
on this historical behavior; so we're stuck in this stupid situation.
No cookie for me.


# 1.88 08-Jul-2011 martynas

Finalize work on complex math routines, now that we have the
extended-precision support. Mostly from Cephes.


# 1.87 08-Jul-2011 martynas

Move fabs(3), frexp(3), and modf(3) to libm--nothing has been using
them in libc for a very long time. OK guenther@.


# 1.86 07-Jul-2011 martynas

Remove math(3). OK theo.


# 1.85 07-Jul-2011 martynas

Document extended-precision routines.


# 1.84 06-Jul-2011 martynas

Don't pull bsd.own.mk for NOPROFILE & NOPIC -- the libm_i387 thing
is gone since 1999.


# 1.83 06-Jul-2011 martynas

Finalize work on the math library. It's time to do this monster
commit, and deal with problems (if any) in tree.

Note that this adds the following functions. Ports with hacks might
need adjustments.

nexttoward(3), fma(3), nexttowardf(3), fmaf(3), acoshl(3), asinhl(3),
atanhl(3), coshl(3), sinhl(3), tanhl(3), expl(3), expm1l(3), logl(3),
log10l(3), log1pl(3), log2l(3), modfl(3), cbrtl(3), hypotl(3),
powl(3), erfl(3), erfcl(3), lgammal(3), tgammal(3), ceill(3),
floorl(3), lrintl(3), llrintl(3), roundl(3), lroundl(3), llroundl(3),
truncl(3), fmodl(3), remainderl(3), remquol(3), nextafterl(3),
nexttowardl(3), fmal(3).

With this commit, our library implements all functionality required
by C99. Documentation bits will follow.


# 1.82 28-May-2011 martynas

Adapt m68k MD functions to extended-precision.
Go for it miod@.


# 1.81 28-May-2011 martynas

Adapt m68k MD functions to single-precision.
Looked over by miod@.


# 1.80 25-May-2011 martynas

Document nearbyint, nearbyintf, nearbyintl.


# 1.79 25-May-2011 martynas

Document C99 floating-point environment.


# 1.78 28-Apr-2011 todd

fix build ok martynas@


# 1.77 28-Apr-2011 martynas

- enable fenv
- add nearbyint, nearbyintf and nearbyintl implemented using fenv


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
# 1.76 19-Jul-2010 millert

Add barebones manual pages for cimag(3), conj(3) and cproj(3)
OK kettenis@ jmc@


Revision tags: OPENBSD_4_7_BASE
# 1.75 03-Feb-2010 miod

Use MACHINE_CPU instead of MACHINE_ARCH to pick the correct machine dependent
files or directories when applicable.
The inspiration and name of MACHINE_CPU come from NetBSD, although the way to
provide it to Makefiles is completely different.
ok kettenis@


# 1.74 06-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok pirofti@


# 1.73 05-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok otto@


# 1.72 26-Oct-2009 kettenis

Add man pages for the fdim/fmin/fmax family of functions and make sure fdiml
is defined on all architectures.

ok jmc@ (man pages) and martynas@


# 1.71 24-Oct-2009 jmc

document log2() and log2f(); from thomas pfaff
ok otto millert martynas


# 1.70 29-Jul-2009 martynas

ieee, and ieeef aren't real, and the amount of functions it documents
is getting ridiculous. split them into groups of copysign, ilogb,
nextafter, scalbn. discussed long ago with millert@


# 1.69 28-Jul-2009 martynas

document scalbln, scalblnf, scalblnl


# 1.68 25-Jul-2009 martynas

int is big enough to fully represent exponents of all supported fp
formats. which even for 80-bit & 128-bit long doubles is only 15
bits. therefore, scalbln, scalblnf, scalblnl are essentially the
same as scalbn, scalbnf, scalbnl with bounds checking so that
LONG_MIN..INT_MIN, and INT_MAX..LONG_MAX ranges properly raise
exceptions & yield correct values. looks good to millert@


# 1.67 15-Jul-2009 martynas

round, roundf, trunc, truncf for hppa; ok kettenis@


Revision tags: OPENBSD_4_6_BASE
# 1.66 19-Apr-2009 martynas

make ldexpf behavior consistent with the double and extended-precision
versions; spotted by kettenis@
while here also remove unused ldexp; it lives in libc
ok kettenis@, "looks good" millert@


# 1.65 10-Apr-2009 martynas

lrint, llrint, lrintf, llrintf for amd64. ok kettenis@, oga@


# 1.64 05-Apr-2009 martynas

implement and use sqrt, sqrtf & fabsf in hardware; since it's
faster that way. tested by myself. discussed w/ & ok miod@, millert@


# 1.63 28-Mar-2009 martynas

add C99-conformant nan, nanf, nanl for vax. always return zero,
since its fp does not have distinguished values for qnans. tested
by naddy@; fixes libnova. ok theo


Revision tags: OPENBSD_4_5_BASE
# 1.62 12-Dec-2008 martynas

space


# 1.61 12-Dec-2008 martynas

document and mlink long double functions. ok jmc@


# 1.60 09-Dec-2008 martynas

pass CPPFLAGS+= -D__STDC__ for vax, to get the right definitions
from asm.h. discussed w/ millert@


# 1.59 09-Dec-2008 martynas

- 80-bit and quad precision trigonometric and other most
important functions: acosl, asinl, atanl, atan2l, cosl,
sinl, tanl, exp2l, frexpl, ilogbl, ldexpl, logbl, scalbnl,
fabsl, hypotl, powl, sqrtl, rintl, copysignl, nanl, fdiml,
fmaxl, fminl. mostly taken from freebsd, needed alot of
changes to adapt. note, these are all c versions; and are
quite slow when architectures have, e.g. sqrt. assembly
versions will be added afterwards
- make them .weak/__weak_alias to the double precision
versions on other archs
- no need to have two finites. finite() and finitef() are
non-standard 3BSD obsolete versions of isfinite. remove
from libm. make them weak_alias in libc to __isfinite and
__isfinitef instead. similarly make 3BSD obsolete versions
of isinf, isinff, isnan, isnanf weak_aliases to C99's
__isinf, __isinff, __isnan, __isnanf
- remove unused infinity.c. the c library has infinities
for each supported platform
- use STRICT_ASSIGN cast hack for _kernel_rem_pio2, so that
the double version has a chance of working on i386 with
extra precision
- avoid storing multiple copies of the pi/2 array, since
it won't vary
- bump major due to removed finite/finitef. although they
will be in libc, which anything is linked to, minor bump
might be enough
ok millert@. tested by sthen@, jsg@, ajacoutot@, kili@, naddy@


# 1.58 07-Oct-2008 martynas

- noieee_src: adapt complex versions of the functions it already
supports (which is all, except the float ones)
ok millert@


# 1.57 16-Sep-2008 martynas

gc unused files, the functions are in libc. ok millert@


# 1.56 11-Sep-2008 martynas

since these got no ieee-specific code anymore, add fmin, fmax, fdim,
fminf, fmaxf, fdimf, fdiml for VAX. looks good to millert@


# 1.55 09-Sep-2008 martynas

sigh, gamma got lost


# 1.54 07-Sep-2008 martynas

- replace dtoa w/ David's gdtoa, version 2008-03-15
- provide proper dtoa locks
- use the real strtof implementation
- add strtold, __hdtoa, __hldtoa
- add %a/%A support
- don't lose precision in printf, don't round to double anymore
- implement extended-precision versions of libc functions: fpclassify,
isnan, isinf, signbit, isnormal, isfinite, now that the ieee.h is
fixed
- separate vax versions of strtof, and __hdtoa
- add complex math support. added functions: cacos, casin, catan,
ccos, csin, ctan, cacosh, casinh, catanh, ccosh, csinh, ctanh, cexp,
clog, cabs, cpow, csqrt, carg, cimag, conj, cproj, creal, cacosf,
casinf, catanf, ccosf, csinf, ctanf, cacoshf, casinhf, catanhf,
ccoshf, csinhf, ctanhf, cexpf, clogf, cabsf, cpowf, csqrtf, cargf,
cimagf, conjf, cprojf, crealf
- add fdim, fmax, fmin
- add log2. (adapted implementation e_log.c. could be more acruate
& faster, but it's good enough for now)
- remove wrappers & cruft in libm, supposed to work-around mistakes
in SVID, etc.; use ieee versions. fixes issues in python 2.6 for
djm@
- make _digittoint static
- proper definitions for i386, and amd64 in ieee.h
- sh, powerpc don't really have extended-precision
- add missing definitions for mips64 (quad), m{6,8}k (96-bit) float.h
for LDBL_*
- merge lead to frac for m{6,8}k, for gdtoa to work properly
- add FRAC*BITS & EXT_TO_ARRAY32 definitions in ieee.h, for hdtoa&ldtoa
to use
- add EXT_IMPLICIT_NBIT definition, which indicates implicit
normalization bit
- add regression tests for libc: fpclassify and printf
- arith.h & gd_qnan.h definitions
- update ieee.h: hppa doesn't have quad-precision, hppa64 does
- add missing prototypes to gdtoaimp
- on 64-bit platforms make sure gdtoa doesn't use a long when it
really wants an int
- etc., what i may have forgotten...
- bump libm major, due to removed&changed symbols
- no libc bump, since this is riding on djm's libc major crank from
a day ago

discussed with / requested by / testing theo, sthen@, djm@, jsg@,
merdely@, jsing@, tedu@, brad@, jakemsr@, and others.
looks good to millert@
parts of the diff ok kettenis@

this commit does not include:
- man page changes


Revision tags: OPENBSD_4_4_BASE
# 1.53 30-Jul-2008 jmc

various markup/grammar fixes for previous, and a missing MLINK
for remquof.3;


# 1.52 29-Jul-2008 martynas

- add man pages for nan and remainder, from freebsd
- mlink drem, dremf, remainderf to remainder; nanf to nan
- describe that drem and dremf are obsolete aliases
- remove descriptions for remainder and remainderf from ieee
looked over by jmc@, but it's easier for him to work on when they
are in tree


# 1.51 29-Jul-2008 martynas

describe exp2, exp2f and mlink them


# 1.50 29-Jul-2008 martynas

remove finite from ieee.3, and unmlink from makefile


# 1.49 24-Jul-2008 martynas

- remove isinff, isnanf. this has been moved to libc
- remove never-enabled signbit. libc has is now
- add C99 implementations, from freebsd, for nan(), nanf() (needed
to write _digittoint for it), exp2(), exp2f(), remquo(), remquof(),
needed STRICT_ASSIGN macro for math_private.h
- bump major
man pages will follow
exp2{,f} has been requested by chl@
ok millert@


# 1.48 21-Jul-2008 martynas

NetBSD's C library supplies these functions -> OpenBSD's C library
supplies these functions. in comments


# 1.47 21-Jul-2008 martynas

rename lround.c lroundf.c llround.c llroundf.c to s_lround.c
s_lroundf.c s_llround.c s_llroundf.c, for naming consistency
looks fine to millert@


# 1.46 16-Jul-2008 martynas

install infnan.3 only for vax. pointed out by millert@
ok millert@


# 1.45 12-Jun-2008 jmc

Makefile: fix MLINKS
lgamma.3: fix STANDARDS and HISTORY


# 1.44 11-Jun-2008 martynas

- on non-ieee, rename gamma to tgamma, the 'true' gamma
- make gamma an alias of lgamma
- on ieee, add tgamma, based on gamma from non-ieee
- fixes for tgamma/lgamma/exp/log, esp. special cases (some from
freebsd); properly raise invalid fp operations on vax
- also some general cleanup, ansification, man page (which was ok
jmc@)
- bump minor
this makes some ports using tgamma possible; also consistifies
behavior across openbsd/ieee and openbsd/non-ieee, and other operating
systems
much thanks sthen@, johan@, steven@, Simon Kuhnle, Wiktor Izdebski
for testing
ok millert@


# 1.43 11-Jun-2008 martynas

drem{,f} are aliases for remainder{,f}, so:
- document and mlink drem{,f}
- drem->remainder on noieee, and make drem an alias
- finite returns integer, n_support.c
- general n_support.c ansification and cleanup
- drem is now an ALTENTRY for remainder, in n_support.S
help with man page from jmc@ and millert@
ok millert@


# 1.42 11-Jun-2008 martynas

add C99 round(), based on ieee_src, for noieee_src. tested on VAX
ok millert@


Revision tags: OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.41 25-Sep-2006 kettenis

Move llrint.c, llrintf.c, lrint.c and lrintf.c to s_llrint.c, s_llrintf.c,
s_lrint.c and s_lrintf.c, and add i387-specific assembler versions.

ok deraadt@, otto@


Revision tags: OPENBSD_4_0_BASE
# 1.40 12-Jul-2006 brad

add some more C99 functions: round(3) and roundf(3).

By Steven G. Kargl <kargl at troutmask dot apl dot washington.edu>
From FreeBSD


# 1.39 19-Mar-2006 kettenis

New amd64 exp(3).
tested by steven@, ok otto@


# 1.38 18-Mar-2006 brad

add some more C99 functions: trunc(3) and truncf(3).

From FreeBSD

ok deraadt@ millert@ otto@ jmc@


# 1.37 14-Mar-2006 otto

amd64 asm code is not correct for exp(+/-Inf), so until somebody
comes up with a correct asm version, use the C version of exp(3).
ok steven@ kettenis@


Revision tags: OPENBSD_3_9_BASE
# 1.36 24-Nov-2005 deraadt

use WANTLINT= (on all architectures)


# 1.35 17-Nov-2005 otto

Introduce a few c99 functions: {l,ll}{rint,round}{,f}. From NetBSD via
jason@. Man page fixes by jmc@, prodding by jsg@. ok mickey@


Revision tags: OPENBSD_3_6_BASE OPENBSD_3_7_BASE OPENBSD_3_8_BASE
# 1.34 06-Apr-2004 brad

remove optimization workaround for sparc64 now that we're using gcc3.

ok deraadt@


Revision tags: OPENBSD_3_5_BASE
# 1.33 28-Feb-2004 deraadt

reach into new amd64 directory


# 1.32 27-Feb-2004 deraadt

change amd64's MACHINE_ARCH from x86_64 to amd64. There are many many
reasons for this, quite a few of them technical, and not all of them
in response to Intel's broken ia32e crud. The gcc toolchain stays at
x86_64 for now.


# 1.31 08-Feb-2004 deraadt

add libm parts for amd64; much from netbsd, integration by mickey.
Instead of mixing the i387 & xmm register components, we decide to
explicitly seperate them. libm is already confusing enough as it is,
thank you very much


Revision tags: OPENBSD_3_3_BASE OPENBSD_3_4_BASE
# 1.30 27-Feb-2003 jason

ieee_test isn't real, rename it to logb.3 and make everything link to that instead.


# 1.29 03-Jan-2003 miod

Get the m88k libm to say no to drugs.


Revision tags: OPENBSD_3_2_BASE
# 1.28 22-May-2002 mickey

add reminder and roundings


# 1.27 22-May-2002 mickey

md sqrt() implementation


Revision tags: OPENBSD_3_1_BASE
# 1.26 30-Jan-2002 naddy

Add native implementations of copysign() and copysignf() on alpha.
From NetBSD; ok millert@


Revision tags: OPENBSD_3_0_BASE
# 1.25 28-Aug-2001 art

The sparc workaround is needed for sparc64 too.


# 1.24 26-Jun-2001 miod

Correctly handle mvme88k settings here.


Revision tags: OPENBSD_2_9_BASE
# 1.23 08-Nov-2000 deraadt

put infnan in there, even though it is depricated


Revision tags: OPENBSD_2_6_BASE OPENBSD_2_7_BASE OPENBSD_2_8_BASE
# 1.22 18-Jul-1999 deraadt

I think that libm_i387 has lived too long


# 1.21 01-Jul-1999 deraadt

provide MLINKS for "f" versions, and make sure they show up in whatis.db


# 1.20 28-Jun-1999 espie

Bye, bye work-around.


# 1.19 03-Jun-1999 deraadt

egcs generates broken code for -O2 on sparc


# 1.18 26-May-1999 espie

Work-around: a few files trigger Internal Compiler Errors if compiled with
-O2 on m68k.


Revision tags: OPENBSD_2_5_BASE
# 1.17 08-Mar-1999 millert

pull in bsd.own.mk for NOPROFILE and NOPIC


# 1.16 07-Mar-1999 deraadt

Never break the source tree builds if a _non-default compilation option_
has an issue. Fix it right, without breaking the source tree.


# 1.15 07-Mar-1999 deraadt

previous commit broke MLINKS install


# 1.14 04-Mar-1999 millert

move .include <bsd.lib.mk> up before NOPROFILE and NOPIC defines are used; evanc@concer.to


# 1.13 16-Nov-1998 deraadt

use _USE_WRITE


Revision tags: OPENBSD_2_3_BASE OPENBSD_2_4_BASE
# 1.12 02-Mar-1998 millert

protect internal "struct excpption" from conflicting one in gcc.


Revision tags: OPENBSD_2_2_BASE
# 1.11 01-Sep-1997 mickey

missing VAX manual for infnan(3), from 4.4 BSD


Revision tags: OPENBSD_2_1_BASE
# 1.10 25-Mar-1997 rahnds

Ok here is the mvme88k userland, minus a few important pieces.
as, ld change need to be merged. It is known that shared libraries and C++
do not work.
If anyone wants to step forward and take over the mvme88k port please do.
It was dumped on me when the original developer, Nivas, left his previous
job and started a new one.

I am trying to get the port in a shape that someone could take over.


# 1.9 14-Nov-1996 mickey

correct LINKS usage


# 1.8 27-Oct-1996 downsj

nopic


# 1.7 27-Oct-1996 deraadt

NOPROFILE; from Mathieu.Herrb@mipnet.fr


# 1.6 25-Oct-1996 downsj

We do i387 by default now.


Revision tags: OPENBSD_2_0_BASE
# 1.5 30-Sep-1996 maja

Add OpenBSD tag. -moj


# 1.4 30-Sep-1996 maja

Allow the Makefile to work on strange machines like VAX :-) -moj


# 1.3 25-Mar-1996 tholo

Somewhat better support for building lint library


# 1.2 14-Dec-1995 deraadt

from netbsd:
Changed w_gamma.c, w_gamma_r.c, w_gammaf.c, w_gammaf_r.c to call
__ieee754_lgamma_r or __ieee754_lgammaf_r.
Removed e_gamma.c, e_gamma_r.c, e_gammaf.c, e_gammaf_r.c, e_lgamma.c,
e_lgamma_f.c.


# 1.1 18-Oct-1995 deraadt

branches: 1.1.1;
Initial revision


# 1.121 07-Nov-2020 kettenis

Fix ilogb(3) implementation. The results have to match FP_ILOGB0 and
FP_ILOGBNAN which isn't the case for the amd64 and i386 assembly versions.
Drop these in favour of C implementations. Als reimplement ilogbl(3)
by providing separate ld80 and ld128 implementations that replace the
existing implementation which may hit an infinite loop when built for
quad-precision long double.

ok patrick@, gkoehler@


Revision tags: OPENBSD_6_8_BASE
# 1.120 28-Jun-2020 kettenis

Add powerpc64 support.


Revision tags: OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE
# 1.119 18-Jul-2018 naddy

Remove the unused leftovers of the 4.4BSD libm, which was only used
on non-IEEE platforms. Since the VAX port was discontinued, all
our remaining architectures use IEEE floating point, as will any
future ones.
ok millert@ tb@


Revision tags: OPENBSD_6_3_BASE
# 1.118 10-Mar-2018 kettenis

Implement sicos(3), sincosf(3) and sincosl(3). These functions are common
extensions and modern compilers (such as clang) will use them to optimize
separate calculations of sine and cosine.

ok tom@, patrick@, deraadt@, jmc@


# 1.117 28-Feb-2018 kettenis

Remove CFLAGS+=-mfloat-abi=softfp that I accidentally committed.


# 1.116 28-Feb-2018 kettenis

Change floating-point mode/environment control functions to operate on
both the hardfloat (FPU registers) and softfloat (software) state. This
makes these functions work correctly when mixing hardfloat and softfloat
code. Disable trapping for softfloat since most (if not all) ARMv7 and
ARMv8 hardware that is on the market doesn't support trapping of
floating-point exceptions.

ok patrick@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.115 11-Jan-2017 patrick

Add support for AArch64. Based on FreeBSD's msun header, modified
to look and feel like our code.


# 1.114 12-Sep-2016 guenther

Reduce libm's exports and make internal calls go direct.
All dependencies on libc are now via reserved/standardized names.

ok kettenis@ millert@ deraadt@


# 1.113 01-Sep-2016 tedu

remove references to sparc


Revision tags: OPENBSD_6_0_BASE
# 1.112 11-May-2016 deraadt

remove hppa64 port, which we never got going beyond broken single users.
hppa reverse-stack gives us a valuable test case, but most developers don't
have a 2nd one to proceed further with this.
ok kettenis


# 1.111 30-Mar-2016 jmc

for some time now mandoc has not required MLINKS to function
correctly - logically complete that now by removing MLINKS from base;

authors need only to ensure there is an entry in NAME for any function/
util being added. MLINKS will still work, and remain for perl to ease
upgrades;

ok nicm (curses) bcook (ssl)
ok schwarze, who provided a lot of feedback and assistance
ok tb natano jung


# 1.110 10-Mar-2016 jmc

no need for SUBDIR now that vax is gone; ok deraadt


# 1.109 09-Mar-2016 deraadt

We are done providing support for the vax.
lots of agreement.


Revision tags: OPENBSD_5_9_BASE
# 1.108 18-Sep-2015 miod

Move s_signgam.c to PURE_SRCS, so that it also gets built on vax.


Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
# 1.107 12-Sep-2014 kettenis

Provide a sparc64 version of sqrtl(3) that simply calls _Qp_sqrt.
The generic sqrtl(3) is not nearly accurate enough for quad-precision
floating point.


Revision tags: OPENBSD_5_6_BASE
# 1.106 18-Mar-2014 miod

Retire hp300, mvme68k and mvme88k ports. These ports have no users, keeping
this hardware alive is becoming increasingly difficult, and I should heed the
message sent by the three disks which have died on me over the last few days.

Noone sane will mourn these ports anyway. So long, and thanks for the fish.


Revision tags: OPENBSD_5_5_BASE
# 1.105 07-Aug-2013 espie

simple inaccurate implementation of lrint* functions on vax, just so
we have them.
Compiles on vax. okay martynas@


Revision tags: OPENBSD_5_4_BASE
# 1.104 15-Jul-2013 espie

use some generic code on vax, to do round/roundf/scalbln...
suggested by martynas@

okay miod@

(just rearranges the !vax makefile, no compile change there)


# 1.103 03-Jul-2013 espie

reorganize NOIEEE_SRCS so that files not compiled on vax because
of assembly version are obvious.
Move cproj/cprojf to the PURE club, as the asm support code provides
copysignf

okay martynas@


# 1.102 03-Jul-2013 espie

with DBL vs LDBL fixed, tedu some source in noieee which is actually the
same as code in generic src.
introduce PURE_SRCS for completely MI math code.
okau martynas@


Revision tags: OPENBSD_5_3_BASE
# 1.101 15-Sep-2012 miod

m88k does not have the m68k long double type actually (long double == double
on this platform), so don't pretend it does, and don't build long double libm
routines.


# 1.100 04-Sep-2012 okan

remove lint leftovers; ok guenther@


# 1.99 02-Aug-2012 okan

remove leftover NOLINT, WANTLINT, LINTFLAGS, LOBJ vars and lint targets.

ok guenther@


Revision tags: OPENBSD_5_1_BASE OPENBSD_5_2_BASE
# 1.98 22-Sep-2011 schwarze

install infnan(3/VAX) into man3/vax/ on all archs;
clean make build tested on i386;
ok deraadt@, no objections from martynas@


# 1.97 19-Aug-2011 kettenis

Bring libc and libm in line with the compiler now that we no longer have a
128-bit long double. Diff committed on behalf of martynas@


Revision tags: OPENBSD_5_0_BASE
# 1.96 24-Jul-2011 martynas

Document fma, fmaf, fmal, nexttoward, nexttowardf, nexttowardl.


# 1.95 20-Jul-2011 martynas

Document complex math library.


# 1.94 11-Jul-2011 martynas

Remove the GCC2 optimizer workaround for sparc. After switching
to GCC4 it doesn't generate broken code anymore.
From Brad. Tested and verified by myself.


# 1.93 09-Jul-2011 martynas

- Fix the cabs, and cabsf prototypes in the manual pages; it's
been C99 complex (not struct complex) for couple of years.
- Remove BUGS section; cabs is finally prototyped in complex.h.
- Also document cabsl.


# 1.92 09-Jul-2011 martynas

Don't reimplement the same thing twice. OK matthew@.


# 1.91 08-Jul-2011 martynas

Move fabs(3) manual page from libm to libc, for consistency. The
modf(3), frexp(3), ldexp(3), fpclassify(3) pages are in libc, too.


# 1.90 08-Jul-2011 martynas

Remove the stupid commented out fabs(3), frexp(3), and modf(3)
entries and unused implementations. It is clear that this situation
won't change.


# 1.89 08-Jul-2011 martynas

Revert (leaving the complex math part alone). Some stuff is depending
on this historical behavior; so we're stuck in this stupid situation.
No cookie for me.


# 1.88 08-Jul-2011 martynas

Finalize work on complex math routines, now that we have the
extended-precision support. Mostly from Cephes.


# 1.87 08-Jul-2011 martynas

Move fabs(3), frexp(3), and modf(3) to libm--nothing has been using
them in libc for a very long time. OK guenther@.


# 1.86 07-Jul-2011 martynas

Remove math(3). OK theo.


# 1.85 07-Jul-2011 martynas

Document extended-precision routines.


# 1.84 06-Jul-2011 martynas

Don't pull bsd.own.mk for NOPROFILE & NOPIC -- the libm_i387 thing
is gone since 1999.


# 1.83 06-Jul-2011 martynas

Finalize work on the math library. It's time to do this monster
commit, and deal with problems (if any) in tree.

Note that this adds the following functions. Ports with hacks might
need adjustments.

nexttoward(3), fma(3), nexttowardf(3), fmaf(3), acoshl(3), asinhl(3),
atanhl(3), coshl(3), sinhl(3), tanhl(3), expl(3), expm1l(3), logl(3),
log10l(3), log1pl(3), log2l(3), modfl(3), cbrtl(3), hypotl(3),
powl(3), erfl(3), erfcl(3), lgammal(3), tgammal(3), ceill(3),
floorl(3), lrintl(3), llrintl(3), roundl(3), lroundl(3), llroundl(3),
truncl(3), fmodl(3), remainderl(3), remquol(3), nextafterl(3),
nexttowardl(3), fmal(3).

With this commit, our library implements all functionality required
by C99. Documentation bits will follow.


# 1.82 28-May-2011 martynas

Adapt m68k MD functions to extended-precision.
Go for it miod@.


# 1.81 28-May-2011 martynas

Adapt m68k MD functions to single-precision.
Looked over by miod@.


# 1.80 25-May-2011 martynas

Document nearbyint, nearbyintf, nearbyintl.


# 1.79 25-May-2011 martynas

Document C99 floating-point environment.


# 1.78 28-Apr-2011 todd

fix build ok martynas@


# 1.77 28-Apr-2011 martynas

- enable fenv
- add nearbyint, nearbyintf and nearbyintl implemented using fenv


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
# 1.76 19-Jul-2010 millert

Add barebones manual pages for cimag(3), conj(3) and cproj(3)
OK kettenis@ jmc@


Revision tags: OPENBSD_4_7_BASE
# 1.75 03-Feb-2010 miod

Use MACHINE_CPU instead of MACHINE_ARCH to pick the correct machine dependent
files or directories when applicable.
The inspiration and name of MACHINE_CPU come from NetBSD, although the way to
provide it to Makefiles is completely different.
ok kettenis@


# 1.74 06-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok pirofti@


# 1.73 05-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok otto@


# 1.72 26-Oct-2009 kettenis

Add man pages for the fdim/fmin/fmax family of functions and make sure fdiml
is defined on all architectures.

ok jmc@ (man pages) and martynas@


# 1.71 24-Oct-2009 jmc

document log2() and log2f(); from thomas pfaff
ok otto millert martynas


# 1.70 29-Jul-2009 martynas

ieee, and ieeef aren't real, and the amount of functions it documents
is getting ridiculous. split them into groups of copysign, ilogb,
nextafter, scalbn. discussed long ago with millert@


# 1.69 28-Jul-2009 martynas

document scalbln, scalblnf, scalblnl


# 1.68 25-Jul-2009 martynas

int is big enough to fully represent exponents of all supported fp
formats. which even for 80-bit & 128-bit long doubles is only 15
bits. therefore, scalbln, scalblnf, scalblnl are essentially the
same as scalbn, scalbnf, scalbnl with bounds checking so that
LONG_MIN..INT_MIN, and INT_MAX..LONG_MAX ranges properly raise
exceptions & yield correct values. looks good to millert@


# 1.67 15-Jul-2009 martynas

round, roundf, trunc, truncf for hppa; ok kettenis@


Revision tags: OPENBSD_4_6_BASE
# 1.66 19-Apr-2009 martynas

make ldexpf behavior consistent with the double and extended-precision
versions; spotted by kettenis@
while here also remove unused ldexp; it lives in libc
ok kettenis@, "looks good" millert@


# 1.65 10-Apr-2009 martynas

lrint, llrint, lrintf, llrintf for amd64. ok kettenis@, oga@


# 1.64 05-Apr-2009 martynas

implement and use sqrt, sqrtf & fabsf in hardware; since it's
faster that way. tested by myself. discussed w/ & ok miod@, millert@


# 1.63 28-Mar-2009 martynas

add C99-conformant nan, nanf, nanl for vax. always return zero,
since its fp does not have distinguished values for qnans. tested
by naddy@; fixes libnova. ok theo


Revision tags: OPENBSD_4_5_BASE
# 1.62 12-Dec-2008 martynas

space


# 1.61 12-Dec-2008 martynas

document and mlink long double functions. ok jmc@


# 1.60 09-Dec-2008 martynas

pass CPPFLAGS+= -D__STDC__ for vax, to get the right definitions
from asm.h. discussed w/ millert@


# 1.59 09-Dec-2008 martynas

- 80-bit and quad precision trigonometric and other most
important functions: acosl, asinl, atanl, atan2l, cosl,
sinl, tanl, exp2l, frexpl, ilogbl, ldexpl, logbl, scalbnl,
fabsl, hypotl, powl, sqrtl, rintl, copysignl, nanl, fdiml,
fmaxl, fminl. mostly taken from freebsd, needed alot of
changes to adapt. note, these are all c versions; and are
quite slow when architectures have, e.g. sqrt. assembly
versions will be added afterwards
- make them .weak/__weak_alias to the double precision
versions on other archs
- no need to have two finites. finite() and finitef() are
non-standard 3BSD obsolete versions of isfinite. remove
from libm. make them weak_alias in libc to __isfinite and
__isfinitef instead. similarly make 3BSD obsolete versions
of isinf, isinff, isnan, isnanf weak_aliases to C99's
__isinf, __isinff, __isnan, __isnanf
- remove unused infinity.c. the c library has infinities
for each supported platform
- use STRICT_ASSIGN cast hack for _kernel_rem_pio2, so that
the double version has a chance of working on i386 with
extra precision
- avoid storing multiple copies of the pi/2 array, since
it won't vary
- bump major due to removed finite/finitef. although they
will be in libc, which anything is linked to, minor bump
might be enough
ok millert@. tested by sthen@, jsg@, ajacoutot@, kili@, naddy@


# 1.58 07-Oct-2008 martynas

- noieee_src: adapt complex versions of the functions it already
supports (which is all, except the float ones)
ok millert@


# 1.57 16-Sep-2008 martynas

gc unused files, the functions are in libc. ok millert@


# 1.56 11-Sep-2008 martynas

since these got no ieee-specific code anymore, add fmin, fmax, fdim,
fminf, fmaxf, fdimf, fdiml for VAX. looks good to millert@


# 1.55 09-Sep-2008 martynas

sigh, gamma got lost


# 1.54 07-Sep-2008 martynas

- replace dtoa w/ David's gdtoa, version 2008-03-15
- provide proper dtoa locks
- use the real strtof implementation
- add strtold, __hdtoa, __hldtoa
- add %a/%A support
- don't lose precision in printf, don't round to double anymore
- implement extended-precision versions of libc functions: fpclassify,
isnan, isinf, signbit, isnormal, isfinite, now that the ieee.h is
fixed
- separate vax versions of strtof, and __hdtoa
- add complex math support. added functions: cacos, casin, catan,
ccos, csin, ctan, cacosh, casinh, catanh, ccosh, csinh, ctanh, cexp,
clog, cabs, cpow, csqrt, carg, cimag, conj, cproj, creal, cacosf,
casinf, catanf, ccosf, csinf, ctanf, cacoshf, casinhf, catanhf,
ccoshf, csinhf, ctanhf, cexpf, clogf, cabsf, cpowf, csqrtf, cargf,
cimagf, conjf, cprojf, crealf
- add fdim, fmax, fmin
- add log2. (adapted implementation e_log.c. could be more acruate
& faster, but it's good enough for now)
- remove wrappers & cruft in libm, supposed to work-around mistakes
in SVID, etc.; use ieee versions. fixes issues in python 2.6 for
djm@
- make _digittoint static
- proper definitions for i386, and amd64 in ieee.h
- sh, powerpc don't really have extended-precision
- add missing definitions for mips64 (quad), m{6,8}k (96-bit) float.h
for LDBL_*
- merge lead to frac for m{6,8}k, for gdtoa to work properly
- add FRAC*BITS & EXT_TO_ARRAY32 definitions in ieee.h, for hdtoa&ldtoa
to use
- add EXT_IMPLICIT_NBIT definition, which indicates implicit
normalization bit
- add regression tests for libc: fpclassify and printf
- arith.h & gd_qnan.h definitions
- update ieee.h: hppa doesn't have quad-precision, hppa64 does
- add missing prototypes to gdtoaimp
- on 64-bit platforms make sure gdtoa doesn't use a long when it
really wants an int
- etc., what i may have forgotten...
- bump libm major, due to removed&changed symbols
- no libc bump, since this is riding on djm's libc major crank from
a day ago

discussed with / requested by / testing theo, sthen@, djm@, jsg@,
merdely@, jsing@, tedu@, brad@, jakemsr@, and others.
looks good to millert@
parts of the diff ok kettenis@

this commit does not include:
- man page changes


Revision tags: OPENBSD_4_4_BASE
# 1.53 30-Jul-2008 jmc

various markup/grammar fixes for previous, and a missing MLINK
for remquof.3;


# 1.52 29-Jul-2008 martynas

- add man pages for nan and remainder, from freebsd
- mlink drem, dremf, remainderf to remainder; nanf to nan
- describe that drem and dremf are obsolete aliases
- remove descriptions for remainder and remainderf from ieee
looked over by jmc@, but it's easier for him to work on when they
are in tree


# 1.51 29-Jul-2008 martynas

describe exp2, exp2f and mlink them


# 1.50 29-Jul-2008 martynas

remove finite from ieee.3, and unmlink from makefile


# 1.49 24-Jul-2008 martynas

- remove isinff, isnanf. this has been moved to libc
- remove never-enabled signbit. libc has is now
- add C99 implementations, from freebsd, for nan(), nanf() (needed
to write _digittoint for it), exp2(), exp2f(), remquo(), remquof(),
needed STRICT_ASSIGN macro for math_private.h
- bump major
man pages will follow
exp2{,f} has been requested by chl@
ok millert@


# 1.48 21-Jul-2008 martynas

NetBSD's C library supplies these functions -> OpenBSD's C library
supplies these functions. in comments


# 1.47 21-Jul-2008 martynas

rename lround.c lroundf.c llround.c llroundf.c to s_lround.c
s_lroundf.c s_llround.c s_llroundf.c, for naming consistency
looks fine to millert@


# 1.46 16-Jul-2008 martynas

install infnan.3 only for vax. pointed out by millert@
ok millert@


# 1.45 12-Jun-2008 jmc

Makefile: fix MLINKS
lgamma.3: fix STANDARDS and HISTORY


# 1.44 11-Jun-2008 martynas

- on non-ieee, rename gamma to tgamma, the 'true' gamma
- make gamma an alias of lgamma
- on ieee, add tgamma, based on gamma from non-ieee
- fixes for tgamma/lgamma/exp/log, esp. special cases (some from
freebsd); properly raise invalid fp operations on vax
- also some general cleanup, ansification, man page (which was ok
jmc@)
- bump minor
this makes some ports using tgamma possible; also consistifies
behavior across openbsd/ieee and openbsd/non-ieee, and other operating
systems
much thanks sthen@, johan@, steven@, Simon Kuhnle, Wiktor Izdebski
for testing
ok millert@


# 1.43 11-Jun-2008 martynas

drem{,f} are aliases for remainder{,f}, so:
- document and mlink drem{,f}
- drem->remainder on noieee, and make drem an alias
- finite returns integer, n_support.c
- general n_support.c ansification and cleanup
- drem is now an ALTENTRY for remainder, in n_support.S
help with man page from jmc@ and millert@
ok millert@


# 1.42 11-Jun-2008 martynas

add C99 round(), based on ieee_src, for noieee_src. tested on VAX
ok millert@


Revision tags: OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.41 25-Sep-2006 kettenis

Move llrint.c, llrintf.c, lrint.c and lrintf.c to s_llrint.c, s_llrintf.c,
s_lrint.c and s_lrintf.c, and add i387-specific assembler versions.

ok deraadt@, otto@


Revision tags: OPENBSD_4_0_BASE
# 1.40 12-Jul-2006 brad

add some more C99 functions: round(3) and roundf(3).

By Steven G. Kargl <kargl at troutmask dot apl dot washington.edu>
From FreeBSD


# 1.39 19-Mar-2006 kettenis

New amd64 exp(3).
tested by steven@, ok otto@


# 1.38 18-Mar-2006 brad

add some more C99 functions: trunc(3) and truncf(3).

From FreeBSD

ok deraadt@ millert@ otto@ jmc@


# 1.37 14-Mar-2006 otto

amd64 asm code is not correct for exp(+/-Inf), so until somebody
comes up with a correct asm version, use the C version of exp(3).
ok steven@ kettenis@


Revision tags: OPENBSD_3_9_BASE
# 1.36 24-Nov-2005 deraadt

use WANTLINT= (on all architectures)


# 1.35 17-Nov-2005 otto

Introduce a few c99 functions: {l,ll}{rint,round}{,f}. From NetBSD via
jason@. Man page fixes by jmc@, prodding by jsg@. ok mickey@


Revision tags: OPENBSD_3_6_BASE OPENBSD_3_7_BASE OPENBSD_3_8_BASE
# 1.34 06-Apr-2004 brad

remove optimization workaround for sparc64 now that we're using gcc3.

ok deraadt@


Revision tags: OPENBSD_3_5_BASE
# 1.33 28-Feb-2004 deraadt

reach into new amd64 directory


# 1.32 27-Feb-2004 deraadt

change amd64's MACHINE_ARCH from x86_64 to amd64. There are many many
reasons for this, quite a few of them technical, and not all of them
in response to Intel's broken ia32e crud. The gcc toolchain stays at
x86_64 for now.


# 1.31 08-Feb-2004 deraadt

add libm parts for amd64; much from netbsd, integration by mickey.
Instead of mixing the i387 & xmm register components, we decide to
explicitly seperate them. libm is already confusing enough as it is,
thank you very much


Revision tags: OPENBSD_3_3_BASE OPENBSD_3_4_BASE
# 1.30 27-Feb-2003 jason

ieee_test isn't real, rename it to logb.3 and make everything link to that instead.


# 1.29 03-Jan-2003 miod

Get the m88k libm to say no to drugs.


Revision tags: OPENBSD_3_2_BASE
# 1.28 22-May-2002 mickey

add reminder and roundings


# 1.27 22-May-2002 mickey

md sqrt() implementation


Revision tags: OPENBSD_3_1_BASE
# 1.26 30-Jan-2002 naddy

Add native implementations of copysign() and copysignf() on alpha.
From NetBSD; ok millert@


Revision tags: OPENBSD_3_0_BASE
# 1.25 28-Aug-2001 art

The sparc workaround is needed for sparc64 too.


# 1.24 26-Jun-2001 miod

Correctly handle mvme88k settings here.


Revision tags: OPENBSD_2_9_BASE
# 1.23 08-Nov-2000 deraadt

put infnan in there, even though it is depricated


Revision tags: OPENBSD_2_6_BASE OPENBSD_2_7_BASE OPENBSD_2_8_BASE
# 1.22 18-Jul-1999 deraadt

I think that libm_i387 has lived too long


# 1.21 01-Jul-1999 deraadt

provide MLINKS for "f" versions, and make sure they show up in whatis.db


# 1.20 28-Jun-1999 espie

Bye, bye work-around.


# 1.19 03-Jun-1999 deraadt

egcs generates broken code for -O2 on sparc


# 1.18 26-May-1999 espie

Work-around: a few files trigger Internal Compiler Errors if compiled with
-O2 on m68k.


Revision tags: OPENBSD_2_5_BASE
# 1.17 08-Mar-1999 millert

pull in bsd.own.mk for NOPROFILE and NOPIC


# 1.16 07-Mar-1999 deraadt

Never break the source tree builds if a _non-default compilation option_
has an issue. Fix it right, without breaking the source tree.


# 1.15 07-Mar-1999 deraadt

previous commit broke MLINKS install


# 1.14 04-Mar-1999 millert

move .include <bsd.lib.mk> up before NOPROFILE and NOPIC defines are used; evanc@concer.to


# 1.13 16-Nov-1998 deraadt

use _USE_WRITE


Revision tags: OPENBSD_2_3_BASE OPENBSD_2_4_BASE
# 1.12 02-Mar-1998 millert

protect internal "struct excpption" from conflicting one in gcc.


Revision tags: OPENBSD_2_2_BASE
# 1.11 01-Sep-1997 mickey

missing VAX manual for infnan(3), from 4.4 BSD


Revision tags: OPENBSD_2_1_BASE
# 1.10 25-Mar-1997 rahnds

Ok here is the mvme88k userland, minus a few important pieces.
as, ld change need to be merged. It is known that shared libraries and C++
do not work.
If anyone wants to step forward and take over the mvme88k port please do.
It was dumped on me when the original developer, Nivas, left his previous
job and started a new one.

I am trying to get the port in a shape that someone could take over.


# 1.9 14-Nov-1996 mickey

correct LINKS usage


# 1.8 27-Oct-1996 downsj

nopic


# 1.7 27-Oct-1996 deraadt

NOPROFILE; from Mathieu.Herrb@mipnet.fr


# 1.6 25-Oct-1996 downsj

We do i387 by default now.


Revision tags: OPENBSD_2_0_BASE
# 1.5 30-Sep-1996 maja

Add OpenBSD tag. -moj


# 1.4 30-Sep-1996 maja

Allow the Makefile to work on strange machines like VAX :-) -moj


# 1.3 25-Mar-1996 tholo

Somewhat better support for building lint library


# 1.2 14-Dec-1995 deraadt

from netbsd:
Changed w_gamma.c, w_gamma_r.c, w_gammaf.c, w_gammaf_r.c to call
__ieee754_lgamma_r or __ieee754_lgammaf_r.
Removed e_gamma.c, e_gamma_r.c, e_gammaf.c, e_gammaf_r.c, e_lgamma.c,
e_lgamma_f.c.


# 1.1 18-Oct-1995 deraadt

branches: 1.1.1;
Initial revision


# 1.120 28-Jun-2020 kettenis

Add powerpc64 support.


Revision tags: OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE
# 1.119 18-Jul-2018 naddy

Remove the unused leftovers of the 4.4BSD libm, which was only used
on non-IEEE platforms. Since the VAX port was discontinued, all
our remaining architectures use IEEE floating point, as will any
future ones.
ok millert@ tb@


Revision tags: OPENBSD_6_3_BASE
# 1.118 10-Mar-2018 kettenis

Implement sicos(3), sincosf(3) and sincosl(3). These functions are common
extensions and modern compilers (such as clang) will use them to optimize
separate calculations of sine and cosine.

ok tom@, patrick@, deraadt@, jmc@


# 1.117 28-Feb-2018 kettenis

Remove CFLAGS+=-mfloat-abi=softfp that I accidentally committed.


# 1.116 28-Feb-2018 kettenis

Change floating-point mode/environment control functions to operate on
both the hardfloat (FPU registers) and softfloat (software) state. This
makes these functions work correctly when mixing hardfloat and softfloat
code. Disable trapping for softfloat since most (if not all) ARMv7 and
ARMv8 hardware that is on the market doesn't support trapping of
floating-point exceptions.

ok patrick@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.115 11-Jan-2017 patrick

Add support for AArch64. Based on FreeBSD's msun header, modified
to look and feel like our code.


# 1.114 12-Sep-2016 guenther

Reduce libm's exports and make internal calls go direct.
All dependencies on libc are now via reserved/standardized names.

ok kettenis@ millert@ deraadt@


# 1.113 01-Sep-2016 tedu

remove references to sparc


Revision tags: OPENBSD_6_0_BASE
# 1.112 11-May-2016 deraadt

remove hppa64 port, which we never got going beyond broken single users.
hppa reverse-stack gives us a valuable test case, but most developers don't
have a 2nd one to proceed further with this.
ok kettenis


# 1.111 30-Mar-2016 jmc

for some time now mandoc has not required MLINKS to function
correctly - logically complete that now by removing MLINKS from base;

authors need only to ensure there is an entry in NAME for any function/
util being added. MLINKS will still work, and remain for perl to ease
upgrades;

ok nicm (curses) bcook (ssl)
ok schwarze, who provided a lot of feedback and assistance
ok tb natano jung


# 1.110 10-Mar-2016 jmc

no need for SUBDIR now that vax is gone; ok deraadt


# 1.109 09-Mar-2016 deraadt

We are done providing support for the vax.
lots of agreement.


Revision tags: OPENBSD_5_9_BASE
# 1.108 18-Sep-2015 miod

Move s_signgam.c to PURE_SRCS, so that it also gets built on vax.


Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
# 1.107 12-Sep-2014 kettenis

Provide a sparc64 version of sqrtl(3) that simply calls _Qp_sqrt.
The generic sqrtl(3) is not nearly accurate enough for quad-precision
floating point.


Revision tags: OPENBSD_5_6_BASE
# 1.106 18-Mar-2014 miod

Retire hp300, mvme68k and mvme88k ports. These ports have no users, keeping
this hardware alive is becoming increasingly difficult, and I should heed the
message sent by the three disks which have died on me over the last few days.

Noone sane will mourn these ports anyway. So long, and thanks for the fish.


Revision tags: OPENBSD_5_5_BASE
# 1.105 07-Aug-2013 espie

simple inaccurate implementation of lrint* functions on vax, just so
we have them.
Compiles on vax. okay martynas@


Revision tags: OPENBSD_5_4_BASE
# 1.104 15-Jul-2013 espie

use some generic code on vax, to do round/roundf/scalbln...
suggested by martynas@

okay miod@

(just rearranges the !vax makefile, no compile change there)


# 1.103 03-Jul-2013 espie

reorganize NOIEEE_SRCS so that files not compiled on vax because
of assembly version are obvious.
Move cproj/cprojf to the PURE club, as the asm support code provides
copysignf

okay martynas@


# 1.102 03-Jul-2013 espie

with DBL vs LDBL fixed, tedu some source in noieee which is actually the
same as code in generic src.
introduce PURE_SRCS for completely MI math code.
okau martynas@


Revision tags: OPENBSD_5_3_BASE
# 1.101 15-Sep-2012 miod

m88k does not have the m68k long double type actually (long double == double
on this platform), so don't pretend it does, and don't build long double libm
routines.


# 1.100 04-Sep-2012 okan

remove lint leftovers; ok guenther@


# 1.99 02-Aug-2012 okan

remove leftover NOLINT, WANTLINT, LINTFLAGS, LOBJ vars and lint targets.

ok guenther@


Revision tags: OPENBSD_5_1_BASE OPENBSD_5_2_BASE
# 1.98 22-Sep-2011 schwarze

install infnan(3/VAX) into man3/vax/ on all archs;
clean make build tested on i386;
ok deraadt@, no objections from martynas@


# 1.97 19-Aug-2011 kettenis

Bring libc and libm in line with the compiler now that we no longer have a
128-bit long double. Diff committed on behalf of martynas@


Revision tags: OPENBSD_5_0_BASE
# 1.96 24-Jul-2011 martynas

Document fma, fmaf, fmal, nexttoward, nexttowardf, nexttowardl.


# 1.95 20-Jul-2011 martynas

Document complex math library.


# 1.94 11-Jul-2011 martynas

Remove the GCC2 optimizer workaround for sparc. After switching
to GCC4 it doesn't generate broken code anymore.
From Brad. Tested and verified by myself.


# 1.93 09-Jul-2011 martynas

- Fix the cabs, and cabsf prototypes in the manual pages; it's
been C99 complex (not struct complex) for couple of years.
- Remove BUGS section; cabs is finally prototyped in complex.h.
- Also document cabsl.


# 1.92 09-Jul-2011 martynas

Don't reimplement the same thing twice. OK matthew@.


# 1.91 08-Jul-2011 martynas

Move fabs(3) manual page from libm to libc, for consistency. The
modf(3), frexp(3), ldexp(3), fpclassify(3) pages are in libc, too.


# 1.90 08-Jul-2011 martynas

Remove the stupid commented out fabs(3), frexp(3), and modf(3)
entries and unused implementations. It is clear that this situation
won't change.


# 1.89 08-Jul-2011 martynas

Revert (leaving the complex math part alone). Some stuff is depending
on this historical behavior; so we're stuck in this stupid situation.
No cookie for me.


# 1.88 08-Jul-2011 martynas

Finalize work on complex math routines, now that we have the
extended-precision support. Mostly from Cephes.


# 1.87 08-Jul-2011 martynas

Move fabs(3), frexp(3), and modf(3) to libm--nothing has been using
them in libc for a very long time. OK guenther@.


# 1.86 07-Jul-2011 martynas

Remove math(3). OK theo.


# 1.85 07-Jul-2011 martynas

Document extended-precision routines.


# 1.84 06-Jul-2011 martynas

Don't pull bsd.own.mk for NOPROFILE & NOPIC -- the libm_i387 thing
is gone since 1999.


# 1.83 06-Jul-2011 martynas

Finalize work on the math library. It's time to do this monster
commit, and deal with problems (if any) in tree.

Note that this adds the following functions. Ports with hacks might
need adjustments.

nexttoward(3), fma(3), nexttowardf(3), fmaf(3), acoshl(3), asinhl(3),
atanhl(3), coshl(3), sinhl(3), tanhl(3), expl(3), expm1l(3), logl(3),
log10l(3), log1pl(3), log2l(3), modfl(3), cbrtl(3), hypotl(3),
powl(3), erfl(3), erfcl(3), lgammal(3), tgammal(3), ceill(3),
floorl(3), lrintl(3), llrintl(3), roundl(3), lroundl(3), llroundl(3),
truncl(3), fmodl(3), remainderl(3), remquol(3), nextafterl(3),
nexttowardl(3), fmal(3).

With this commit, our library implements all functionality required
by C99. Documentation bits will follow.


# 1.82 28-May-2011 martynas

Adapt m68k MD functions to extended-precision.
Go for it miod@.


# 1.81 28-May-2011 martynas

Adapt m68k MD functions to single-precision.
Looked over by miod@.


# 1.80 25-May-2011 martynas

Document nearbyint, nearbyintf, nearbyintl.


# 1.79 25-May-2011 martynas

Document C99 floating-point environment.


# 1.78 28-Apr-2011 todd

fix build ok martynas@


# 1.77 28-Apr-2011 martynas

- enable fenv
- add nearbyint, nearbyintf and nearbyintl implemented using fenv


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
# 1.76 19-Jul-2010 millert

Add barebones manual pages for cimag(3), conj(3) and cproj(3)
OK kettenis@ jmc@


Revision tags: OPENBSD_4_7_BASE
# 1.75 03-Feb-2010 miod

Use MACHINE_CPU instead of MACHINE_ARCH to pick the correct machine dependent
files or directories when applicable.
The inspiration and name of MACHINE_CPU come from NetBSD, although the way to
provide it to Makefiles is completely different.
ok kettenis@


# 1.74 06-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok pirofti@


# 1.73 05-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok otto@


# 1.72 26-Oct-2009 kettenis

Add man pages for the fdim/fmin/fmax family of functions and make sure fdiml
is defined on all architectures.

ok jmc@ (man pages) and martynas@


# 1.71 24-Oct-2009 jmc

document log2() and log2f(); from thomas pfaff
ok otto millert martynas


# 1.70 29-Jul-2009 martynas

ieee, and ieeef aren't real, and the amount of functions it documents
is getting ridiculous. split them into groups of copysign, ilogb,
nextafter, scalbn. discussed long ago with millert@


# 1.69 28-Jul-2009 martynas

document scalbln, scalblnf, scalblnl


# 1.68 25-Jul-2009 martynas

int is big enough to fully represent exponents of all supported fp
formats. which even for 80-bit & 128-bit long doubles is only 15
bits. therefore, scalbln, scalblnf, scalblnl are essentially the
same as scalbn, scalbnf, scalbnl with bounds checking so that
LONG_MIN..INT_MIN, and INT_MAX..LONG_MAX ranges properly raise
exceptions & yield correct values. looks good to millert@


# 1.67 15-Jul-2009 martynas

round, roundf, trunc, truncf for hppa; ok kettenis@


Revision tags: OPENBSD_4_6_BASE
# 1.66 19-Apr-2009 martynas

make ldexpf behavior consistent with the double and extended-precision
versions; spotted by kettenis@
while here also remove unused ldexp; it lives in libc
ok kettenis@, "looks good" millert@


# 1.65 10-Apr-2009 martynas

lrint, llrint, lrintf, llrintf for amd64. ok kettenis@, oga@


# 1.64 05-Apr-2009 martynas

implement and use sqrt, sqrtf & fabsf in hardware; since it's
faster that way. tested by myself. discussed w/ & ok miod@, millert@


# 1.63 28-Mar-2009 martynas

add C99-conformant nan, nanf, nanl for vax. always return zero,
since its fp does not have distinguished values for qnans. tested
by naddy@; fixes libnova. ok theo


Revision tags: OPENBSD_4_5_BASE
# 1.62 12-Dec-2008 martynas

space


# 1.61 12-Dec-2008 martynas

document and mlink long double functions. ok jmc@


# 1.60 09-Dec-2008 martynas

pass CPPFLAGS+= -D__STDC__ for vax, to get the right definitions
from asm.h. discussed w/ millert@


# 1.59 09-Dec-2008 martynas

- 80-bit and quad precision trigonometric and other most
important functions: acosl, asinl, atanl, atan2l, cosl,
sinl, tanl, exp2l, frexpl, ilogbl, ldexpl, logbl, scalbnl,
fabsl, hypotl, powl, sqrtl, rintl, copysignl, nanl, fdiml,
fmaxl, fminl. mostly taken from freebsd, needed alot of
changes to adapt. note, these are all c versions; and are
quite slow when architectures have, e.g. sqrt. assembly
versions will be added afterwards
- make them .weak/__weak_alias to the double precision
versions on other archs
- no need to have two finites. finite() and finitef() are
non-standard 3BSD obsolete versions of isfinite. remove
from libm. make them weak_alias in libc to __isfinite and
__isfinitef instead. similarly make 3BSD obsolete versions
of isinf, isinff, isnan, isnanf weak_aliases to C99's
__isinf, __isinff, __isnan, __isnanf
- remove unused infinity.c. the c library has infinities
for each supported platform
- use STRICT_ASSIGN cast hack for _kernel_rem_pio2, so that
the double version has a chance of working on i386 with
extra precision
- avoid storing multiple copies of the pi/2 array, since
it won't vary
- bump major due to removed finite/finitef. although they
will be in libc, which anything is linked to, minor bump
might be enough
ok millert@. tested by sthen@, jsg@, ajacoutot@, kili@, naddy@


# 1.58 07-Oct-2008 martynas

- noieee_src: adapt complex versions of the functions it already
supports (which is all, except the float ones)
ok millert@


# 1.57 16-Sep-2008 martynas

gc unused files, the functions are in libc. ok millert@


# 1.56 11-Sep-2008 martynas

since these got no ieee-specific code anymore, add fmin, fmax, fdim,
fminf, fmaxf, fdimf, fdiml for VAX. looks good to millert@


# 1.55 09-Sep-2008 martynas

sigh, gamma got lost


# 1.54 07-Sep-2008 martynas

- replace dtoa w/ David's gdtoa, version 2008-03-15
- provide proper dtoa locks
- use the real strtof implementation
- add strtold, __hdtoa, __hldtoa
- add %a/%A support
- don't lose precision in printf, don't round to double anymore
- implement extended-precision versions of libc functions: fpclassify,
isnan, isinf, signbit, isnormal, isfinite, now that the ieee.h is
fixed
- separate vax versions of strtof, and __hdtoa
- add complex math support. added functions: cacos, casin, catan,
ccos, csin, ctan, cacosh, casinh, catanh, ccosh, csinh, ctanh, cexp,
clog, cabs, cpow, csqrt, carg, cimag, conj, cproj, creal, cacosf,
casinf, catanf, ccosf, csinf, ctanf, cacoshf, casinhf, catanhf,
ccoshf, csinhf, ctanhf, cexpf, clogf, cabsf, cpowf, csqrtf, cargf,
cimagf, conjf, cprojf, crealf
- add fdim, fmax, fmin
- add log2. (adapted implementation e_log.c. could be more acruate
& faster, but it's good enough for now)
- remove wrappers & cruft in libm, supposed to work-around mistakes
in SVID, etc.; use ieee versions. fixes issues in python 2.6 for
djm@
- make _digittoint static
- proper definitions for i386, and amd64 in ieee.h
- sh, powerpc don't really have extended-precision
- add missing definitions for mips64 (quad), m{6,8}k (96-bit) float.h
for LDBL_*
- merge lead to frac for m{6,8}k, for gdtoa to work properly
- add FRAC*BITS & EXT_TO_ARRAY32 definitions in ieee.h, for hdtoa&ldtoa
to use
- add EXT_IMPLICIT_NBIT definition, which indicates implicit
normalization bit
- add regression tests for libc: fpclassify and printf
- arith.h & gd_qnan.h definitions
- update ieee.h: hppa doesn't have quad-precision, hppa64 does
- add missing prototypes to gdtoaimp
- on 64-bit platforms make sure gdtoa doesn't use a long when it
really wants an int
- etc., what i may have forgotten...
- bump libm major, due to removed&changed symbols
- no libc bump, since this is riding on djm's libc major crank from
a day ago

discussed with / requested by / testing theo, sthen@, djm@, jsg@,
merdely@, jsing@, tedu@, brad@, jakemsr@, and others.
looks good to millert@
parts of the diff ok kettenis@

this commit does not include:
- man page changes


Revision tags: OPENBSD_4_4_BASE
# 1.53 30-Jul-2008 jmc

various markup/grammar fixes for previous, and a missing MLINK
for remquof.3;


# 1.52 29-Jul-2008 martynas

- add man pages for nan and remainder, from freebsd
- mlink drem, dremf, remainderf to remainder; nanf to nan
- describe that drem and dremf are obsolete aliases
- remove descriptions for remainder and remainderf from ieee
looked over by jmc@, but it's easier for him to work on when they
are in tree


# 1.51 29-Jul-2008 martynas

describe exp2, exp2f and mlink them


# 1.50 29-Jul-2008 martynas

remove finite from ieee.3, and unmlink from makefile


# 1.49 24-Jul-2008 martynas

- remove isinff, isnanf. this has been moved to libc
- remove never-enabled signbit. libc has is now
- add C99 implementations, from freebsd, for nan(), nanf() (needed
to write _digittoint for it), exp2(), exp2f(), remquo(), remquof(),
needed STRICT_ASSIGN macro for math_private.h
- bump major
man pages will follow
exp2{,f} has been requested by chl@
ok millert@


# 1.48 21-Jul-2008 martynas

NetBSD's C library supplies these functions -> OpenBSD's C library
supplies these functions. in comments


# 1.47 21-Jul-2008 martynas

rename lround.c lroundf.c llround.c llroundf.c to s_lround.c
s_lroundf.c s_llround.c s_llroundf.c, for naming consistency
looks fine to millert@


# 1.46 16-Jul-2008 martynas

install infnan.3 only for vax. pointed out by millert@
ok millert@


# 1.45 12-Jun-2008 jmc

Makefile: fix MLINKS
lgamma.3: fix STANDARDS and HISTORY


# 1.44 11-Jun-2008 martynas

- on non-ieee, rename gamma to tgamma, the 'true' gamma
- make gamma an alias of lgamma
- on ieee, add tgamma, based on gamma from non-ieee
- fixes for tgamma/lgamma/exp/log, esp. special cases (some from
freebsd); properly raise invalid fp operations on vax
- also some general cleanup, ansification, man page (which was ok
jmc@)
- bump minor
this makes some ports using tgamma possible; also consistifies
behavior across openbsd/ieee and openbsd/non-ieee, and other operating
systems
much thanks sthen@, johan@, steven@, Simon Kuhnle, Wiktor Izdebski
for testing
ok millert@


# 1.43 11-Jun-2008 martynas

drem{,f} are aliases for remainder{,f}, so:
- document and mlink drem{,f}
- drem->remainder on noieee, and make drem an alias
- finite returns integer, n_support.c
- general n_support.c ansification and cleanup
- drem is now an ALTENTRY for remainder, in n_support.S
help with man page from jmc@ and millert@
ok millert@


# 1.42 11-Jun-2008 martynas

add C99 round(), based on ieee_src, for noieee_src. tested on VAX
ok millert@


Revision tags: OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.41 25-Sep-2006 kettenis

Move llrint.c, llrintf.c, lrint.c and lrintf.c to s_llrint.c, s_llrintf.c,
s_lrint.c and s_lrintf.c, and add i387-specific assembler versions.

ok deraadt@, otto@


Revision tags: OPENBSD_4_0_BASE
# 1.40 12-Jul-2006 brad

add some more C99 functions: round(3) and roundf(3).

By Steven G. Kargl <kargl at troutmask dot apl dot washington.edu>
From FreeBSD


# 1.39 19-Mar-2006 kettenis

New amd64 exp(3).
tested by steven@, ok otto@


# 1.38 18-Mar-2006 brad

add some more C99 functions: trunc(3) and truncf(3).

From FreeBSD

ok deraadt@ millert@ otto@ jmc@


# 1.37 14-Mar-2006 otto

amd64 asm code is not correct for exp(+/-Inf), so until somebody
comes up with a correct asm version, use the C version of exp(3).
ok steven@ kettenis@


Revision tags: OPENBSD_3_9_BASE
# 1.36 24-Nov-2005 deraadt

use WANTLINT= (on all architectures)


# 1.35 17-Nov-2005 otto

Introduce a few c99 functions: {l,ll}{rint,round}{,f}. From NetBSD via
jason@. Man page fixes by jmc@, prodding by jsg@. ok mickey@


Revision tags: OPENBSD_3_6_BASE OPENBSD_3_7_BASE OPENBSD_3_8_BASE
# 1.34 06-Apr-2004 brad

remove optimization workaround for sparc64 now that we're using gcc3.

ok deraadt@


Revision tags: OPENBSD_3_5_BASE
# 1.33 28-Feb-2004 deraadt

reach into new amd64 directory


# 1.32 27-Feb-2004 deraadt

change amd64's MACHINE_ARCH from x86_64 to amd64. There are many many
reasons for this, quite a few of them technical, and not all of them
in response to Intel's broken ia32e crud. The gcc toolchain stays at
x86_64 for now.


# 1.31 08-Feb-2004 deraadt

add libm parts for amd64; much from netbsd, integration by mickey.
Instead of mixing the i387 & xmm register components, we decide to
explicitly seperate them. libm is already confusing enough as it is,
thank you very much


Revision tags: OPENBSD_3_3_BASE OPENBSD_3_4_BASE
# 1.30 27-Feb-2003 jason

ieee_test isn't real, rename it to logb.3 and make everything link to that instead.


# 1.29 03-Jan-2003 miod

Get the m88k libm to say no to drugs.


Revision tags: OPENBSD_3_2_BASE
# 1.28 22-May-2002 mickey

add reminder and roundings


# 1.27 22-May-2002 mickey

md sqrt() implementation


Revision tags: OPENBSD_3_1_BASE
# 1.26 30-Jan-2002 naddy

Add native implementations of copysign() and copysignf() on alpha.
From NetBSD; ok millert@


Revision tags: OPENBSD_3_0_BASE
# 1.25 28-Aug-2001 art

The sparc workaround is needed for sparc64 too.


# 1.24 26-Jun-2001 miod

Correctly handle mvme88k settings here.


Revision tags: OPENBSD_2_9_BASE
# 1.23 08-Nov-2000 deraadt

put infnan in there, even though it is depricated


Revision tags: OPENBSD_2_6_BASE OPENBSD_2_7_BASE OPENBSD_2_8_BASE
# 1.22 18-Jul-1999 deraadt

I think that libm_i387 has lived too long


# 1.21 01-Jul-1999 deraadt

provide MLINKS for "f" versions, and make sure they show up in whatis.db


# 1.20 28-Jun-1999 espie

Bye, bye work-around.


# 1.19 03-Jun-1999 deraadt

egcs generates broken code for -O2 on sparc


# 1.18 26-May-1999 espie

Work-around: a few files trigger Internal Compiler Errors if compiled with
-O2 on m68k.


Revision tags: OPENBSD_2_5_BASE
# 1.17 08-Mar-1999 millert

pull in bsd.own.mk for NOPROFILE and NOPIC


# 1.16 07-Mar-1999 deraadt

Never break the source tree builds if a _non-default compilation option_
has an issue. Fix it right, without breaking the source tree.


# 1.15 07-Mar-1999 deraadt

previous commit broke MLINKS install


# 1.14 04-Mar-1999 millert

move .include <bsd.lib.mk> up before NOPROFILE and NOPIC defines are used; evanc@concer.to


# 1.13 16-Nov-1998 deraadt

use _USE_WRITE


Revision tags: OPENBSD_2_3_BASE OPENBSD_2_4_BASE
# 1.12 02-Mar-1998 millert

protect internal "struct excpption" from conflicting one in gcc.


Revision tags: OPENBSD_2_2_BASE
# 1.11 01-Sep-1997 mickey

missing VAX manual for infnan(3), from 4.4 BSD


Revision tags: OPENBSD_2_1_BASE
# 1.10 25-Mar-1997 rahnds

Ok here is the mvme88k userland, minus a few important pieces.
as, ld change need to be merged. It is known that shared libraries and C++
do not work.
If anyone wants to step forward and take over the mvme88k port please do.
It was dumped on me when the original developer, Nivas, left his previous
job and started a new one.

I am trying to get the port in a shape that someone could take over.


# 1.9 14-Nov-1996 mickey

correct LINKS usage


# 1.8 27-Oct-1996 downsj

nopic


# 1.7 27-Oct-1996 deraadt

NOPROFILE; from Mathieu.Herrb@mipnet.fr


# 1.6 25-Oct-1996 downsj

We do i387 by default now.


Revision tags: OPENBSD_2_0_BASE
# 1.5 30-Sep-1996 maja

Add OpenBSD tag. -moj


# 1.4 30-Sep-1996 maja

Allow the Makefile to work on strange machines like VAX :-) -moj


# 1.3 25-Mar-1996 tholo

Somewhat better support for building lint library


# 1.2 14-Dec-1995 deraadt

from netbsd:
Changed w_gamma.c, w_gamma_r.c, w_gammaf.c, w_gammaf_r.c to call
__ieee754_lgamma_r or __ieee754_lgammaf_r.
Removed e_gamma.c, e_gamma_r.c, e_gammaf.c, e_gammaf_r.c, e_lgamma.c,
e_lgamma_f.c.


# 1.1 18-Oct-1995 deraadt

branches: 1.1.1;
Initial revision


# 1.119 18-Jul-2018 naddy

Remove the unused leftovers of the 4.4BSD libm, which was only used
on non-IEEE platforms. Since the VAX port was discontinued, all
our remaining architectures use IEEE floating point, as will any
future ones.
ok millert@ tb@


Revision tags: OPENBSD_6_3_BASE
# 1.118 10-Mar-2018 kettenis

Implement sicos(3), sincosf(3) and sincosl(3). These functions are common
extensions and modern compilers (such as clang) will use them to optimize
separate calculations of sine and cosine.

ok tom@, patrick@, deraadt@, jmc@


# 1.117 28-Feb-2018 kettenis

Remove CFLAGS+=-mfloat-abi=softfp that I accidentally committed.


# 1.116 28-Feb-2018 kettenis

Change floating-point mode/environment control functions to operate on
both the hardfloat (FPU registers) and softfloat (software) state. This
makes these functions work correctly when mixing hardfloat and softfloat
code. Disable trapping for softfloat since most (if not all) ARMv7 and
ARMv8 hardware that is on the market doesn't support trapping of
floating-point exceptions.

ok patrick@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.115 11-Jan-2017 patrick

Add support for AArch64. Based on FreeBSD's msun header, modified
to look and feel like our code.


# 1.114 12-Sep-2016 guenther

Reduce libm's exports and make internal calls go direct.
All dependencies on libc are now via reserved/standardized names.

ok kettenis@ millert@ deraadt@


# 1.113 01-Sep-2016 tedu

remove references to sparc


Revision tags: OPENBSD_6_0_BASE
# 1.112 11-May-2016 deraadt

remove hppa64 port, which we never got going beyond broken single users.
hppa reverse-stack gives us a valuable test case, but most developers don't
have a 2nd one to proceed further with this.
ok kettenis


# 1.111 30-Mar-2016 jmc

for some time now mandoc has not required MLINKS to function
correctly - logically complete that now by removing MLINKS from base;

authors need only to ensure there is an entry in NAME for any function/
util being added. MLINKS will still work, and remain for perl to ease
upgrades;

ok nicm (curses) bcook (ssl)
ok schwarze, who provided a lot of feedback and assistance
ok tb natano jung


# 1.110 10-Mar-2016 jmc

no need for SUBDIR now that vax is gone; ok deraadt


# 1.109 09-Mar-2016 deraadt

We are done providing support for the vax.
lots of agreement.


Revision tags: OPENBSD_5_9_BASE
# 1.108 18-Sep-2015 miod

Move s_signgam.c to PURE_SRCS, so that it also gets built on vax.


Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
# 1.107 12-Sep-2014 kettenis

Provide a sparc64 version of sqrtl(3) that simply calls _Qp_sqrt.
The generic sqrtl(3) is not nearly accurate enough for quad-precision
floating point.


Revision tags: OPENBSD_5_6_BASE
# 1.106 18-Mar-2014 miod

Retire hp300, mvme68k and mvme88k ports. These ports have no users, keeping
this hardware alive is becoming increasingly difficult, and I should heed the
message sent by the three disks which have died on me over the last few days.

Noone sane will mourn these ports anyway. So long, and thanks for the fish.


Revision tags: OPENBSD_5_5_BASE
# 1.105 07-Aug-2013 espie

simple inaccurate implementation of lrint* functions on vax, just so
we have them.
Compiles on vax. okay martynas@


Revision tags: OPENBSD_5_4_BASE
# 1.104 15-Jul-2013 espie

use some generic code on vax, to do round/roundf/scalbln...
suggested by martynas@

okay miod@

(just rearranges the !vax makefile, no compile change there)


# 1.103 03-Jul-2013 espie

reorganize NOIEEE_SRCS so that files not compiled on vax because
of assembly version are obvious.
Move cproj/cprojf to the PURE club, as the asm support code provides
copysignf

okay martynas@


# 1.102 03-Jul-2013 espie

with DBL vs LDBL fixed, tedu some source in noieee which is actually the
same as code in generic src.
introduce PURE_SRCS for completely MI math code.
okau martynas@


Revision tags: OPENBSD_5_3_BASE
# 1.101 15-Sep-2012 miod

m88k does not have the m68k long double type actually (long double == double
on this platform), so don't pretend it does, and don't build long double libm
routines.


# 1.100 04-Sep-2012 okan

remove lint leftovers; ok guenther@


# 1.99 02-Aug-2012 okan

remove leftover NOLINT, WANTLINT, LINTFLAGS, LOBJ vars and lint targets.

ok guenther@


Revision tags: OPENBSD_5_1_BASE OPENBSD_5_2_BASE
# 1.98 22-Sep-2011 schwarze

install infnan(3/VAX) into man3/vax/ on all archs;
clean make build tested on i386;
ok deraadt@, no objections from martynas@


# 1.97 19-Aug-2011 kettenis

Bring libc and libm in line with the compiler now that we no longer have a
128-bit long double. Diff committed on behalf of martynas@


Revision tags: OPENBSD_5_0_BASE
# 1.96 24-Jul-2011 martynas

Document fma, fmaf, fmal, nexttoward, nexttowardf, nexttowardl.


# 1.95 20-Jul-2011 martynas

Document complex math library.


# 1.94 11-Jul-2011 martynas

Remove the GCC2 optimizer workaround for sparc. After switching
to GCC4 it doesn't generate broken code anymore.
From Brad. Tested and verified by myself.


# 1.93 09-Jul-2011 martynas

- Fix the cabs, and cabsf prototypes in the manual pages; it's
been C99 complex (not struct complex) for couple of years.
- Remove BUGS section; cabs is finally prototyped in complex.h.
- Also document cabsl.


# 1.92 09-Jul-2011 martynas

Don't reimplement the same thing twice. OK matthew@.


# 1.91 08-Jul-2011 martynas

Move fabs(3) manual page from libm to libc, for consistency. The
modf(3), frexp(3), ldexp(3), fpclassify(3) pages are in libc, too.


# 1.90 08-Jul-2011 martynas

Remove the stupid commented out fabs(3), frexp(3), and modf(3)
entries and unused implementations. It is clear that this situation
won't change.


# 1.89 08-Jul-2011 martynas

Revert (leaving the complex math part alone). Some stuff is depending
on this historical behavior; so we're stuck in this stupid situation.
No cookie for me.


# 1.88 08-Jul-2011 martynas

Finalize work on complex math routines, now that we have the
extended-precision support. Mostly from Cephes.


# 1.87 08-Jul-2011 martynas

Move fabs(3), frexp(3), and modf(3) to libm--nothing has been using
them in libc for a very long time. OK guenther@.


# 1.86 07-Jul-2011 martynas

Remove math(3). OK theo.


# 1.85 07-Jul-2011 martynas

Document extended-precision routines.


# 1.84 06-Jul-2011 martynas

Don't pull bsd.own.mk for NOPROFILE & NOPIC -- the libm_i387 thing
is gone since 1999.


# 1.83 06-Jul-2011 martynas

Finalize work on the math library. It's time to do this monster
commit, and deal with problems (if any) in tree.

Note that this adds the following functions. Ports with hacks might
need adjustments.

nexttoward(3), fma(3), nexttowardf(3), fmaf(3), acoshl(3), asinhl(3),
atanhl(3), coshl(3), sinhl(3), tanhl(3), expl(3), expm1l(3), logl(3),
log10l(3), log1pl(3), log2l(3), modfl(3), cbrtl(3), hypotl(3),
powl(3), erfl(3), erfcl(3), lgammal(3), tgammal(3), ceill(3),
floorl(3), lrintl(3), llrintl(3), roundl(3), lroundl(3), llroundl(3),
truncl(3), fmodl(3), remainderl(3), remquol(3), nextafterl(3),
nexttowardl(3), fmal(3).

With this commit, our library implements all functionality required
by C99. Documentation bits will follow.


# 1.82 28-May-2011 martynas

Adapt m68k MD functions to extended-precision.
Go for it miod@.


# 1.81 28-May-2011 martynas

Adapt m68k MD functions to single-precision.
Looked over by miod@.


# 1.80 25-May-2011 martynas

Document nearbyint, nearbyintf, nearbyintl.


# 1.79 25-May-2011 martynas

Document C99 floating-point environment.


# 1.78 28-Apr-2011 todd

fix build ok martynas@


# 1.77 28-Apr-2011 martynas

- enable fenv
- add nearbyint, nearbyintf and nearbyintl implemented using fenv


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
# 1.76 19-Jul-2010 millert

Add barebones manual pages for cimag(3), conj(3) and cproj(3)
OK kettenis@ jmc@


Revision tags: OPENBSD_4_7_BASE
# 1.75 03-Feb-2010 miod

Use MACHINE_CPU instead of MACHINE_ARCH to pick the correct machine dependent
files or directories when applicable.
The inspiration and name of MACHINE_CPU come from NetBSD, although the way to
provide it to Makefiles is completely different.
ok kettenis@


# 1.74 06-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok pirofti@


# 1.73 05-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok otto@


# 1.72 26-Oct-2009 kettenis

Add man pages for the fdim/fmin/fmax family of functions and make sure fdiml
is defined on all architectures.

ok jmc@ (man pages) and martynas@


# 1.71 24-Oct-2009 jmc

document log2() and log2f(); from thomas pfaff
ok otto millert martynas


# 1.70 29-Jul-2009 martynas

ieee, and ieeef aren't real, and the amount of functions it documents
is getting ridiculous. split them into groups of copysign, ilogb,
nextafter, scalbn. discussed long ago with millert@


# 1.69 28-Jul-2009 martynas

document scalbln, scalblnf, scalblnl


# 1.68 25-Jul-2009 martynas

int is big enough to fully represent exponents of all supported fp
formats. which even for 80-bit & 128-bit long doubles is only 15
bits. therefore, scalbln, scalblnf, scalblnl are essentially the
same as scalbn, scalbnf, scalbnl with bounds checking so that
LONG_MIN..INT_MIN, and INT_MAX..LONG_MAX ranges properly raise
exceptions & yield correct values. looks good to millert@


# 1.67 15-Jul-2009 martynas

round, roundf, trunc, truncf for hppa; ok kettenis@


Revision tags: OPENBSD_4_6_BASE
# 1.66 19-Apr-2009 martynas

make ldexpf behavior consistent with the double and extended-precision
versions; spotted by kettenis@
while here also remove unused ldexp; it lives in libc
ok kettenis@, "looks good" millert@


# 1.65 10-Apr-2009 martynas

lrint, llrint, lrintf, llrintf for amd64. ok kettenis@, oga@


# 1.64 05-Apr-2009 martynas

implement and use sqrt, sqrtf & fabsf in hardware; since it's
faster that way. tested by myself. discussed w/ & ok miod@, millert@


# 1.63 28-Mar-2009 martynas

add C99-conformant nan, nanf, nanl for vax. always return zero,
since its fp does not have distinguished values for qnans. tested
by naddy@; fixes libnova. ok theo


Revision tags: OPENBSD_4_5_BASE
# 1.62 12-Dec-2008 martynas

space


# 1.61 12-Dec-2008 martynas

document and mlink long double functions. ok jmc@


# 1.60 09-Dec-2008 martynas

pass CPPFLAGS+= -D__STDC__ for vax, to get the right definitions
from asm.h. discussed w/ millert@


# 1.59 09-Dec-2008 martynas

- 80-bit and quad precision trigonometric and other most
important functions: acosl, asinl, atanl, atan2l, cosl,
sinl, tanl, exp2l, frexpl, ilogbl, ldexpl, logbl, scalbnl,
fabsl, hypotl, powl, sqrtl, rintl, copysignl, nanl, fdiml,
fmaxl, fminl. mostly taken from freebsd, needed alot of
changes to adapt. note, these are all c versions; and are
quite slow when architectures have, e.g. sqrt. assembly
versions will be added afterwards
- make them .weak/__weak_alias to the double precision
versions on other archs
- no need to have two finites. finite() and finitef() are
non-standard 3BSD obsolete versions of isfinite. remove
from libm. make them weak_alias in libc to __isfinite and
__isfinitef instead. similarly make 3BSD obsolete versions
of isinf, isinff, isnan, isnanf weak_aliases to C99's
__isinf, __isinff, __isnan, __isnanf
- remove unused infinity.c. the c library has infinities
for each supported platform
- use STRICT_ASSIGN cast hack for _kernel_rem_pio2, so that
the double version has a chance of working on i386 with
extra precision
- avoid storing multiple copies of the pi/2 array, since
it won't vary
- bump major due to removed finite/finitef. although they
will be in libc, which anything is linked to, minor bump
might be enough
ok millert@. tested by sthen@, jsg@, ajacoutot@, kili@, naddy@


# 1.58 07-Oct-2008 martynas

- noieee_src: adapt complex versions of the functions it already
supports (which is all, except the float ones)
ok millert@


# 1.57 16-Sep-2008 martynas

gc unused files, the functions are in libc. ok millert@


# 1.56 11-Sep-2008 martynas

since these got no ieee-specific code anymore, add fmin, fmax, fdim,
fminf, fmaxf, fdimf, fdiml for VAX. looks good to millert@


# 1.55 09-Sep-2008 martynas

sigh, gamma got lost


# 1.54 07-Sep-2008 martynas

- replace dtoa w/ David's gdtoa, version 2008-03-15
- provide proper dtoa locks
- use the real strtof implementation
- add strtold, __hdtoa, __hldtoa
- add %a/%A support
- don't lose precision in printf, don't round to double anymore
- implement extended-precision versions of libc functions: fpclassify,
isnan, isinf, signbit, isnormal, isfinite, now that the ieee.h is
fixed
- separate vax versions of strtof, and __hdtoa
- add complex math support. added functions: cacos, casin, catan,
ccos, csin, ctan, cacosh, casinh, catanh, ccosh, csinh, ctanh, cexp,
clog, cabs, cpow, csqrt, carg, cimag, conj, cproj, creal, cacosf,
casinf, catanf, ccosf, csinf, ctanf, cacoshf, casinhf, catanhf,
ccoshf, csinhf, ctanhf, cexpf, clogf, cabsf, cpowf, csqrtf, cargf,
cimagf, conjf, cprojf, crealf
- add fdim, fmax, fmin
- add log2. (adapted implementation e_log.c. could be more acruate
& faster, but it's good enough for now)
- remove wrappers & cruft in libm, supposed to work-around mistakes
in SVID, etc.; use ieee versions. fixes issues in python 2.6 for
djm@
- make _digittoint static
- proper definitions for i386, and amd64 in ieee.h
- sh, powerpc don't really have extended-precision
- add missing definitions for mips64 (quad), m{6,8}k (96-bit) float.h
for LDBL_*
- merge lead to frac for m{6,8}k, for gdtoa to work properly
- add FRAC*BITS & EXT_TO_ARRAY32 definitions in ieee.h, for hdtoa&ldtoa
to use
- add EXT_IMPLICIT_NBIT definition, which indicates implicit
normalization bit
- add regression tests for libc: fpclassify and printf
- arith.h & gd_qnan.h definitions
- update ieee.h: hppa doesn't have quad-precision, hppa64 does
- add missing prototypes to gdtoaimp
- on 64-bit platforms make sure gdtoa doesn't use a long when it
really wants an int
- etc., what i may have forgotten...
- bump libm major, due to removed&changed symbols
- no libc bump, since this is riding on djm's libc major crank from
a day ago

discussed with / requested by / testing theo, sthen@, djm@, jsg@,
merdely@, jsing@, tedu@, brad@, jakemsr@, and others.
looks good to millert@
parts of the diff ok kettenis@

this commit does not include:
- man page changes


Revision tags: OPENBSD_4_4_BASE
# 1.53 30-Jul-2008 jmc

various markup/grammar fixes for previous, and a missing MLINK
for remquof.3;


# 1.52 29-Jul-2008 martynas

- add man pages for nan and remainder, from freebsd
- mlink drem, dremf, remainderf to remainder; nanf to nan
- describe that drem and dremf are obsolete aliases
- remove descriptions for remainder and remainderf from ieee
looked over by jmc@, but it's easier for him to work on when they
are in tree


# 1.51 29-Jul-2008 martynas

describe exp2, exp2f and mlink them


# 1.50 29-Jul-2008 martynas

remove finite from ieee.3, and unmlink from makefile


# 1.49 24-Jul-2008 martynas

- remove isinff, isnanf. this has been moved to libc
- remove never-enabled signbit. libc has is now
- add C99 implementations, from freebsd, for nan(), nanf() (needed
to write _digittoint for it), exp2(), exp2f(), remquo(), remquof(),
needed STRICT_ASSIGN macro for math_private.h
- bump major
man pages will follow
exp2{,f} has been requested by chl@
ok millert@


# 1.48 21-Jul-2008 martynas

NetBSD's C library supplies these functions -> OpenBSD's C library
supplies these functions. in comments


# 1.47 21-Jul-2008 martynas

rename lround.c lroundf.c llround.c llroundf.c to s_lround.c
s_lroundf.c s_llround.c s_llroundf.c, for naming consistency
looks fine to millert@


# 1.46 16-Jul-2008 martynas

install infnan.3 only for vax. pointed out by millert@
ok millert@


# 1.45 12-Jun-2008 jmc

Makefile: fix MLINKS
lgamma.3: fix STANDARDS and HISTORY


# 1.44 11-Jun-2008 martynas

- on non-ieee, rename gamma to tgamma, the 'true' gamma
- make gamma an alias of lgamma
- on ieee, add tgamma, based on gamma from non-ieee
- fixes for tgamma/lgamma/exp/log, esp. special cases (some from
freebsd); properly raise invalid fp operations on vax
- also some general cleanup, ansification, man page (which was ok
jmc@)
- bump minor
this makes some ports using tgamma possible; also consistifies
behavior across openbsd/ieee and openbsd/non-ieee, and other operating
systems
much thanks sthen@, johan@, steven@, Simon Kuhnle, Wiktor Izdebski
for testing
ok millert@


# 1.43 11-Jun-2008 martynas

drem{,f} are aliases for remainder{,f}, so:
- document and mlink drem{,f}
- drem->remainder on noieee, and make drem an alias
- finite returns integer, n_support.c
- general n_support.c ansification and cleanup
- drem is now an ALTENTRY for remainder, in n_support.S
help with man page from jmc@ and millert@
ok millert@


# 1.42 11-Jun-2008 martynas

add C99 round(), based on ieee_src, for noieee_src. tested on VAX
ok millert@


Revision tags: OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.41 25-Sep-2006 kettenis

Move llrint.c, llrintf.c, lrint.c and lrintf.c to s_llrint.c, s_llrintf.c,
s_lrint.c and s_lrintf.c, and add i387-specific assembler versions.

ok deraadt@, otto@


Revision tags: OPENBSD_4_0_BASE
# 1.40 12-Jul-2006 brad

add some more C99 functions: round(3) and roundf(3).

By Steven G. Kargl <kargl at troutmask dot apl dot washington.edu>
From FreeBSD


# 1.39 19-Mar-2006 kettenis

New amd64 exp(3).
tested by steven@, ok otto@


# 1.38 18-Mar-2006 brad

add some more C99 functions: trunc(3) and truncf(3).

From FreeBSD

ok deraadt@ millert@ otto@ jmc@


# 1.37 14-Mar-2006 otto

amd64 asm code is not correct for exp(+/-Inf), so until somebody
comes up with a correct asm version, use the C version of exp(3).
ok steven@ kettenis@


Revision tags: OPENBSD_3_9_BASE
# 1.36 24-Nov-2005 deraadt

use WANTLINT= (on all architectures)


# 1.35 17-Nov-2005 otto

Introduce a few c99 functions: {l,ll}{rint,round}{,f}. From NetBSD via
jason@. Man page fixes by jmc@, prodding by jsg@. ok mickey@


Revision tags: OPENBSD_3_6_BASE OPENBSD_3_7_BASE OPENBSD_3_8_BASE
# 1.34 06-Apr-2004 brad

remove optimization workaround for sparc64 now that we're using gcc3.

ok deraadt@


Revision tags: OPENBSD_3_5_BASE
# 1.33 28-Feb-2004 deraadt

reach into new amd64 directory


# 1.32 27-Feb-2004 deraadt

change amd64's MACHINE_ARCH from x86_64 to amd64. There are many many
reasons for this, quite a few of them technical, and not all of them
in response to Intel's broken ia32e crud. The gcc toolchain stays at
x86_64 for now.


# 1.31 08-Feb-2004 deraadt

add libm parts for amd64; much from netbsd, integration by mickey.
Instead of mixing the i387 & xmm register components, we decide to
explicitly seperate them. libm is already confusing enough as it is,
thank you very much


Revision tags: OPENBSD_3_3_BASE OPENBSD_3_4_BASE
# 1.30 27-Feb-2003 jason

ieee_test isn't real, rename it to logb.3 and make everything link to that instead.


# 1.29 03-Jan-2003 miod

Get the m88k libm to say no to drugs.


Revision tags: OPENBSD_3_2_BASE
# 1.28 22-May-2002 mickey

add reminder and roundings


# 1.27 22-May-2002 mickey

md sqrt() implementation


Revision tags: OPENBSD_3_1_BASE
# 1.26 30-Jan-2002 naddy

Add native implementations of copysign() and copysignf() on alpha.
From NetBSD; ok millert@


Revision tags: OPENBSD_3_0_BASE
# 1.25 28-Aug-2001 art

The sparc workaround is needed for sparc64 too.


# 1.24 26-Jun-2001 miod

Correctly handle mvme88k settings here.


Revision tags: OPENBSD_2_9_BASE
# 1.23 08-Nov-2000 deraadt

put infnan in there, even though it is depricated


Revision tags: OPENBSD_2_6_BASE OPENBSD_2_7_BASE OPENBSD_2_8_BASE
# 1.22 18-Jul-1999 deraadt

I think that libm_i387 has lived too long


# 1.21 01-Jul-1999 deraadt

provide MLINKS for "f" versions, and make sure they show up in whatis.db


# 1.20 28-Jun-1999 espie

Bye, bye work-around.


# 1.19 03-Jun-1999 deraadt

egcs generates broken code for -O2 on sparc


# 1.18 26-May-1999 espie

Work-around: a few files trigger Internal Compiler Errors if compiled with
-O2 on m68k.


Revision tags: OPENBSD_2_5_BASE
# 1.17 08-Mar-1999 millert

pull in bsd.own.mk for NOPROFILE and NOPIC


# 1.16 07-Mar-1999 deraadt

Never break the source tree builds if a _non-default compilation option_
has an issue. Fix it right, without breaking the source tree.


# 1.15 07-Mar-1999 deraadt

previous commit broke MLINKS install


# 1.14 04-Mar-1999 millert

move .include <bsd.lib.mk> up before NOPROFILE and NOPIC defines are used; evanc@concer.to


# 1.13 16-Nov-1998 deraadt

use _USE_WRITE


Revision tags: OPENBSD_2_3_BASE OPENBSD_2_4_BASE
# 1.12 02-Mar-1998 millert

protect internal "struct excpption" from conflicting one in gcc.


Revision tags: OPENBSD_2_2_BASE
# 1.11 01-Sep-1997 mickey

missing VAX manual for infnan(3), from 4.4 BSD


Revision tags: OPENBSD_2_1_BASE
# 1.10 25-Mar-1997 rahnds

Ok here is the mvme88k userland, minus a few important pieces.
as, ld change need to be merged. It is known that shared libraries and C++
do not work.
If anyone wants to step forward and take over the mvme88k port please do.
It was dumped on me when the original developer, Nivas, left his previous
job and started a new one.

I am trying to get the port in a shape that someone could take over.


# 1.9 14-Nov-1996 mickey

correct LINKS usage


# 1.8 27-Oct-1996 downsj

nopic


# 1.7 27-Oct-1996 deraadt

NOPROFILE; from Mathieu.Herrb@mipnet.fr


# 1.6 25-Oct-1996 downsj

We do i387 by default now.


Revision tags: OPENBSD_2_0_BASE
# 1.5 30-Sep-1996 maja

Add OpenBSD tag. -moj


# 1.4 30-Sep-1996 maja

Allow the Makefile to work on strange machines like VAX :-) -moj


# 1.3 25-Mar-1996 tholo

Somewhat better support for building lint library


# 1.2 14-Dec-1995 deraadt

from netbsd:
Changed w_gamma.c, w_gamma_r.c, w_gammaf.c, w_gammaf_r.c to call
__ieee754_lgamma_r or __ieee754_lgammaf_r.
Removed e_gamma.c, e_gamma_r.c, e_gammaf.c, e_gammaf_r.c, e_lgamma.c,
e_lgamma_f.c.


# 1.1 18-Oct-1995 deraadt

branches: 1.1.1;
Initial revision


Revision tags: OPENBSD_6_3_BASE
# 1.118 10-Mar-2018 kettenis

Implement sicos(3), sincosf(3) and sincosl(3). These functions are common
extensions and modern compilers (such as clang) will use them to optimize
separate calculations of sine and cosine.

ok tom@, patrick@, deraadt@, jmc@


# 1.117 28-Feb-2018 kettenis

Remove CFLAGS+=-mfloat-abi=softfp that I accidentally committed.


# 1.116 28-Feb-2018 kettenis

Change floating-point mode/environment control functions to operate on
both the hardfloat (FPU registers) and softfloat (software) state. This
makes these functions work correctly when mixing hardfloat and softfloat
code. Disable trapping for softfloat since most (if not all) ARMv7 and
ARMv8 hardware that is on the market doesn't support trapping of
floating-point exceptions.

ok patrick@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.115 11-Jan-2017 patrick

Add support for AArch64. Based on FreeBSD's msun header, modified
to look and feel like our code.


# 1.114 12-Sep-2016 guenther

Reduce libm's exports and make internal calls go direct.
All dependencies on libc are now via reserved/standardized names.

ok kettenis@ millert@ deraadt@


# 1.113 01-Sep-2016 tedu

remove references to sparc


Revision tags: OPENBSD_6_0_BASE
# 1.112 11-May-2016 deraadt

remove hppa64 port, which we never got going beyond broken single users.
hppa reverse-stack gives us a valuable test case, but most developers don't
have a 2nd one to proceed further with this.
ok kettenis


# 1.111 30-Mar-2016 jmc

for some time now mandoc has not required MLINKS to function
correctly - logically complete that now by removing MLINKS from base;

authors need only to ensure there is an entry in NAME for any function/
util being added. MLINKS will still work, and remain for perl to ease
upgrades;

ok nicm (curses) bcook (ssl)
ok schwarze, who provided a lot of feedback and assistance
ok tb natano jung


# 1.110 10-Mar-2016 jmc

no need for SUBDIR now that vax is gone; ok deraadt


# 1.109 09-Mar-2016 deraadt

We are done providing support for the vax.
lots of agreement.


Revision tags: OPENBSD_5_9_BASE
# 1.108 18-Sep-2015 miod

Move s_signgam.c to PURE_SRCS, so that it also gets built on vax.


Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
# 1.107 12-Sep-2014 kettenis

Provide a sparc64 version of sqrtl(3) that simply calls _Qp_sqrt.
The generic sqrtl(3) is not nearly accurate enough for quad-precision
floating point.


Revision tags: OPENBSD_5_6_BASE
# 1.106 18-Mar-2014 miod

Retire hp300, mvme68k and mvme88k ports. These ports have no users, keeping
this hardware alive is becoming increasingly difficult, and I should heed the
message sent by the three disks which have died on me over the last few days.

Noone sane will mourn these ports anyway. So long, and thanks for the fish.


Revision tags: OPENBSD_5_5_BASE
# 1.105 07-Aug-2013 espie

simple inaccurate implementation of lrint* functions on vax, just so
we have them.
Compiles on vax. okay martynas@


Revision tags: OPENBSD_5_4_BASE
# 1.104 15-Jul-2013 espie

use some generic code on vax, to do round/roundf/scalbln...
suggested by martynas@

okay miod@

(just rearranges the !vax makefile, no compile change there)


# 1.103 03-Jul-2013 espie

reorganize NOIEEE_SRCS so that files not compiled on vax because
of assembly version are obvious.
Move cproj/cprojf to the PURE club, as the asm support code provides
copysignf

okay martynas@


# 1.102 03-Jul-2013 espie

with DBL vs LDBL fixed, tedu some source in noieee which is actually the
same as code in generic src.
introduce PURE_SRCS for completely MI math code.
okau martynas@


Revision tags: OPENBSD_5_3_BASE
# 1.101 15-Sep-2012 miod

m88k does not have the m68k long double type actually (long double == double
on this platform), so don't pretend it does, and don't build long double libm
routines.


# 1.100 04-Sep-2012 okan

remove lint leftovers; ok guenther@


# 1.99 02-Aug-2012 okan

remove leftover NOLINT, WANTLINT, LINTFLAGS, LOBJ vars and lint targets.

ok guenther@


Revision tags: OPENBSD_5_1_BASE OPENBSD_5_2_BASE
# 1.98 22-Sep-2011 schwarze

install infnan(3/VAX) into man3/vax/ on all archs;
clean make build tested on i386;
ok deraadt@, no objections from martynas@


# 1.97 19-Aug-2011 kettenis

Bring libc and libm in line with the compiler now that we no longer have a
128-bit long double. Diff committed on behalf of martynas@


Revision tags: OPENBSD_5_0_BASE
# 1.96 24-Jul-2011 martynas

Document fma, fmaf, fmal, nexttoward, nexttowardf, nexttowardl.


# 1.95 20-Jul-2011 martynas

Document complex math library.


# 1.94 11-Jul-2011 martynas

Remove the GCC2 optimizer workaround for sparc. After switching
to GCC4 it doesn't generate broken code anymore.
From Brad. Tested and verified by myself.


# 1.93 09-Jul-2011 martynas

- Fix the cabs, and cabsf prototypes in the manual pages; it's
been C99 complex (not struct complex) for couple of years.
- Remove BUGS section; cabs is finally prototyped in complex.h.
- Also document cabsl.


# 1.92 09-Jul-2011 martynas

Don't reimplement the same thing twice. OK matthew@.


# 1.91 08-Jul-2011 martynas

Move fabs(3) manual page from libm to libc, for consistency. The
modf(3), frexp(3), ldexp(3), fpclassify(3) pages are in libc, too.


# 1.90 08-Jul-2011 martynas

Remove the stupid commented out fabs(3), frexp(3), and modf(3)
entries and unused implementations. It is clear that this situation
won't change.


# 1.89 08-Jul-2011 martynas

Revert (leaving the complex math part alone). Some stuff is depending
on this historical behavior; so we're stuck in this stupid situation.
No cookie for me.


# 1.88 08-Jul-2011 martynas

Finalize work on complex math routines, now that we have the
extended-precision support. Mostly from Cephes.


# 1.87 08-Jul-2011 martynas

Move fabs(3), frexp(3), and modf(3) to libm--nothing has been using
them in libc for a very long time. OK guenther@.


# 1.86 07-Jul-2011 martynas

Remove math(3). OK theo.


# 1.85 07-Jul-2011 martynas

Document extended-precision routines.


# 1.84 06-Jul-2011 martynas

Don't pull bsd.own.mk for NOPROFILE & NOPIC -- the libm_i387 thing
is gone since 1999.


# 1.83 06-Jul-2011 martynas

Finalize work on the math library. It's time to do this monster
commit, and deal with problems (if any) in tree.

Note that this adds the following functions. Ports with hacks might
need adjustments.

nexttoward(3), fma(3), nexttowardf(3), fmaf(3), acoshl(3), asinhl(3),
atanhl(3), coshl(3), sinhl(3), tanhl(3), expl(3), expm1l(3), logl(3),
log10l(3), log1pl(3), log2l(3), modfl(3), cbrtl(3), hypotl(3),
powl(3), erfl(3), erfcl(3), lgammal(3), tgammal(3), ceill(3),
floorl(3), lrintl(3), llrintl(3), roundl(3), lroundl(3), llroundl(3),
truncl(3), fmodl(3), remainderl(3), remquol(3), nextafterl(3),
nexttowardl(3), fmal(3).

With this commit, our library implements all functionality required
by C99. Documentation bits will follow.


# 1.82 28-May-2011 martynas

Adapt m68k MD functions to extended-precision.
Go for it miod@.


# 1.81 28-May-2011 martynas

Adapt m68k MD functions to single-precision.
Looked over by miod@.


# 1.80 25-May-2011 martynas

Document nearbyint, nearbyintf, nearbyintl.


# 1.79 25-May-2011 martynas

Document C99 floating-point environment.


# 1.78 28-Apr-2011 todd

fix build ok martynas@


# 1.77 28-Apr-2011 martynas

- enable fenv
- add nearbyint, nearbyintf and nearbyintl implemented using fenv


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
# 1.76 19-Jul-2010 millert

Add barebones manual pages for cimag(3), conj(3) and cproj(3)
OK kettenis@ jmc@


Revision tags: OPENBSD_4_7_BASE
# 1.75 03-Feb-2010 miod

Use MACHINE_CPU instead of MACHINE_ARCH to pick the correct machine dependent
files or directories when applicable.
The inspiration and name of MACHINE_CPU come from NetBSD, although the way to
provide it to Makefiles is completely different.
ok kettenis@


# 1.74 06-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok pirofti@


# 1.73 05-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok otto@


# 1.72 26-Oct-2009 kettenis

Add man pages for the fdim/fmin/fmax family of functions and make sure fdiml
is defined on all architectures.

ok jmc@ (man pages) and martynas@


# 1.71 24-Oct-2009 jmc

document log2() and log2f(); from thomas pfaff
ok otto millert martynas


# 1.70 29-Jul-2009 martynas

ieee, and ieeef aren't real, and the amount of functions it documents
is getting ridiculous. split them into groups of copysign, ilogb,
nextafter, scalbn. discussed long ago with millert@


# 1.69 28-Jul-2009 martynas

document scalbln, scalblnf, scalblnl


# 1.68 25-Jul-2009 martynas

int is big enough to fully represent exponents of all supported fp
formats. which even for 80-bit & 128-bit long doubles is only 15
bits. therefore, scalbln, scalblnf, scalblnl are essentially the
same as scalbn, scalbnf, scalbnl with bounds checking so that
LONG_MIN..INT_MIN, and INT_MAX..LONG_MAX ranges properly raise
exceptions & yield correct values. looks good to millert@


# 1.67 15-Jul-2009 martynas

round, roundf, trunc, truncf for hppa; ok kettenis@


Revision tags: OPENBSD_4_6_BASE
# 1.66 19-Apr-2009 martynas

make ldexpf behavior consistent with the double and extended-precision
versions; spotted by kettenis@
while here also remove unused ldexp; it lives in libc
ok kettenis@, "looks good" millert@


# 1.65 10-Apr-2009 martynas

lrint, llrint, lrintf, llrintf for amd64. ok kettenis@, oga@


# 1.64 05-Apr-2009 martynas

implement and use sqrt, sqrtf & fabsf in hardware; since it's
faster that way. tested by myself. discussed w/ & ok miod@, millert@


# 1.63 28-Mar-2009 martynas

add C99-conformant nan, nanf, nanl for vax. always return zero,
since its fp does not have distinguished values for qnans. tested
by naddy@; fixes libnova. ok theo


Revision tags: OPENBSD_4_5_BASE
# 1.62 12-Dec-2008 martynas

space


# 1.61 12-Dec-2008 martynas

document and mlink long double functions. ok jmc@


# 1.60 09-Dec-2008 martynas

pass CPPFLAGS+= -D__STDC__ for vax, to get the right definitions
from asm.h. discussed w/ millert@


# 1.59 09-Dec-2008 martynas

- 80-bit and quad precision trigonometric and other most
important functions: acosl, asinl, atanl, atan2l, cosl,
sinl, tanl, exp2l, frexpl, ilogbl, ldexpl, logbl, scalbnl,
fabsl, hypotl, powl, sqrtl, rintl, copysignl, nanl, fdiml,
fmaxl, fminl. mostly taken from freebsd, needed alot of
changes to adapt. note, these are all c versions; and are
quite slow when architectures have, e.g. sqrt. assembly
versions will be added afterwards
- make them .weak/__weak_alias to the double precision
versions on other archs
- no need to have two finites. finite() and finitef() are
non-standard 3BSD obsolete versions of isfinite. remove
from libm. make them weak_alias in libc to __isfinite and
__isfinitef instead. similarly make 3BSD obsolete versions
of isinf, isinff, isnan, isnanf weak_aliases to C99's
__isinf, __isinff, __isnan, __isnanf
- remove unused infinity.c. the c library has infinities
for each supported platform
- use STRICT_ASSIGN cast hack for _kernel_rem_pio2, so that
the double version has a chance of working on i386 with
extra precision
- avoid storing multiple copies of the pi/2 array, since
it won't vary
- bump major due to removed finite/finitef. although they
will be in libc, which anything is linked to, minor bump
might be enough
ok millert@. tested by sthen@, jsg@, ajacoutot@, kili@, naddy@


# 1.58 07-Oct-2008 martynas

- noieee_src: adapt complex versions of the functions it already
supports (which is all, except the float ones)
ok millert@


# 1.57 16-Sep-2008 martynas

gc unused files, the functions are in libc. ok millert@


# 1.56 11-Sep-2008 martynas

since these got no ieee-specific code anymore, add fmin, fmax, fdim,
fminf, fmaxf, fdimf, fdiml for VAX. looks good to millert@


# 1.55 09-Sep-2008 martynas

sigh, gamma got lost


# 1.54 07-Sep-2008 martynas

- replace dtoa w/ David's gdtoa, version 2008-03-15
- provide proper dtoa locks
- use the real strtof implementation
- add strtold, __hdtoa, __hldtoa
- add %a/%A support
- don't lose precision in printf, don't round to double anymore
- implement extended-precision versions of libc functions: fpclassify,
isnan, isinf, signbit, isnormal, isfinite, now that the ieee.h is
fixed
- separate vax versions of strtof, and __hdtoa
- add complex math support. added functions: cacos, casin, catan,
ccos, csin, ctan, cacosh, casinh, catanh, ccosh, csinh, ctanh, cexp,
clog, cabs, cpow, csqrt, carg, cimag, conj, cproj, creal, cacosf,
casinf, catanf, ccosf, csinf, ctanf, cacoshf, casinhf, catanhf,
ccoshf, csinhf, ctanhf, cexpf, clogf, cabsf, cpowf, csqrtf, cargf,
cimagf, conjf, cprojf, crealf
- add fdim, fmax, fmin
- add log2. (adapted implementation e_log.c. could be more acruate
& faster, but it's good enough for now)
- remove wrappers & cruft in libm, supposed to work-around mistakes
in SVID, etc.; use ieee versions. fixes issues in python 2.6 for
djm@
- make _digittoint static
- proper definitions for i386, and amd64 in ieee.h
- sh, powerpc don't really have extended-precision
- add missing definitions for mips64 (quad), m{6,8}k (96-bit) float.h
for LDBL_*
- merge lead to frac for m{6,8}k, for gdtoa to work properly
- add FRAC*BITS & EXT_TO_ARRAY32 definitions in ieee.h, for hdtoa&ldtoa
to use
- add EXT_IMPLICIT_NBIT definition, which indicates implicit
normalization bit
- add regression tests for libc: fpclassify and printf
- arith.h & gd_qnan.h definitions
- update ieee.h: hppa doesn't have quad-precision, hppa64 does
- add missing prototypes to gdtoaimp
- on 64-bit platforms make sure gdtoa doesn't use a long when it
really wants an int
- etc., what i may have forgotten...
- bump libm major, due to removed&changed symbols
- no libc bump, since this is riding on djm's libc major crank from
a day ago

discussed with / requested by / testing theo, sthen@, djm@, jsg@,
merdely@, jsing@, tedu@, brad@, jakemsr@, and others.
looks good to millert@
parts of the diff ok kettenis@

this commit does not include:
- man page changes


Revision tags: OPENBSD_4_4_BASE
# 1.53 30-Jul-2008 jmc

various markup/grammar fixes for previous, and a missing MLINK
for remquof.3;


# 1.52 29-Jul-2008 martynas

- add man pages for nan and remainder, from freebsd
- mlink drem, dremf, remainderf to remainder; nanf to nan
- describe that drem and dremf are obsolete aliases
- remove descriptions for remainder and remainderf from ieee
looked over by jmc@, but it's easier for him to work on when they
are in tree


# 1.51 29-Jul-2008 martynas

describe exp2, exp2f and mlink them


# 1.50 29-Jul-2008 martynas

remove finite from ieee.3, and unmlink from makefile


# 1.49 24-Jul-2008 martynas

- remove isinff, isnanf. this has been moved to libc
- remove never-enabled signbit. libc has is now
- add C99 implementations, from freebsd, for nan(), nanf() (needed
to write _digittoint for it), exp2(), exp2f(), remquo(), remquof(),
needed STRICT_ASSIGN macro for math_private.h
- bump major
man pages will follow
exp2{,f} has been requested by chl@
ok millert@


# 1.48 21-Jul-2008 martynas

NetBSD's C library supplies these functions -> OpenBSD's C library
supplies these functions. in comments


# 1.47 21-Jul-2008 martynas

rename lround.c lroundf.c llround.c llroundf.c to s_lround.c
s_lroundf.c s_llround.c s_llroundf.c, for naming consistency
looks fine to millert@


# 1.46 16-Jul-2008 martynas

install infnan.3 only for vax. pointed out by millert@
ok millert@


# 1.45 12-Jun-2008 jmc

Makefile: fix MLINKS
lgamma.3: fix STANDARDS and HISTORY


# 1.44 11-Jun-2008 martynas

- on non-ieee, rename gamma to tgamma, the 'true' gamma
- make gamma an alias of lgamma
- on ieee, add tgamma, based on gamma from non-ieee
- fixes for tgamma/lgamma/exp/log, esp. special cases (some from
freebsd); properly raise invalid fp operations on vax
- also some general cleanup, ansification, man page (which was ok
jmc@)
- bump minor
this makes some ports using tgamma possible; also consistifies
behavior across openbsd/ieee and openbsd/non-ieee, and other operating
systems
much thanks sthen@, johan@, steven@, Simon Kuhnle, Wiktor Izdebski
for testing
ok millert@


# 1.43 11-Jun-2008 martynas

drem{,f} are aliases for remainder{,f}, so:
- document and mlink drem{,f}
- drem->remainder on noieee, and make drem an alias
- finite returns integer, n_support.c
- general n_support.c ansification and cleanup
- drem is now an ALTENTRY for remainder, in n_support.S
help with man page from jmc@ and millert@
ok millert@


# 1.42 11-Jun-2008 martynas

add C99 round(), based on ieee_src, for noieee_src. tested on VAX
ok millert@


Revision tags: OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.41 25-Sep-2006 kettenis

Move llrint.c, llrintf.c, lrint.c and lrintf.c to s_llrint.c, s_llrintf.c,
s_lrint.c and s_lrintf.c, and add i387-specific assembler versions.

ok deraadt@, otto@


Revision tags: OPENBSD_4_0_BASE
# 1.40 12-Jul-2006 brad

add some more C99 functions: round(3) and roundf(3).

By Steven G. Kargl <kargl at troutmask dot apl dot washington.edu>
From FreeBSD


# 1.39 19-Mar-2006 kettenis

New amd64 exp(3).
tested by steven@, ok otto@


# 1.38 18-Mar-2006 brad

add some more C99 functions: trunc(3) and truncf(3).

From FreeBSD

ok deraadt@ millert@ otto@ jmc@


# 1.37 14-Mar-2006 otto

amd64 asm code is not correct for exp(+/-Inf), so until somebody
comes up with a correct asm version, use the C version of exp(3).
ok steven@ kettenis@


Revision tags: OPENBSD_3_9_BASE
# 1.36 24-Nov-2005 deraadt

use WANTLINT= (on all architectures)


# 1.35 17-Nov-2005 otto

Introduce a few c99 functions: {l,ll}{rint,round}{,f}. From NetBSD via
jason@. Man page fixes by jmc@, prodding by jsg@. ok mickey@


Revision tags: OPENBSD_3_6_BASE OPENBSD_3_7_BASE OPENBSD_3_8_BASE
# 1.34 06-Apr-2004 brad

remove optimization workaround for sparc64 now that we're using gcc3.

ok deraadt@


Revision tags: OPENBSD_3_5_BASE
# 1.33 28-Feb-2004 deraadt

reach into new amd64 directory


# 1.32 27-Feb-2004 deraadt

change amd64's MACHINE_ARCH from x86_64 to amd64. There are many many
reasons for this, quite a few of them technical, and not all of them
in response to Intel's broken ia32e crud. The gcc toolchain stays at
x86_64 for now.


# 1.31 08-Feb-2004 deraadt

add libm parts for amd64; much from netbsd, integration by mickey.
Instead of mixing the i387 & xmm register components, we decide to
explicitly seperate them. libm is already confusing enough as it is,
thank you very much


Revision tags: OPENBSD_3_3_BASE OPENBSD_3_4_BASE
# 1.30 27-Feb-2003 jason

ieee_test isn't real, rename it to logb.3 and make everything link to that instead.


# 1.29 03-Jan-2003 miod

Get the m88k libm to say no to drugs.


Revision tags: OPENBSD_3_2_BASE
# 1.28 22-May-2002 mickey

add reminder and roundings


# 1.27 22-May-2002 mickey

md sqrt() implementation


Revision tags: OPENBSD_3_1_BASE
# 1.26 30-Jan-2002 naddy

Add native implementations of copysign() and copysignf() on alpha.
From NetBSD; ok millert@


Revision tags: OPENBSD_3_0_BASE
# 1.25 28-Aug-2001 art

The sparc workaround is needed for sparc64 too.


# 1.24 26-Jun-2001 miod

Correctly handle mvme88k settings here.


Revision tags: OPENBSD_2_9_BASE
# 1.23 08-Nov-2000 deraadt

put infnan in there, even though it is depricated


Revision tags: OPENBSD_2_6_BASE OPENBSD_2_7_BASE OPENBSD_2_8_BASE
# 1.22 18-Jul-1999 deraadt

I think that libm_i387 has lived too long


# 1.21 01-Jul-1999 deraadt

provide MLINKS for "f" versions, and make sure they show up in whatis.db


# 1.20 28-Jun-1999 espie

Bye, bye work-around.


# 1.19 03-Jun-1999 deraadt

egcs generates broken code for -O2 on sparc


# 1.18 26-May-1999 espie

Work-around: a few files trigger Internal Compiler Errors if compiled with
-O2 on m68k.


Revision tags: OPENBSD_2_5_BASE
# 1.17 08-Mar-1999 millert

pull in bsd.own.mk for NOPROFILE and NOPIC


# 1.16 07-Mar-1999 deraadt

Never break the source tree builds if a _non-default compilation option_
has an issue. Fix it right, without breaking the source tree.


# 1.15 07-Mar-1999 deraadt

previous commit broke MLINKS install


# 1.14 04-Mar-1999 millert

move .include <bsd.lib.mk> up before NOPROFILE and NOPIC defines are used; evanc@concer.to


# 1.13 16-Nov-1998 deraadt

use _USE_WRITE


Revision tags: OPENBSD_2_3_BASE OPENBSD_2_4_BASE
# 1.12 02-Mar-1998 millert

protect internal "struct excpption" from conflicting one in gcc.


Revision tags: OPENBSD_2_2_BASE
# 1.11 01-Sep-1997 mickey

missing VAX manual for infnan(3), from 4.4 BSD


Revision tags: OPENBSD_2_1_BASE
# 1.10 25-Mar-1997 rahnds

Ok here is the mvme88k userland, minus a few important pieces.
as, ld change need to be merged. It is known that shared libraries and C++
do not work.
If anyone wants to step forward and take over the mvme88k port please do.
It was dumped on me when the original developer, Nivas, left his previous
job and started a new one.

I am trying to get the port in a shape that someone could take over.


# 1.9 14-Nov-1996 mickey

correct LINKS usage


# 1.8 27-Oct-1996 downsj

nopic


# 1.7 27-Oct-1996 deraadt

NOPROFILE; from Mathieu.Herrb@mipnet.fr


# 1.6 25-Oct-1996 downsj

We do i387 by default now.


Revision tags: OPENBSD_2_0_BASE
# 1.5 30-Sep-1996 maja

Add OpenBSD tag. -moj


# 1.4 30-Sep-1996 maja

Allow the Makefile to work on strange machines like VAX :-) -moj


# 1.3 25-Mar-1996 tholo

Somewhat better support for building lint library


# 1.2 14-Dec-1995 deraadt

from netbsd:
Changed w_gamma.c, w_gamma_r.c, w_gammaf.c, w_gammaf_r.c to call
__ieee754_lgamma_r or __ieee754_lgammaf_r.
Removed e_gamma.c, e_gamma_r.c, e_gammaf.c, e_gammaf_r.c, e_lgamma.c,
e_lgamma_f.c.


# 1.1 18-Oct-1995 deraadt

branches: 1.1.1;
Initial revision


# 1.117 28-Feb-2018 kettenis

Remove CFLAGS+=-mfloat-abi=softfp that I accidentally committed.


# 1.116 28-Feb-2018 kettenis

Change floating-point mode/environment control functions to operate on
both the hardfloat (FPU registers) and softfloat (software) state. This
makes these functions work correctly when mixing hardfloat and softfloat
code. Disable trapping for softfloat since most (if not all) ARMv7 and
ARMv8 hardware that is on the market doesn't support trapping of
floating-point exceptions.

ok patrick@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.115 11-Jan-2017 patrick

Add support for AArch64. Based on FreeBSD's msun header, modified
to look and feel like our code.


# 1.114 12-Sep-2016 guenther

Reduce libm's exports and make internal calls go direct.
All dependencies on libc are now via reserved/standardized names.

ok kettenis@ millert@ deraadt@


# 1.113 01-Sep-2016 tedu

remove references to sparc


Revision tags: OPENBSD_6_0_BASE
# 1.112 11-May-2016 deraadt

remove hppa64 port, which we never got going beyond broken single users.
hppa reverse-stack gives us a valuable test case, but most developers don't
have a 2nd one to proceed further with this.
ok kettenis


# 1.111 30-Mar-2016 jmc

for some time now mandoc has not required MLINKS to function
correctly - logically complete that now by removing MLINKS from base;

authors need only to ensure there is an entry in NAME for any function/
util being added. MLINKS will still work, and remain for perl to ease
upgrades;

ok nicm (curses) bcook (ssl)
ok schwarze, who provided a lot of feedback and assistance
ok tb natano jung


# 1.110 10-Mar-2016 jmc

no need for SUBDIR now that vax is gone; ok deraadt


# 1.109 09-Mar-2016 deraadt

We are done providing support for the vax.
lots of agreement.


Revision tags: OPENBSD_5_9_BASE
# 1.108 18-Sep-2015 miod

Move s_signgam.c to PURE_SRCS, so that it also gets built on vax.


Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
# 1.107 12-Sep-2014 kettenis

Provide a sparc64 version of sqrtl(3) that simply calls _Qp_sqrt.
The generic sqrtl(3) is not nearly accurate enough for quad-precision
floating point.


Revision tags: OPENBSD_5_6_BASE
# 1.106 18-Mar-2014 miod

Retire hp300, mvme68k and mvme88k ports. These ports have no users, keeping
this hardware alive is becoming increasingly difficult, and I should heed the
message sent by the three disks which have died on me over the last few days.

Noone sane will mourn these ports anyway. So long, and thanks for the fish.


Revision tags: OPENBSD_5_5_BASE
# 1.105 07-Aug-2013 espie

simple inaccurate implementation of lrint* functions on vax, just so
we have them.
Compiles on vax. okay martynas@


Revision tags: OPENBSD_5_4_BASE
# 1.104 15-Jul-2013 espie

use some generic code on vax, to do round/roundf/scalbln...
suggested by martynas@

okay miod@

(just rearranges the !vax makefile, no compile change there)


# 1.103 03-Jul-2013 espie

reorganize NOIEEE_SRCS so that files not compiled on vax because
of assembly version are obvious.
Move cproj/cprojf to the PURE club, as the asm support code provides
copysignf

okay martynas@


# 1.102 03-Jul-2013 espie

with DBL vs LDBL fixed, tedu some source in noieee which is actually the
same as code in generic src.
introduce PURE_SRCS for completely MI math code.
okau martynas@


Revision tags: OPENBSD_5_3_BASE
# 1.101 15-Sep-2012 miod

m88k does not have the m68k long double type actually (long double == double
on this platform), so don't pretend it does, and don't build long double libm
routines.


# 1.100 04-Sep-2012 okan

remove lint leftovers; ok guenther@


# 1.99 02-Aug-2012 okan

remove leftover NOLINT, WANTLINT, LINTFLAGS, LOBJ vars and lint targets.

ok guenther@


Revision tags: OPENBSD_5_1_BASE OPENBSD_5_2_BASE
# 1.98 22-Sep-2011 schwarze

install infnan(3/VAX) into man3/vax/ on all archs;
clean make build tested on i386;
ok deraadt@, no objections from martynas@


# 1.97 19-Aug-2011 kettenis

Bring libc and libm in line with the compiler now that we no longer have a
128-bit long double. Diff committed on behalf of martynas@


Revision tags: OPENBSD_5_0_BASE
# 1.96 24-Jul-2011 martynas

Document fma, fmaf, fmal, nexttoward, nexttowardf, nexttowardl.


# 1.95 20-Jul-2011 martynas

Document complex math library.


# 1.94 11-Jul-2011 martynas

Remove the GCC2 optimizer workaround for sparc. After switching
to GCC4 it doesn't generate broken code anymore.
From Brad. Tested and verified by myself.


# 1.93 09-Jul-2011 martynas

- Fix the cabs, and cabsf prototypes in the manual pages; it's
been C99 complex (not struct complex) for couple of years.
- Remove BUGS section; cabs is finally prototyped in complex.h.
- Also document cabsl.


# 1.92 09-Jul-2011 martynas

Don't reimplement the same thing twice. OK matthew@.


# 1.91 08-Jul-2011 martynas

Move fabs(3) manual page from libm to libc, for consistency. The
modf(3), frexp(3), ldexp(3), fpclassify(3) pages are in libc, too.


# 1.90 08-Jul-2011 martynas

Remove the stupid commented out fabs(3), frexp(3), and modf(3)
entries and unused implementations. It is clear that this situation
won't change.


# 1.89 08-Jul-2011 martynas

Revert (leaving the complex math part alone). Some stuff is depending
on this historical behavior; so we're stuck in this stupid situation.
No cookie for me.


# 1.88 08-Jul-2011 martynas

Finalize work on complex math routines, now that we have the
extended-precision support. Mostly from Cephes.


# 1.87 08-Jul-2011 martynas

Move fabs(3), frexp(3), and modf(3) to libm--nothing has been using
them in libc for a very long time. OK guenther@.


# 1.86 07-Jul-2011 martynas

Remove math(3). OK theo.


# 1.85 07-Jul-2011 martynas

Document extended-precision routines.


# 1.84 06-Jul-2011 martynas

Don't pull bsd.own.mk for NOPROFILE & NOPIC -- the libm_i387 thing
is gone since 1999.


# 1.83 06-Jul-2011 martynas

Finalize work on the math library. It's time to do this monster
commit, and deal with problems (if any) in tree.

Note that this adds the following functions. Ports with hacks might
need adjustments.

nexttoward(3), fma(3), nexttowardf(3), fmaf(3), acoshl(3), asinhl(3),
atanhl(3), coshl(3), sinhl(3), tanhl(3), expl(3), expm1l(3), logl(3),
log10l(3), log1pl(3), log2l(3), modfl(3), cbrtl(3), hypotl(3),
powl(3), erfl(3), erfcl(3), lgammal(3), tgammal(3), ceill(3),
floorl(3), lrintl(3), llrintl(3), roundl(3), lroundl(3), llroundl(3),
truncl(3), fmodl(3), remainderl(3), remquol(3), nextafterl(3),
nexttowardl(3), fmal(3).

With this commit, our library implements all functionality required
by C99. Documentation bits will follow.


# 1.82 28-May-2011 martynas

Adapt m68k MD functions to extended-precision.
Go for it miod@.


# 1.81 28-May-2011 martynas

Adapt m68k MD functions to single-precision.
Looked over by miod@.


# 1.80 25-May-2011 martynas

Document nearbyint, nearbyintf, nearbyintl.


# 1.79 25-May-2011 martynas

Document C99 floating-point environment.


# 1.78 28-Apr-2011 todd

fix build ok martynas@


# 1.77 28-Apr-2011 martynas

- enable fenv
- add nearbyint, nearbyintf and nearbyintl implemented using fenv


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
# 1.76 19-Jul-2010 millert

Add barebones manual pages for cimag(3), conj(3) and cproj(3)
OK kettenis@ jmc@


Revision tags: OPENBSD_4_7_BASE
# 1.75 03-Feb-2010 miod

Use MACHINE_CPU instead of MACHINE_ARCH to pick the correct machine dependent
files or directories when applicable.
The inspiration and name of MACHINE_CPU come from NetBSD, although the way to
provide it to Makefiles is completely different.
ok kettenis@


# 1.74 06-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok pirofti@


# 1.73 05-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok otto@


# 1.72 26-Oct-2009 kettenis

Add man pages for the fdim/fmin/fmax family of functions and make sure fdiml
is defined on all architectures.

ok jmc@ (man pages) and martynas@


# 1.71 24-Oct-2009 jmc

document log2() and log2f(); from thomas pfaff
ok otto millert martynas


# 1.70 29-Jul-2009 martynas

ieee, and ieeef aren't real, and the amount of functions it documents
is getting ridiculous. split them into groups of copysign, ilogb,
nextafter, scalbn. discussed long ago with millert@


# 1.69 28-Jul-2009 martynas

document scalbln, scalblnf, scalblnl


# 1.68 25-Jul-2009 martynas

int is big enough to fully represent exponents of all supported fp
formats. which even for 80-bit & 128-bit long doubles is only 15
bits. therefore, scalbln, scalblnf, scalblnl are essentially the
same as scalbn, scalbnf, scalbnl with bounds checking so that
LONG_MIN..INT_MIN, and INT_MAX..LONG_MAX ranges properly raise
exceptions & yield correct values. looks good to millert@


# 1.67 15-Jul-2009 martynas

round, roundf, trunc, truncf for hppa; ok kettenis@


Revision tags: OPENBSD_4_6_BASE
# 1.66 19-Apr-2009 martynas

make ldexpf behavior consistent with the double and extended-precision
versions; spotted by kettenis@
while here also remove unused ldexp; it lives in libc
ok kettenis@, "looks good" millert@


# 1.65 10-Apr-2009 martynas

lrint, llrint, lrintf, llrintf for amd64. ok kettenis@, oga@


# 1.64 05-Apr-2009 martynas

implement and use sqrt, sqrtf & fabsf in hardware; since it's
faster that way. tested by myself. discussed w/ & ok miod@, millert@


# 1.63 28-Mar-2009 martynas

add C99-conformant nan, nanf, nanl for vax. always return zero,
since its fp does not have distinguished values for qnans. tested
by naddy@; fixes libnova. ok theo


Revision tags: OPENBSD_4_5_BASE
# 1.62 12-Dec-2008 martynas

space


# 1.61 12-Dec-2008 martynas

document and mlink long double functions. ok jmc@


# 1.60 09-Dec-2008 martynas

pass CPPFLAGS+= -D__STDC__ for vax, to get the right definitions
from asm.h. discussed w/ millert@


# 1.59 09-Dec-2008 martynas

- 80-bit and quad precision trigonometric and other most
important functions: acosl, asinl, atanl, atan2l, cosl,
sinl, tanl, exp2l, frexpl, ilogbl, ldexpl, logbl, scalbnl,
fabsl, hypotl, powl, sqrtl, rintl, copysignl, nanl, fdiml,
fmaxl, fminl. mostly taken from freebsd, needed alot of
changes to adapt. note, these are all c versions; and are
quite slow when architectures have, e.g. sqrt. assembly
versions will be added afterwards
- make them .weak/__weak_alias to the double precision
versions on other archs
- no need to have two finites. finite() and finitef() are
non-standard 3BSD obsolete versions of isfinite. remove
from libm. make them weak_alias in libc to __isfinite and
__isfinitef instead. similarly make 3BSD obsolete versions
of isinf, isinff, isnan, isnanf weak_aliases to C99's
__isinf, __isinff, __isnan, __isnanf
- remove unused infinity.c. the c library has infinities
for each supported platform
- use STRICT_ASSIGN cast hack for _kernel_rem_pio2, so that
the double version has a chance of working on i386 with
extra precision
- avoid storing multiple copies of the pi/2 array, since
it won't vary
- bump major due to removed finite/finitef. although they
will be in libc, which anything is linked to, minor bump
might be enough
ok millert@. tested by sthen@, jsg@, ajacoutot@, kili@, naddy@


# 1.58 07-Oct-2008 martynas

- noieee_src: adapt complex versions of the functions it already
supports (which is all, except the float ones)
ok millert@


# 1.57 16-Sep-2008 martynas

gc unused files, the functions are in libc. ok millert@


# 1.56 11-Sep-2008 martynas

since these got no ieee-specific code anymore, add fmin, fmax, fdim,
fminf, fmaxf, fdimf, fdiml for VAX. looks good to millert@


# 1.55 09-Sep-2008 martynas

sigh, gamma got lost


# 1.54 07-Sep-2008 martynas

- replace dtoa w/ David's gdtoa, version 2008-03-15
- provide proper dtoa locks
- use the real strtof implementation
- add strtold, __hdtoa, __hldtoa
- add %a/%A support
- don't lose precision in printf, don't round to double anymore
- implement extended-precision versions of libc functions: fpclassify,
isnan, isinf, signbit, isnormal, isfinite, now that the ieee.h is
fixed
- separate vax versions of strtof, and __hdtoa
- add complex math support. added functions: cacos, casin, catan,
ccos, csin, ctan, cacosh, casinh, catanh, ccosh, csinh, ctanh, cexp,
clog, cabs, cpow, csqrt, carg, cimag, conj, cproj, creal, cacosf,
casinf, catanf, ccosf, csinf, ctanf, cacoshf, casinhf, catanhf,
ccoshf, csinhf, ctanhf, cexpf, clogf, cabsf, cpowf, csqrtf, cargf,
cimagf, conjf, cprojf, crealf
- add fdim, fmax, fmin
- add log2. (adapted implementation e_log.c. could be more acruate
& faster, but it's good enough for now)
- remove wrappers & cruft in libm, supposed to work-around mistakes
in SVID, etc.; use ieee versions. fixes issues in python 2.6 for
djm@
- make _digittoint static
- proper definitions for i386, and amd64 in ieee.h
- sh, powerpc don't really have extended-precision
- add missing definitions for mips64 (quad), m{6,8}k (96-bit) float.h
for LDBL_*
- merge lead to frac for m{6,8}k, for gdtoa to work properly
- add FRAC*BITS & EXT_TO_ARRAY32 definitions in ieee.h, for hdtoa&ldtoa
to use
- add EXT_IMPLICIT_NBIT definition, which indicates implicit
normalization bit
- add regression tests for libc: fpclassify and printf
- arith.h & gd_qnan.h definitions
- update ieee.h: hppa doesn't have quad-precision, hppa64 does
- add missing prototypes to gdtoaimp
- on 64-bit platforms make sure gdtoa doesn't use a long when it
really wants an int
- etc., what i may have forgotten...
- bump libm major, due to removed&changed symbols
- no libc bump, since this is riding on djm's libc major crank from
a day ago

discussed with / requested by / testing theo, sthen@, djm@, jsg@,
merdely@, jsing@, tedu@, brad@, jakemsr@, and others.
looks good to millert@
parts of the diff ok kettenis@

this commit does not include:
- man page changes


Revision tags: OPENBSD_4_4_BASE
# 1.53 30-Jul-2008 jmc

various markup/grammar fixes for previous, and a missing MLINK
for remquof.3;


# 1.52 29-Jul-2008 martynas

- add man pages for nan and remainder, from freebsd
- mlink drem, dremf, remainderf to remainder; nanf to nan
- describe that drem and dremf are obsolete aliases
- remove descriptions for remainder and remainderf from ieee
looked over by jmc@, but it's easier for him to work on when they
are in tree


# 1.51 29-Jul-2008 martynas

describe exp2, exp2f and mlink them


# 1.50 29-Jul-2008 martynas

remove finite from ieee.3, and unmlink from makefile


# 1.49 24-Jul-2008 martynas

- remove isinff, isnanf. this has been moved to libc
- remove never-enabled signbit. libc has is now
- add C99 implementations, from freebsd, for nan(), nanf() (needed
to write _digittoint for it), exp2(), exp2f(), remquo(), remquof(),
needed STRICT_ASSIGN macro for math_private.h
- bump major
man pages will follow
exp2{,f} has been requested by chl@
ok millert@


# 1.48 21-Jul-2008 martynas

NetBSD's C library supplies these functions -> OpenBSD's C library
supplies these functions. in comments


# 1.47 21-Jul-2008 martynas

rename lround.c lroundf.c llround.c llroundf.c to s_lround.c
s_lroundf.c s_llround.c s_llroundf.c, for naming consistency
looks fine to millert@


# 1.46 16-Jul-2008 martynas

install infnan.3 only for vax. pointed out by millert@
ok millert@


# 1.45 12-Jun-2008 jmc

Makefile: fix MLINKS
lgamma.3: fix STANDARDS and HISTORY


# 1.44 11-Jun-2008 martynas

- on non-ieee, rename gamma to tgamma, the 'true' gamma
- make gamma an alias of lgamma
- on ieee, add tgamma, based on gamma from non-ieee
- fixes for tgamma/lgamma/exp/log, esp. special cases (some from
freebsd); properly raise invalid fp operations on vax
- also some general cleanup, ansification, man page (which was ok
jmc@)
- bump minor
this makes some ports using tgamma possible; also consistifies
behavior across openbsd/ieee and openbsd/non-ieee, and other operating
systems
much thanks sthen@, johan@, steven@, Simon Kuhnle, Wiktor Izdebski
for testing
ok millert@


# 1.43 11-Jun-2008 martynas

drem{,f} are aliases for remainder{,f}, so:
- document and mlink drem{,f}
- drem->remainder on noieee, and make drem an alias
- finite returns integer, n_support.c
- general n_support.c ansification and cleanup
- drem is now an ALTENTRY for remainder, in n_support.S
help with man page from jmc@ and millert@
ok millert@


# 1.42 11-Jun-2008 martynas

add C99 round(), based on ieee_src, for noieee_src. tested on VAX
ok millert@


Revision tags: OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.41 25-Sep-2006 kettenis

Move llrint.c, llrintf.c, lrint.c and lrintf.c to s_llrint.c, s_llrintf.c,
s_lrint.c and s_lrintf.c, and add i387-specific assembler versions.

ok deraadt@, otto@


Revision tags: OPENBSD_4_0_BASE
# 1.40 12-Jul-2006 brad

add some more C99 functions: round(3) and roundf(3).

By Steven G. Kargl <kargl at troutmask dot apl dot washington.edu>
From FreeBSD


# 1.39 19-Mar-2006 kettenis

New amd64 exp(3).
tested by steven@, ok otto@


# 1.38 18-Mar-2006 brad

add some more C99 functions: trunc(3) and truncf(3).

From FreeBSD

ok deraadt@ millert@ otto@ jmc@


# 1.37 14-Mar-2006 otto

amd64 asm code is not correct for exp(+/-Inf), so until somebody
comes up with a correct asm version, use the C version of exp(3).
ok steven@ kettenis@


Revision tags: OPENBSD_3_9_BASE
# 1.36 24-Nov-2005 deraadt

use WANTLINT= (on all architectures)


# 1.35 17-Nov-2005 otto

Introduce a few c99 functions: {l,ll}{rint,round}{,f}. From NetBSD via
jason@. Man page fixes by jmc@, prodding by jsg@. ok mickey@


Revision tags: OPENBSD_3_6_BASE OPENBSD_3_7_BASE OPENBSD_3_8_BASE
# 1.34 06-Apr-2004 brad

remove optimization workaround for sparc64 now that we're using gcc3.

ok deraadt@


Revision tags: OPENBSD_3_5_BASE
# 1.33 28-Feb-2004 deraadt

reach into new amd64 directory


# 1.32 27-Feb-2004 deraadt

change amd64's MACHINE_ARCH from x86_64 to amd64. There are many many
reasons for this, quite a few of them technical, and not all of them
in response to Intel's broken ia32e crud. The gcc toolchain stays at
x86_64 for now.


# 1.31 08-Feb-2004 deraadt

add libm parts for amd64; much from netbsd, integration by mickey.
Instead of mixing the i387 & xmm register components, we decide to
explicitly seperate them. libm is already confusing enough as it is,
thank you very much


Revision tags: OPENBSD_3_3_BASE OPENBSD_3_4_BASE
# 1.30 27-Feb-2003 jason

ieee_test isn't real, rename it to logb.3 and make everything link to that instead.


# 1.29 03-Jan-2003 miod

Get the m88k libm to say no to drugs.


Revision tags: OPENBSD_3_2_BASE
# 1.28 22-May-2002 mickey

add reminder and roundings


# 1.27 22-May-2002 mickey

md sqrt() implementation


Revision tags: OPENBSD_3_1_BASE
# 1.26 30-Jan-2002 naddy

Add native implementations of copysign() and copysignf() on alpha.
From NetBSD; ok millert@


Revision tags: OPENBSD_3_0_BASE
# 1.25 28-Aug-2001 art

The sparc workaround is needed for sparc64 too.


# 1.24 26-Jun-2001 miod

Correctly handle mvme88k settings here.


Revision tags: OPENBSD_2_9_BASE
# 1.23 08-Nov-2000 deraadt

put infnan in there, even though it is depricated


Revision tags: OPENBSD_2_6_BASE OPENBSD_2_7_BASE OPENBSD_2_8_BASE
# 1.22 18-Jul-1999 deraadt

I think that libm_i387 has lived too long


# 1.21 01-Jul-1999 deraadt

provide MLINKS for "f" versions, and make sure they show up in whatis.db


# 1.20 28-Jun-1999 espie

Bye, bye work-around.


# 1.19 03-Jun-1999 deraadt

egcs generates broken code for -O2 on sparc


# 1.18 26-May-1999 espie

Work-around: a few files trigger Internal Compiler Errors if compiled with
-O2 on m68k.


Revision tags: OPENBSD_2_5_BASE
# 1.17 08-Mar-1999 millert

pull in bsd.own.mk for NOPROFILE and NOPIC


# 1.16 07-Mar-1999 deraadt

Never break the source tree builds if a _non-default compilation option_
has an issue. Fix it right, without breaking the source tree.


# 1.15 07-Mar-1999 deraadt

previous commit broke MLINKS install


# 1.14 04-Mar-1999 millert

move .include <bsd.lib.mk> up before NOPROFILE and NOPIC defines are used; evanc@concer.to


# 1.13 16-Nov-1998 deraadt

use _USE_WRITE


Revision tags: OPENBSD_2_3_BASE OPENBSD_2_4_BASE
# 1.12 02-Mar-1998 millert

protect internal "struct excpption" from conflicting one in gcc.


Revision tags: OPENBSD_2_2_BASE
# 1.11 01-Sep-1997 mickey

missing VAX manual for infnan(3), from 4.4 BSD


Revision tags: OPENBSD_2_1_BASE
# 1.10 25-Mar-1997 rahnds

Ok here is the mvme88k userland, minus a few important pieces.
as, ld change need to be merged. It is known that shared libraries and C++
do not work.
If anyone wants to step forward and take over the mvme88k port please do.
It was dumped on me when the original developer, Nivas, left his previous
job and started a new one.

I am trying to get the port in a shape that someone could take over.


# 1.9 14-Nov-1996 mickey

correct LINKS usage


# 1.8 27-Oct-1996 downsj

nopic


# 1.7 27-Oct-1996 deraadt

NOPROFILE; from Mathieu.Herrb@mipnet.fr


# 1.6 25-Oct-1996 downsj

We do i387 by default now.


Revision tags: OPENBSD_2_0_BASE
# 1.5 30-Sep-1996 maja

Add OpenBSD tag. -moj


# 1.4 30-Sep-1996 maja

Allow the Makefile to work on strange machines like VAX :-) -moj


# 1.3 25-Mar-1996 tholo

Somewhat better support for building lint library


# 1.2 14-Dec-1995 deraadt

from netbsd:
Changed w_gamma.c, w_gamma_r.c, w_gammaf.c, w_gammaf_r.c to call
__ieee754_lgamma_r or __ieee754_lgammaf_r.
Removed e_gamma.c, e_gamma_r.c, e_gammaf.c, e_gammaf_r.c, e_lgamma.c,
e_lgamma_f.c.


# 1.1 18-Oct-1995 deraadt

branches: 1.1.1;
Initial revision


# 1.116 28-Feb-2018 kettenis

Change floating-point mode/environment control functions to operate on
both the hardfloat (FPU registers) and softfloat (software) state. This
makes these functions work correctly when mixing hardfloat and softfloat
code. Disable trapping for softfloat since most (if not all) ARMv7 and
ARMv8 hardware that is on the market doesn't support trapping of
floating-point exceptions.

ok patrick@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.115 11-Jan-2017 patrick

Add support for AArch64. Based on FreeBSD's msun header, modified
to look and feel like our code.


# 1.114 12-Sep-2016 guenther

Reduce libm's exports and make internal calls go direct.
All dependencies on libc are now via reserved/standardized names.

ok kettenis@ millert@ deraadt@


# 1.113 01-Sep-2016 tedu

remove references to sparc


Revision tags: OPENBSD_6_0_BASE
# 1.112 11-May-2016 deraadt

remove hppa64 port, which we never got going beyond broken single users.
hppa reverse-stack gives us a valuable test case, but most developers don't
have a 2nd one to proceed further with this.
ok kettenis


# 1.111 30-Mar-2016 jmc

for some time now mandoc has not required MLINKS to function
correctly - logically complete that now by removing MLINKS from base;

authors need only to ensure there is an entry in NAME for any function/
util being added. MLINKS will still work, and remain for perl to ease
upgrades;

ok nicm (curses) bcook (ssl)
ok schwarze, who provided a lot of feedback and assistance
ok tb natano jung


# 1.110 10-Mar-2016 jmc

no need for SUBDIR now that vax is gone; ok deraadt


# 1.109 09-Mar-2016 deraadt

We are done providing support for the vax.
lots of agreement.


Revision tags: OPENBSD_5_9_BASE
# 1.108 18-Sep-2015 miod

Move s_signgam.c to PURE_SRCS, so that it also gets built on vax.


Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
# 1.107 12-Sep-2014 kettenis

Provide a sparc64 version of sqrtl(3) that simply calls _Qp_sqrt.
The generic sqrtl(3) is not nearly accurate enough for quad-precision
floating point.


Revision tags: OPENBSD_5_6_BASE
# 1.106 18-Mar-2014 miod

Retire hp300, mvme68k and mvme88k ports. These ports have no users, keeping
this hardware alive is becoming increasingly difficult, and I should heed the
message sent by the three disks which have died on me over the last few days.

Noone sane will mourn these ports anyway. So long, and thanks for the fish.


Revision tags: OPENBSD_5_5_BASE
# 1.105 07-Aug-2013 espie

simple inaccurate implementation of lrint* functions on vax, just so
we have them.
Compiles on vax. okay martynas@


Revision tags: OPENBSD_5_4_BASE
# 1.104 15-Jul-2013 espie

use some generic code on vax, to do round/roundf/scalbln...
suggested by martynas@

okay miod@

(just rearranges the !vax makefile, no compile change there)


# 1.103 03-Jul-2013 espie

reorganize NOIEEE_SRCS so that files not compiled on vax because
of assembly version are obvious.
Move cproj/cprojf to the PURE club, as the asm support code provides
copysignf

okay martynas@


# 1.102 03-Jul-2013 espie

with DBL vs LDBL fixed, tedu some source in noieee which is actually the
same as code in generic src.
introduce PURE_SRCS for completely MI math code.
okau martynas@


Revision tags: OPENBSD_5_3_BASE
# 1.101 15-Sep-2012 miod

m88k does not have the m68k long double type actually (long double == double
on this platform), so don't pretend it does, and don't build long double libm
routines.


# 1.100 04-Sep-2012 okan

remove lint leftovers; ok guenther@


# 1.99 02-Aug-2012 okan

remove leftover NOLINT, WANTLINT, LINTFLAGS, LOBJ vars and lint targets.

ok guenther@


Revision tags: OPENBSD_5_1_BASE OPENBSD_5_2_BASE
# 1.98 22-Sep-2011 schwarze

install infnan(3/VAX) into man3/vax/ on all archs;
clean make build tested on i386;
ok deraadt@, no objections from martynas@


# 1.97 19-Aug-2011 kettenis

Bring libc and libm in line with the compiler now that we no longer have a
128-bit long double. Diff committed on behalf of martynas@


Revision tags: OPENBSD_5_0_BASE
# 1.96 24-Jul-2011 martynas

Document fma, fmaf, fmal, nexttoward, nexttowardf, nexttowardl.


# 1.95 20-Jul-2011 martynas

Document complex math library.


# 1.94 11-Jul-2011 martynas

Remove the GCC2 optimizer workaround for sparc. After switching
to GCC4 it doesn't generate broken code anymore.
From Brad. Tested and verified by myself.


# 1.93 09-Jul-2011 martynas

- Fix the cabs, and cabsf prototypes in the manual pages; it's
been C99 complex (not struct complex) for couple of years.
- Remove BUGS section; cabs is finally prototyped in complex.h.
- Also document cabsl.


# 1.92 09-Jul-2011 martynas

Don't reimplement the same thing twice. OK matthew@.


# 1.91 08-Jul-2011 martynas

Move fabs(3) manual page from libm to libc, for consistency. The
modf(3), frexp(3), ldexp(3), fpclassify(3) pages are in libc, too.


# 1.90 08-Jul-2011 martynas

Remove the stupid commented out fabs(3), frexp(3), and modf(3)
entries and unused implementations. It is clear that this situation
won't change.


# 1.89 08-Jul-2011 martynas

Revert (leaving the complex math part alone). Some stuff is depending
on this historical behavior; so we're stuck in this stupid situation.
No cookie for me.


# 1.88 08-Jul-2011 martynas

Finalize work on complex math routines, now that we have the
extended-precision support. Mostly from Cephes.


# 1.87 08-Jul-2011 martynas

Move fabs(3), frexp(3), and modf(3) to libm--nothing has been using
them in libc for a very long time. OK guenther@.


# 1.86 07-Jul-2011 martynas

Remove math(3). OK theo.


# 1.85 07-Jul-2011 martynas

Document extended-precision routines.


# 1.84 06-Jul-2011 martynas

Don't pull bsd.own.mk for NOPROFILE & NOPIC -- the libm_i387 thing
is gone since 1999.


# 1.83 06-Jul-2011 martynas

Finalize work on the math library. It's time to do this monster
commit, and deal with problems (if any) in tree.

Note that this adds the following functions. Ports with hacks might
need adjustments.

nexttoward(3), fma(3), nexttowardf(3), fmaf(3), acoshl(3), asinhl(3),
atanhl(3), coshl(3), sinhl(3), tanhl(3), expl(3), expm1l(3), logl(3),
log10l(3), log1pl(3), log2l(3), modfl(3), cbrtl(3), hypotl(3),
powl(3), erfl(3), erfcl(3), lgammal(3), tgammal(3), ceill(3),
floorl(3), lrintl(3), llrintl(3), roundl(3), lroundl(3), llroundl(3),
truncl(3), fmodl(3), remainderl(3), remquol(3), nextafterl(3),
nexttowardl(3), fmal(3).

With this commit, our library implements all functionality required
by C99. Documentation bits will follow.


# 1.82 28-May-2011 martynas

Adapt m68k MD functions to extended-precision.
Go for it miod@.


# 1.81 28-May-2011 martynas

Adapt m68k MD functions to single-precision.
Looked over by miod@.


# 1.80 25-May-2011 martynas

Document nearbyint, nearbyintf, nearbyintl.


# 1.79 25-May-2011 martynas

Document C99 floating-point environment.


# 1.78 28-Apr-2011 todd

fix build ok martynas@


# 1.77 28-Apr-2011 martynas

- enable fenv
- add nearbyint, nearbyintf and nearbyintl implemented using fenv


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
# 1.76 19-Jul-2010 millert

Add barebones manual pages for cimag(3), conj(3) and cproj(3)
OK kettenis@ jmc@


Revision tags: OPENBSD_4_7_BASE
# 1.75 03-Feb-2010 miod

Use MACHINE_CPU instead of MACHINE_ARCH to pick the correct machine dependent
files or directories when applicable.
The inspiration and name of MACHINE_CPU come from NetBSD, although the way to
provide it to Makefiles is completely different.
ok kettenis@


# 1.74 06-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok pirofti@


# 1.73 05-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok otto@


# 1.72 26-Oct-2009 kettenis

Add man pages for the fdim/fmin/fmax family of functions and make sure fdiml
is defined on all architectures.

ok jmc@ (man pages) and martynas@


# 1.71 24-Oct-2009 jmc

document log2() and log2f(); from thomas pfaff
ok otto millert martynas


# 1.70 29-Jul-2009 martynas

ieee, and ieeef aren't real, and the amount of functions it documents
is getting ridiculous. split them into groups of copysign, ilogb,
nextafter, scalbn. discussed long ago with millert@


# 1.69 28-Jul-2009 martynas

document scalbln, scalblnf, scalblnl


# 1.68 25-Jul-2009 martynas

int is big enough to fully represent exponents of all supported fp
formats. which even for 80-bit & 128-bit long doubles is only 15
bits. therefore, scalbln, scalblnf, scalblnl are essentially the
same as scalbn, scalbnf, scalbnl with bounds checking so that
LONG_MIN..INT_MIN, and INT_MAX..LONG_MAX ranges properly raise
exceptions & yield correct values. looks good to millert@


# 1.67 15-Jul-2009 martynas

round, roundf, trunc, truncf for hppa; ok kettenis@


Revision tags: OPENBSD_4_6_BASE
# 1.66 19-Apr-2009 martynas

make ldexpf behavior consistent with the double and extended-precision
versions; spotted by kettenis@
while here also remove unused ldexp; it lives in libc
ok kettenis@, "looks good" millert@


# 1.65 10-Apr-2009 martynas

lrint, llrint, lrintf, llrintf for amd64. ok kettenis@, oga@


# 1.64 05-Apr-2009 martynas

implement and use sqrt, sqrtf & fabsf in hardware; since it's
faster that way. tested by myself. discussed w/ & ok miod@, millert@


# 1.63 28-Mar-2009 martynas

add C99-conformant nan, nanf, nanl for vax. always return zero,
since its fp does not have distinguished values for qnans. tested
by naddy@; fixes libnova. ok theo


Revision tags: OPENBSD_4_5_BASE
# 1.62 12-Dec-2008 martynas

space


# 1.61 12-Dec-2008 martynas

document and mlink long double functions. ok jmc@


# 1.60 09-Dec-2008 martynas

pass CPPFLAGS+= -D__STDC__ for vax, to get the right definitions
from asm.h. discussed w/ millert@


# 1.59 09-Dec-2008 martynas

- 80-bit and quad precision trigonometric and other most
important functions: acosl, asinl, atanl, atan2l, cosl,
sinl, tanl, exp2l, frexpl, ilogbl, ldexpl, logbl, scalbnl,
fabsl, hypotl, powl, sqrtl, rintl, copysignl, nanl, fdiml,
fmaxl, fminl. mostly taken from freebsd, needed alot of
changes to adapt. note, these are all c versions; and are
quite slow when architectures have, e.g. sqrt. assembly
versions will be added afterwards
- make them .weak/__weak_alias to the double precision
versions on other archs
- no need to have two finites. finite() and finitef() are
non-standard 3BSD obsolete versions of isfinite. remove
from libm. make them weak_alias in libc to __isfinite and
__isfinitef instead. similarly make 3BSD obsolete versions
of isinf, isinff, isnan, isnanf weak_aliases to C99's
__isinf, __isinff, __isnan, __isnanf
- remove unused infinity.c. the c library has infinities
for each supported platform
- use STRICT_ASSIGN cast hack for _kernel_rem_pio2, so that
the double version has a chance of working on i386 with
extra precision
- avoid storing multiple copies of the pi/2 array, since
it won't vary
- bump major due to removed finite/finitef. although they
will be in libc, which anything is linked to, minor bump
might be enough
ok millert@. tested by sthen@, jsg@, ajacoutot@, kili@, naddy@


# 1.58 07-Oct-2008 martynas

- noieee_src: adapt complex versions of the functions it already
supports (which is all, except the float ones)
ok millert@


# 1.57 16-Sep-2008 martynas

gc unused files, the functions are in libc. ok millert@


# 1.56 11-Sep-2008 martynas

since these got no ieee-specific code anymore, add fmin, fmax, fdim,
fminf, fmaxf, fdimf, fdiml for VAX. looks good to millert@


# 1.55 09-Sep-2008 martynas

sigh, gamma got lost


# 1.54 07-Sep-2008 martynas

- replace dtoa w/ David's gdtoa, version 2008-03-15
- provide proper dtoa locks
- use the real strtof implementation
- add strtold, __hdtoa, __hldtoa
- add %a/%A support
- don't lose precision in printf, don't round to double anymore
- implement extended-precision versions of libc functions: fpclassify,
isnan, isinf, signbit, isnormal, isfinite, now that the ieee.h is
fixed
- separate vax versions of strtof, and __hdtoa
- add complex math support. added functions: cacos, casin, catan,
ccos, csin, ctan, cacosh, casinh, catanh, ccosh, csinh, ctanh, cexp,
clog, cabs, cpow, csqrt, carg, cimag, conj, cproj, creal, cacosf,
casinf, catanf, ccosf, csinf, ctanf, cacoshf, casinhf, catanhf,
ccoshf, csinhf, ctanhf, cexpf, clogf, cabsf, cpowf, csqrtf, cargf,
cimagf, conjf, cprojf, crealf
- add fdim, fmax, fmin
- add log2. (adapted implementation e_log.c. could be more acruate
& faster, but it's good enough for now)
- remove wrappers & cruft in libm, supposed to work-around mistakes
in SVID, etc.; use ieee versions. fixes issues in python 2.6 for
djm@
- make _digittoint static
- proper definitions for i386, and amd64 in ieee.h
- sh, powerpc don't really have extended-precision
- add missing definitions for mips64 (quad), m{6,8}k (96-bit) float.h
for LDBL_*
- merge lead to frac for m{6,8}k, for gdtoa to work properly
- add FRAC*BITS & EXT_TO_ARRAY32 definitions in ieee.h, for hdtoa&ldtoa
to use
- add EXT_IMPLICIT_NBIT definition, which indicates implicit
normalization bit
- add regression tests for libc: fpclassify and printf
- arith.h & gd_qnan.h definitions
- update ieee.h: hppa doesn't have quad-precision, hppa64 does
- add missing prototypes to gdtoaimp
- on 64-bit platforms make sure gdtoa doesn't use a long when it
really wants an int
- etc., what i may have forgotten...
- bump libm major, due to removed&changed symbols
- no libc bump, since this is riding on djm's libc major crank from
a day ago

discussed with / requested by / testing theo, sthen@, djm@, jsg@,
merdely@, jsing@, tedu@, brad@, jakemsr@, and others.
looks good to millert@
parts of the diff ok kettenis@

this commit does not include:
- man page changes


Revision tags: OPENBSD_4_4_BASE
# 1.53 30-Jul-2008 jmc

various markup/grammar fixes for previous, and a missing MLINK
for remquof.3;


# 1.52 29-Jul-2008 martynas

- add man pages for nan and remainder, from freebsd
- mlink drem, dremf, remainderf to remainder; nanf to nan
- describe that drem and dremf are obsolete aliases
- remove descriptions for remainder and remainderf from ieee
looked over by jmc@, but it's easier for him to work on when they
are in tree


# 1.51 29-Jul-2008 martynas

describe exp2, exp2f and mlink them


# 1.50 29-Jul-2008 martynas

remove finite from ieee.3, and unmlink from makefile


# 1.49 24-Jul-2008 martynas

- remove isinff, isnanf. this has been moved to libc
- remove never-enabled signbit. libc has is now
- add C99 implementations, from freebsd, for nan(), nanf() (needed
to write _digittoint for it), exp2(), exp2f(), remquo(), remquof(),
needed STRICT_ASSIGN macro for math_private.h
- bump major
man pages will follow
exp2{,f} has been requested by chl@
ok millert@


# 1.48 21-Jul-2008 martynas

NetBSD's C library supplies these functions -> OpenBSD's C library
supplies these functions. in comments


# 1.47 21-Jul-2008 martynas

rename lround.c lroundf.c llround.c llroundf.c to s_lround.c
s_lroundf.c s_llround.c s_llroundf.c, for naming consistency
looks fine to millert@


# 1.46 16-Jul-2008 martynas

install infnan.3 only for vax. pointed out by millert@
ok millert@


# 1.45 12-Jun-2008 jmc

Makefile: fix MLINKS
lgamma.3: fix STANDARDS and HISTORY


# 1.44 11-Jun-2008 martynas

- on non-ieee, rename gamma to tgamma, the 'true' gamma
- make gamma an alias of lgamma
- on ieee, add tgamma, based on gamma from non-ieee
- fixes for tgamma/lgamma/exp/log, esp. special cases (some from
freebsd); properly raise invalid fp operations on vax
- also some general cleanup, ansification, man page (which was ok
jmc@)
- bump minor
this makes some ports using tgamma possible; also consistifies
behavior across openbsd/ieee and openbsd/non-ieee, and other operating
systems
much thanks sthen@, johan@, steven@, Simon Kuhnle, Wiktor Izdebski
for testing
ok millert@


# 1.43 11-Jun-2008 martynas

drem{,f} are aliases for remainder{,f}, so:
- document and mlink drem{,f}
- drem->remainder on noieee, and make drem an alias
- finite returns integer, n_support.c
- general n_support.c ansification and cleanup
- drem is now an ALTENTRY for remainder, in n_support.S
help with man page from jmc@ and millert@
ok millert@


# 1.42 11-Jun-2008 martynas

add C99 round(), based on ieee_src, for noieee_src. tested on VAX
ok millert@


Revision tags: OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.41 25-Sep-2006 kettenis

Move llrint.c, llrintf.c, lrint.c and lrintf.c to s_llrint.c, s_llrintf.c,
s_lrint.c and s_lrintf.c, and add i387-specific assembler versions.

ok deraadt@, otto@


Revision tags: OPENBSD_4_0_BASE
# 1.40 12-Jul-2006 brad

add some more C99 functions: round(3) and roundf(3).

By Steven G. Kargl <kargl at troutmask dot apl dot washington.edu>
From FreeBSD


# 1.39 19-Mar-2006 kettenis

New amd64 exp(3).
tested by steven@, ok otto@


# 1.38 18-Mar-2006 brad

add some more C99 functions: trunc(3) and truncf(3).

From FreeBSD

ok deraadt@ millert@ otto@ jmc@


# 1.37 14-Mar-2006 otto

amd64 asm code is not correct for exp(+/-Inf), so until somebody
comes up with a correct asm version, use the C version of exp(3).
ok steven@ kettenis@


Revision tags: OPENBSD_3_9_BASE
# 1.36 24-Nov-2005 deraadt

use WANTLINT= (on all architectures)


# 1.35 17-Nov-2005 otto

Introduce a few c99 functions: {l,ll}{rint,round}{,f}. From NetBSD via
jason@. Man page fixes by jmc@, prodding by jsg@. ok mickey@


Revision tags: OPENBSD_3_6_BASE OPENBSD_3_7_BASE OPENBSD_3_8_BASE
# 1.34 06-Apr-2004 brad

remove optimization workaround for sparc64 now that we're using gcc3.

ok deraadt@


Revision tags: OPENBSD_3_5_BASE
# 1.33 28-Feb-2004 deraadt

reach into new amd64 directory


# 1.32 27-Feb-2004 deraadt

change amd64's MACHINE_ARCH from x86_64 to amd64. There are many many
reasons for this, quite a few of them technical, and not all of them
in response to Intel's broken ia32e crud. The gcc toolchain stays at
x86_64 for now.


# 1.31 08-Feb-2004 deraadt

add libm parts for amd64; much from netbsd, integration by mickey.
Instead of mixing the i387 & xmm register components, we decide to
explicitly seperate them. libm is already confusing enough as it is,
thank you very much


Revision tags: OPENBSD_3_3_BASE OPENBSD_3_4_BASE
# 1.30 27-Feb-2003 jason

ieee_test isn't real, rename it to logb.3 and make everything link to that instead.


# 1.29 03-Jan-2003 miod

Get the m88k libm to say no to drugs.


Revision tags: OPENBSD_3_2_BASE
# 1.28 22-May-2002 mickey

add reminder and roundings


# 1.27 22-May-2002 mickey

md sqrt() implementation


Revision tags: OPENBSD_3_1_BASE
# 1.26 30-Jan-2002 naddy

Add native implementations of copysign() and copysignf() on alpha.
From NetBSD; ok millert@


Revision tags: OPENBSD_3_0_BASE
# 1.25 28-Aug-2001 art

The sparc workaround is needed for sparc64 too.


# 1.24 26-Jun-2001 miod

Correctly handle mvme88k settings here.


Revision tags: OPENBSD_2_9_BASE
# 1.23 08-Nov-2000 deraadt

put infnan in there, even though it is depricated


Revision tags: OPENBSD_2_6_BASE OPENBSD_2_7_BASE OPENBSD_2_8_BASE
# 1.22 18-Jul-1999 deraadt

I think that libm_i387 has lived too long


# 1.21 01-Jul-1999 deraadt

provide MLINKS for "f" versions, and make sure they show up in whatis.db


# 1.20 28-Jun-1999 espie

Bye, bye work-around.


# 1.19 03-Jun-1999 deraadt

egcs generates broken code for -O2 on sparc


# 1.18 26-May-1999 espie

Work-around: a few files trigger Internal Compiler Errors if compiled with
-O2 on m68k.


Revision tags: OPENBSD_2_5_BASE
# 1.17 08-Mar-1999 millert

pull in bsd.own.mk for NOPROFILE and NOPIC


# 1.16 07-Mar-1999 deraadt

Never break the source tree builds if a _non-default compilation option_
has an issue. Fix it right, without breaking the source tree.


# 1.15 07-Mar-1999 deraadt

previous commit broke MLINKS install


# 1.14 04-Mar-1999 millert

move .include <bsd.lib.mk> up before NOPROFILE and NOPIC defines are used; evanc@concer.to


# 1.13 16-Nov-1998 deraadt

use _USE_WRITE


Revision tags: OPENBSD_2_3_BASE OPENBSD_2_4_BASE
# 1.12 02-Mar-1998 millert

protect internal "struct excpption" from conflicting one in gcc.


Revision tags: OPENBSD_2_2_BASE
# 1.11 01-Sep-1997 mickey

missing VAX manual for infnan(3), from 4.4 BSD


Revision tags: OPENBSD_2_1_BASE
# 1.10 25-Mar-1997 rahnds

Ok here is the mvme88k userland, minus a few important pieces.
as, ld change need to be merged. It is known that shared libraries and C++
do not work.
If anyone wants to step forward and take over the mvme88k port please do.
It was dumped on me when the original developer, Nivas, left his previous
job and started a new one.

I am trying to get the port in a shape that someone could take over.


# 1.9 14-Nov-1996 mickey

correct LINKS usage


# 1.8 27-Oct-1996 downsj

nopic


# 1.7 27-Oct-1996 deraadt

NOPROFILE; from Mathieu.Herrb@mipnet.fr


# 1.6 25-Oct-1996 downsj

We do i387 by default now.


Revision tags: OPENBSD_2_0_BASE
# 1.5 30-Sep-1996 maja

Add OpenBSD tag. -moj


# 1.4 30-Sep-1996 maja

Allow the Makefile to work on strange machines like VAX :-) -moj


# 1.3 25-Mar-1996 tholo

Somewhat better support for building lint library


# 1.2 14-Dec-1995 deraadt

from netbsd:
Changed w_gamma.c, w_gamma_r.c, w_gammaf.c, w_gammaf_r.c to call
__ieee754_lgamma_r or __ieee754_lgammaf_r.
Removed e_gamma.c, e_gamma_r.c, e_gammaf.c, e_gammaf_r.c, e_lgamma.c,
e_lgamma_f.c.


# 1.1 18-Oct-1995 deraadt

branches: 1.1.1;
Initial revision


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.115 11-Jan-2017 patrick

Add support for AArch64. Based on FreeBSD's msun header, modified
to look and feel like our code.


# 1.114 12-Sep-2016 guenther

Reduce libm's exports and make internal calls go direct.
All dependencies on libc are now via reserved/standardized names.

ok kettenis@ millert@ deraadt@


# 1.113 01-Sep-2016 tedu

remove references to sparc


Revision tags: OPENBSD_6_0_BASE
# 1.112 11-May-2016 deraadt

remove hppa64 port, which we never got going beyond broken single users.
hppa reverse-stack gives us a valuable test case, but most developers don't
have a 2nd one to proceed further with this.
ok kettenis


# 1.111 30-Mar-2016 jmc

for some time now mandoc has not required MLINKS to function
correctly - logically complete that now by removing MLINKS from base;

authors need only to ensure there is an entry in NAME for any function/
util being added. MLINKS will still work, and remain for perl to ease
upgrades;

ok nicm (curses) bcook (ssl)
ok schwarze, who provided a lot of feedback and assistance
ok tb natano jung


# 1.110 10-Mar-2016 jmc

no need for SUBDIR now that vax is gone; ok deraadt


# 1.109 09-Mar-2016 deraadt

We are done providing support for the vax.
lots of agreement.


Revision tags: OPENBSD_5_9_BASE
# 1.108 18-Sep-2015 miod

Move s_signgam.c to PURE_SRCS, so that it also gets built on vax.


Revision tags: OPENBSD_5_7_BASE OPENBSD_5_8_BASE
# 1.107 12-Sep-2014 kettenis

Provide a sparc64 version of sqrtl(3) that simply calls _Qp_sqrt.
The generic sqrtl(3) is not nearly accurate enough for quad-precision
floating point.


Revision tags: OPENBSD_5_6_BASE
# 1.106 18-Mar-2014 miod

Retire hp300, mvme68k and mvme88k ports. These ports have no users, keeping
this hardware alive is becoming increasingly difficult, and I should heed the
message sent by the three disks which have died on me over the last few days.

Noone sane will mourn these ports anyway. So long, and thanks for the fish.


Revision tags: OPENBSD_5_5_BASE
# 1.105 07-Aug-2013 espie

simple inaccurate implementation of lrint* functions on vax, just so
we have them.
Compiles on vax. okay martynas@


Revision tags: OPENBSD_5_4_BASE
# 1.104 15-Jul-2013 espie

use some generic code on vax, to do round/roundf/scalbln...
suggested by martynas@

okay miod@

(just rearranges the !vax makefile, no compile change there)


# 1.103 03-Jul-2013 espie

reorganize NOIEEE_SRCS so that files not compiled on vax because
of assembly version are obvious.
Move cproj/cprojf to the PURE club, as the asm support code provides
copysignf

okay martynas@


# 1.102 03-Jul-2013 espie

with DBL vs LDBL fixed, tedu some source in noieee which is actually the
same as code in generic src.
introduce PURE_SRCS for completely MI math code.
okau martynas@


Revision tags: OPENBSD_5_3_BASE
# 1.101 15-Sep-2012 miod

m88k does not have the m68k long double type actually (long double == double
on this platform), so don't pretend it does, and don't build long double libm
routines.


# 1.100 04-Sep-2012 okan

remove lint leftovers; ok guenther@


# 1.99 02-Aug-2012 okan

remove leftover NOLINT, WANTLINT, LINTFLAGS, LOBJ vars and lint targets.

ok guenther@


Revision tags: OPENBSD_5_1_BASE OPENBSD_5_2_BASE
# 1.98 22-Sep-2011 schwarze

install infnan(3/VAX) into man3/vax/ on all archs;
clean make build tested on i386;
ok deraadt@, no objections from martynas@


# 1.97 19-Aug-2011 kettenis

Bring libc and libm in line with the compiler now that we no longer have a
128-bit long double. Diff committed on behalf of martynas@


Revision tags: OPENBSD_5_0_BASE
# 1.96 24-Jul-2011 martynas

Document fma, fmaf, fmal, nexttoward, nexttowardf, nexttowardl.


# 1.95 20-Jul-2011 martynas

Document complex math library.


# 1.94 11-Jul-2011 martynas

Remove the GCC2 optimizer workaround for sparc. After switching
to GCC4 it doesn't generate broken code anymore.
From Brad. Tested and verified by myself.


# 1.93 09-Jul-2011 martynas

- Fix the cabs, and cabsf prototypes in the manual pages; it's
been C99 complex (not struct complex) for couple of years.
- Remove BUGS section; cabs is finally prototyped in complex.h.
- Also document cabsl.


# 1.92 09-Jul-2011 martynas

Don't reimplement the same thing twice. OK matthew@.


# 1.91 08-Jul-2011 martynas

Move fabs(3) manual page from libm to libc, for consistency. The
modf(3), frexp(3), ldexp(3), fpclassify(3) pages are in libc, too.


# 1.90 08-Jul-2011 martynas

Remove the stupid commented out fabs(3), frexp(3), and modf(3)
entries and unused implementations. It is clear that this situation
won't change.


# 1.89 08-Jul-2011 martynas

Revert (leaving the complex math part alone). Some stuff is depending
on this historical behavior; so we're stuck in this stupid situation.
No cookie for me.


# 1.88 08-Jul-2011 martynas

Finalize work on complex math routines, now that we have the
extended-precision support. Mostly from Cephes.


# 1.87 08-Jul-2011 martynas

Move fabs(3), frexp(3), and modf(3) to libm--nothing has been using
them in libc for a very long time. OK guenther@.


# 1.86 07-Jul-2011 martynas

Remove math(3). OK theo.


# 1.85 07-Jul-2011 martynas

Document extended-precision routines.


# 1.84 06-Jul-2011 martynas

Don't pull bsd.own.mk for NOPROFILE & NOPIC -- the libm_i387 thing
is gone since 1999.


# 1.83 06-Jul-2011 martynas

Finalize work on the math library. It's time to do this monster
commit, and deal with problems (if any) in tree.

Note that this adds the following functions. Ports with hacks might
need adjustments.

nexttoward(3), fma(3), nexttowardf(3), fmaf(3), acoshl(3), asinhl(3),
atanhl(3), coshl(3), sinhl(3), tanhl(3), expl(3), expm1l(3), logl(3),
log10l(3), log1pl(3), log2l(3), modfl(3), cbrtl(3), hypotl(3),
powl(3), erfl(3), erfcl(3), lgammal(3), tgammal(3), ceill(3),
floorl(3), lrintl(3), llrintl(3), roundl(3), lroundl(3), llroundl(3),
truncl(3), fmodl(3), remainderl(3), remquol(3), nextafterl(3),
nexttowardl(3), fmal(3).

With this commit, our library implements all functionality required
by C99. Documentation bits will follow.


# 1.82 28-May-2011 martynas

Adapt m68k MD functions to extended-precision.
Go for it miod@.


# 1.81 28-May-2011 martynas

Adapt m68k MD functions to single-precision.
Looked over by miod@.


# 1.80 25-May-2011 martynas

Document nearbyint, nearbyintf, nearbyintl.


# 1.79 25-May-2011 martynas

Document C99 floating-point environment.


# 1.78 28-Apr-2011 todd

fix build ok martynas@


# 1.77 28-Apr-2011 martynas

- enable fenv
- add nearbyint, nearbyintf and nearbyintl implemented using fenv


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE
# 1.76 19-Jul-2010 millert

Add barebones manual pages for cimag(3), conj(3) and cproj(3)
OK kettenis@ jmc@


Revision tags: OPENBSD_4_7_BASE
# 1.75 03-Feb-2010 miod

Use MACHINE_CPU instead of MACHINE_ARCH to pick the correct machine dependent
files or directories when applicable.
The inspiration and name of MACHINE_CPU come from NetBSD, although the way to
provide it to Makefiles is completely different.
ok kettenis@


# 1.74 06-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok pirofti@


# 1.73 05-Nov-2009 kettenis

Provide assembly version of sqrtl(3).

ok otto@


# 1.72 26-Oct-2009 kettenis

Add man pages for the fdim/fmin/fmax family of functions and make sure fdiml
is defined on all architectures.

ok jmc@ (man pages) and martynas@


# 1.71 24-Oct-2009 jmc

document log2() and log2f(); from thomas pfaff
ok otto millert martynas


# 1.70 29-Jul-2009 martynas

ieee, and ieeef aren't real, and the amount of functions it documents
is getting ridiculous. split them into groups of copysign, ilogb,
nextafter, scalbn. discussed long ago with millert@


# 1.69 28-Jul-2009 martynas

document scalbln, scalblnf, scalblnl


# 1.68 25-Jul-2009 martynas

int is big enough to fully represent exponents of all supported fp
formats. which even for 80-bit & 128-bit long doubles is only 15
bits. therefore, scalbln, scalblnf, scalblnl are essentially the
same as scalbn, scalbnf, scalbnl with bounds checking so that
LONG_MIN..INT_MIN, and INT_MAX..LONG_MAX ranges properly raise
exceptions & yield correct values. looks good to millert@


# 1.67 15-Jul-2009 martynas

round, roundf, trunc, truncf for hppa; ok kettenis@


Revision tags: OPENBSD_4_6_BASE
# 1.66 19-Apr-2009 martynas

make ldexpf behavior consistent with the double and extended-precision
versions; spotted by kettenis@
while here also remove unused ldexp; it lives in libc
ok kettenis@, "looks good" millert@


# 1.65 10-Apr-2009 martynas

lrint, llrint, lrintf, llrintf for amd64. ok kettenis@, oga@


# 1.64 05-Apr-2009 martynas

implement and use sqrt, sqrtf & fabsf in hardware; since it's
faster that way. tested by myself. discussed w/ & ok miod@, millert@


# 1.63 28-Mar-2009 martynas

add C99-conformant nan, nanf, nanl for vax. always return zero,
since its fp does not have distinguished values for qnans. tested
by naddy@; fixes libnova. ok theo


Revision tags: OPENBSD_4_5_BASE
# 1.62 12-Dec-2008 martynas

space


# 1.61 12-Dec-2008 martynas

document and mlink long double functions. ok jmc@


# 1.60 09-Dec-2008 martynas

pass CPPFLAGS+= -D__STDC__ for vax, to get the right definitions
from asm.h. discussed w/ millert@


# 1.59 09-Dec-2008 martynas

- 80-bit and quad precision trigonometric and other most
important functions: acosl, asinl, atanl, atan2l, cosl,
sinl, tanl, exp2l, frexpl, ilogbl, ldexpl, logbl, scalbnl,
fabsl, hypotl, powl, sqrtl, rintl, copysignl, nanl, fdiml,
fmaxl, fminl. mostly taken from freebsd, needed alot of
changes to adapt. note, these are all c versions; and are
quite slow when architectures have, e.g. sqrt. assembly
versions will be added afterwards
- make them .weak/__weak_alias to the double precision
versions on other archs
- no need to have two finites. finite() and finitef() are
non-standard 3BSD obsolete versions of isfinite. remove
from libm. make them weak_alias in libc to __isfinite and
__isfinitef instead. similarly make 3BSD obsolete versions
of isinf, isinff, isnan, isnanf weak_aliases to C99's
__isinf, __isinff, __isnan, __isnanf
- remove unused infinity.c. the c library has infinities
for each supported platform
- use STRICT_ASSIGN cast hack for _kernel_rem_pio2, so that
the double version has a chance of working on i386 with
extra precision
- avoid storing multiple copies of the pi/2 array, since
it won't vary
- bump major due to removed finite/finitef. although they
will be in libc, which anything is linked to, minor bump
might be enough
ok millert@. tested by sthen@, jsg@, ajacoutot@, kili@, naddy@


# 1.58 07-Oct-2008 martynas

- noieee_src: adapt complex versions of the functions it already
supports (which is all, except the float ones)
ok millert@


# 1.57 16-Sep-2008 martynas

gc unused files, the functions are in libc. ok millert@


# 1.56 11-Sep-2008 martynas

since these got no ieee-specific code anymore, add fmin, fmax, fdim,
fminf, fmaxf, fdimf, fdiml for VAX. looks good to millert@


# 1.55 09-Sep-2008 martynas

sigh, gamma got lost


# 1.54 07-Sep-2008 martynas

- replace dtoa w/ David's gdtoa, version 2008-03-15
- provide proper dtoa locks
- use the real strtof implementation
- add strtold, __hdtoa, __hldtoa
- add %a/%A support
- don't lose precision in printf, don't round to double anymore
- implement extended-precision versions of libc functions: fpclassify,
isnan, isinf, signbit, isnormal, isfinite, now that the ieee.h is
fixed
- separate vax versions of strtof, and __hdtoa
- add complex math support. added functions: cacos, casin, catan,
ccos, csin, ctan, cacosh, casinh, catanh, ccosh, csinh, ctanh, cexp,
clog, cabs, cpow, csqrt, carg, cimag, conj, cproj, creal, cacosf,
casinf, catanf, ccosf, csinf, ctanf, cacoshf, casinhf, catanhf,
ccoshf, csinhf, ctanhf, cexpf, clogf, cabsf, cpowf, csqrtf, cargf,
cimagf, conjf, cprojf, crealf
- add fdim, fmax, fmin
- add log2. (adapted implementation e_log.c. could be more acruate
& faster, but it's good enough for now)
- remove wrappers & cruft in libm, supposed to work-around mistakes
in SVID, etc.; use ieee versions. fixes issues in python 2.6 for
djm@
- make _digittoint static
- proper definitions for i386, and amd64 in ieee.h
- sh, powerpc don't really have extended-precision
- add missing definitions for mips64 (quad), m{6,8}k (96-bit) float.h
for LDBL_*
- merge lead to frac for m{6,8}k, for gdtoa to work properly
- add FRAC*BITS & EXT_TO_ARRAY32 definitions in ieee.h, for hdtoa&ldtoa
to use
- add EXT_IMPLICIT_NBIT definition, which indicates implicit
normalization bit
- add regression tests for libc: fpclassify and printf
- arith.h & gd_qnan.h definitions
- update ieee.h: hppa doesn't have quad-precision, hppa64 does
- add missing prototypes to gdtoaimp
- on 64-bit platforms make sure gdtoa doesn't use a long when it
really wants an int
- etc., what i may have forgotten...
- bump libm major, due to removed&changed symbols
- no libc bump, since this is riding on djm's libc major crank from
a day ago

discussed with / requested by / testing theo, sthen@, djm@, jsg@,
merdely@, jsing@, tedu@, brad@, jakemsr@, and others.
looks good to millert@
parts of the diff ok kettenis@

this commit does not include:
- man page changes


Revision tags: OPENBSD_4_4_BASE
# 1.53 30-Jul-2008 jmc

various markup/grammar fixes for previous, and a missing MLINK
for remquof.3;


# 1.52 29-Jul-2008 martynas

- add man pages for nan and remainder, from freebsd
- mlink drem, dremf, remainderf to remainder; nanf to nan
- describe that drem and dremf are obsolete aliases
- remove descriptions for remainder and remainderf from ieee
looked over by jmc@, but it's easier for him to work on when they
are in tree


# 1.51 29-Jul-2008 martynas

describe exp2, exp2f and mlink them


# 1.50 29-Jul-2008 martynas

remove finite from ieee.3, and unmlink from makefile


# 1.49 24-Jul-2008 martynas

- remove isinff, isnanf. this has been moved to libc
- remove never-enabled signbit. libc has is now
- add C99 implementations, from freebsd, for nan(), nanf() (needed
to write _digittoint for it), exp2(), exp2f(), remquo(), remquof(),
needed STRICT_ASSIGN macro for math_private.h
- bump major
man pages will follow
exp2{,f} has been requested by chl@
ok millert@


# 1.48 21-Jul-2008 martynas

NetBSD's C library supplies these functions -> OpenBSD's C library
supplies these functions. in comments


# 1.47 21-Jul-2008 martynas

rename lround.c lroundf.c llround.c llroundf.c to s_lround.c
s_lroundf.c s_llround.c s_llroundf.c, for naming consistency
looks fine to millert@


# 1.46 16-Jul-2008 martynas

install infnan.3 only for vax. pointed out by millert@
ok millert@


# 1.45 12-Jun-2008 jmc

Makefile: fix MLINKS
lgamma.3: fix STANDARDS and HISTORY


# 1.44 11-Jun-2008 martynas

- on non-ieee, rename gamma to tgamma, the 'true' gamma
- make gamma an alias of lgamma
- on ieee, add tgamma, based on gamma from non-ieee
- fixes for tgamma/lgamma/exp/log, esp. special cases (some from
freebsd); properly raise invalid fp operations on vax
- also some general cleanup, ansification, man page (which was ok
jmc@)
- bump minor
this makes some ports using tgamma possible; also consistifies
behavior across openbsd/ieee and openbsd/non-ieee, and other operating
systems
much thanks sthen@, johan@, steven@, Simon Kuhnle, Wiktor Izdebski
for testing
ok millert@


# 1.43 11-Jun-2008 martynas

drem{,f} are aliases for remainder{,f}, so:
- document and mlink drem{,f}
- drem->remainder on noieee, and make drem an alias
- finite returns integer, n_support.c
- general n_support.c ansification and cleanup
- drem is now an ALTENTRY for remainder, in n_support.S
help with man page from jmc@ and millert@
ok millert@


# 1.42 11-Jun-2008 martynas

add C99 round(), based on ieee_src, for noieee_src. tested on VAX
ok millert@


Revision tags: OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.41 25-Sep-2006 kettenis

Move llrint.c, llrintf.c, lrint.c and lrintf.c to s_llrint.c, s_llrintf.c,
s_lrint.c and s_lrintf.c, and add i387-specific assembler versions.

ok deraadt@, otto@


Revision tags: OPENBSD_4_0_BASE
# 1.40 12-Jul-2006 brad

add some more C99 functions: round(3) and roundf(3).

By Steven G. Kargl <kargl at troutmask dot apl dot washington.edu>
From FreeBSD


# 1.39 19-Mar-2006 kettenis

New amd64 exp(3).
tested by steven@, ok otto@


# 1.38 18-Mar-2006 brad

add some more C99 functions: trunc(3) and truncf(3).

From FreeBSD

ok deraadt@ millert@ otto@ jmc@


# 1.37 14-Mar-2006 otto

amd64 asm code is not correct for exp(+/-Inf), so until somebody
comes up with a correct asm version, use the C version of exp(3).
ok steven@ kettenis@


Revision tags: OPENBSD_3_9_BASE
# 1.36 24-Nov-2005 deraadt

use WANTLINT= (on all architectures)


# 1.35 17-Nov-2005 otto

Introduce a few c99 functions: {l,ll}{rint,round}{,f}. From NetBSD via
jason@. Man page fixes by jmc@, prodding by jsg@. ok mickey@


Revision tags: OPENBSD_3_6_BASE OPENBSD_3_7_BASE OPENBSD_3_8_BASE
# 1.34 06-Apr-2004 brad

remove optimization workaround for sparc64 now that we're using gcc3.

ok deraadt@


Revision tags: OPENBSD_3_5_BASE
# 1.33 28-Feb-2004 deraadt

reach into new amd64 directory


# 1.32 27-Feb-2004 deraadt

change amd64's MACHINE_ARCH from x86_64 to amd64. There are many many
reasons for this, quite a few of them technical, and not all of them
in response to Intel's broken ia32e crud. The gcc toolchain stays at
x86_64 for now.


# 1.31 08-Feb-2004 deraadt

add libm parts for amd64; much from netbsd, integration by mickey.
Instead of mixing the i387 & xmm register components, we decide to
explicitly seperate them. libm is already confusing enough as it is,
thank you very much


Revision tags: OPENBSD_3_3_BASE OPENBSD_3_4_BASE
# 1.30 27-Feb-2003 jason

ieee_test isn't real, rename it to logb.3 and make everything link to that instead.


# 1.29 03-Jan-2003 miod

Get the m88k libm to say no to drugs.


Revision tags: OPENBSD_3_2_BASE
# 1.28 22-May-2002 mickey

add reminder and roundings


# 1.27 22-May-2002 mickey

md sqrt() implementation


Revision tags: OPENBSD_3_1_BASE
# 1.26 30-Jan-2002 naddy

Add native implementations of copysign() and copysignf() on alpha.
From NetBSD; ok millert@


Revision tags: OPENBSD_3_0_BASE
# 1.25 28-Aug-2001 art

The sparc workaround is needed for sparc64 too.


# 1.24 26-Jun-2001 miod

Correctly handle mvme88k settings here.


Revision tags: OPENBSD_2_9_BASE
# 1.23 08-Nov-2000 deraadt

put infnan in there, even though it is depricated


Revision tags: OPENBSD_2_6_BASE OPENBSD_2_7_BASE OPENBSD_2_8_BASE
# 1.22 18-Jul-1999 deraadt

I think that libm_i387 has lived too long


# 1.21 01-Jul-1999 deraadt

provide MLINKS for "f" versions, and make sure they show up in whatis.db


# 1.20 28-Jun-1999 espie

Bye, bye work-around.


# 1.19 03-Jun-1999 deraadt

egcs generates broken code for -O2 on sparc


# 1.18 26-May-1999 espie

Work-around: a few files trigger Internal Compiler Errors if compiled with
-O2 on m68k.


Revision tags: OPENBSD_2_5_BASE
# 1.17 08-Mar-1999 millert

pull in bsd.own.mk for NOPROFILE and NOPIC


# 1.16 07-Mar-1999 deraadt

Never break the source tree builds if a _non-default compilation option_
has an issue. Fix it right, without breaking the source tree.


# 1.15 07-Mar-1999 deraadt

previous commit broke MLINKS install


# 1.14 04-Mar-1999 millert

move .include <bsd.lib.mk> up before NOPROFILE and NOPIC defines are used; evanc@concer.to


# 1.13 16-Nov-1998 deraadt

use _USE_WRITE


Revision tags: OPENBSD_2_3_BASE OPENBSD_2_4_BASE
# 1.12 02-Mar-1998 millert

protect internal "struct excpption" from conflicting one in gcc.


Revision tags: OPENBSD_2_2_BASE
# 1.11 01-Sep-1997 mickey

missing VAX manual for infnan(3), from 4.4 BSD


Revision tags: OPENBSD_2_1_BASE
# 1.10 25-Mar-1997 rahnds

Ok here is the mvme88k userland, minus a few important pieces.
as, ld change need to be merged. It is known that shared libraries and C++
do not work.
If anyone wants to step forward and take over the mvme88k port please do.
It was dumped on me when the original developer, Nivas, left his previous
job and started a new one.

I am trying to get the port in a shape that someone could take over.


# 1.9 14-Nov-1996 mickey

correct LINKS usage


# 1.8 27-Oct-1996 downsj

nopic


# 1.7 27-Oct-1996 deraadt

NOPROFILE; from Mathieu.Herrb@mipnet.fr


# 1.6 25-Oct-1996 downsj

We do i387 by default now.


Revision tags: OPENBSD_2_0_BASE
# 1.5 30-Sep-1996 maja

Add OpenBSD tag. -moj


# 1.4 30-Sep-1996 maja

Allow the Makefile to work on strange machines like VAX :-) -moj


# 1.3 25-Mar-1996 tholo

Somewhat better support for building lint library


# 1.2 14-Dec-1995 deraadt

from netbsd:
Changed w_gamma.c, w_gamma_r.c, w_gammaf.c, w_gammaf_r.c to call
__ieee754_lgamma_r or __ieee754_lgammaf_r.
Removed e_gamma.c, e_gamma_r.c, e_gammaf.c, e_gammaf_r.c, e_lgamma.c,
e_lgamma_f.c.


# 1.1 18-Oct-1995 deraadt

branches: 1.1.1;
Initial revision