aboutsummaryrefslogtreecommitdiffstats
path: root/coroutine/arm32/Context.S
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-06-26 22:02:19 +1200
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-06-26 22:02:28 +1200
commitacb67472c7da459812aa9008cf8cfbedcdddea67 (patch)
tree37f361d5b187d9f5fdbd70b67b225841e26d3bfb /coroutine/arm32/Context.S
parentba17127e992a4d1fb1fbd58869cbb4f12ff76227 (diff)
downloadruby-acb67472c7da459812aa9008cf8cfbedcdddea67.tar.gz
Restore updated implementation of arm32 coroutine code, but prefer ucontext.
Diffstat (limited to 'coroutine/arm32/Context.S')
-rw-r--r--coroutine/arm32/Context.S14
1 files changed, 11 insertions, 3 deletions
diff --git a/coroutine/arm32/Context.S b/coroutine/arm32/Context.S
index c2b93d0a34..4308e1d1d2 100644
--- a/coroutine/arm32/Context.S
+++ b/coroutine/arm32/Context.S
@@ -9,6 +9,14 @@
.globl coroutine_transfer
coroutine_transfer:
- stmia r1!, {r4-r11,sp,lr}
- ldmia r0!, {r4-r11,sp,pc}
- bx lr
+ # Save caller state (8 registers + return address)
+ push {r4-r11,lr}
+
+ # Save caller stack pointer
+ str sp, [r0]
+
+ # Restore callee stack pointer
+ ldr sp, [r1]
+
+ # Restore callee state (8 registers program counter)
+ pop {r4-r11,pc}