=?UTF-8?Q?Andr=C3=A9=20Hentschel=20?=: libport: Implemented the interlocked_cmpxchg128 function for ARM64.

Alexandre Julliard julliard at winehq.org
Wed Jan 16 13:47:43 CST 2013


Module: wine
Branch: master
Commit: c2ef2edf850a4cf27cae53b1664d1a40e80eb8e3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c2ef2edf850a4cf27cae53b1664d1a40e80eb8e3

Author: André Hentschel <nerv at 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;




More information about the wine-cvs mailing list