diff options
author | Ulrich Drepper <drepper@redhat.com> | 1997-06-04 19:05:38 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1997-06-04 19:05:38 +0000 |
commit | 5649a1d60d4e752b4941663ea63391b5f1a8b7e4 (patch) | |
tree | 34db6ae3dd1d986185b7d92e7e1cdc8d70766d36 /sysdeps/m68k | |
parent | 2a7b5469ddab5bfb79268d33420853abd2468fce (diff) | |
download | glibc-5649a1d60d4e752b4941663ea63391b5f1a8b7e4.tar.gz glibc-5649a1d60d4e752b4941663ea63391b5f1a8b7e4.tar.xz glibc-5649a1d60d4e752b4941663ea63391b5f1a8b7e4.zip |
Update. cvs/libc-ud-970604
1997-06-04 20:57 Ulrich Drepper <drepper@cygnus.com> * manual/string.texi: Add comments to discourage use of index and rindex. (strtok, strsep): Apply function on copy of the strings in example. (l64a): Add example. * posix/unistd.h: Correct value for _POSIX_VERSION. * sunrpc/Makefile (defines): Remove definition. * sysdeps/ieee754/nan.h: Correct typo. 1997-06-04 10:50 Fila Kolodny <fila@ibi.com> * posix/unistd.h: Add definition of __fchdir corresponding to fchdir. * login/utmp_daemon.c: Correct location of utmpd.h. 1997-06-03 19:16 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makerules: Rename $(common-objpfx)distinfo-$(subdir) to $(objpfx)distinfo. * rpm/Makefile (distinfo): Adapted. 1997-06-03 18:32 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * rpm/Makefile (install-slib): Collect shared libraries here instead of in install-lib, including libc. (instvars): Add slib. 1997-06-03 18:23 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * login/Makefile (libutil-routines): Add updwtmp. 1997-06-03 16:16 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * monetary.h: New file, needed for localedata/tst-fmon.c. 1997-06-02 20:31 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * math/libm-test.c (cpow_test): Add epsilon for long double in test for 2^10. (identities): Add epsilon for float in second identity test. * sysdeps/m68k/huge_val.h: Change GCC's HUGE_VAL{,F,L} to use DI and SI mode integers instead of bytes. Fix value of HUGE_VALL. * sysdeps/m68k/nan.h: New file. * sysdeps/m68k/fpu/__math.h (isgreater, isgreaterequal, isless, islessequal, islessgreater, isunordered): Fix assembler syntax. * sysdeps/m68k/fpu/fraiseexcpt.c: Do it right so that gcc doesn't optimize out the operations. * sysdeps/libm-ieee754/s_nan.c: Use NaN macro instead of static constant. * sysdeps/libm-ieee754/s_nanf.c: Likewise. * sysdeps/libm-ieee754/s_nanl.c: Likewise. * math/carg.c [NO_LONG_DOUBLE]: Add alias for long double function. * sysdeps/libm-ieee754/s_erf.c: Likewise. * sysdeps/libm-ieee754/s_fdim.c: Likewise. * sysdeps/libm-ieee754/s_fmax.c: Likewise. * sysdeps/libm-ieee754/s_fmin.c: Likewise. * sysdeps/libm-ieee754/s_log2.c: Likewise. * sysdeps/libm-ieee754/s_nan.c: Likewise. * sysdeps/libm-ieee754/s_remquo.c: Likewise.
Diffstat (limited to 'sysdeps/m68k')
-rw-r--r-- | sysdeps/m68k/fpu/__math.h | 12 | ||||
-rw-r--r-- | sysdeps/m68k/fpu/fraiseexcpt.c | 22 | ||||
-rw-r--r-- | sysdeps/m68k/huge_val.h | 51 | ||||
-rw-r--r-- | sysdeps/m68k/nan.h | 59 |
4 files changed, 101 insertions, 43 deletions
diff --git a/sysdeps/m68k/fpu/__math.h b/sysdeps/m68k/fpu/__math.h index 5dc4d2e066..fd90a2de1b 100644 --- a/sysdeps/m68k/fpu/__math.h +++ b/sysdeps/m68k/fpu/__math.h @@ -414,7 +414,7 @@ __inline_forward(void,sincosl, #define isgreater(x, y) \ __extension__ \ ({ char __result; \ - __asm__ ("fcmp %2,%1; fsogt %0" \ + __asm__ ("fcmp%.x %2,%1; fsogt %0" \ : "=dm" (__result) : "f" (x), "f" (y)); \ (int) __result; }) @@ -422,7 +422,7 @@ __inline_forward(void,sincosl, #define isgreaterequal(x, y) \ __extension__ \ ({ char __result; \ - __asm__ ("fcmp %2,%1; fsoge %0" \ + __asm__ ("fcmp%.x %2,%1; fsoge %0" \ : "=dm" (__result) : "f" (x), "f" (y)); \ (int) __result; }) @@ -430,7 +430,7 @@ __inline_forward(void,sincosl, #define isless(x, y) \ __extension__ \ ({ char __result; \ - __asm__ ("fcmp %2,%1; fsolt %0" \ + __asm__ ("fcmp%.x %2,%1; fsolt %0" \ : "=dm" (__result) : "f" (x), "f" (y)); \ (int) __result; }) @@ -438,7 +438,7 @@ __inline_forward(void,sincosl, #define islessequal(x, y) \ __extension__ \ ({ char __result; \ - __asm__ ("fcmp %2,%1; fsole %0" \ + __asm__ ("fcmp%.x %2,%1; fsole %0" \ : "=dm" (__result) : "f" (x), "f" (y)); \ (int) __result; }) @@ -446,7 +446,7 @@ __inline_forward(void,sincosl, #define islessgreater(x, y) \ __extension__ \ ({ char __result; \ - __asm__ ("fcmp %2,%1; fsogl %0" \ + __asm__ ("fcmp%.x %2,%1; fsogl %0" \ : "=dm" (__result) : "f" (x), "f" (y)); \ (int) __result; }) @@ -454,7 +454,7 @@ __inline_forward(void,sincosl, #define isunordered(x, y) \ __extension__ \ ({ char __result; \ - __asm__ ("fcmp %2,%1; fsun %0" \ + __asm__ ("fcmp%.x %2,%1; fsun %0" \ : "=dm" (__result) : "f" (x), "f" (y)); \ (int) __result; }) #endif diff --git a/sysdeps/m68k/fpu/fraiseexcpt.c b/sysdeps/m68k/fpu/fraiseexcpt.c index b6ff82760d..51411dd292 100644 --- a/sysdeps/m68k/fpu/fraiseexcpt.c +++ b/sysdeps/m68k/fpu/fraiseexcpt.c @@ -34,9 +34,8 @@ feraiseexcept (int excepts) if (excepts & FE_INVALID) { /* One example of a invalid operation is 0 * Infinity. */ - double d = 0.0 * HUGE_VAL; - /* Now force the exception. */ - __asm__ __volatile__ ("fnop" : : "f" (d)); + double d = HUGE_VAL; + __asm__ __volatile__ ("fmul%.s %#0r0,%0; fnop" : "=f" (d) : "0" (d)); } /* Next: division by zero. */ @@ -49,26 +48,21 @@ feraiseexcept (int excepts) /* Next: overflow. */ if (excepts & FE_OVERFLOW) { - long double d = LDBL_MAX * LDBL_MAX; - /* Now force the exception. */ - __asm__ __volatile__ ("fnop" : : "f" (d)); + long double d = LDBL_MAX; + __asm__ __volatile__ ("fmul%.x %0,%0; fnop" : "=f" (d) : "0" (d)); } /* Next: underflow. */ if (excepts & FE_UNDERFLOW) { - long double d = LDBL_MIN / 16.0; - /* Now force the exception. */ - __asm__ __volatile__ ("fnop" : : "f" (d)); + long double d = LDBL_MIN; + __asm__ __volatile__ ("fdiv%.s %#0r16,%0; fnop" : "=f" (d) : "0" (d)); } /* Last: inexact. */ if (excepts & FE_INEXACT) { - long double d1, d2 = 1.0; - __asm__ __volatile__ ("fmovecr %#0,%0\n\t" - "fdiv%.x %1,%0\n\t" - "fnop" - : "=&f" (d1) : "f" (d2)); + long double d = 1.0; + __asm__ __volatile__ ("fdiv%.s %#0r3,%0; fnop" : "=f" (d) : "0" (d)); } } diff --git a/sysdeps/m68k/huge_val.h b/sysdeps/m68k/huge_val.h index 8d45aaec2b..c71454e9a8 100644 --- a/sysdeps/m68k/huge_val.h +++ b/sysdeps/m68k/huge_val.h @@ -26,15 +26,19 @@ /* IEEE positive infinity (-HUGE_VAL is negative infinity). */ -#define __HUGE_VAL_bytes { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 } - -#define __huge_val_t union { unsigned char __c[8]; double __d; } #ifdef __GNUC__ -#define HUGE_VAL (__extension__ \ - ((__huge_val_t) { __c: __HUGE_VAL_bytes }).__d) -#else /* Not GCC. */ -static __huge_val_t __huge_val = { __HUGE_VAL_bytes }; + +#define HUGE_VAL \ + (__extension__ \ + ((union { unsigned long long __l; double __d; }) \ + { __l: 0x7ff0000000000000ULL }).__d) + +#else /* not GCC */ + +static union { unsigned char __c[8]; double __d; } __huge_val = + { { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 } }; #define HUGE_VAL (__huge_val.__d) + #endif /* GCC. */ @@ -42,27 +46,28 @@ static __huge_val_t __huge_val = { __HUGE_VAL_bytes }; #ifdef __USE_ISOC9X -#define __HUGE_VALF_bytes { 0x7f, 0x80, 0, 0 } +#ifdef __GNUC__ -#define __huge_valf_t union { unsigned char __c[4]; float __f; } -#ifdef __GNUC__ -#define HUGE_VALF (__extension__ \ - ((__huge_valf_t) { __c: __HUGE_VALF_bytes }).__f) -#else /* Not GCC. */ -static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes }; -#define HUGE_VALF (__huge_valf.__f) -#endif /* GCC. */ +#define HUGE_VALF \ + (__extension__ \ + ((union { unsigned long __l; float __f; }) \ + { __l: 0x7f800000UL }).__f) +#define HUGE_VALL \ + (__extension__ \ + ((union { unsigned long __l[3]; long double __ld; }) \ + { __l: { 0x7fff0000UL, 0x80000000UL, 0UL } }).__ld) -#define __HUGE_VALL_bytes { 0x7f, 0xff, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0 } +#else /* not GCC */ -#define __huge_vall_t union { unsigned char __c[12]; long double __ld; } -#ifdef __GNUC__ -#define HUGE_VALL (__extension__ \ - ((__huge_vall_t) { __c: __HUGE_VALL_bytes }).__ld) -#else /* Not GCC. */ -static __huge_vall_t __huge_vall = { __HUGE_VALL_bytes }; +static union { unsigned char __c[4]; float __f; } __huge_valf = + { { 0x7f, 0x80, 0, 0 } }; +#define HUGE_VALF (__huge_valf.__f) + +static union { unsigned char __c[12]; long double __ld; } __huge_vall = + { { 0x7f, 0xff, 0, 0, 0x80, 0, 0, 0, 0, 0, 0, 0 } }; #define HUGE_VALL (__huge_vall.__ld) + #endif /* GCC. */ #endif /* __USE_ISOC9X. */ diff --git a/sysdeps/m68k/nan.h b/sysdeps/m68k/nan.h new file mode 100644 index 0000000000..b4efddfe91 --- /dev/null +++ b/sysdeps/m68k/nan.h @@ -0,0 +1,59 @@ +/* `NAN' constants for m68k. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _NAN_H + +#define _NAN_H 1 + +/* IEEE Not A Number. */ + +#ifdef __GNUC__ + +#define NAN \ + (__extension__ \ + ((union { unsigned long long __l; double __d; }) \ + { __l: 0x7fffffffffffffffULL }).__d) + +#define NANF \ + (__extension__ \ + ((union { unsigned long __l; float __f; }) \ + { __l: 0x7fffffffUL }).__f) + +#define NANL \ + (__extension__ \ + ((union { unsigned long __l[3]; long double __ld; }) \ + { __l: { 0x7fff0000UL, 0xffffffffUL, 0xffffffffUL } }).__ld) + +#else + +static union { unsigned char __c[8]; double __d; } __nan = + { { 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } }; +#define NAN (__nan.__d) + +static union { unsigned char __c[4]; float __f; } __nanf = + { { 0x7f, 0xff, 0xff, 0xff } }; +#define NANF (__nanf.__f) + +static union { unsigned char __c[12]; long double __ld; } __nanl = + { { 0x7f, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } }; +#define NANL (__nanl.__ld) + +#endif /* GCC. */ + +#endif /* nan.h */ |