diff options
Diffstat (limited to 'nptl/sysdeps/unix')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h index bfd109f080..2b58d2e63a 100644 --- a/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h +++ b/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h @@ -99,6 +99,18 @@ __val; \ }) +/* Atomically store newval and return the old value. */ +#define __lll_test_and_set(futex, newval) \ + ({ int __val; \ + __asm __volatile ("1: lwarx %0,0,%3\n" \ + " stwcx. %2,0,%3\n" \ + " bne- 1b" \ + : "=&r" (__val), "=m" (*futex) \ + : "r" (futex), "r" (newval), "1" (*futex) \ + : "cr0"); \ + __val; }) + + extern void __lll_lock_wait (int *futex, int val) attribute_hidden; #define lll_mutex_lock(lock) \ |