summaryrefslogtreecommitdiff
path: root/sysdeps/alpha
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-01-13 09:15:58 +0000
committerRichard Henderson <rth@redhat.com>2004-01-13 09:15:58 +0000
commit141749ca169d3a5f3a328d3cb91473e3af4256b1 (patch)
tree71d67ad08bbdd27d1e3c93665d0c9d03b337e919 /sysdeps/alpha
parent1705f0a392f382bf3facda8d95cc7547ef708bf7 (diff)
* sysdeps/alpha/bits/atomic.h (__arch_compare_and_exchange_xxx_8_int): Cast old up to uint64_t before back down to inner width. (__arch_compare_and_exchange_xxx_16_int): Likewise. (__arch_compare_and_exchange_xxx_32_int): Likewise. (__arch_compare_and_exchange_xxx_64_int): Likewise. (__arch_compare_and_exchange_val_8_int): Cast result to the type of the memory. (__arch_compare_and_exchange_val_16_int): Likewise. (__arch_compare_and_exchange_val_32_int): Likewise. (__arch_compare_and_exchange_val_64_int): Likewise. (atomic_compare_and_exchange_bool_acq): Use __atomic_bool_bysize. (atomic_compare_and_exchange_bool_rel): Likewise.
* sysdeps/unix/alpha/sysdep.h: Select inline_syscall_r0_asm based on HAVE___THREAD instead of USE_TLS. * sysdeps/unix/sysv/linux/alpha/adjtime.c (ADJTIMEX32): New. (__adjtimex_tv64): Use it. * sysdeps/unix/sysv/linux/alpha/semctl.c (__new_semctl): Cast to void* rather than directly to the compatibility structure type. * sysdeps/unix/sysv/linux/alpha/shmctl.c (__new_shmctl): Likewise. * sysdeps/unix/sysv/linux/alpha/sigaction.c (struct kernel_sigaction): Forward declare. * sysdeps/alpha/bits/atomic.h (__arch_compare_and_exchange_xxx_8_int): Cast old up to uint64_t before back down to inner width. (__arch_compare_and_exchange_xxx_16_int): Likewise. (__arch_compare_and_exchange_xxx_32_int): Likewise. (__arch_compare_and_exchange_xxx_64_int): Likewise. (__arch_compare_and_exchange_val_8_int): Cast result to the type of the memory. (__arch_compare_and_exchange_val_16_int): Likewise. (__arch_compare_and_exchange_val_32_int): Likewise. (__arch_compare_and_exchange_val_64_int): Likewise. (atomic_compare_and_exchange_bool_acq): Use __atomic_bool_bysize. (atomic_compare_and_exchange_bool_rel): Likewise. * sysdeps/unix/alpha/sysdep.h: Select inline_syscall_r0_asm based on HAVE___THREAD instead of USE_TLS. * sysdeps/unix/sysv/linux/alpha/adjtime.c (ADJTIMEX32): New. (__adjtimex_tv64): Use it. * sysdeps/unix/sysv/linux/alpha/semctl.c (__new_semctl): Cast to void* rather than directly to the compatibility structure type. * sysdeps/unix/sysv/linux/alpha/shmctl.c (__new_shmctl): Likewise. * sysdeps/unix/sysv/linux/alpha/sigaction.c (struct kernel_sigaction): Forward declare. 2004-01-13 Richard Henderson <rth@redhat.com> Paolo Bonzini <bonzini@gnu.org> Compare the node sets after all the other comparisons. the old thread-m.h header too.
Diffstat (limited to 'sysdeps/alpha')
-rw-r--r--sysdeps/alpha/bits/atomic.h24
-rw-r--r--sysdeps/alpha/fpu/bits/mathdef.h26
2 files changed, 37 insertions, 13 deletions
diff --git a/sysdeps/alpha/bits/atomic.h b/sysdeps/alpha/bits/atomic.h
index 073e6508fc..36a740c758 100644
--- a/sysdeps/alpha/bits/atomic.h
+++ b/sysdeps/alpha/bits/atomic.h
@@ -78,7 +78,7 @@ typedef uintmax_t uatomic_max_t;
[__cmp] "=&r" (__cmp), \
[__addr64] "=&r" (__addr64) \
: [__addr8] "r" (mem), \
- [__old] "Ir" ((uint64_t)(uint8_t)(old)), \
+ [__old] "Ir" ((uint64_t)(uint8_t)(uint64_t)(old)), \
[__new] "r" (new) \
: "memory"); \
})
@@ -106,7 +106,7 @@ typedef uintmax_t uatomic_max_t;
[__cmp] "=&r" (__cmp), \
[__addr64] "=&r" (__addr64) \
: [__addr16] "r" (mem), \
- [__old] "Ir" ((uint64_t)(uint16_t)(old)), \
+ [__old] "Ir" ((uint64_t)(uint16_t)(uint64_t)(old)), \
[__new] "r" (new) \
: "memory"); \
})
@@ -126,7 +126,7 @@ typedef uintmax_t uatomic_max_t;
: [__prev] "=&r" (__prev), \
[__cmp] "=&r" (__cmp) \
: [__mem] "m" (*(mem)), \
- [__old] "Ir" ((uint64_t)(atomic32_t)(old)), \
+ [__old] "Ir" ((uint64_t)(atomic32_t)(uint64_t)(old)), \
[__new] "Ir" (new) \
: "memory"); \
})
@@ -146,7 +146,7 @@ typedef uintmax_t uatomic_max_t;
: [__prev] "=&r" (__prev), \
[__cmp] "=&r" (__cmp) \
: [__mem] "m" (*(mem)), \
- [__old] "Ir" (old), \
+ [__old] "Ir" ((uint64_t)(old)), \
[__new] "Ir" (new) \
: "memory"); \
})
@@ -179,28 +179,28 @@ typedef uintmax_t uatomic_max_t;
#define __arch_compare_and_exchange_val_8_int(mem, new, old, mb1, mb2) \
({ unsigned long __prev; int __cmp; \
__arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2); \
- __prev; })
+ (typeof (*mem))__prev; })
#define __arch_compare_and_exchange_val_16_int(mem, new, old, mb1, mb2) \
({ unsigned long __prev; int __cmp; \
__arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2); \
- __prev; })
+ (typeof (*mem))__prev; })
#define __arch_compare_and_exchange_val_32_int(mem, new, old, mb1, mb2) \
({ unsigned long __prev; int __cmp; \
__arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2); \
- __prev; })
+ (typeof (*mem))__prev; })
#define __arch_compare_and_exchange_val_64_int(mem, new, old, mb1, mb2) \
({ unsigned long __prev; int __cmp; \
__arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2); \
- __prev; })
+ (typeof (*mem))__prev; })
/* Compare and exchange with "acquire" semantics, ie barrier after. */
#define atomic_compare_and_exchange_bool_acq(mem, new, old) \
- __atomic_val_bysize (__arch_compare_and_exchange_bool, int, \
- mem, new, old, "", __MB)
+ __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \
+ mem, new, old, "", __MB)
#define atomic_compare_and_exchange_val_acq(mem, new, old) \
__atomic_val_bysize (__arch_compare_and_exchange_val, int, \
@@ -209,8 +209,8 @@ typedef uintmax_t uatomic_max_t;
/* Compare and exchange with "release" semantics, ie barrier before. */
#define atomic_compare_and_exchange_bool_rel(mem, new, old) \
- __atomic_val_bysize (__arch_compare_and_exchange_bool, int, \
- mem, new, old, __MB, "")
+ __atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \
+ mem, new, old, __MB, "")
#define atomic_compare_and_exchange_val_rel(mem, new, old) \
__atomic_val_bysize (__arch_compare_and_exchange_val, int, \
diff --git a/sysdeps/alpha/fpu/bits/mathdef.h b/sysdeps/alpha/fpu/bits/mathdef.h
index 515b93a562..7979822996 100644
--- a/sysdeps/alpha/fpu/bits/mathdef.h
+++ b/sysdeps/alpha/fpu/bits/mathdef.h
@@ -61,10 +61,34 @@ typedef double double_t;
# define FP_ILOGB0 (-2147483647)
# define FP_ILOGBNAN (2147483647)
-#endif /* ISO C99 */
+#endif /* ISO C99 && MATH_H */
#ifndef __NO_LONG_DOUBLE_MATH
/* Signal that we do not really have a `long double'. The disables the
declaration of all the `long double' function variants. */
# define __NO_LONG_DOUBLE_MATH 1
#endif
+
+#if defined _COMPLEX_H && !defined _COMPLEX_H_MATHDEF
+# define _COMPLEX_H_MATHDEF 1
+# if defined(__GNUC__) && !__GNUC_PREREQ(3,4)
+
+/* Due to an ABI change, we need to remap the complex float symbols. */
+# define _Mdouble_ float
+# define __MATHCALL(function, args) \
+ __MATHDECL (_Complex float, function, args)
+# define __MATHDECL(type, function, args) \
+ __MATHDECL_1(type, function##f, args, __c1_##function##f); \
+ __MATHDECL_1(type, __##function##f, args, __c1_##function##f)
+# define __MATHDECL_1(type, function, args, alias) \
+ extern type function args __asm__(#alias) __THROW
+
+# include <bits/cmathcalls.h>
+
+# undef _Mdouble_
+# undef __MATHCALL
+# undef __MATHDECL
+# undef __MATHDECL_1
+
+# endif /* GNUC before 3.4 */
+#endif /* COMPLEX_H */