< prev index next >

src/os_cpu/linux_aarch64/vm/atomic_linux_aarch64.inline.hpp

Print this page
rev 10933 : 8154736: enhancement of cmpxchg and copy_to_survivor for ppc64
Reviewed-by:
Contributed-by: HORII@jp.ibm.com, mdoerr


  71 
  72 inline void Atomic::dec_ptr(volatile void* dest)
  73 {
  74  add_ptr(-1, dest);
  75 }
  76 
  77 inline jint Atomic::xchg (jint exchange_value, volatile jint* dest)
  78 {
  79   jint res = __sync_lock_test_and_set (dest, exchange_value);
  80   FULL_MEM_BARRIER;
  81   return res;
  82 }
  83 
  84 inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest)
  85 {
  86   return (void *) xchg_ptr((intptr_t) exchange_value,
  87                            (volatile intptr_t*) dest);
  88 }
  89 
  90 
  91 inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value)
  92 {
  93  return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
  94 }
  95 
  96 inline void Atomic::store (jlong store_value, jlong* dest) { *dest = store_value; }
  97 inline void Atomic::store (jlong store_value, volatile jlong* dest) { *dest = store_value; }
  98 
  99 inline intptr_t Atomic::add_ptr(intptr_t add_value, volatile intptr_t* dest)
 100 {
 101  return __sync_add_and_fetch(dest, add_value);
 102 }
 103 
 104 inline void* Atomic::add_ptr(intptr_t add_value, volatile void* dest)
 105 {
 106   return (void *) add_ptr(add_value, (volatile intptr_t *) dest);
 107 }
 108 
 109 inline void Atomic::inc_ptr(volatile intptr_t* dest)
 110 {
 111  add_ptr(1, dest);
 112 }
 113 
 114 inline void Atomic::dec_ptr(volatile intptr_t* dest)
 115 {
 116  add_ptr(-1, dest);
 117 }
 118 
 119 inline intptr_t Atomic::xchg_ptr(intptr_t exchange_value, volatile intptr_t* dest)
 120 {
 121   intptr_t res = __sync_lock_test_and_set (dest, exchange_value);
 122   FULL_MEM_BARRIER;
 123   return res;
 124 }
 125 
 126 inline jlong Atomic::cmpxchg (jlong exchange_value, volatile jlong* dest, jlong compare_value)
 127 {
 128  return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
 129 }
 130 
 131 inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value, volatile intptr_t* dest, intptr_t compare_value)
 132 {
 133  return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
 134 }
 135 
 136 inline void* Atomic::cmpxchg_ptr(void* exchange_value, volatile void* dest, void* compare_value)
 137 {
 138   return (void *) cmpxchg_ptr((intptr_t) exchange_value,
 139                               (volatile intptr_t*) dest,
 140                               (intptr_t) compare_value);
 141 }
 142 
 143 inline jlong Atomic::load(volatile jlong* src) { return *src; }
 144 
 145 #endif // OS_CPU_LINUX_AARCH64_VM_ATOMIC_LINUX_AARCH64_INLINE_HPP


  71 
  72 inline void Atomic::dec_ptr(volatile void* dest)
  73 {
  74  add_ptr(-1, dest);
  75 }
  76 
  77 inline jint Atomic::xchg (jint exchange_value, volatile jint* dest)
  78 {
  79   jint res = __sync_lock_test_and_set (dest, exchange_value);
  80   FULL_MEM_BARRIER;
  81   return res;
  82 }
  83 
  84 inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest)
  85 {
  86   return (void *) xchg_ptr((intptr_t) exchange_value,
  87                            (volatile intptr_t*) dest);
  88 }
  89 
  90 
  91 inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value, memory_order order)
  92 {
  93  return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
  94 }
  95 
  96 inline void Atomic::store (jlong store_value, jlong* dest) { *dest = store_value; }
  97 inline void Atomic::store (jlong store_value, volatile jlong* dest) { *dest = store_value; }
  98 
  99 inline intptr_t Atomic::add_ptr(intptr_t add_value, volatile intptr_t* dest)
 100 {
 101  return __sync_add_and_fetch(dest, add_value);
 102 }
 103 
 104 inline void* Atomic::add_ptr(intptr_t add_value, volatile void* dest)
 105 {
 106   return (void *) add_ptr(add_value, (volatile intptr_t *) dest);
 107 }
 108 
 109 inline void Atomic::inc_ptr(volatile intptr_t* dest)
 110 {
 111  add_ptr(1, dest);
 112 }
 113 
 114 inline void Atomic::dec_ptr(volatile intptr_t* dest)
 115 {
 116  add_ptr(-1, dest);
 117 }
 118 
 119 inline intptr_t Atomic::xchg_ptr(intptr_t exchange_value, volatile intptr_t* dest)
 120 {
 121   intptr_t res = __sync_lock_test_and_set (dest, exchange_value);
 122   FULL_MEM_BARRIER;
 123   return res;
 124 }
 125 
 126 inline jlong Atomic::cmpxchg (jlong exchange_value, volatile jlong* dest, jlong compare_value, memory_order order)
 127 {
 128  return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
 129 }
 130 
 131 inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value, volatile intptr_t* dest, intptr_t compare_value, memory_order order)
 132 {
 133  return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
 134 }
 135 
 136 inline void* Atomic::cmpxchg_ptr(void* exchange_value, volatile void* dest, void* compare_value, memory_order order)
 137 {
 138   return (void *) cmpxchg_ptr((intptr_t) exchange_value,
 139                               (volatile intptr_t*) dest,
 140                               (intptr_t) compare_value, order);
 141 }
 142 
 143 inline jlong Atomic::load(volatile jlong* src) { return *src; }
 144 
 145 #endif // OS_CPU_LINUX_AARCH64_VM_ATOMIC_LINUX_AARCH64_INLINE_HPP
< prev index next >