diff options
Diffstat (limited to 'demo/lock.S')
| -rw-r--r-- | demo/lock.S | 30 |
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 |
