< prev index next >

src/os_cpu/solaris_sparc/vm/atomic_solaris_sparc.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

*** 175,195 **** inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest) { return (void*)xchg_ptr((intptr_t)exchange_value, (volatile intptr_t*)dest); } ! inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { jint rv; __asm__ volatile( " cas [%2], %3, %0" : "=r" (rv) : "0" (exchange_value), "r" (dest), "r" (compare_value) : "memory"); return rv; } ! inline jlong Atomic::cmpxchg (jlong exchange_value, volatile jlong* dest, jlong compare_value) { #ifdef _LP64 jlong rv; __asm__ volatile( " casx [%2], %3, %0" : "=r" (rv) --- 175,195 ---- inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest) { return (void*)xchg_ptr((intptr_t)exchange_value, (volatile intptr_t*)dest); } ! inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value, memory_order order) { jint rv; __asm__ volatile( " cas [%2], %3, %0" : "=r" (rv) : "0" (exchange_value), "r" (dest), "r" (compare_value) : "memory"); return rv; } ! inline jlong Atomic::cmpxchg (jlong exchange_value, volatile jlong* dest, jlong compare_value, memory_order order) { #ifdef _LP64 jlong rv; __asm__ volatile( " casx [%2], %3, %0" : "=r" (rv)
*** 217,227 **** return rv.long_value; #endif //_LP64 } ! inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value, volatile intptr_t* dest, intptr_t compare_value) { intptr_t rv; #ifdef _LP64 __asm__ volatile( " casx [%2], %3, %0" : "=r" (rv) --- 217,227 ---- return rv.long_value; #endif //_LP64 } ! inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value, volatile intptr_t* dest, intptr_t compare_value, memory_order order) { intptr_t rv; #ifdef _LP64 __asm__ volatile( " casx [%2], %3, %0" : "=r" (rv)
*** 235,246 **** : "memory"); #endif // _LP64 return rv; } ! inline void* Atomic::cmpxchg_ptr(void* exchange_value, volatile void* dest, void* compare_value) { ! return (void*)cmpxchg_ptr((intptr_t)exchange_value, (volatile intptr_t*)dest, (intptr_t)compare_value); } #else // _GNU_SOURCE #if defined(COMPILER2) || defined(_LP64) --- 235,246 ---- : "memory"); #endif // _LP64 return rv; } ! inline void* Atomic::cmpxchg_ptr(void* exchange_value, volatile void* dest, void* compare_value, memory_order order) { ! return (void*)cmpxchg_ptr((intptr_t)exchange_value, (volatile intptr_t*)dest, (intptr_t)compare_value, order); } #else // _GNU_SOURCE #if defined(COMPILER2) || defined(_LP64)
*** 294,327 **** inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest) { return (void*)xchg_ptr((intptr_t)exchange_value, (volatile intptr_t*)dest); } ! inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { return _Atomic_cas32(exchange_value, dest, compare_value); } ! inline jlong Atomic::cmpxchg (jlong exchange_value, volatile jlong* dest, jlong compare_value) { #ifdef _LP64 // Return 64 bit value in %o0 return _Atomic_cas64((intptr_t)exchange_value, (intptr_t *)dest, (intptr_t)compare_value); #else // _LP64 // Return 64 bit value in %o0,%o1 by hand return _Atomic_casl(exchange_value, dest, compare_value); #endif // _LP64 } ! inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value, volatile intptr_t* dest, intptr_t compare_value) { #ifdef _LP64 return _Atomic_cas64(exchange_value, dest, compare_value); #else // _LP64 return _Atomic_cas32(exchange_value, dest, compare_value); #endif // _LP64 } ! inline void* Atomic::cmpxchg_ptr(void* exchange_value, volatile void* dest, void* compare_value) { ! return (void*)cmpxchg_ptr((intptr_t)exchange_value, (volatile intptr_t*)dest, (intptr_t)compare_value); } #else // _LP64 || COMPILER2 --- 294,327 ---- inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest) { return (void*)xchg_ptr((intptr_t)exchange_value, (volatile intptr_t*)dest); } ! inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value, memory_order order) { return _Atomic_cas32(exchange_value, dest, compare_value); } ! inline jlong Atomic::cmpxchg (jlong exchange_value, volatile jlong* dest, jlong compare_value, memory_order order) { #ifdef _LP64 // Return 64 bit value in %o0 return _Atomic_cas64((intptr_t)exchange_value, (intptr_t *)dest, (intptr_t)compare_value); #else // _LP64 // Return 64 bit value in %o0,%o1 by hand return _Atomic_casl(exchange_value, dest, compare_value); #endif // _LP64 } ! inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value, volatile intptr_t* dest, intptr_t compare_value, memory_order order) { #ifdef _LP64 return _Atomic_cas64(exchange_value, dest, compare_value); #else // _LP64 return _Atomic_cas32(exchange_value, dest, compare_value); #endif // _LP64 } ! inline void* Atomic::cmpxchg_ptr(void* exchange_value, volatile void* dest, void* compare_value, memory_order order) { ! return (void*)cmpxchg_ptr((intptr_t)exchange_value, (volatile intptr_t*)dest, (intptr_t)compare_value, order); } #else // _LP64 || COMPILER2
*** 352,375 **** inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest) { return (void*)xchg((jint)exchange_value, (volatile jint*)dest); } ! inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { return (*os::atomic_cmpxchg_func)(exchange_value, dest, compare_value); } ! inline jlong Atomic::cmpxchg (jlong exchange_value, volatile jlong* dest, jlong compare_value) { return (*os::atomic_cmpxchg_long_func)(exchange_value, dest, compare_value); } ! inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value, volatile intptr_t* dest, intptr_t compare_value) { ! return (intptr_t)cmpxchg((jint)exchange_value, (volatile jint*)dest, (jint)compare_value); } ! inline void* Atomic::cmpxchg_ptr(void* exchange_value, volatile void* dest, void* compare_value) { ! return (void*)cmpxchg((jint)exchange_value, (volatile jint*)dest, (jint)compare_value); } #endif // _LP64 || COMPILER2 #endif // _GNU_SOURCE --- 352,375 ---- inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest) { return (void*)xchg((jint)exchange_value, (volatile jint*)dest); } ! inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value, memory_order order) { return (*os::atomic_cmpxchg_func)(exchange_value, dest, compare_value); } ! inline jlong Atomic::cmpxchg (jlong exchange_value, volatile jlong* dest, jlong compare_value, memory_order order) { return (*os::atomic_cmpxchg_long_func)(exchange_value, dest, compare_value); } ! inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value, volatile intptr_t* dest, intptr_t compare_value, memory_order order) { ! return (intptr_t)cmpxchg((jint)exchange_value, (volatile jint*)dest, (jint)compare_value, order); } ! inline void* Atomic::cmpxchg_ptr(void* exchange_value, volatile void* dest, void* compare_value, memory_order order) { ! return (void*)cmpxchg((jint)exchange_value, (volatile jint*)dest, (jint)compare_value, order); } #endif // _LP64 || COMPILER2 #endif // _GNU_SOURCE
< prev index next >