diff options
-rw-r--r-- | ChangeLog | 42 | ||||
-rw-r--r-- | Makeconfig | 13 | ||||
-rw-r--r-- | math/math.h | 27 | ||||
-rw-r--r-- | math/math_private.h | 8 | ||||
-rwxr-xr-x | scripts/config.sub | 9 | ||||
-rw-r--r-- | string/endian.h | 6 | ||||
-rw-r--r-- | sysdeps/arm/bits/endian.h | 3 | ||||
-rw-r--r-- | sysdeps/arm/dl-machine.h | 8 | ||||
-rw-r--r-- | sysdeps/libm-ieee754/e_atan2.c | 2 | ||||
-rw-r--r-- | sysdeps/libm-ieee754/e_log.c | 5 | ||||
-rw-r--r-- | sysdeps/libm-ieee754/s_trunc.c | 4 | ||||
-rw-r--r-- | sysdeps/libm-ieee754/s_truncf.c | 4 | ||||
-rw-r--r-- | sysdeps/mips/mul_1.S | 4 |
13 files changed, 112 insertions, 23 deletions
diff --git a/ChangeLog b/ChangeLog index fdebe7baf1..13ec054646 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,45 @@ +1998-09-03 Philip Blundell <pb@nexus.co.uk> + + * sysdeps/arm/bits/endian.h (__FLOAT_WORD_ORDER): Define to big + endian. + * math/math_private.h: Use __FLOAT_WORD_ORDER rather than + BYTE_ORDER. + * string/endian.h: If __FLOAT_WORD_ORDER wasn't defined by + <bits/endian.h>, make it the same as __BYTE_ORDER. + +1998-11-27 Ulrich Drepper <drepper@cygnus.com> + + * math/math.h: Avoid using long double functions in generic macros + if __NO_LONG_DOUBLE_MATH. + + * sysdeps/arm/dl-machine.h: Fix handling of weak undefined symbols + during bootstrapping. + * scripts/config.sub: Add Netwinder specific matches. + Patch by Scott Bambrough <scottb@corelcomputer.com>. + +1998-11-26 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> + + * Makeconfig ($(common-objpfx)sysd-dirs): Use automatic variables + if possible. + ($(common-objpfx)sysd-sorted): Likewise. + +1998-11-27 Andreas Jaeger <aj@arthur.rhein-neckar.de> + + * sysdeps/libm-ieee754/e_log.c (__ieee754_log): Add declaration of + local variables t1,t2 only if needed. + + * sysdeps/libm-ieee754/e_atan2.c: Added braces to avoid compiler + warnings. + * sysdeps/libm-ieee754/s_truncf.c (__truncf): Likewise. + * sysdeps/libm-ieee754/s_trunc.c (__trunc): Likewise. + + * sysdeps/mips/mul_1.S (Loop): Add closing comment to avoid + warning. + +1998-11-27 Andreas Jaeger <aj@arthur.rhein-neckar.de> + + * math/math.h: Add brace to correct #if expression. + 1998-11-26 Philip Blundell <philb@gnu.org> Undo change of 1998-11-12: diff --git a/Makeconfig b/Makeconfig index ac3834af50..962f702d55 100644 --- a/Makeconfig +++ b/Makeconfig @@ -779,23 +779,22 @@ $(common-objpfx)sysd-dirs: $(common-objpfx)config.make $(all-Subdirs-files) END { printf "sysdep-subdirs =%s\n", subdirs; \ printf "sysdep-inhibit-subdirs =%s\n", inhibit; \ print "sysd-dirs-done = t" }' \ - /dev/null $(all-Subdirs-files) > $@-tmp + $(patsubst $<,/dev/null,$^) > $@-tmp mv -f $@-tmp $@ all-Depend-files = $(wildcard $(..)*/Depend) $(common-objpfx)sysd-sorted: $(..)scripts/gen-sorted.awk $(all-Depend-files) \ $(common-objpfx)sysd-dirs $(..)Makeconfig - (files="$(all-Depend-files)"; \ - for f in $$files; do \ - dir=`echo $$f | sed 's@^$(..)\(.*\)/[^/]*$$@\1@'`; \ + (dirs='$(patsubst $(..)%/Depend,%,$(filter %/Depend, $^))'; \ + for d in $$dirs; do \ while read on; do \ - echo "depend $$dir $$on"; \ - done < $$f; \ + echo "depend $$d $$on"; \ + done < $$d/Depend; \ done; \ for f in $(all-subdirs); do \ echo $$f; \ done \ - ) | $(AWK) -f $(..)scripts/gen-sorted.awk > $@-tmp + ) | $(AWK) -f $< > $@-tmp mv -f $@-tmp $@ endif # Makeconfig not yet included diff --git a/math/math.h b/math/math.h index 42f32eef14..d95755f09a 100644 --- a/math/math.h +++ b/math/math.h @@ -83,7 +83,7 @@ __BEGIN_DECLS # undef _Mdouble_ # undef __MATH_PRECNAME -# if __STDC__ - 0 || __GNUC__ - 0 && !defined __NO_LONG_DOUBLE_MATH +# if (__STDC__ - 0 || __GNUC__ - 0) && !defined __NO_LONG_DOUBLE_MATH /* Include the file of declarations again, this time using `long double' instead of `double' and appending l to each function name. */ @@ -166,43 +166,68 @@ enum }; /* Return number of classification appropriate for X. */ +#ifdef __NO_LONG_DOUBLE_MATH +# define fpclassify(x) \ + (sizeof (x) == sizeof (float) ? __fpclassifyf (x) : __fpclassify (x)) +#else # define fpclassify(x) \ (sizeof (x) == sizeof (float) ? \ __fpclassifyf (x) \ : sizeof (x) == sizeof (double) ? \ __fpclassify (x) : __fpclassifyl (x)) +#endif /* Return nonzero value if sign of X is negative. */ +#ifdef __NO_LONG_DOUBLE_MATH +# define signbit(x) \ + (sizeof (x) == sizeof (float) ? __signbitf (x) : __signbit (x)) +#else # define signbit(x) \ (sizeof (x) == sizeof (float) ? \ __signbitf (x) \ : sizeof (x) == sizeof (double) ? \ __signbit (x) : __signbitl (x)) +#endif /* Return nonzero value if X is not +-Inf or NaN. */ +#ifdef __NO_LONG_DOUBLE_MATH +# define isfinite(x) \ + (sizeof (x) == sizeof (float) ? __finitef (x) : __finite (x)) +#else # define isfinite(x) \ (sizeof (x) == sizeof (float) ? \ __finitef (x) \ : sizeof (x) == sizeof (double) ? \ __finite (x) : __finitel (x)) +#endif /* Return nonzero value if X is neither zero, subnormal, Inf, nor NaN. */ # define isnormal(x) (fpclassify (x) == FP_NORMAL) /* Return nonzero value if X is a NaN. We could use `fpclassify' but we already have this functions `__isnan' and it is faster. */ +#ifdef __NO_LONG_DOUBLE_MATH +# define isnan(x) \ + (sizeof (x) == sizeof (float) ? __isnanf (x) : __isnan (x)) +#else # define isnan(x) \ (sizeof (x) == sizeof (float) ? \ __isnanf (x) \ : sizeof (x) == sizeof (double) ? \ __isnan (x) : __isnanl (x)) +#endif /* Return nonzero value is X is positive or negative infinity. */ +#ifdef __NO_LONG_DOUBLE_MATH +# define isinf(x) \ + (sizeof (x) == sizeof (float) ? __isinff (x) : __isinf (x)) +#else # define isinf(x) \ (sizeof (x) == sizeof (float) ? \ __isinff (x) \ : sizeof (x) == sizeof (double) ? \ __isinf (x) : __isinfl (x)) +#endif #endif /* Use ISO C 9X. */ diff --git a/math/math_private.h b/math/math_private.h index 6d51930230..906b1dabba 100644 --- a/math/math_private.h +++ b/math/math_private.h @@ -34,7 +34,7 @@ /* A union which permits us to convert between a double and two 32 bit ints. */ -#if BYTE_ORDER == BIG_ENDIAN +#if __FLOAT_WORD_ORDER == BIG_ENDIAN typedef union { @@ -48,7 +48,7 @@ typedef union #endif -#if BYTE_ORDER == LITTLE_ENDIAN +#if __FLOAT_WORD_ORDER == LITTLE_ENDIAN typedef union { @@ -150,7 +150,7 @@ do { \ /* A union which permits us to convert between a long double and three 32 bit ints. */ -#if BYTE_ORDER == BIG_ENDIAN +#if __FLOAT_WORD_ORDER == BIG_ENDIAN typedef union { @@ -166,7 +166,7 @@ typedef union #endif -#if BYTE_ORDER == LITTLE_ENDIAN +#if __FLOAT_WORD_ORDER == LITTLE_ENDIAN typedef union { diff --git a/scripts/config.sub b/scripts/config.sub index 213a6d47d6..aac909889c 100755 --- a/scripts/config.sub +++ b/scripts/config.sub @@ -182,7 +182,7 @@ case $basic_machine in | sparc64-* | mips64-* | mipsel-* \ | mips64el-* | mips64orion-* | mips64orionel-* \ | mipstx39-* | mipstx39el-* \ - | f301-*) + | f301-* | armv*-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. @@ -412,6 +412,10 @@ case $basic_machine in basic_machine=i486-ncr os=-sysv4 ;; + netwinder) + basic_machine=armv4l-ccc + os=-linux + ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos @@ -802,6 +806,9 @@ case $basic_machine in *-acorn) os=-riscix1.2 ;; + arm*-ccc) + os=-linux + ;; arm*-semi) os=-aout ;; diff --git a/string/endian.h b/string/endian.h index 03e802f6cb..109678aeaa 100644 --- a/string/endian.h +++ b/string/endian.h @@ -34,6 +34,12 @@ /* This file defines `__BYTE_ORDER' for the particular machine. */ #include <bits/endian.h> +/* Some machines may need to use a different endianness for floating point + values. */ +#ifndef __FLOAT_WORD_ORDER +# define __FLOAT_WORD_ORDER __BYTE_ORDER +#endif + #ifdef __USE_BSD # define LITTLE_ENDIAN __LITTLE_ENDIAN # define BIG_ENDIAN __BIG_ENDIAN diff --git a/sysdeps/arm/bits/endian.h b/sysdeps/arm/bits/endian.h index ad3b5393bc..7fe486e89d 100644 --- a/sysdeps/arm/bits/endian.h +++ b/sysdeps/arm/bits/endian.h @@ -1,7 +1,8 @@ -/* ARM is little-endian. */ +/* ARM is (usually) little-endian but with a big-endian FPU. */ #ifndef _ENDIAN_H # error "Never use <bits/endian.h> directly; include <endian.h> instead." #endif #define __BYTE_ORDER __LITTLE_ENDIAN +#define __FLOAT_WORD_ORDER __BIG_ENDIAN diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h index 66ab4c6de2..53aa806ec2 100644 --- a/sysdeps/arm/dl-machine.h +++ b/sysdeps/arm/dl-machine.h @@ -416,7 +416,13 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, break; case R_ARM_GLOB_DAT: case R_ARM_JUMP_SLOT: - *reloc_addr = value; +#ifdef RTLD_BOOTSTRAP + /* Fix weak undefined references. */ + if (sym != NULL && sym->st_value == 0) + *reloc_addr = 0; + else +#endif + *reloc_addr = value; break; case R_ARM_ABS32: { diff --git a/sysdeps/libm-ieee754/e_atan2.c b/sysdeps/libm-ieee754/e_atan2.c index 4bf5f57086..ae7d759a9f 100644 --- a/sysdeps/libm-ieee754/e_atan2.c +++ b/sysdeps/libm-ieee754/e_atan2.c @@ -74,7 +74,7 @@ pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */ if(((ix|((lx|-lx)>>31))>0x7ff00000)|| ((iy|((ly|-ly)>>31))>0x7ff00000)) /* x or y is NaN */ return x+y; - if((hx-0x3ff00000|lx)==0) return __atan(y); /* x=1.0 */ + if(((hx-0x3ff00000)|lx)==0) return __atan(y); /* x=1.0 */ m = ((hy>>31)&1)|((hx>>30)&2); /* 2*sign(x)+sign(y) */ /* when y = 0 */ diff --git a/sysdeps/libm-ieee754/e_log.c b/sysdeps/libm-ieee754/e_log.c index 5b8c7b3ade..38ea069c46 100644 --- a/sysdeps/libm-ieee754/e_log.c +++ b/sysdeps/libm-ieee754/e_log.c @@ -103,7 +103,10 @@ static double zero = 0.0; double x; #endif { - double hfsq,f,s,z,R,w,t1,t2,dk,t11,t12,t21,t22,w2,zw2; + double hfsq,f,s,z,R,w,dk,t11,t12,t21,t22,w2,zw2; +#ifdef DO_NOT_USE_THIS + double t1,t2; +#endif int32_t k,hx,i,j; u_int32_t lx; diff --git a/sysdeps/libm-ieee754/s_trunc.c b/sysdeps/libm-ieee754/s_trunc.c index 721dce5a55..07b4951bcb 100644 --- a/sysdeps/libm-ieee754/s_trunc.c +++ b/sysdeps/libm-ieee754/s_trunc.c @@ -1,5 +1,5 @@ /* Truncate argument to nearest integral value not larger than the argument. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -39,7 +39,7 @@ __trunc (double x) /* The magnitude of the number is < 1 so the result is +-0. */ INSERT_WORDS (x, sx, 0); else - INSERT_WORDS (x, sx | i0 & ~(0x000fffff >> j0), 0); + INSERT_WORDS (x, sx | (i0 & ~(0x000fffff >> j0)), 0); } else if (j0 > 51) { diff --git a/sysdeps/libm-ieee754/s_truncf.c b/sysdeps/libm-ieee754/s_truncf.c index 3e7b133c37..feb6b6f23a 100644 --- a/sysdeps/libm-ieee754/s_truncf.c +++ b/sysdeps/libm-ieee754/s_truncf.c @@ -1,5 +1,5 @@ /* Truncate argument to nearest integral value not larger than the argument. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -38,7 +38,7 @@ __truncf (float x) /* The magnitude of the number is < 1 so the result is +-0. */ SET_FLOAT_WORD (x, sx); else - SET_FLOAT_WORD (x, sx | i0 & ~(0x007fffff >> j0)); + SET_FLOAT_WORD (x, sx | (i0 & ~(0x007fffff >> j0))); } else { diff --git a/sysdeps/mips/mul_1.S b/sysdeps/mips/mul_1.S index 184aae6fa1..aeaf083d89 100644 --- a/sysdeps/mips/mul_1.S +++ b/sysdeps/mips/mul_1.S @@ -1,7 +1,7 @@ /* MIPS __mpn_mul_1 -- Multiply a limb vector with a single limb and store the product in a second limb vector. -Copyright (C) 1995 Free Software Foundation, Inc. +Copyright (C) 1995, 1998 Free Software Foundation, Inc. This file is part of the GNU MP Library. @@ -74,7 +74,7 @@ $LC1: mflo $10 multu $8,$7 sw $10,0($4) addiu $4,$4,4 - addu $2,$9,$2 /* add high product limb and carry from addition + addu $2,$9,$2 /* add high product limb and carry from addition */ /* cool down phase 0 */ $LC0: mflo $10 |