summaryrefslogtreecommitdiff
path: root/sys/src/ape/lib/ap/arm/tas.s
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2015-07-07 19:53:26 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2015-07-07 19:53:26 +0200
commitcd92790c50433ee99fc3a3b3a95792e1daf2aed1 (patch)
treeb660b045e948d522e9e0bc3c53d4e0ca068fe76e /sys/src/ape/lib/ap/arm/tas.s
parent65061470665b3f91f01d23bad6a54704e8aa5851 (diff)
ape: port libc smp tas() for arm
Diffstat (limited to 'sys/src/ape/lib/ap/arm/tas.s')
-rw-r--r--sys/src/ape/lib/ap/arm/tas.s17
1 files changed, 13 insertions, 4 deletions
diff --git a/sys/src/ape/lib/ap/arm/tas.s b/sys/src/ape/lib/ap/arm/tas.s
index f1269209e..25d0e1cfe 100644
--- a/sys/src/ape/lib/ap/arm/tas.s
+++ b/sys/src/ape/lib/ap/arm/tas.s
@@ -1,5 +1,14 @@
-TEXT tas(SB), $-4
- MOVW R0,R1
- MOVW $1,R0
- SWPW R0,(R1)
+TEXT tas(SB), 1, $-4
+ MOVW $1, R2
+_tas1:
+ LDREX (R0), R1
+ STREX R2, (R0), R3
+ CMP.S $0, R3
+ BNE _tas1
+ MOVW R1, R0
+ MOVW _barrier(SB), R4
+ B (R4)
+
+TEXT _dmb(SB), 1, $-4
+ WORD $0xf57ff05f
RET