From cf66a1f0eed0d71ad45a365c5c51a8a35df2c591 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 16 Jan 2013 12:34:51 +0100 Subject: [PATCH] libport: Implemented the interlocked_cmpxchg128 function for ARM64. --- libs/port/interlocked.c | 44 ++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/libs/port/interlocked.c b/libs/port/interlocked.c index 143d22670e5..135bfc1c630 100644 --- a/libs/port/interlocked.c +++ b/libs/port/interlocked.c @@ -313,28 +313,6 @@ __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare ) return compare; } -#ifdef __aarch64__ -int interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare ) -{ - int retv; - pthread_mutex_lock( &interlocked_mutex ); - if (dest[0] == compare[0] && dest[1] == compare[1]) - { - dest[0] = xchg_low; - dest[1] = xchg_high; - retv = 1; - } - else - { - compare[0] = dest[0]; - compare[1] = dest[1]; - retv = 0; - } - pthread_mutex_unlock( &interlocked_mutex ); - return retv; -} -#endif - int interlocked_xchg( int *dest, int val ) { int retv; @@ -365,4 +343,26 @@ int interlocked_xchg_add( int *dest, int incr ) return retv; } +#ifdef _WIN64 +int interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high, __int64 xchg_low, __int64 *compare ) +{ + int retv; + pthread_mutex_lock( &interlocked_mutex ); + if (dest[0] == compare[0] && dest[1] == compare[1]) + { + dest[0] = xchg_low; + dest[1] = xchg_high; + retv = 1; + } + else + { + compare[0] = dest[0]; + compare[1] = dest[1]; + retv = 0; + } + pthread_mutex_unlock( &interlocked_mutex ); + return retv; +} +#endif + #endif