diff options
Diffstat (limited to 'libpthread/nptl/sysdeps/arc/pthread_spin_trylock.S')
-rw-r--r-- | libpthread/nptl/sysdeps/arc/pthread_spin_trylock.S | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/libpthread/nptl/sysdeps/arc/pthread_spin_trylock.S b/libpthread/nptl/sysdeps/arc/pthread_spin_trylock.S new file mode 100644 index 000000000..25f5421a2 --- /dev/null +++ b/libpthread/nptl/sysdeps/arc/pthread_spin_trylock.S @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com) + * + * Licensed under LGPL v2.1 or later, see the file COPYING.LIB in this tarball. + */ + +#include <sysdep.h> + +#define _ERRNO_H 1 +#include <bits/errno.h> + +; int pthread_spin_trylock(pthread_spinlock_t *lock) +; Return EBUSY is already locked, 0 if not + +ENTRY(pthread_spin_trylock) + mov_s r1, 1 + ex r1, [r0] + tst r1, r1 + mov.z r0, 0 + j.d [blink] + mov.nz r0, EBUSY + +; slightly faster, but difficult to follow +; mov_s r1, r0 +; mov_s r0, 1 +; ex r0, [r1] +; tst r0, r0 +; j.d [blink] +; mov.nz r0, EBUSY + +END(pthread_spin_trylock) |