mirror of
git://sourceware.org/git/glibc.git
synced 2025-04-12 14:21:18 +08:00
Update.
* math/tgmath.h: Make nested function calls work.
This commit is contained in:
parent
10411f2d14
commit
48244d0931
@ -1,5 +1,7 @@
|
||||
1998-10-19 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* math/tgmath.h: Make nested function calls work.
|
||||
|
||||
* include/ldsodefs.h: Fix typo.
|
||||
|
||||
* posix/Makefile (tests): Add tst-preadwrite.
|
||||
|
26
FAQ
26
FAQ
@ -89,6 +89,7 @@ please let me know.
|
||||
which is not acceptable for me. What can I do?
|
||||
2.22. I just upgraded my Linux system to glibc and now I get
|
||||
errors whenever I try to link any program.
|
||||
2.23. When I use nscd the machine freezes.
|
||||
|
||||
3. Source and binary incompatibilities, and what to do about them
|
||||
|
||||
@ -223,16 +224,16 @@ to them.
|
||||
|
||||
1.5. Which compiler should I use for powerpc?
|
||||
|
||||
{GK} You want to use egcs 1.0.1 or later (together with the right versions
|
||||
{GK} You want to use egcs 1.1 or later (together with the right versions
|
||||
of all the other tools, of course).
|
||||
|
||||
In fact, egcs 1.0.1 has a serious bug that prevents a clean make, relating
|
||||
to switch statement folding. It also causes the resulting shared libraries
|
||||
to use more memory than they should. There is a patch at:
|
||||
In fact, egcs 1.1 has a bug that causes linuxthreads to be
|
||||
miscompiled, resulting in segmentation faults when using condition
|
||||
variables. There is a temporary patch at:
|
||||
|
||||
<http://discus.anu.edu.au/~geoffk/egcs-1.0.1-geoffk.diff>
|
||||
<http://discus.anu.edu.au/~geoffk/egcs-3.diff>
|
||||
|
||||
Later versions of egcs may fix these problems.
|
||||
Later versions of egcs may fix this problem.
|
||||
|
||||
|
||||
1.6. Do I need some more things to compile GNU C Library?
|
||||
@ -889,6 +890,19 @@ an installation of glibc that is configured with --prefix=/usr should help
|
||||
detect these situations. If the script reports problems, something is
|
||||
really screwed up.
|
||||
|
||||
|
||||
2.23. When I use nscd the machine freezes.
|
||||
|
||||
{UD} It is well known that you cannot use nscd with Linux 2.0.*. There
|
||||
is functionality missing in the kernel and work-arounds are not suitable.
|
||||
Beside this some parts of the kernel are too buggy when it comes to using
|
||||
threads.
|
||||
|
||||
So you have the possibilities to run Linux 2.0.* or update to a higher
|
||||
version and start using nscd.
|
||||
|
||||
Note that I have at this point no information about any other platform.
|
||||
|
||||
|
||||
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
||||
|
||||
|
12
FAQ.in
12
FAQ.in
@ -731,6 +731,18 @@ an installation of glibc that is configured with --prefix=/usr should help
|
||||
detect these situations. If the script reports problems, something is
|
||||
really screwed up.
|
||||
|
||||
?? When I use nscd the machine freezes.
|
||||
|
||||
{UD} It is well known that you cannot use nscd with Linux 2.0.*. There
|
||||
is functionality missing in the kernel and work-arounds are not suitable.
|
||||
Beside this some parts of the kernel are too buggy when it comes to using
|
||||
threads.
|
||||
|
||||
So you have the possibilities to run Linux 2.0.* or update to a higher
|
||||
version and start using nscd.
|
||||
|
||||
Note that I have at this point no information about any other platform.
|
||||
|
||||
? Source and binary incompatibilities, and what to do about them
|
||||
|
||||
?? I expect GNU libc to be 100% source code compatible with
|
||||
|
360
NEWS
360
NEWS
@ -55,8 +55,30 @@ Version 2.1
|
||||
|
||||
* An implementation of profiling shared libraries was added by Ulrich Drepper.
|
||||
|
||||
* Thorsten Kukuk provided an implementation for a caching daemon for NSS
|
||||
(nscd).
|
||||
* Thorsten Kukuk and Ulrich Drepper provided an implementation for a caching
|
||||
daemon for NSS (nscd).
|
||||
|
||||
Missing a better place here are some numbers on improvements. Under
|
||||
Linux 2.1.125 un-tar-ing the kernel sources takes
|
||||
|
||||
user system wall
|
||||
|
||||
using local files 12.19s 6.88s 22.91s
|
||||
|
||||
using NIS 13.92s 8.91s 26.34s
|
||||
|
||||
using NIS & nscd 10.37s 7.34s 25.30s
|
||||
|
||||
using NIS & old nscd [1] 13.83s 8.32s 29.60s
|
||||
|
||||
When NIS+ is used instead of NIS the benefit from using nscd is much bigger.
|
||||
Keep in mind that non-namelookup related operations dominate above times.
|
||||
It was just a common complain that using NIS+ unpacking the kernel is
|
||||
horribly slow. When using nscd unpacking is now even faster than using
|
||||
NIS.
|
||||
|
||||
[1] The old nscd implementation is not anymore available since it was
|
||||
distributed with glibc up to version 2.0.98.
|
||||
|
||||
* Tim Waugh provided an implementation of the POSIX.2 wordexp function family.
|
||||
|
||||
@ -66,6 +88,340 @@ Version 2.1
|
||||
and $PLATFORM) in RPATHs and similar strings (Ulrich Drepper).
|
||||
|
||||
* rcmd can now handle netgroups (Dick Streefland).
|
||||
|
||||
* Interface changes relative to the latest 2.0.x release:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
addseverity NEW: fmtmsg
|
||||
alphasort64 NEW: LFS
|
||||
argp_err_exit_status NEW: argp
|
||||
argp_error NEW: argp
|
||||
argp_failure NEW: argp
|
||||
argp_help NEW: argp
|
||||
argp_parse NEW: argp
|
||||
argp_program_bug_address NEW: argp
|
||||
argp_program_version NEW: argp
|
||||
argp_program_version_hook NEW: argp
|
||||
argp_state_help NEW: argp
|
||||
argp_usage NEW: argp
|
||||
authdes_create NEW: NIS+
|
||||
authdes_getucred NEW: NIS+
|
||||
authdes_pk_create NEW: NIS+
|
||||
backtrace NEW: GNU ext.
|
||||
backtrace_symbols NEW: GNU ext.
|
||||
backtrace_symbols_fd NEW: GNU ext.
|
||||
cacos NEW: ISO C 9x
|
||||
cacosf NEW: ISO C 9x
|
||||
cacosh NEW: ISO C 9x
|
||||
cacoshf NEW: ISO C 9x
|
||||
cacoshl NEW: ISO C 9x
|
||||
cacosl NEW: ISO C 9x
|
||||
capget NEW: kernel
|
||||
capset NEW: kernel
|
||||
carg NEW: ISO C 9x
|
||||
cargf NEW: ISO C 9x
|
||||
cargl NEW: ISO C 9x
|
||||
casin NEW: ISO C 9x
|
||||
casinf NEW: ISO C 9x
|
||||
casinh NEW: ISO C 9x
|
||||
casinhf NEW: ISO C 9x
|
||||
casinhl NEW: ISO C 9x
|
||||
casinl NEW: ISO C 9x
|
||||
catan NEW: ISO C 9x
|
||||
catanf NEW: ISO C 9x
|
||||
catanh NEW: ISO C 9x
|
||||
catanhf NEW: ISO C 9x
|
||||
catanhl NEW: ISO C 9x
|
||||
catanl NEW: ISO C 9x
|
||||
cbc_crypt NEW: NIS+
|
||||
ccos NEW: ISO C 9x
|
||||
ccosf NEW: ISO C 9x
|
||||
ccosh NEW: ISO C 9x
|
||||
ccoshf NEW: ISO C 9x
|
||||
ccoshl NEW: ISO C 9x
|
||||
ccosl NEW: ISO C 9x
|
||||
cexp NEW: ISO C 9x
|
||||
cexpf NEW: ISO C 9x
|
||||
cexpl NEW: ISO C 9x
|
||||
cimag NEW: ISO C 9x
|
||||
cimagf NEW: ISO C 9x
|
||||
cimagl NEW: ISO C 9x
|
||||
clearerr_locked REMOVED
|
||||
clntunix_create NEW: sunrpc ext
|
||||
clog NEW: ISO C 9x
|
||||
clog10 NEW: ISO C 9x
|
||||
clog10f NEW: ISO C 9x
|
||||
clog10l NEW: ISO C 9x
|
||||
clogf NEW: ISO C 9x
|
||||
clogl NEW: ISO C 9x
|
||||
conj NEW: ISO C 9x
|
||||
conjf NEW: ISO C 9x
|
||||
conjl NEW: ISO C 9x
|
||||
cpow NEW: ISO C 9x
|
||||
cpowf NEW: ISO C 9x
|
||||
cpowl NEW: ISO C 9x
|
||||
cproj NEW: ISO C 9x
|
||||
cprojf NEW: ISO C 9x
|
||||
cprojl NEW: ISO C 9x
|
||||
creal NEW: ISO C 9x
|
||||
crealf NEW: ISO C 9x
|
||||
creall NEW: ISO C 9x
|
||||
creat64 NEW: LFS
|
||||
csin NEW: ISO C 9x
|
||||
csinf NEW: ISO C 9x
|
||||
csinh NEW: ISO C 9x
|
||||
csinhf NEW: ISO C 9x
|
||||
csinhl NEW: ISO C 9x
|
||||
csinl NEW: ISO C 9x
|
||||
csqrt NEW: ISO C 9x
|
||||
csqrtf NEW: ISO C 9x
|
||||
csqrtl NEW: ISO C 9x
|
||||
ctan NEW: ISO C 9x
|
||||
ctanf NEW: ISO C 9x
|
||||
ctanh NEW: ISO C 9x
|
||||
ctanhf NEW: ISO C 9x
|
||||
ctanhl NEW: ISO C 9x
|
||||
ctanl NEW: ISO C 9x
|
||||
des_setparity NEW: NIS+
|
||||
ecb_crypt NEW: NIS+
|
||||
endutxent NEW: utmpx
|
||||
exp10 NEW: ISO C 9x
|
||||
exp10f NEW: ISO C 9x
|
||||
exp10l NEW: ISO C 9x
|
||||
exp2 NEW: ISO C 9x
|
||||
exp2f NEW: ISO C 9x
|
||||
exp2l NEW: ISO C 9x
|
||||
fattach NEW: STREAMS
|
||||
fdetach NEW: STREAMS
|
||||
fdim NEW: ISO C 9x
|
||||
fdimf NEW: ISO C 9x
|
||||
fdiml NEW: ISO C 9x
|
||||
feclearexcept NEW: ISO C 9x
|
||||
fegetenv NEW: ISO C 9x
|
||||
fegetexceptflag NEW: ISO C 9x
|
||||
fegetround NEW: ISO C 9x
|
||||
feholdexcept NEW: ISO C 9x
|
||||
feof_locked REMOVED
|
||||
feraiseexcept NEW: ISO C 9x
|
||||
ferror_locked REMOVED
|
||||
fesetenv NEW: ISO C 9x
|
||||
fesetexceptflag NEW: ISO C 9x
|
||||
fesetround NEW: ISO C 9x
|
||||
fetestexcept NEW: ISO C 9x
|
||||
feupdateenv NEW: ISO C 9x
|
||||
fflush_locked REMOVED
|
||||
ffsl NEW: GNU ext.
|
||||
ffsll NEW: GNU ext.
|
||||
fgetpos64 NEW: LFS
|
||||
fgets_unlocked NEW: GNU ext.
|
||||
fileno_locked REMOVED
|
||||
fma NEW: ISO C 9x
|
||||
fmaf NEW: ISO C 9x
|
||||
fmal NEW: ISO C 9x
|
||||
fmax NEW: ISO C 9x
|
||||
fmaxf NEW: ISO C 9x
|
||||
fmaxl NEW: ISO C 9x
|
||||
fmin NEW: ISO C 9x
|
||||
fminf NEW: ISO C 9x
|
||||
fminl NEW: ISO C 9x
|
||||
fmtmsg NEW: fmtmsg
|
||||
fopen64 NEW: LFS
|
||||
fputc_locked REMOVED
|
||||
fputs_unlocked NEW: GNU ext.
|
||||
fread_unlocked NEW: GNU ext.
|
||||
freopen64 NEW: LFS
|
||||
fseeko NEW: Unix98
|
||||
fsetpos64 NEW: LFS
|
||||
fstatfs64 NEW: LFS
|
||||
fstatvfs NEW: Unix98
|
||||
fstatvfs64 NEW: LFS
|
||||
ftello NEW: Unix98
|
||||
ftello64 NEW: LFS
|
||||
ftruncate64 NEW: LFS
|
||||
ftw64 NEW: LFS
|
||||
fwrite_unlocked NEW: GNU ext.
|
||||
gai_strerror NEW: IPv6
|
||||
gamma_r REMOVED
|
||||
gammaf_r REMOVED
|
||||
gammal_r REMOVED
|
||||
getchar_locked REMOVED
|
||||
getdate NEW: Unix98
|
||||
getdate_err NEW: Unix98
|
||||
getdate_r NEW: GNU ext.
|
||||
getmsg NEW: STREAMS
|
||||
getnameinfo NEW: IPv6
|
||||
getnetname NEW: IPv6
|
||||
getpmsg NEW: STREAMS
|
||||
getpt NEW: Unix98 PTY
|
||||
getrlimit64 NEW: LFS
|
||||
getutxent NEW: utmpx
|
||||
getutxid NEW: utmpx
|
||||
getutxline NEW: utmpx
|
||||
glob64 NEW: GNU ext.
|
||||
globfree64 NEW: GNU ext.
|
||||
gnu_get_libc_release NEW: GNU ext.
|
||||
gnu_get_libc_version NEW: GNU ext.
|
||||
grantpt NEW: Unix98 PTY
|
||||
host2netname NEW: IPv6
|
||||
iconv NEW: iconv
|
||||
iconv_close NEW: iconv
|
||||
iconv_open NEW: iconv
|
||||
if_freenameindex NEW: IPv6
|
||||
if_indextoname NEW: IPv6
|
||||
if_nameindex NEW: IPv6
|
||||
if_nametoindex NEW: IPv6
|
||||
in6addr_any NEW: IPv6
|
||||
in6addr_loopback NEW: IPv6
|
||||
inet6_isipv4mapped NEW: IPv6
|
||||
isastream NEW: STREAMS
|
||||
iswblank NEW: GNU ext.
|
||||
key_decryptsession NEW: NIS+
|
||||
key_decryptsession_pk NEW: NIS+
|
||||
key_encryptsession NEW: NIS+
|
||||
key_encryptsession_pk NEW: NIS+
|
||||
key_gendes NEW: NIS+
|
||||
key_get_conv NEW: NIS+
|
||||
key_secretkey_is_set NEW: NIS+
|
||||
key_setnet NEW: NIS+
|
||||
key_setsecret NEW: NIS+
|
||||
llrint NEW: ISO C 9x
|
||||
llrintf NEW: ISO C 9x
|
||||
llrintl NEW: ISO C 9x
|
||||
llround NEW: ISO C 9x
|
||||
llroundf NEW: ISO C 9x
|
||||
llroundl NEW: ISO C 9x
|
||||
log2 NEW: ISO C 9x
|
||||
log2f NEW: ISO C 9x
|
||||
log2l NEW: ISO C 9x
|
||||
lrint NEW: ISO C 9x
|
||||
lrintf NEW: ISO C 9x
|
||||
lrintl NEW: ISO C 9x
|
||||
lround NEW: ISO C 9x
|
||||
lroundf NEW: ISO C 9x
|
||||
lroundl NEW: ISO C 9x
|
||||
lseek64 NEW: LFS
|
||||
makecontext NEW: Unix98
|
||||
mempcpy NEW: GNU ext.
|
||||
mmap64 NEW: LFS
|
||||
moncontrol REMOVED
|
||||
modify_ldt NEW: kernel
|
||||
nan NEW: ISO C 9x
|
||||
nanf NEW: ISO C 9x
|
||||
nanl NEW: ISO C 9x
|
||||
nearbyint NEW: ISO C 9x
|
||||
nearbyintf NEW: ISO C 9x
|
||||
nearbyintl NEW: ISO C 9x
|
||||
netname2host NEW: IPv6
|
||||
netname2user NEW: IPv6
|
||||
nextafterx NEW: ISO C 9x
|
||||
nextafterxf NEW: ISO C 9x
|
||||
nftw NEW: Unix98
|
||||
nftw64 NEW: LFS
|
||||
open64 NEW: LFS
|
||||
passwd2des NEW: NIS+
|
||||
pow10 NEW: GNU ext.
|
||||
pow10f NEW: GNU ext.
|
||||
pow10l NEW: GNU ext.
|
||||
pread NEW: Unix98
|
||||
pread64 NEW: LFS
|
||||
printf_size NEW: GNU ext.
|
||||
printf_size_info NEW: GNU ext.
|
||||
profil_counter REMOVED
|
||||
pthread_mutexattr_getkind_np REPLACED
|
||||
pthread_mutexattr_setkind_np REPLACED
|
||||
ptsname NEW: Unix98 PTY
|
||||
ptsname_r NEW: Unix98 PTY
|
||||
putc_locked REMOVED
|
||||
putchar_locked REMOVED
|
||||
putgrent NEW: GNU ext.
|
||||
putmsg NEW: STREAMS
|
||||
putpmsg NEW: STREAMS
|
||||
pututxline NEW: utmpx
|
||||
pwrite NEW: Unix98
|
||||
pwrite64 NEW: LFS
|
||||
readdir64 NEW: LFS
|
||||
readdir64_r NEW: LFS
|
||||
remquo NEW: ISO C 9x
|
||||
remquof NEW: ISO C 9x
|
||||
remquol NEW: ISO C 9x
|
||||
round NEW: ISO C 9x
|
||||
roundf NEW: ISO C 9x
|
||||
roundl NEW: ISO C 9x
|
||||
rtime NEW: GNU ext.
|
||||
scalbln NEW: ISO C 9x
|
||||
scalblnf NEW: ISO C 9x
|
||||
scalblnl NEW: ISO C 9x
|
||||
scandir64 NEW: LFS
|
||||
sendfile NEW: kernel
|
||||
setcontext NEW: Unix98
|
||||
setrlimit64 NEW: LFS
|
||||
setutxent NEW: utmpx
|
||||
sighold NEW: Unix98
|
||||
sigignore NEW: Unix98
|
||||
sigqueue NEW: POSIX.1b
|
||||
sigrelse NEW: Unix98
|
||||
sigset NEW: POSIX.1b
|
||||
sigtimedwait NEW: POSIX.1b
|
||||
sigwaitinfo NEW: POSIX.1b
|
||||
sincos NEW: GNU ext.
|
||||
sincosf NEW: GNU ext.
|
||||
sincosl NEW: GNU ext.
|
||||
statfs64 NEW: LFS
|
||||
statvfs NEW: Unix98
|
||||
statvfs64 NEW: LFS
|
||||
strcasestr NEW: GNU ext.
|
||||
strfxtime NEW: ISO C 9x
|
||||
strtoimax NEW: ISO C 9x
|
||||
strtoumax NEW: ISO C 9x
|
||||
strverscmp NEW: GNU ext.
|
||||
svcauthdes_stats NEW: NIS+
|
||||
svcunix_create NEW: sunrpc etx
|
||||
svcunixfd_create NEW: sunrpc ext
|
||||
swapcontext NEW: Unix98
|
||||
tcgetsid NEW: Unix98 PTY
|
||||
tdestroy NEW: GNU ext.
|
||||
tgamma NEW: ISO C 9x
|
||||
tgammaf NEW: ISO C 9x
|
||||
tgammal NEW: ISO C 9x
|
||||
tmpfile64 NEW: LFS
|
||||
trunc NEW: ISO C 9x
|
||||
truncate64 NEW: LFS
|
||||
truncf NEW: ISO C 9x
|
||||
truncl NEW: ISO C 9x
|
||||
umount2 NEW: kernel
|
||||
unlockpt NEW: Unix98 PTY
|
||||
updwtmpx NEW: utmpx
|
||||
user2netname NEW: IPv6
|
||||
utmpxname NEW: utmpx
|
||||
versionsort NEW: GNU ext.
|
||||
versionsort64 NEW: LFS
|
||||
waitid NEW: Unix98
|
||||
wcscasecmp NEW: GNU ext.
|
||||
wcsncasecmp NEW: GNU ext.
|
||||
wcsnlen NEW: GNU ext.
|
||||
wcstoimax NEW: ISO C 9x
|
||||
wcstoll NEW: ISO C 9x
|
||||
wcstoull NEW: ISO C 9x
|
||||
wcstoumax NEW: ISO C 9x
|
||||
wcswcs NEW: Unix98
|
||||
wordexp NEW: POSIX.2
|
||||
wordfree NEW: POSIX.2
|
||||
write_profiling REMOVED
|
||||
xdecrypt NEW: NIS+
|
||||
xdr_authdes_cred NEW: NIS+
|
||||
xdr_authdes_verf NEW: NIS+
|
||||
xdr_cryptkeyarg NEW: NIS+
|
||||
xdr_cryptkeyarg2 NEW: NIS+
|
||||
xdr_cryptkeyres NEW: NIS+
|
||||
xdr_getcredres NEW: NIS+
|
||||
xdr_key_netstarg NEW: NIS+
|
||||
xdr_key_netstres NEW: NIS+
|
||||
xdr_keybuf NEW: NIS+
|
||||
xdr_keystatus NEW: NIS+
|
||||
xdr_netnamestr NEW: NIS+
|
||||
xdr_sizeof NEW: NIS+
|
||||
xdr_unixcred NEW: sunrpc ext
|
||||
xencrypt NEW: NIS+
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Version 2.0.5
|
||||
|
||||
|
176
math/tgmath.h
176
math/tgmath.h
@ -40,87 +40,133 @@
|
||||
only defined on real valued parameters and those which are defined
|
||||
for complex functions as well. */
|
||||
# define __TGMATH_UNARY_REAL_ONLY(Val, Fct) \
|
||||
(__extension__ (sizeof (Val) == sizeof (double) \
|
||||
? Fct (Val) \
|
||||
: (sizeof (Val) == sizeof (long double) \
|
||||
? Fct##l (Val) \
|
||||
: Fct##f (Val))))
|
||||
(__extension__ ({ __typeof__ (Val) __tgmres; \
|
||||
if (sizeof (Val) == sizeof (double)) \
|
||||
__tgmres = Fct (Val); \
|
||||
else if (sizeof (Val) == sizeof (float)) \
|
||||
__tgmres = Fct##f (Val); \
|
||||
else \
|
||||
__tgmres = Fct##l (Val); \
|
||||
__tgmres; }))
|
||||
|
||||
# define __TGMATH_BINARY_FIRST_REAL_ONLY(Val1, Val2, Fct) \
|
||||
(__extension__ (sizeof (Val1) > sizeof (double) \
|
||||
? Fct##l (Val1, Val2) \
|
||||
: (sizeof (Val1) == sizeof (double) \
|
||||
? Fct (Val1, Val2) \
|
||||
: Fct##f (Val1, Val2))))
|
||||
(__extension__ ({ __typeof__ (Val1) __tgmres; \
|
||||
if (sizeof (Val1) == sizeof (double)) \
|
||||
__tgmres = Fct (Val1, Val2); \
|
||||
else if (sizeof (Val1) == sizeof (float)) \
|
||||
__tgmres = Fct##f (Val1, Val2); \
|
||||
else \
|
||||
__tgmres = Fct##l (Val1, Val2); \
|
||||
__tgmres; }))
|
||||
|
||||
# define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \
|
||||
(__extension__ (sizeof (Val1) > sizeof (double) \
|
||||
|| sizeof (Val2) > sizeof (double) \
|
||||
? Fct##l (Val1, Val2) \
|
||||
: (sizeof (Val1) == sizeof (double) \
|
||||
|| sizeof (Val2) == sizeof (double) \
|
||||
? Fct (Val1, Val2) \
|
||||
: Fct##f (Val1, Val2))))
|
||||
(__extension__ ({ __typeof__ ((Val1) + (Val2)) __tgmres; \
|
||||
if (sizeof (Val1) > sizeof (double) \
|
||||
|| sizeof (Val2) > sizeof (double)) \
|
||||
__tgmres = Fct##l (Val1, Val2); \
|
||||
else if (sizeof (Val1) == sizeof (double) \
|
||||
|| sizeof (Val2) == sizeof (double)) \
|
||||
__tgmres = Fct (Val1, Val2); \
|
||||
else \
|
||||
__tgmres = Fct (Val1, Val2); \
|
||||
__tgmres; }))
|
||||
|
||||
# define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \
|
||||
(__extension__ (sizeof (Val1) > sizeof (double) \
|
||||
|| sizeof (Val2) > sizeof (double) \
|
||||
? Fct##l (Val1, Val2, Val3) \
|
||||
: (sizeof (Val1) == sizeof (double) \
|
||||
|| sizeof (Val2) == sizeof (double) \
|
||||
? Fct (Val1, Val2, Val3) \
|
||||
: Fct##f (Val1, Val2, Val3))))
|
||||
(__extension__ ({ __typeof__ ((Val1) + (Val2)) __tgmres; \
|
||||
if (sizeof (Val1) > sizeof (double) \
|
||||
|| sizeof (Val2) > sizeof (double)) \
|
||||
__tgmres = Fct##l (Val1, Val2, Val3); \
|
||||
else if (sizeof (Val1) == sizeof (double) \
|
||||
|| sizeof (Val2) == sizeof (double)) \
|
||||
__tgmres = Fct (Val1, Val2, Val3); \
|
||||
else \
|
||||
__tgmres = Fct (Val1, Val2, Val3); \
|
||||
__tgmres; }))
|
||||
|
||||
# define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \
|
||||
(__extension__ (sizeof (Val1) > sizeof (double) \
|
||||
|| sizeof (Val2) > sizeof (double) \
|
||||
|| sizeof (Val3) > sizeof (double) \
|
||||
? Fct##l (Val1, Val2, Val3) \
|
||||
: (sizeof (Val1) == sizeof (double) \
|
||||
|| sizeof (Val2) == sizeof (double) \
|
||||
|| sizeof (Val3) == sizeof (double) \
|
||||
? Fct (Val1, Val2, Val3) \
|
||||
: Fct##f (Val1, Val2, Val3))))
|
||||
(__extension__ ({ __typeof__ ((Val1) + (Val2) + (Val3)) __tgmres; \
|
||||
if (sizeof (Val1) > sizeof (double) \
|
||||
|| sizeof (Val2) > sizeof (double) \
|
||||
|| sizeof (Val3) > sizeof (double)) \
|
||||
__tgmres = Fct##l (Val1, Val2, Val3); \
|
||||
else if (sizeof (Val1) == sizeof (double) \
|
||||
|| sizeof (Val2) == sizeof (double) \
|
||||
|| sizeof (Val3) == sizeof (double)) \
|
||||
__tgmres = Fct (Val1, Val2, Val3); \
|
||||
else \
|
||||
__tgmres = Fct (Val1, Val2, Val3); \
|
||||
__tgmres; }))
|
||||
|
||||
/* XXX This definition has to be changed as soon as the compiler understands
|
||||
the imaginary keyword. */
|
||||
# define __TGMATH_UNARY_REAL_IMAG(Val, Fct, Cfct) \
|
||||
(__extension__ (sizeof (__real__ (Val)) > sizeof (double) \
|
||||
? (sizeof (__real__ (Val)) == sizeof (Val) \
|
||||
? Fct##l (Val) \
|
||||
: Cfct##l (Val)) \
|
||||
: (sizeof (__real__ (Val)) == sizeof (double) \
|
||||
? (sizeof (__real__ (Val)) == sizeof (Val) \
|
||||
? Fct (Val) \
|
||||
: Cfct (Val)) \
|
||||
: (sizeof (__real__ (Val)) == sizeof (Val) \
|
||||
? Fct##f (Val) \
|
||||
: Cfct##f (Val)))))
|
||||
(__extension__ ({ __typeof__ (Val) __tgmres; \
|
||||
if (sizeof (__real__ (Val)) > sizeof (double)) \
|
||||
{ \
|
||||
if (sizeof (__real__ (Val)) == sizeof (Val)) \
|
||||
__tgmres = Fct##l (Val); \
|
||||
else \
|
||||
__tgmres = Cfct##l (Val); \
|
||||
} \
|
||||
else if (sizeof (__real__ (Val)) == sizeof (double)) \
|
||||
{ \
|
||||
if (sizeof (__real__ (Val)) == sizeof (Val)) \
|
||||
__tgmres = Fct (Val); \
|
||||
else \
|
||||
__tgmres = Cfct (Val); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
if (sizeof (__real__ (Val)) == sizeof (Val)) \
|
||||
__tgmres = Fct##f (Val); \
|
||||
else \
|
||||
__tgmres = Cfct##f (Val); \
|
||||
} \
|
||||
__tgmres; }))
|
||||
|
||||
/* XXX This definition has to be changed as soon as the compiler understands
|
||||
the imaginary keyword. */
|
||||
# define __TGMATH_UNARY_IMAG_ONLY(Val, Fct) \
|
||||
(__extension__ (sizeof (Val) > sizeof (__complex__ double) \
|
||||
? Fct##l (Val) \
|
||||
: (sizeof (Val) == sizeof (__complex__ double) \
|
||||
? Fct (Val) \
|
||||
: Fct##f (Val))))
|
||||
(__extension__ ({ __typeof__ (Val) __tgmres; \
|
||||
if (sizeof (Val) == sizeof (__complex__ double)) \
|
||||
__tgmres = Fct (Val); \
|
||||
else if (sizeof (Val) == sizeof (__complex__ float)) \
|
||||
__tgmres = Fct##f (Val); \
|
||||
else \
|
||||
__tgmres = Fct##l (Val); \
|
||||
__tgmres; }))
|
||||
|
||||
/* XXX This definition has to be changed as soon as the compiler understands
|
||||
the imaginary keyword. */
|
||||
# define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \
|
||||
(__extension__ (sizeof (__real__ (Val1)) > sizeof (double) \
|
||||
|| sizeof (__real__ (Val2)) > sizeof (double) \
|
||||
? (sizeof (__real__ (Val1)) == sizeof (Val1) \
|
||||
&& sizeof (__real__ (Val2)) == sizeof (Val2) \
|
||||
? Fct##l (Val1, Val2) \
|
||||
: Cfct##l (Val1, Val2)) \
|
||||
: (sizeof (__real__ (Val1)) == sizeof (double) \
|
||||
|| sizeof (__real__ (Val2)) == sizeof (double) \
|
||||
? (sizeof (__real__ (Val1)) == sizeof (Val1) \
|
||||
&& sizeof (__real__ (Val2)) == sizeof (Val2) \
|
||||
? Fct (Val1, Val2) \
|
||||
: Cfct (Val1, Val2)) \
|
||||
: (sizeof (__real__ (Val1)) == sizeof (Val1) \
|
||||
&& sizeof (__real__ (Val2)) == sizeof (Val2) \
|
||||
? Fct##f (Val1, Val2) \
|
||||
: Cfct##f (Val1, Val2)))))
|
||||
(__extension__ ({ __typeof__ ((Val1) + (Val2)) __tgmres; \
|
||||
if (sizeof (__real__ (Val1)) > sizeof (double) \
|
||||
|| sizeof (__real__ (Val2)) > sizeof (double)) \
|
||||
{ \
|
||||
if (sizeof (__real__ (Val1)) == sizeof (Val1) \
|
||||
&& sizeof (__real__ (Val2)) == sizeof (Val2)) \
|
||||
__tgmres = Fct##l (Val1, Val2); \
|
||||
else \
|
||||
__tgmres = Cfct##l (Val1, Val2); \
|
||||
} \
|
||||
else if (sizeof (__real__ (Val1)) == sizeof (double) \
|
||||
|| sizeof (__real__ (Val2)) == sizeof(double))\
|
||||
{ \
|
||||
if (sizeof (__real__ (Val1)) == sizeof (Val1) \
|
||||
&& sizeof (__real__ (Val2)) == sizeof (Val2)) \
|
||||
__tgmres = Fct (Val1, Val2); \
|
||||
else \
|
||||
__tgmres = Cfct (Val1, Val2); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
if (sizeof (__real__ (Val1)) == sizeof (Val1) \
|
||||
&& sizeof (__real__ (Val2)) == sizeof (Val2)) \
|
||||
__tgmres = Fct##f (Val1, Val2); \
|
||||
else \
|
||||
__tgmres = Cfct##f (Val1, Val2); \
|
||||
} \
|
||||
__tgmres; }))
|
||||
#else
|
||||
# error "Unsupported compiler; you cannot use <tgmath.h>"
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user