diff options
author | samuel <samuel@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-11-24 11:35:29 +0000 |
---|---|---|
committer | samuel <samuel@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-11-24 11:35:29 +0000 |
commit | e64f71f812324d098bed12ed68c2bc1d6e780c90 (patch) | |
tree | b47548dacef6f68c8f85fbfcd87cc984430243d3 /coroutine/amd64/Context.S | |
parent | 091422388e943de1e67ace6faac3d71ed08c14d2 (diff) | |
download | ruby-e64f71f812324d098bed12ed68c2bc1d6e780c90.tar.gz |
Change Makefile rule for assembly to use .S rather than .s
It is more conventional to use compiler to pre-process and
assemble the `.S` file rather than forcing Makefile to use `.s`.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'coroutine/amd64/Context.S')
-rw-r--r-- | coroutine/amd64/Context.S | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/coroutine/amd64/Context.S b/coroutine/amd64/Context.S new file mode 100644 index 0000000000..641bd016ab --- /dev/null +++ b/coroutine/amd64/Context.S @@ -0,0 +1,42 @@ +## +## This 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 + +# For older linkers +.globl _coroutine_transfer +_coroutine_transfer: + +.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 |