< prev index next >

src/os_cpu/bsd_zero/vm/atomic_bsd_zero.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


 253 #ifdef ARM
 254   return arm_lock_test_and_set(dest, exchange_value);
 255 #else
 256 #ifdef M68K
 257   return m68k_lock_test_and_set(dest, exchange_value);
 258 #else
 259   intptr_t result = __sync_lock_test_and_set (dest, exchange_value);
 260   __sync_synchronize();
 261   return result;
 262 #endif // M68K
 263 #endif // ARM
 264 }
 265 
 266 inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest) {
 267   return (void *) xchg_ptr((intptr_t) exchange_value,
 268                            (volatile intptr_t*) dest);
 269 }
 270 
 271 inline jint Atomic::cmpxchg(jint exchange_value,
 272                             volatile jint* dest,
 273                             jint compare_value) {
 274 #ifdef ARM
 275   return arm_compare_and_swap(dest, compare_value, exchange_value);
 276 #else
 277 #ifdef M68K
 278   return m68k_compare_and_swap(dest, compare_value, exchange_value);
 279 #else
 280   return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
 281 #endif // M68K
 282 #endif // ARM
 283 }
 284 
 285 inline jlong Atomic::cmpxchg(jlong exchange_value,
 286                              volatile jlong* dest,
 287                              jlong compare_value) {
 288 
 289   return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
 290 }
 291 
 292 inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value,
 293                                     volatile intptr_t* dest,
 294                                     intptr_t compare_value) {
 295 #ifdef ARM
 296   return arm_compare_and_swap(dest, compare_value, exchange_value);
 297 #else
 298 #ifdef M68K
 299   return m68k_compare_and_swap(dest, compare_value, exchange_value);
 300 #else
 301   return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
 302 #endif // M68K
 303 #endif // ARM
 304 }
 305 
 306 inline void* Atomic::cmpxchg_ptr(void* exchange_value,
 307                                  volatile void* dest,
 308                                  void* compare_value) {
 309 
 310   return (void *) cmpxchg_ptr((intptr_t) exchange_value,
 311                               (volatile intptr_t*) dest,
 312                               (intptr_t) compare_value);
 313 }
 314 
 315 inline jlong Atomic::load(volatile jlong* src) {
 316   volatile jlong dest;
 317   os::atomic_copy64(src, &dest);
 318   return dest;
 319 }
 320 
 321 inline void Atomic::store(jlong store_value, jlong* dest) {
 322   os::atomic_copy64((volatile jlong*)&store_value, (volatile jlong*)dest);
 323 }
 324 
 325 inline void Atomic::store(jlong store_value, volatile jlong* dest) {
 326   os::atomic_copy64((volatile jlong*)&store_value, dest);
 327 }
 328 


 253 #ifdef ARM
 254   return arm_lock_test_and_set(dest, exchange_value);
 255 #else
 256 #ifdef M68K
 257   return m68k_lock_test_and_set(dest, exchange_value);
 258 #else
 259   intptr_t result = __sync_lock_test_and_set (dest, exchange_value);
 260   __sync_synchronize();
 261   return result;
 262 #endif // M68K
 263 #endif // ARM
 264 }
 265 
 266 inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest) {
 267   return (void *) xchg_ptr((intptr_t) exchange_value,
 268                            (volatile intptr_t*) dest);
 269 }
 270 
 271 inline jint Atomic::cmpxchg(jint exchange_value,
 272                             volatile jint* dest,
 273                             jint compare_value, memory_order order) {
 274 #ifdef ARM
 275   return arm_compare_and_swap(dest, compare_value, exchange_value);
 276 #else
 277 #ifdef M68K
 278   return m68k_compare_and_swap(dest, compare_value, exchange_value);
 279 #else
 280   return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
 281 #endif // M68K
 282 #endif // ARM
 283 }
 284 
 285 inline jlong Atomic::cmpxchg(jlong exchange_value,
 286                              volatile jlong* dest,
 287                              jlong compare_value, memory_order order) {
 288 
 289   return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
 290 }
 291 
 292 inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value,
 293                                     volatile intptr_t* dest,
 294                                     intptr_t compare_value, memory_order order) {
 295 #ifdef ARM
 296   return arm_compare_and_swap(dest, compare_value, exchange_value);
 297 #else
 298 #ifdef M68K
 299   return m68k_compare_and_swap(dest, compare_value, exchange_value);
 300 #else
 301   return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
 302 #endif // M68K
 303 #endif // ARM
 304 }
 305 
 306 inline void* Atomic::cmpxchg_ptr(void* exchange_value,
 307                                  volatile void* dest,
 308                                  void* compare_value, memory_order order) {
 309 
 310   return (void *) cmpxchg_ptr((intptr_t) exchange_value,
 311                               (volatile intptr_t*) dest,
 312                               (intptr_t) compare_value);
 313 }
 314 
 315 inline jlong Atomic::load(volatile jlong* src) {
 316   volatile jlong dest;
 317   os::atomic_copy64(src, &dest);
 318   return dest;
 319 }
 320 
 321 inline void Atomic::store(jlong store_value, jlong* dest) {
 322   os::atomic_copy64((volatile jlong*)&store_value, (volatile jlong*)dest);
 323 }
 324 
 325 inline void Atomic::store(jlong store_value, volatile jlong* dest) {
 326   os::atomic_copy64((volatile jlong*)&store_value, dest);
 327 }
 328 
< prev index next >