Module: wine Branch: master Commit: c2ef2edf850a4cf27cae53b1664d1a40e80eb8e3 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c2ef2edf850a4cf27cae53b166...
Author: André Hentschel nerv@dawncrow.de Date: Wed Jan 16 00:42:12 2013 +0100
libport: Implemented the interlocked_cmpxchg128 function for ARM64.
---
libs/port/interlocked.c | 22 ++++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/libs/port/interlocked.c b/libs/port/interlocked.c index eb14daa..143d226 100644 --- a/libs/port/interlocked.c +++ b/libs/port/interlocked.c @@ -313,6 +313,28 @@ __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;