mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Restore updated implementation of arm32 coroutine code, but prefer ucontext.
This commit is contained in:
parent
ba17127e99
commit
acb67472c7
3 changed files with 15 additions and 4 deletions
|
@ -2272,6 +2272,9 @@ AS_CASE(["$rb_cv_fiber_coroutine"], [yes|''], [
|
|||
[x64-mingw32], [
|
||||
rb_cv_fiber_coroutine=win64
|
||||
],
|
||||
[armv7*-linux-*], [
|
||||
rb_cv_fiber_coroutine=ucontext
|
||||
],
|
||||
[aarch64-linux], [
|
||||
rb_cv_fiber_coroutine=arm64
|
||||
],
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
#define COROUTINE __attribute__((noreturn)) void
|
||||
|
||||
enum {COROUTINE_REGISTERS = 9};
|
||||
enum {COROUTINE_REGISTERS = 8};
|
||||
|
||||
struct coroutine_context
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue