summaryrefslogtreecommitdiff
path: root/arch/cris/arch-v32/lib/spinlock.S
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2017-08-30 08:25:59 +0000
committerYuval Adam <_@yuv.al>2017-08-30 08:25:59 +0000
commit8e4bff4cab0ddac6060645b0715210484d02ff40 (patch)
tree3a5c3024371a04692a3a6d9974d001cdff8ebf84 /arch/cris/arch-v32/lib/spinlock.S
Initial file dump from open source releaseHEADmaster
Diffstat (limited to 'arch/cris/arch-v32/lib/spinlock.S')
-rw-r--r--arch/cris/arch-v32/lib/spinlock.S40
1 files changed, 40 insertions, 0 deletions
diff --git a/arch/cris/arch-v32/lib/spinlock.S b/arch/cris/arch-v32/lib/spinlock.S
new file mode 100644
index 00000000..fe610b9d
--- /dev/null
+++ b/arch/cris/arch-v32/lib/spinlock.S
@@ -0,0 +1,40 @@
+;; Core of the spinlock implementation
+;;
+;; Copyright (C) 2004 Axis Communications AB.
+;;
+;; Author: Mikael Starvik
+
+
+ .global cris_spin_lock
+ .type cris_spin_lock,@function
+ .global cris_spin_trylock
+ .type cris_spin_trylock,@function
+
+ .text
+
+cris_spin_lock:
+ clearf p
+1: test.b [$r10]
+ beq 1b
+ clearf p
+ ax
+ clear.b [$r10]
+ bcs 1b
+ clearf p
+ ret
+ nop
+
+ .size cris_spin_lock, . - cris_spin_lock
+
+cris_spin_trylock:
+ clearf p
+1: move.b [$r10], $r11
+ ax
+ clear.b [$r10]
+ bcs 1b
+ clearf p
+ ret
+ movu.b $r11,$r10
+
+ .size cris_spin_trylock, . - cris_spin_trylock
+