summaryrefslogtreecommitdiff
path: root/demo/lock.S
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2023-10-06 07:37:16 -0600
committerAlejandro Soto <alejandro@34project.org>2023-10-06 07:37:16 -0600
commit39fd8b8428da1e4bb0a182e1bcc61ec2d54563a4 (patch)
treea4dedd73b8fbfdfbfd1c2ca8c1a4c4a983fd9e26 /demo/lock.S
parentfac14c8c03592f101d34116cb8ecde908e92c18b (diff)
demo: implement remote cmds
Diffstat (limited to 'demo/lock.S')
-rw-r--r--demo/lock.S30
1 files changed, 0 insertions, 30 deletions
diff --git a/demo/lock.S b/demo/lock.S
deleted file mode 100644
index 51805f2..0000000
--- a/demo/lock.S
+++ /dev/null
@@ -1,30 +0,0 @@
-.global spin_init
-spin_init:
- mov r1, #0
- str r1, [r0]
- mov pc, lr
-
-.global spin_lock
-spin_lock:
- mrs r2, cpsr
- str r2, [r1]
- orr r2, r2, #0xc0 @ Levanta I, F
- msr cpsr_c, r2
- mov r3, #1
-1: ldrex r2, [r0] @ se carga el valor del lock
- teq r2, #0 @ se revisa si el valor del lock, si es 1, se brinca al jump
- strexeq r2, r3, [r0] @ trata de guardar r3 en r0, pero solo si el monitor se lo permite
- teqeq r2, #0 @ revisa si en efecto se hizo el store o no
- bne 1b @ regresa al inicio
- mov pc, lr @ retorna de la función
- @
- @ la implicación de esto es que si dos
- @ cores intentan hacer accesar al mismo
- @ recurso, el monitor solo va a dejar a uno
- @ de ellos hacerlo
-.global spin_unlock
-spin_unlock:
- mov r2, #0
- str r2, [r0]
- msr cpsr_c, r1
- mov pc, lr