< prev index next >

src/hotspot/os_cpu/linux_zero/atomic_linux_zero.hpp

Print this page




 168   return cmpxchg_using_helper<int>(arm_compare_and_swap, exchange_value, dest, compare_value);
 169 #else
 170   return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
 171 #endif // ARM
 172 }
 173 
 174 template<>
 175 template<typename T>
 176 inline T Atomic::PlatformCmpxchg<8>::operator()(T exchange_value,
 177                                                 T volatile* dest,
 178                                                 T compare_value,
 179                                                 cmpxchg_memory_order order) const {
 180   STATIC_ASSERT(8 == sizeof(T));
 181   return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
 182 }
 183 
 184 template<>
 185 template<typename T>
 186 inline T Atomic::PlatformLoad<8>::operator()(T const volatile* src) const {
 187   STATIC_ASSERT(8 == sizeof(T));
 188   volatile jlong dest;
 189   os::atomic_copy64(reinterpret_cast<const volatile jlong*>(src), reinterpret_cast<volatile jlong*>(&dest));
 190   return PrimitiveConversions::cast<T>(dest);
 191 }
 192 
 193 template<>
 194 template<typename T>
 195 inline void Atomic::PlatformStore<8>::operator()(T store_value,
 196                                                  T volatile* dest) const {
 197   STATIC_ASSERT(8 == sizeof(T));
 198   os::atomic_copy64(reinterpret_cast<const volatile jlong*>(&store_value), reinterpret_cast<volatile jlong*>(dest));
 199 }
 200 
 201 #endif // OS_CPU_LINUX_ZERO_VM_ATOMIC_LINUX_ZERO_HPP


 168   return cmpxchg_using_helper<int>(arm_compare_and_swap, exchange_value, dest, compare_value);
 169 #else
 170   return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
 171 #endif // ARM
 172 }
 173 
 174 template<>
 175 template<typename T>
 176 inline T Atomic::PlatformCmpxchg<8>::operator()(T exchange_value,
 177                                                 T volatile* dest,
 178                                                 T compare_value,
 179                                                 cmpxchg_memory_order order) const {
 180   STATIC_ASSERT(8 == sizeof(T));
 181   return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
 182 }
 183 
 184 template<>
 185 template<typename T>
 186 inline T Atomic::PlatformLoad<8>::operator()(T const volatile* src) const {
 187   STATIC_ASSERT(8 == sizeof(T));
 188   volatile int64_t dest;
 189   os::atomic_copy64(reinterpret_cast<const volatile int64_t*>(src), reinterpret_cast<volatile int64_t*>(&dest));
 190   return PrimitiveConversions::cast<T>(dest);
 191 }
 192 
 193 template<>
 194 template<typename T>
 195 inline void Atomic::PlatformStore<8>::operator()(T store_value,
 196                                                  T volatile* dest) const {
 197   STATIC_ASSERT(8 == sizeof(T));
 198   os::atomic_copy64(reinterpret_cast<const volatile int64_t*>(&store_value), reinterpret_cast<volatile int64_t*>(dest));
 199 }
 200 
 201 #endif // OS_CPU_LINUX_ZERO_VM_ATOMIC_LINUX_ZERO_HPP
< prev index next >