summaryrefslogtreecommitdiff
path: root/libpthread/nptl/sysdeps/arc/pthread_spin_trylock.S
diff options
context:
space:
mode:
authorVineet Gupta <vgupta@synopsys.com>2014-07-25 17:39:05 +0530
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2014-08-18 11:52:34 +0200
commit873fa5beccbb4e95d1bbb9afb6a0eec02811f09b (patch)
tree17ceb2c595fe9a491f3e7fa91d7c379babf2c356 /libpthread/nptl/sysdeps/arc/pthread_spin_trylock.S
parent6915b3a6b96e8e34601941c0eb7519cde1c0f999 (diff)
NPTL: ARC support
Signed-off-by: Vineet Gupta <vgupta@synopsys.com> Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'libpthread/nptl/sysdeps/arc/pthread_spin_trylock.S')
-rw-r--r--libpthread/nptl/sysdeps/arc/pthread_spin_trylock.S31
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)