blob: de9d60408da9030e841dcc68878673e2731f6c1f (
plain) (
tree)
|
|
# Copyright (c) 2021 Johannes Stoelp
.arch armv7-a
.section .text, "ax", %progbits
# extern "C" void yield(const void* new_stack, void** old_stack);
# ^^^^^^^^^ ^^^^^^^^^
# x0 x1
.global yield
.type yield, %function
yield:
.cfi_startproc
// prologue
push {fp, lr}
mov fp, sp
// push callee saved registers
push {r4-r11}
// arg0: r0 holds new stack
// arg1: r1 holds addr to location current stack must be saved
mov r2, sp
str r2, [r1] // save current stack ptr
mov sp, r0 // switch to new stack ptr
// pop callee saved registers
pop {r4-r11}
// epilogue
pop {fp, pc}
.cfi_endproc
.size yield, .-yield
|