From: Stefan Ring Date: Mon, 21 Sep 2009 18:39:19 +0000 (+0200) Subject: * src/threads/lock.cpp: Slight memory barrier clarification. X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=cacao.git;a=commitdiff_plain;h=7393753e3a67c410b8741ed130422bdfbdc90f69 * src/threads/lock.cpp: Slight memory barrier clarification. * src/vm/jit/i386/arch.h: Define CAS_PROVIDES_FULL_BARRIER. * src/vm/jit/x86_64/arch.h: Likewise. --- diff --git a/src/threads/lock.cpp b/src/threads/lock.cpp index a26c7879b..140905e2b 100644 --- a/src/threads/lock.cpp +++ b/src/threads/lock.cpp @@ -864,9 +864,15 @@ retry: if (result == true) { // Success, we locked it. - // NOTE: The Java Memory Model requires an instruction barrier - // here (because of the CAS above). + // NOTE: The Java Memory Model requires a memory barrier here. +#if defined(CAS_PROVIDES_FULL_BARRIER) && CAS_PROVIDES_FULL_BARRIER + // On some architectures, the CAS (hidden in the + // lockword->lock call above), already provides this barrier, + // so we only need to inform the compiler. Atomic::instruction_barrier(); +#else + Atomic::memory_barrier(); +#endif return true; } @@ -972,7 +978,7 @@ bool lock_monitor_exit(java_handle_t* o) // Memory barrier for Java Memory Model. Atomic::write_memory_barrier(); lockword->unlock(); - // Memory barrier for thin locking. + // Memory barrier for FLC bit testing. Atomic::memory_barrier(); /* check if there has been a flat lock contention on this object */ diff --git a/src/vm/jit/i386/arch.h b/src/vm/jit/i386/arch.h index a3a91be15..29c0603ea 100644 --- a/src/vm/jit/i386/arch.h +++ b/src/vm/jit/i386/arch.h @@ -149,6 +149,10 @@ #define USES_NEW_SUBTYPE 1 +/* memory barriers ************************************************************/ + +#define CAS_PROVIDES_FULL_BARRIER 1 + #endif /* _ARCH_H */ diff --git a/src/vm/jit/x86_64/arch.h b/src/vm/jit/x86_64/arch.h index 787eba2d3..80ac34246 100644 --- a/src/vm/jit/x86_64/arch.h +++ b/src/vm/jit/x86_64/arch.h @@ -1,9 +1,7 @@ /* src/vm/jit/x86_64/arch.h - architecture defines for x86_64 - Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel, - C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring, - E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, - J. Wenninger, Institut f. Computersprachen - TU Wien + Copyright (C) 1996-2008, 2009 + CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO This file is part of CACAO. @@ -124,6 +122,10 @@ #define USES_NEW_SUBTYPE 1 +/* memory barriers ************************************************************/ + +#define CAS_PROVIDES_FULL_BARRIER 1 + #endif /* _ARCH_H */