hotspot/src/os_cpu/solaris_x86/vm/atomic_solaris_x86.inline.hpp
changeset 39404 d0ad5220e91c
parent 27691 733f189ad1f7
equal deleted inserted replaced
39403:37f78de0f227 39404:d0ad5220e91c
    83 inline jint     Atomic::xchg       (jint     exchange_value, volatile jint*     dest) {
    83 inline jint     Atomic::xchg       (jint     exchange_value, volatile jint*     dest) {
    84   return _Atomic_xchg(exchange_value, dest);
    84   return _Atomic_xchg(exchange_value, dest);
    85 }
    85 }
    86 
    86 
    87 #define VM_HAS_SPECIALIZED_CMPXCHG_BYTE
    87 #define VM_HAS_SPECIALIZED_CMPXCHG_BYTE
    88 inline jbyte    Atomic::cmpxchg    (jbyte    exchange_value, volatile jbyte*    dest, jbyte    compare_value) {
    88 inline jbyte    Atomic::cmpxchg    (jbyte    exchange_value, volatile jbyte*    dest, jbyte    compare_value, cmpxchg_memory_order order) {
    89   return _Atomic_cmpxchg_byte(exchange_value, dest, compare_value IS_MP_ARG());
    89   return _Atomic_cmpxchg_byte(exchange_value, dest, compare_value IS_MP_ARG());
    90 }
    90 }
    91 
    91 
    92 inline jint     Atomic::cmpxchg    (jint     exchange_value, volatile jint*     dest, jint     compare_value) {
    92 inline jint     Atomic::cmpxchg    (jint     exchange_value, volatile jint*     dest, jint     compare_value, cmpxchg_memory_order order) {
    93   return _Atomic_cmpxchg(exchange_value, dest, compare_value IS_MP_ARG());
    93   return _Atomic_cmpxchg(exchange_value, dest, compare_value IS_MP_ARG());
    94 }
    94 }
    95 
    95 
    96 inline jlong    Atomic::cmpxchg    (jlong    exchange_value, volatile jlong*    dest, jlong    compare_value) {
    96 inline jlong    Atomic::cmpxchg    (jlong    exchange_value, volatile jlong*    dest, jlong    compare_value, cmpxchg_memory_order order) {
    97   return _Atomic_cmpxchg_long(exchange_value, dest, compare_value IS_MP_ARG());
    97   return _Atomic_cmpxchg_long(exchange_value, dest, compare_value IS_MP_ARG());
    98 }
    98 }
    99 
    99 
   100 
   100 
   101 #ifdef AMD64
   101 #ifdef AMD64
   118 
   118 
   119 inline void*    Atomic::xchg_ptr(void*    exchange_value, volatile void*     dest) {
   119 inline void*    Atomic::xchg_ptr(void*    exchange_value, volatile void*     dest) {
   120   return (void*)_Atomic_xchg_long((jlong)exchange_value, (volatile jlong*)dest);
   120   return (void*)_Atomic_xchg_long((jlong)exchange_value, (volatile jlong*)dest);
   121 }
   121 }
   122 
   122 
   123 inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value, volatile intptr_t* dest, intptr_t compare_value) {
   123 inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value, volatile intptr_t* dest, intptr_t compare_value, cmpxchg_memory_order order) {
   124   return (intptr_t)_Atomic_cmpxchg_long((jlong)exchange_value, (volatile jlong*)dest, (jlong)compare_value);
   124   return (intptr_t)_Atomic_cmpxchg_long((jlong)exchange_value, (volatile jlong*)dest, (jlong)compare_value);
   125 }
   125 }
   126 
   126 
   127 inline void*    Atomic::cmpxchg_ptr(void*    exchange_value, volatile void*     dest, void*    compare_value) {
   127 inline void*    Atomic::cmpxchg_ptr(void*    exchange_value, volatile void*     dest, void*    compare_value, cmpxchg_memory_order order) {
   128   return (void*)_Atomic_cmpxchg_long((jlong)exchange_value, (volatile jlong*)dest, (jlong)compare_value);
   128   return (void*)_Atomic_cmpxchg_long((jlong)exchange_value, (volatile jlong*)dest, (jlong)compare_value);
   129 }
   129 }
   130 
   130 
   131 inline jlong Atomic::load(volatile jlong* src) { return *src; }
   131 inline jlong Atomic::load(volatile jlong* src) { return *src; }
   132 
   132 
   146 
   146 
   147 inline void*    Atomic::xchg_ptr(void*    exchange_value, volatile void*     dest) {
   147 inline void*    Atomic::xchg_ptr(void*    exchange_value, volatile void*     dest) {
   148   return (void*)xchg((jint)exchange_value, (volatile jint*)dest);
   148   return (void*)xchg((jint)exchange_value, (volatile jint*)dest);
   149 }
   149 }
   150 
   150 
   151 inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value, volatile intptr_t* dest, intptr_t compare_value) {
   151 inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value, volatile intptr_t* dest, intptr_t compare_value, cmpxchg_memory_order order) {
   152   return (intptr_t)cmpxchg((jint)exchange_value, (volatile jint*)dest, (jint)compare_value);
   152   return (intptr_t)cmpxchg((jint)exchange_value, (volatile jint*)dest, (jint)compare_value, order);
   153 }
   153 }
   154 
   154 
   155 inline void*    Atomic::cmpxchg_ptr(void*    exchange_value, volatile void*     dest, void*    compare_value) {
   155 inline void*    Atomic::cmpxchg_ptr(void*    exchange_value, volatile void*     dest, void*    compare_value, cmpxchg_memory_order order) {
   156   return (void*)cmpxchg((jint)exchange_value, (volatile jint*)dest, (jint)compare_value);
   156   return (void*)cmpxchg((jint)exchange_value, (volatile jint*)dest, (jint)compare_value, order);
   157 }
   157 }
   158 
   158 
   159 extern "C" void _Atomic_move_long(volatile jlong* src, volatile jlong* dst);
   159 extern "C" void _Atomic_move_long(volatile jlong* src, volatile jlong* dst);
   160 
   160 
   161 inline jlong Atomic::load(volatile jlong* src) {
   161 inline jlong Atomic::load(volatile jlong* src) {