diff options
author | samuel <samuel@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-11-20 09:59:10 +0000 |
---|---|---|
committer | samuel <samuel@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-11-20 09:59:10 +0000 |
commit | 07a324a0f6464f31765ee4bc5cfc23a99d426705 (patch) | |
tree | dd928b5cc16b6b44c9d7a1c68346da8061b0573a /coroutine/amd64/Context.s | |
parent | 27665e5134582bf58fb196268d659cc19df39f61 (diff) | |
download | ruby-07a324a0f6464f31765ee4bc5cfc23a99d426705.tar.gz |
Native implementation of coroutines to improve performance of fibers
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65834 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
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 |