src/share/vm/runtime/atomic.hpp

changeset 4647
0598674c0056
parent 4318
cd3d6a6b95d9
child 5306
d9eed26d638a
     1.1 --- a/src/share/vm/runtime/atomic.hpp	Wed Feb 20 12:52:13 2013 -0800
     1.2 +++ b/src/share/vm/runtime/atomic.hpp	Thu Feb 21 11:16:50 2013 +0100
     1.3 @@ -29,10 +29,17 @@
     1.4  
     1.5  class Atomic : AllStatic {
     1.6   public:
     1.7 +  // Atomic operations on jlong types are not available on all 32-bit
     1.8 +  // platforms. If atomic ops on jlongs are defined here they must only
     1.9 +  // be used from code that verifies they are available at runtime and
    1.10 +  // can provide an alternative action if not - see supports_cx8() for
    1.11 +  // a means to test availability.
    1.12 +
    1.13    // Atomically store to a location
    1.14    inline static void store    (jbyte    store_value, jbyte*    dest);
    1.15    inline static void store    (jshort   store_value, jshort*   dest);
    1.16    inline static void store    (jint     store_value, jint*     dest);
    1.17 +  // See comment above about using jlong atomics on 32-bit platforms
    1.18    inline static void store    (jlong    store_value, jlong*    dest);
    1.19    inline static void store_ptr(intptr_t store_value, intptr_t* dest);
    1.20    inline static void store_ptr(void*    store_value, void*     dest);
    1.21 @@ -40,17 +47,19 @@
    1.22    inline static void store    (jbyte    store_value, volatile jbyte*    dest);
    1.23    inline static void store    (jshort   store_value, volatile jshort*   dest);
    1.24    inline static void store    (jint     store_value, volatile jint*     dest);
    1.25 +  // See comment above about using jlong atomics on 32-bit platforms
    1.26    inline static void store    (jlong    store_value, volatile jlong*    dest);
    1.27    inline static void store_ptr(intptr_t store_value, volatile intptr_t* dest);
    1.28    inline static void store_ptr(void*    store_value, volatile void*     dest);
    1.29  
    1.30 +  // See comment above about using jlong atomics on 32-bit platforms
    1.31    inline static jlong load(volatile jlong* src);
    1.32  
    1.33    // Atomically add to a location, return updated value
    1.34    inline static jint     add    (jint     add_value, volatile jint*     dest);
    1.35    inline static intptr_t add_ptr(intptr_t add_value, volatile intptr_t* dest);
    1.36    inline static void*    add_ptr(intptr_t add_value, volatile void*     dest);
    1.37 -
    1.38 +  // See comment above about using jlong atomics on 32-bit platforms
    1.39           static jlong    add    (jlong    add_value, volatile jlong*    dest);
    1.40  
    1.41    // Atomically increment location
    1.42 @@ -75,6 +84,7 @@
    1.43    // barrier across the cmpxchg.  I.e., it's really a 'fence_cmpxchg_acquire'.
    1.44           static jbyte    cmpxchg    (jbyte    exchange_value, volatile jbyte*    dest, jbyte    compare_value);
    1.45    inline static jint     cmpxchg    (jint     exchange_value, volatile jint*     dest, jint     compare_value);
    1.46 +  // See comment above about using jlong atomics on 32-bit platforms
    1.47    inline static jlong    cmpxchg    (jlong    exchange_value, volatile jlong*    dest, jlong    compare_value);
    1.48  
    1.49           static unsigned int cmpxchg(unsigned int exchange_value,

mercurial