Age | Commit message (Collapse) | Author | Lines |
2012年12月19日 | math: more correct tgmath.h type cast logic | Szabolcs Nagy | -32/+17 |
|
__IS_FP is a portable integer constant expression now
(uses that unsigned long long is larger than float)
the result casting logic should work now on all compilers
supporting typeof
|
2012年12月19日 | math: new type cast logic in tgmath.h | Szabolcs Nagy | -25/+58 |
|
* return type logic is simplified a bit and fixed (see below)
* return type of conj and cproj were wrong on int arguments
* added comments about the pending issues
(usually we don't have comments in public headers but this is
not the biggest issue with tgmath.h)
casting the result to the right type cannot be done in c99
(c11 _Generic can solve this but that is not widely supported),
so the typeof extension of gcc is used and that the ?: operator
has special semantics when one of the operands is a null
pointer constant
the standard is very strict about the definition of null
pointer constants so typeof with ?: is still not enough so
compiler specific workaround is used for now
on gcc '!1.0' is a null pointer constant so we can use the old
__IS_FP logic (eventhough it's non-standard)
on clang (and on gcc as well) 'sizeof(void)-1' is a null
pointer constant so we can use
!(sizeof(*(0?(int*)0:(void*)__IS_FP(x)))-1)
(this is non-standard as well), the old logic is used by
default and this new one on clang
|
2012年12月14日 | fixed tgmath.h for functions with integral result | Szabolcs Nagy | -7/+9 |
|
in tgmath.h the return values are casted to the appropriate
floating-point type (if the compiler supports gcc __typeof__),
this is wrong in case of ilogb, lrint, llrint, lround, llround
which do not need such cast
|
2012年05月28日 | math: fix nextafter definition in tgmath.h | nsz | -1/+1 |
|
2012年03月22日 | tgmath.h: suppress any existing macro definitions before defining macros | Rich Felker | -0/+63 |
|
this is necessary so that we can freely add macro versions of some of
the math/complex functions without worrying about breaking tgmath.
|
2012年03月13日 | first commit of the new libm! | Rich Felker | -0/+187 |
|
thanks to the hard work of Szabolcs Nagy (nsz), identifying the best
(from correctness and license standpoint) implementations from freebsd
and openbsd and cleaning them up! musl should now fully support c99
float and long double math functions, and has near-complete complex
math support. tgmath should also work (fully on gcc-compatible
compilers, and mostly on any c99 compiler).
based largely on commit 0376d44a890fea261506f1fc63833e7a686dca19 from
nsz's libm git repo, with some additions (dummy versions of a few
missing long double complex functions, etc.) by me.
various cleanups still need to be made, including re-adding (if
they're correct) some asm functions that were dropped.
|