From d30cece008b62a32c342597ac2f1c074c1d510f1 Mon Sep 17 00:00:00 2001 From: bryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Thu, 21 Mar 2002 00:26:46 +0000 Subject: [PATCH] * posix-threads.cc (_Jv_ThreadSelf_out_of_line): Use write_barrier, not release_set. * sysdep/powerpc/locks.h (write_barrier): New function. * sysdep/i386/locks.h (write_barrier): New function. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@51101 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/ChangeLog | 9 ++++++++- libjava/posix-threads.cc | 3 ++- libjava/sysdep/i386/locks.h | 8 ++++++++ libjava/sysdep/powerpc/locks.h | 8 ++++++++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 38bcb31fc19e..677fd8e29f82 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,6 +1,13 @@ +2002-03-20 Bryce McKinlay <bryce@waitaki.otago.ac.nz> + + * posix-threads.cc (_Jv_ThreadSelf_out_of_line): Use write_barrier, + not release_set. + * sysdep/powerpc/locks.h (write_barrier): New function. + * sysdep/i386/locks.h (write_barrier): New function. + 2002-03-19 Martin Kahlert <martin.kahlert@infineon.com> - * include/jni.h Use correct C comments + * include/jni.h Use correct C comments. 2002-03-18 Tom Tromey <tromey@redhat.com> diff --git a/libjava/posix-threads.cc b/libjava/posix-threads.cc index 6442eaffb2ff..e92348bcc2cc 100644 --- a/libjava/posix-threads.cc +++ b/libjava/posix-threads.cc @@ -448,7 +448,8 @@ _Jv_ThreadSelf_out_of_line(volatile self_cache_entry *sce, size_t high_sp_bits) { pthread_t self = pthread_self(); sce -> high_sp_bits = high_sp_bits; - release_set ((obj_addr_t *) &(sce -> self), self); + write_barrier(); + sce -> self = self; return self; } diff --git a/libjava/sysdep/i386/locks.h b/libjava/sysdep/i386/locks.h index 0c029ac939aa..a9501ae99b23 100644 --- a/libjava/sysdep/i386/locks.h +++ b/libjava/sysdep/i386/locks.h @@ -62,4 +62,12 @@ read_barrier() { } +// Ensure that prior stores to memory are completed with respect to other +// processors. +inline static void +write_barrier() +{ + // X86 does not reorder writes. We just need to ensure that gcc also doesn't. + __asm__ __volatile__(" " : : : "memory"); +} #endif diff --git a/libjava/sysdep/powerpc/locks.h b/libjava/sysdep/powerpc/locks.h index 414b5dcb7f86..4d4532b1f83e 100644 --- a/libjava/sysdep/powerpc/locks.h +++ b/libjava/sysdep/powerpc/locks.h @@ -75,4 +75,12 @@ read_barrier() __asm__ __volatile__ ("isync" : : : "memory"); } +// Ensure that prior stores to memory are completed with respect to other +// processors. +inline static void +write_barrier() +{ + __asm__ __volatile__ ("sync" : : : "memory"); +} + #endif -- GitLab