11 years agoimprove name lookup performance in corner cases
Rich Felker [Mon, 2 Apr 2012 03:22:16 +0000 (23:22 -0400)]
improve name lookup performance in corner cases

the buffer in getaddrinfo really only matters when /etc/hosts is huge,
but in that case, the huge number of syscalls resulting from a tiny
buffer would seriously impact the performance of every name lookup.

the buffer in __dns.c has also been enlarged a bit so that typical
resolv.conf files will fit fully in the buffer. there's no need to
make it so large as to dominate the syscall overhead for large files,
because resolv.conf should never be large.

11 years agooptimize signbit macro
Rich Felker [Sat, 31 Mar 2012 03:41:43 +0000 (23:41 -0400)]
optimize signbit macro

11 years agomake math.h more c++-friendly
Rich Felker [Sat, 31 Mar 2012 03:33:00 +0000 (23:33 -0400)]
make math.h more c++-friendly

11 years agomath: minor cleanups in ceil and floor
nsz [Thu, 29 Mar 2012 12:09:57 +0000 (14:09 +0200)]
math: minor cleanups in ceil and floor

11 years agomath: remove x86 modf asm
nsz [Thu, 29 Mar 2012 12:05:16 +0000 (14:05 +0200)]
math: remove x86 modf asm
the int part was wrong when -1 < x <= -0 (+0.0 instead of -0.0)
and the size and performace gain of the asm version was negligible

11 years agomath: rewrite modf.c and clean up modff.c
nsz [Thu, 29 Mar 2012 12:03:18 +0000 (14:03 +0200)]
math: rewrite modf.c and clean up modff.c
cleaner implementation with unions and unsigned arithmetic

11 years agomath: fix modfl.c bug
nsz [Wed, 28 Mar 2012 21:51:09 +0000 (23:51 +0200)]
math: fix modfl.c bug
modfl(+-inf) was wrong on ld80 because the explicit msb
was not taken into account during inf vs nan check

11 years agomath: fix a regression in powl and do some cleanups
nsz [Tue, 27 Mar 2012 20:49:37 +0000 (22:49 +0200)]
math: fix a regression in powl and do some cleanups
previously a division was accidentally turned into integer div
(w = -i/NXT;) instead of long double div (w = -i; w /= NXT;)

11 years agomath: add dummy tgamma and tgammaf implementations
nsz [Tue, 27 Mar 2012 20:17:36 +0000 (22:17 +0200)]
math: add dummy tgamma and tgammaf implementations

11 years agomath: remove comment about aliasing lgamma as gamma
nsz [Tue, 27 Mar 2012 20:12:20 +0000 (22:12 +0200)]
math: remove comment about aliasing lgamma as gamma
It is probably not worth supporting gamma.
(it was already deprecated in 4.3BSD)

11 years agomath: fix typo in i386 remquof and remquol asm
nsz [Tue, 27 Mar 2012 20:01:21 +0000 (22:01 +0200)]
math: fix typo in i386 remquof and remquol asm
(fldl instruction was used instead of flds and fldt)

11 years agoMerge branch 'master' of git://
nsz [Mon, 26 Mar 2012 11:47:31 +0000 (13:47 +0200)]
Merge branch 'master' of git://

11 years agoMerge remote branch 'nsz/master'
Rich Felker [Sun, 25 Mar 2012 04:42:51 +0000 (00:42 -0400)]
Merge remote branch 'nsz/master'

11 years agoadd strfmon_l variant (still mostly incomplete)
Rich Felker [Sun, 25 Mar 2012 04:21:20 +0000 (00:21 -0400)]
add strfmon_l variant (still mostly incomplete)

11 years agoupdate COPYRIGHT status of TRE regex code
Rich Felker [Sat, 24 Mar 2012 21:46:42 +0000 (17:46 -0400)]
update COPYRIGHT status of TRE regex code

11 years agoupdate README to remove information no longer relevant as of 0.8.7
Rich Felker [Sat, 24 Mar 2012 21:43:07 +0000 (17:43 -0400)]
update README to remove information no longer relevant as of 0.8.7

11 years agoMerge branch 'master' of git://
nsz [Fri, 23 Mar 2012 10:16:56 +0000 (11:16 +0100)]
Merge branch 'master' of git://

11 years agoasm for hypot and hypotf
Rich Felker [Fri, 23 Mar 2012 05:52:49 +0000 (01:52 -0400)]
asm for hypot and hypotf

special care is made to avoid any inexact computations when either arg
is zero (in which case the exact absolute value of the other arg
should be returned) and to support the special condition that
hypot(┬▒inf,nan) yields inf.

hypotl is not yet implemented since avoiding overflow is nontrivial.

11 years agomake dlerror conform to posix
Rich Felker [Fri, 23 Mar 2012 04:28:20 +0000 (00:28 -0400)]
make dlerror conform to posix

the error status is required to be sticky after failure of dlopen or
dlsym until cleared by dlerror. applications and especially libraries
should never rely on this since it is not thread-safe and subject to
race conditions, but glib does anyway.

11 years agominor rintl.c fix: remove unsupported ldbl format message
nsz [Fri, 23 Mar 2012 00:26:04 +0000 (01:26 +0100)]
minor rintl.c fix: remove unsupported ldbl format message

11 years agofix tgammal: don't set the signgam global
nsz [Fri, 23 Mar 2012 00:18:12 +0000 (01:18 +0100)]
fix tgammal: don't set the signgam global
(tgamma must be thread-safe, signgam is for lgamma* functions)

11 years agosimplify creal and cimag macros
Rich Felker [Fri, 23 Mar 2012 00:00:58 +0000 (20:00 -0400)]
simplify creal and cimag macros

11 years agoadd creal/cimag macros in complex.h (and use them in the functions defs)
Rich Felker [Thu, 22 Mar 2012 19:54:55 +0000 (15:54 -0400)]
add creal/cimag macros in complex.h (and use them in the functions defs)

11 years agotgmath.h: suppress any existing macro definitions before defining macros
Rich Felker [Thu, 22 Mar 2012 19:36:56 +0000 (15:36 -0400)]
tgmath.h: suppress any existing macro definitions before defining macros

this is necessary so that we can freely add macro versions of some of
the math/complex functions without worrying about breaking tgmath.

11 years agoacos.s fix: use the formula acos(x) = atan2(sqrt(1-x),sqrt(1+x))
nsz [Thu, 22 Mar 2012 13:54:47 +0000 (14:54 +0100)]
acos.s fix: use the formula acos(x) = atan2(sqrt(1-x),sqrt(1+x))

the old formula atan2(1,sqrt((1+x)/(1-x))) was faster but
could give nan result at x=1 when the rounding mode is
FE_DOWNWARD (so 1-1 == -0 and 2/-0 == -inf), the new formula
gives -0 at x=+-1 with downward rounding.

11 years agosysconf support for dynamic limits (open files and processes)
Rich Felker [Thu, 22 Mar 2012 05:00:35 +0000 (01:00 -0400)]
sysconf support for dynamic limits (open files and processes)

11 years agofix DECIMAL_DIG definitions
Rich Felker [Wed, 21 Mar 2012 16:42:48 +0000 (12:42 -0400)]
fix DECIMAL_DIG definitions

DECIMAL_DIG is not the same as LDBL_DIG

type_DIG is the maximimum number of decimal digits that can survive a
round trip from decimal to type and back to decimal.

DECIMAL_DIG is the minimum number of decimal digits required in order
for any floating point type to survive the round trip to decimal and
back, and it is generally larger than LDBL_DIG. since the exact
formula is non-trivial, and defining it larger than necessary may be
legal but wasteful, just define the right value in bits/float.h.

11 years agoinitial, very primitive strfmon
Rich Felker [Wed, 21 Mar 2012 04:47:37 +0000 (00:47 -0400)]
initial, very primitive strfmon

11 years agox86_64 math asm, long double functions only
Rich Felker [Wed, 21 Mar 2012 03:29:24 +0000 (23:29 -0400)]
x86_64 math asm, long double functions only

this has not been tested heavily, but it's known to at least assemble
and run in basic usage cases. it's nearly identical to the
corresponding i386 code, and thus expected to be just as correct or
just as incorrect.

11 years agolimits.h: support gcc's -funsigned-char
Rich Felker [Wed, 21 Mar 2012 01:10:06 +0000 (21:10 -0400)]
limits.h: support gcc's -funsigned-char

some software apparently uses this and breaks with musl due to
mismatching definitions...

11 years agoMerge remote branch 'nsz/master'
Rich Felker [Tue, 20 Mar 2012 23:51:11 +0000 (19:51 -0400)]
Merge remote branch 'nsz/master'

11 years agoupgrade to latest upstream TRE regex code (0.8.0)
Rich Felker [Tue, 20 Mar 2012 23:44:05 +0000 (19:44 -0400)]
upgrade to latest upstream TRE regex code (0.8.0)

the main practical results of this change are
1. the regex code is no longer subject to LGPL; it's now 2-clause BSD
2. most (all?) popular nonstandard regex extensions are supported

I hesitate to call this a "sync" since both the old and new code are
heavily modified. in one sense, the old code was "more severely"
modified, in that it was actively hostile to non-strictly-conforming
expressions. on the other hand, the new code has eliminated the
useless translation of the entire regex string to wchar_t prior to
compiling, and now only converts multibyte character literals as

in the future i may use this modified TRE as a basis for writing the
long-planned new regex engine that will avoid multibyte-to-wide
character conversion entirely by compiling multibyte bracket
expressions specific to UTF-8.

11 years agonearbyint optimization (only clear inexact when necessary)
nsz [Tue, 20 Mar 2012 21:49:19 +0000 (22:49 +0100)]
nearbyint optimization (only clear inexact when necessary)

old code saved/restored the fenv (the new code is only as slow
as that when inexact is not set before the call, but some other
flag is set and the rounding is inexact, which is rare)

bench_nearbyint_exact              5000000 N        261 ns/op
bench_nearbyint_inexact_set        5000000 N        262 ns/op
bench_nearbyint_inexact_unset      5000000 N        261 ns/op

bench_nearbyint_exact             10000000 N         94.99 ns/op
bench_nearbyint_inexact_set       25000000 N         65.81 ns/op
bench_nearbyint_inexact_unset     10000000 N         94.97 ns/op

11 years agoremove a fixme comment
nsz [Tue, 20 Mar 2012 19:08:35 +0000 (20:08 +0100)]
remove a fixme comment

11 years agoclean up pow.c and powf.c
nsz [Tue, 20 Mar 2012 19:04:53 +0000 (20:04 +0100)]
clean up pow.c and powf.c
fix comments about special cases

11 years agoclean up powl.c
nsz [Tue, 20 Mar 2012 18:59:50 +0000 (19:59 +0100)]
clean up powl.c
fix special cases, use multiplication instead of scalbnl

11 years agofix a cbrtl.c regression and remove x87 precision setting
nsz [Tue, 20 Mar 2012 14:17:15 +0000 (15:17 +0100)]
fix a cbrtl.c regression and remove x87 precision setting

11 years agoMerge branch 'master' of git://
nsz [Tue, 20 Mar 2012 09:25:02 +0000 (10:25 +0100)]
Merge branch 'master' of git://

11 years agooptimize scalbn family
Rich Felker [Tue, 20 Mar 2012 04:51:32 +0000 (00:51 -0400)]
optimize scalbn family

the fscale instruction is slow everywhere, probably because it
involves a costly and unnecessary integer truncation operation that
ends up being a no-op in common usages. instead, construct a floating
point scale value with integer arithmetic and simply multiply by it,
when possible.

for float and double, this is always possible by going to the
next-larger type. we use some cheap but effective saturating
arithmetic tricks to make sure even very large-magnitude exponents
fit. for long double, if the scaling exponent is too large to fit in
the exponent of a long double value, we simply fallback to the
expensive fscale method.

on atom cpu, these changes speed up scalbn by over 30%. (min rdtsc
timing dropped from 110 cycles to 70 cycles.)

11 years agoremquo asm: return quotient mod 8, as intended by the spec
Rich Felker [Tue, 20 Mar 2012 03:53:52 +0000 (23:53 -0400)]
remquo asm: return quotient mod 8, as intended by the spec

this is a lot more efficient and also what is generally wanted.
perhaps the bit shuffling could be more efficient...

11 years agoMerge branch 'master' of git://
nsz [Tue, 20 Mar 2012 03:09:14 +0000 (04:09 +0100)]
Merge branch 'master' of git://

11 years agouse alternate formula for acos asm to avoid loss of precision
Rich Felker [Tue, 20 Mar 2012 03:08:49 +0000 (23:08 -0400)]
use alternate formula for acos asm to avoid loss of precision

11 years agoMerge branch 'master' of git://
nsz [Tue, 20 Mar 2012 02:13:26 +0000 (03:13 +0100)]
Merge branch 'master' of git://

11 years agoMerge remote branch 'nsz/master'
Rich Felker [Tue, 20 Mar 2012 02:07:43 +0000 (22:07 -0400)]
Merge remote branch 'nsz/master'

11 years agofix exp asm
Rich Felker [Tue, 20 Mar 2012 01:55:53 +0000 (21:55 -0400)]
fix exp asm

exponents (base 2) near 16383 were broken due to (1) wrong cutoff, and
(2) inability to fit the necessary range of scalings into a long
double value.

as a solution, we fall back to using frndint/fscale for insanely large
exponents, and also have to special-case infinities here to avoid
inf-inf generating nan.

thankfully the costly code never runs in normal usage cases.

11 years agoMerge branch 'master' of git://
nsz [Mon, 19 Mar 2012 22:55:06 +0000 (23:55 +0100)]
Merge branch 'master' of git://

11 years agocode cleanup of named constants
nsz [Mon, 19 Mar 2012 22:41:19 +0000 (23:41 +0100)]
code cleanup of named constants

zero, one, two, half are replaced by const literals
The policy was to use the f suffix for float consts (1.0f),
but don't use suffix for long double consts (these consts
can be exactly represented as double).

11 years agofix remainder*.c: remove useless long double cast
nsz [Mon, 19 Mar 2012 22:39:47 +0000 (23:39 +0100)]
fix remainder*.c: remove useless long double cast

11 years agodon't try to create non-standard denormalization signal
nsz [Mon, 19 Mar 2012 22:30:45 +0000 (23:30 +0100)]
don't try to create non-standard denormalization signal

Underflow exception is only raised when the result is
invalid, but fmod is always exact. x87 has a denormalization
exception, but that's nonstandard. And the superflous *1.0
will be optimized away by any compiler that does not honor
signaling nans.

11 years agoMerge remote branch 'nsz/master'
Rich Felker [Mon, 19 Mar 2012 22:30:35 +0000 (18:30 -0400)]
Merge remote branch 'nsz/master'

11 years agonew modff.c code, fix nan handling in modfl
nsz [Mon, 19 Mar 2012 22:27:45 +0000 (23:27 +0100)]
new modff.c code, fix nan handling in modfl

11 years agouse scalbn or *2.0 instead of ldexp, fix fmal
nsz [Mon, 19 Mar 2012 21:57:58 +0000 (22:57 +0100)]
use scalbn or *2.0 instead of ldexp, fix fmal

Some code assumed ldexp(x, 1) is faster than 2.0*x,
but ldexp is a wrapper around scalbn which uses
multiplications inside, so this optimization is

This commit also fixes fmal which accidentally
used ldexp instead of ldexpl loosing precision.

There are various additional changes from the
work-in-progress const cleanups.

11 years agofix long double const workaround in cbrtl
nsz [Mon, 19 Mar 2012 21:49:03 +0000 (22:49 +0100)]
fix long double const workaround in cbrtl

11 years agodon't inline __rem_pio2l so the code size is smaller
nsz [Mon, 19 Mar 2012 18:26:31 +0000 (19:26 +0100)]
don't inline __rem_pio2l so the code size is smaller

11 years agominor fix in __tanl (get sign properly)
nsz [Mon, 19 Mar 2012 18:14:32 +0000 (19:14 +0100)]
minor fix in __tanl (get sign properly)

11 years agobug fix: wrong opcode for writing long long
Rich Felker [Mon, 19 Mar 2012 17:58:47 +0000 (13:58 -0400)]
bug fix: wrong opcode for writing long long

11 years agoremove long double const workarounds
nsz [Mon, 19 Mar 2012 17:52:17 +0000 (18:52 +0100)]
remove long double const workarounds

Some long double consts were stored in two doubles as a workaround
for x86_64 and i386 with the following comment:
/* Long double constants are slow on these arches, and broken on i386. */
This is most likely old gcc bug related to the default x87 fpu
precision setting (it's double instead of double extended on BSD).

11 years agofix erfl wrapper for long double==double case
nsz [Mon, 19 Mar 2012 17:06:06 +0000 (18:06 +0100)]
fix erfl wrapper for long double==double case

11 years agoasm for log1p
Rich Felker [Mon, 19 Mar 2012 14:59:41 +0000 (10:59 -0400)]
asm for log1p

11 years agoasm for log2
Rich Felker [Mon, 19 Mar 2012 14:43:28 +0000 (10:43 -0400)]
asm for log2

11 years agoasm for remquo
Rich Felker [Mon, 19 Mar 2012 13:42:51 +0000 (09:42 -0400)]
asm for remquo

this could perhaps use some additional testing for corner cases, but
it seems to be correct.

11 years agooptimize exponential asm for i386
Rich Felker [Mon, 19 Mar 2012 13:00:30 +0000 (09:00 -0400)]
optimize exponential asm for i386

up to 30% faster exp2 by avoiding slow frndint and fscale functions.
expm1 also takes a much more direct path for small arguments (the
expected usage case).

11 years agoMerge remote branch 'nsz/master'
Rich Felker [Mon, 19 Mar 2012 10:28:22 +0000 (06:28 -0400)]
Merge remote branch 'nsz/master'

11 years agofix broken modf family functions
Rich Felker [Mon, 19 Mar 2012 10:22:54 +0000 (06:22 -0400)]
fix broken modf family functions

11 years agoasm for modf functions
Rich Felker [Mon, 19 Mar 2012 09:56:41 +0000 (05:56 -0400)]
asm for modf functions

11 years agosimplify scalbn*.c implementations
nsz [Mon, 19 Mar 2012 09:54:07 +0000 (10:54 +0100)]
simplify scalbn*.c implementations

The old scalbn.c was wrong and slow, the new one is just slow.
(scalbn(0x1p+1023,-2097) should give 0x1p-1074, but the old code gave 0)

11 years agoMerge branch 'master' of git://
nsz [Mon, 19 Mar 2012 09:50:42 +0000 (10:50 +0100)]
Merge branch 'master' of git://

11 years agoasm for floor/ceil/trunc
Rich Felker [Mon, 19 Mar 2012 09:42:04 +0000 (05:42 -0400)]
asm for floor/ceil/trunc

11 years agoMerge branch 'master' of git://
nsz [Mon, 19 Mar 2012 09:20:24 +0000 (10:20 +0100)]
Merge branch 'master' of git://

11 years agoasm for scalbn family
Rich Felker [Mon, 19 Mar 2012 09:15:30 +0000 (05:15 -0400)]
asm for scalbn family

unlike some implementations, these functions perform the equivalent of
gcc's -ffloat-store on the result before returning. this is necessary
to raise underflow/overflow/inexact exceptions, perform the correct
rounding with denormals, etc.

11 years agoasm for inverse trig functions
Rich Felker [Mon, 19 Mar 2012 08:56:07 +0000 (04:56 -0400)]
asm for inverse trig functions

unlike trig functions, these are easy to do in asm because they do not
involve (arbitrary-precision) argument reduction. fpatan automatically
takes care of domain issues, and in asin and acos, fsqrt takes care of
them for us.

11 years agoMerge branch 'master' of git://
nsz [Mon, 19 Mar 2012 07:01:21 +0000 (08:01 +0100)]
Merge branch 'master' of git://

11 years agoasm for log functions
Rich Felker [Mon, 19 Mar 2012 03:50:54 +0000 (23:50 -0400)]
asm for log functions

11 years agofix broken exponential asm
Rich Felker [Mon, 19 Mar 2012 03:17:28 +0000 (23:17 -0400)]
fix broken exponential asm

infinities were getting converted into nans. the new code simply tests
for infinity and replaces it with a large magnitude value of the same

also, the fcomi instruction is apparently not part of the i387
instruction set, so avoid using it.

11 years agoasm for lrint family on i386
Rich Felker [Mon, 19 Mar 2012 02:05:20 +0000 (22:05 -0400)]
asm for lrint family on i386

11 years agoMerge branch 'master' of git://
nsz [Mon, 19 Mar 2012 01:55:31 +0000 (02:55 +0100)]
Merge branch 'master' of git://

11 years agoasm exponential functions for i386
Rich Felker [Mon, 19 Mar 2012 01:43:43 +0000 (21:43 -0400)]
asm exponential functions for i386

11 years agoremove unnecessary TODO comments from fma.c
nsz [Mon, 19 Mar 2012 01:05:57 +0000 (02:05 +0100)]
remove unnecessary TODO comments from fma.c

11 years agofmal bug fix: nan input should not raise exception
nsz [Sun, 18 Mar 2012 23:59:16 +0000 (00:59 +0100)]
fmal bug fix: nan input should not raise exception

11 years agoadd fma implementation for x86
nsz [Sun, 18 Mar 2012 23:36:55 +0000 (00:36 +0100)]
add fma implementation for x86

correctly rounded double precision fma using extended
precision arithmetics for ld80 systems (x87)

11 years agoassembly optimizations for fmod/remainder functions
Rich Felker [Sun, 18 Mar 2012 21:09:34 +0000 (17:09 -0400)]
assembly optimizations for fmod/remainder functions

11 years agoasm versions of some simple math functions for i386 and x86_64
Rich Felker [Sun, 18 Mar 2012 20:43:54 +0000 (16:43 -0400)]
asm versions of some simple math functions for i386 and x86_64

these are functions that have direct fpu approaches to implementation
without problematic exception or rounding issues. x86_64 lacks
float/double versions because i'm unfamiliar with the necessary sse
code for performing these operations.

11 years agosimplify lround and llround functions
nsz [Sun, 18 Mar 2012 19:52:33 +0000 (20:52 +0100)]
simplify lround and llround functions

Simple wrappers around round is enough because
spurious inexact exception is allowed.

11 years agomake lrint and llrint functions work without fenv support
nsz [Sun, 18 Mar 2012 19:40:43 +0000 (20:40 +0100)]
make lrint and llrint functions work without fenv support

11 years agofaster lrint and llrint functions
nsz [Sun, 18 Mar 2012 18:27:39 +0000 (19:27 +0100)]
faster lrint and llrint functions

A faster workaround for spurious inexact exceptions
when the result cannot be represented. The old code
actually could be wrong, because gcc reordered the
integer conversion and the exception check.

11 years agofix loads of missing const in new libm, and some global vars (?!) in powl
Rich Felker [Sun, 18 Mar 2012 05:58:28 +0000 (01:58 -0400)]
fix loads of missing const in new libm, and some global vars (?!) in powl

11 years agomove nonstandard gamma() etc. to _GNU_SOURCE only
Rich Felker [Sun, 18 Mar 2012 01:48:48 +0000 (21:48 -0400)]
move nonstandard gamma() etc. to _GNU_SOURCE only

it's not even provided in the library at the moment, but could easily
be provided with weak aliases if desired.

11 years agoc++ seems to want some casts in the float representation-access macros
Rich Felker [Sun, 18 Mar 2012 01:40:10 +0000 (21:40 -0400)]
c++ seems to want some casts in the float representation-access macros

11 years agorelease notes for 0.8.7
Rich Felker [Sun, 18 Mar 2012 00:35:25 +0000 (20:35 -0400)]
release notes for 0.8.7

11 years agotry fixing/optimizing x86_64 fenv exception code
Rich Felker [Sun, 18 Mar 2012 00:10:02 +0000 (20:10 -0400)]
try fixing/optimizing x86_64 fenv exception code

untested; may need followup-fixes.

11 years agooptimize x86 feclearexcept
Rich Felker [Sat, 17 Mar 2012 23:29:00 +0000 (19:29 -0400)]
optimize x86 feclearexcept

if all exception flags will be cleared, we can avoid the expensive
store/reload of the environment and just use the fnclex instruction.

11 years agofix x86_64 fe[gs]etround, analogous to nsz's x86 changes
Rich Felker [Sat, 17 Mar 2012 22:02:20 +0000 (18:02 -0400)]
fix x86_64 fe[gs]etround, analogous to nsz's x86 changes

11 years agominor 387 fenv optimizations
Rich Felker [Sat, 17 Mar 2012 21:49:10 +0000 (17:49 -0400)]
minor 387 fenv optimizations

11 years agoMerge remote branch 'nsz/master'
Rich Felker [Sat, 17 Mar 2012 21:34:30 +0000 (17:34 -0400)]
Merge remote branch 'nsz/master'

11 years agofix i386 fegetround and make fesetround faster
nsz [Sat, 17 Mar 2012 12:46:15 +0000 (13:46 +0100)]
fix i386 fegetround and make fesetround faster

Note that the new fesetround has slightly different semantics:

Storing the floating-point environment with fnstenv makes the
next fldenv (or fldcw) "non-signaling", so unmasked and pending
exceptions does not invoke the exception handler.
(These are rare since exceptions are handled immediately and by
default all exceptions are masked anyway. But if one manually
unmasks an exception in the control word then either sets the
corresponding exception flag in the status word or the execution
of an exception raising floating-point operation gets interrupted
then it may happen).
So the old implementation did not trap in some rare cases
where the new implementation traps.

However POSIX does not specify anything like the x87 exception
handling traps and the fnstenv/fldenv pair is significantly slower
than the fnstcw/fldcw pair (new code is about 5x faster here and
it's dominated by the function call overhead).

11 years agodon't fail on inability to install dynamic linker (e.g. if not root)
Rich Felker [Sat, 17 Mar 2012 04:48:55 +0000 (00:48 -0400)]
don't fail on inability to install dynamic linker (e.g. if not root)

11 years agoone more fenv availability issue: lround
Rich Felker [Sat, 17 Mar 2012 04:02:36 +0000 (00:02 -0400)]
one more fenv availability issue: lround

11 years agomake fma and lrint functions build without full fenv support
Rich Felker [Sat, 17 Mar 2012 03:58:49 +0000 (23:58 -0400)]
make fma and lrint functions build without full fenv support

this is necessary to support archs where fenv is incomplete or
unavailable (presently arm). fma, fmal, and the lrint family should
work perfectly fine with this change; fmaf is slightly broken with
respect to rounding as it depends on non-default rounding modes to do
its work.

11 years agoother side of the signgam namespace fix: use the internal name
Rich Felker [Sat, 17 Mar 2012 01:20:53 +0000 (21:20 -0400)]
other side of the signgam namespace fix: use the internal name

11 years agomake signgam a weak alias for an internal symbol
Rich Felker [Sat, 17 Mar 2012 01:18:48 +0000 (21:18 -0400)]
make signgam a weak alias for an internal symbol

otherwise, the standard C lgamma function will clobber a symbol in the
namespace reserved for the application.