diff options
Diffstat (limited to 'coroutine/amd64/Context.s')
-rw-r--r-- | coroutine/amd64/Context.s | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/coroutine/amd64/Context.s b/coroutine/amd64/Context.s new file mode 100644 index 0000000000..980ba73202 --- /dev/null +++ b/coroutine/amd64/Context.s @@ -0,0 +1,44 @@ +## +## amd64.c +## File file is part of the "Coroutine" project and released under the MIT License. +## +## Created by Samuel Williams on 10/5/2018. +## Copyright, 2018, by Samuel Williams. All rights reserved. +## + +.text + +.globl coroutine_transfer +coroutine_transfer: + +# For older linkers +.globl _coroutine_transfer +_coroutine_transfer: + + # Save caller state + pushq %rbp + pushq %rbx + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 + + # Save caller stack pointer + movq %rsp, (%rdi) + + # Restore callee stack pointer + movq (%rsi), %rsp + + # Restore callee stack + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %rbx + popq %rbp + + # Put the first argument into the return value + # movq %rdi, %rax + + # We pop the return address and jump to it + ret |