diff -r 14aa557af8ba -r 09c41c4913d9 src/hotspot/os_cpu/bsd_x86/atomic_bsd_x86.hpp --- a/src/hotspot/os_cpu/bsd_x86/atomic_bsd_x86.hpp Tue Oct 03 06:48:40 2017 +0200 +++ b/src/hotspot/os_cpu/bsd_x86/atomic_bsd_x86.hpp Tue Sep 26 21:37:01 2017 +0200 @@ -61,7 +61,11 @@ return old_value; } -inline jint Atomic::xchg (jint exchange_value, volatile jint* dest) { +template<> +template +inline T Atomic::PlatformXchg<4>::operator()(T exchange_value, + T volatile* dest) const { + STATIC_ASSERT(4 == sizeof(T)); __asm__ volatile ( "xchgl (%2),%0" : "=r" (exchange_value) : "0" (exchange_value), "r" (dest) @@ -69,10 +73,6 @@ return exchange_value; } -inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest) { - return (void*)xchg_ptr((intptr_t)exchange_value, (volatile intptr_t*)dest); -} - template<> template inline T Atomic::PlatformCmpxchg<1>::operator()(T exchange_value, @@ -118,7 +118,11 @@ return old_value; } -inline intptr_t Atomic::xchg_ptr(intptr_t exchange_value, volatile intptr_t* dest) { +template<> +template +inline T Atomic::PlatformXchg<8>::operator()(T exchange_value, + T volatile* dest) const { + STATIC_ASSERT(8 == sizeof(T)); __asm__ __volatile__ ("xchgq (%2),%0" : "=r" (exchange_value) : "0" (exchange_value), "r" (dest) @@ -144,10 +148,6 @@ #else // !AMD64 -inline intptr_t Atomic::xchg_ptr(intptr_t exchange_value, volatile intptr_t* dest) { - return (intptr_t)xchg((jint)exchange_value, (volatile jint*)dest); -} - extern "C" { // defined in bsd_x86.s jlong _Atomic_cmpxchg_long(jlong, volatile jlong*, jlong, bool);