aboutsummaryrefslogtreecommitdiff
path: root/libjava/sysdep
diff options
context:
space:
mode:
authorAndreas Tobler <a.tobler@schweiz.org>2007-01-27 21:46:15 +0000
committerAndreas Tobler <andreast@gcc.gnu.org>2007-01-27 22:46:15 +0100
commit4838bfc05bf7b35b1e07a57a0878df308655d6d8 (patch)
treecc2a10bedf005955d32e29d096cd5baff68d2ba8 /libjava/sysdep
parent024abeb327c16c7197cf979fb252fadca61386a2 (diff)
downloadgcc-4838bfc05bf7b35b1e07a57a0878df308655d6d8.zip
gcc-4838bfc05bf7b35b1e07a57a0878df308655d6d8.tar.gz
gcc-4838bfc05bf7b35b1e07a57a0878df308655d6d8.tar.bz2
re PR libgcj/30513 (Bootstrap failure with libgcj on sparc-sun-solaris2.10)
2007-01-27 Andreas Tobler <a.tobler@schweiz.org> PR libgcj/30513 * configure.host: Add forgottten sysdep_dir to sparc. Add a flag to libgcj_flags to undefine 'sun' at compile time. * sysdep/sparc/locks.h (read_barrier): New functions for 32 and 64 bit Sparc. (write_barrier): Likewise. From-SVN: r121239
Diffstat (limited to 'libjava/sysdep')
-rw-r--r--libjava/sysdep/sparc/locks.h36
1 files changed, 29 insertions, 7 deletions
diff --git a/libjava/sysdep/sparc/locks.h b/libjava/sysdep/sparc/locks.h
index 7339567..7c30d7c 100644
--- a/libjava/sysdep/sparc/locks.h
+++ b/libjava/sysdep/sparc/locks.h
@@ -1,6 +1,6 @@
// locks.h - Thread synchronization primitives. Sparc implementation.
-/* Copyright (C) 2002 Free Software Foundation
+/* Copyright (C) 2002, 2007 Free Software Foundation
This file is part of libgcj.
@@ -38,12 +38,23 @@ release_set(volatile obj_addr_t *addr, obj_addr_t new_val)
}
inline static bool
-compare_and_swap_release(volatile obj_addr_t *addr,
- obj_addr_t old,
- obj_addr_t new_val)
+compare_and_swap_release(volatile obj_addr_t *addr, obj_addr_t old,
+ obj_addr_t new_val)
{
return compare_and_swap(addr, old, new_val);
}
+
+inline static void
+read_barrier()
+{
+ __asm__ __volatile__("membar #LoadLoad | #LoadStore" : : : "memory");
+}
+
+inline static void
+write_barrier()
+{
+ __asm__ __volatile__("membar #StoreLoad | #StoreStore" : : : "memory");
+}
#else
/* Sparc32 implementation, use a spinlock. */
static unsigned char __cas_lock = 0;
@@ -109,12 +120,23 @@ release_set(volatile obj_addr_t *addr, obj_addr_t new_val)
}
inline static bool
-compare_and_swap_release(volatile obj_addr_t *addr,
- obj_addr_t old,
- obj_addr_t new_val)
+compare_and_swap_release(volatile obj_addr_t *addr, obj_addr_t old,
+ obj_addr_t new_val)
{
return compare_and_swap(addr, old, new_val);
}
+
+inline static void
+read_barrier()
+{
+ __asm__ __volatile__ ("" : : : "memory");
+}
+
+inline static void
+write_barrier()
+{
+ __asm__ __volatile__ ("" : : : "memory");
+}
#endif /* __arch64__ */
#endif /* ! __SYSDEP_LOCKS_H__ */