diff options
author | Andreas Tobler <a.tobler@schweiz.org> | 2007-01-27 21:46:15 +0000 |
---|---|---|
committer | Andreas Tobler <andreast@gcc.gnu.org> | 2007-01-27 22:46:15 +0100 |
commit | 4838bfc05bf7b35b1e07a57a0878df308655d6d8 (patch) | |
tree | cc2a10bedf005955d32e29d096cd5baff68d2ba8 /libjava/sysdep | |
parent | 024abeb327c16c7197cf979fb252fadca61386a2 (diff) | |
download | gcc-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.h | 36 |
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__ */ |