< prev index next >
src/share/vm/runtime/atomic.hpp
Print this page
rev 7555 : Improved metaprogramming
*** 24,38 ****
#ifndef SHARE_VM_RUNTIME_ATOMIC_HPP
#define SHARE_VM_RUNTIME_ATOMIC_HPP
#include "memory/allocation.hpp"
! class Atomic : AllStatic {
! private:
static jbyte cmpxchg_general(jbyte exchange_value, volatile jbyte* dest, jbyte compare_value);
public:
// Atomic operations on jlong types are not available on all 32-bit
// platforms. If atomic ops on jlongs are defined here they must only
// be used from code that verifies they are available at runtime and
// can provide an alternative action if not - see supports_cx8() for
--- 24,69 ----
#ifndef SHARE_VM_RUNTIME_ATOMIC_HPP
#define SHARE_VM_RUNTIME_ATOMIC_HPP
#include "memory/allocation.hpp"
+ #include "utilities/traits/selectBaseClass.hpp"
! class AtomicPlatform;
!
! class AtomicBase : AllStatic {
! protected:
static jbyte cmpxchg_general(jbyte exchange_value, volatile jbyte* dest, jbyte compare_value);
+ public:
+ inline static jbyte cmpxchg (jbyte exchange_value, volatile jbyte* dest, jbyte compare_value) {
+ return cmpxchg_general(exchange_value, dest, compare_value);
+ }
+ };
+
+ // Linux
+ #ifdef TARGET_OS_ARCH_linux_x86
+ # include "atomic_linux_x86.hpp"
+ #endif
+
+ // Solaris
+ #ifdef TARGET_OS_ARCH_solaris_x86
+ # include "atomic_solaris_x86.hpp"
+ #endif
+
+ // Windows
+ #ifdef TARGET_OS_ARCH_windows_x86
+ # include "atomic_windows_x86.hpp"
+ #endif
+
+ // BSD
+ #ifdef TARGET_OS_ARCH_bsd_x86
+ # include "atomic_bsd_x86.hpp"
+ #endif
+
+ typedef SelectBaseClass<AtomicPlatform, AtomicBase>::type AtomicSuper;
+ class Atomic : public AtomicSuper {
public:
// Atomic operations on jlong types are not available on all 32-bit
// platforms. If atomic ops on jlongs are defined here they must only
// be used from code that verifies they are available at runtime and
// can provide an alternative action if not - see supports_cx8() for
< prev index next >