You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jack-audio-connection-kit/jack-audio-connection-kit-1...

62 lines
2.1 KiB

diff -up jack-1.9.5/linux/JackAtomic_os.h.atomic jack-1.9.5/linux/JackAtomic_os.h
--- jack-1.9.5/linux/JackAtomic_os.h.atomic 2010-08-28 15:23:58.000000000 +0200
+++ jack-1.9.5/linux/JackAtomic_os.h 2010-09-01 09:29:03.000000000 +0200
@@ -22,23 +22,23 @@ Foundation, Inc., 59 Temple Place - Suit
#include "JackTypes.h"
-#ifdef __PPC__
+#if defined(__PPC__)
static inline int CAS(register UInt32 value, register UInt32 newvalue, register volatile void* addr)
{
register int result;
register UInt32 tmp;
asm volatile (
- "# CAS \n"
- " lwarx %4, 0, %1 \n" // creates a reservation on addr
- " cmpw %4, %2 \n" // test value at addr
- " bne- 1f \n"
- " sync \n" // synchronize instructions
- " stwcx. %3, 0, %1 \n" // if the reservation is not altered
+ "# CAS \n"
+ " lwarx %4, 0, %1 \n" // creates a reservation on addr
+ " cmpw %4, %2 \n" // test value at addr
+ " bne- 1f \n"
+ " sync \n" // synchronize instructions
+ " stwcx. %3, 0, %1 \n" // if the reservation is not altered
// stores the new value at addr
- " bne- 1f \n"
+ " bne- 1f \n"
" li %0, 1 \n"
- " b 2f \n"
+ " b 2f \n"
"1: \n"
" li %0, 0 \n"
"2: \n"
@@ -48,9 +48,7 @@ static inline int CAS(register UInt32 va
return result;
}
-#endif
-
-#if defined(__i386__) || defined(__x86_64__)
+#elif defined(__i386__) || defined(__x86_64__)
#define LOCK "lock ; "
@@ -67,6 +65,13 @@ static inline char CAS(volatile UInt32 v
return ret;
}
+#else
+
+static inline int CAS(register UInt32 value, register UInt32 newvalue, register volatile void* addr)
+{
+ return __sync_val_compare_and_swap((UInt32 *)addr, value, newvalue);
+}
+
#endif
#endif