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/x86/Context.S | |
parent | 091422388e943de1e67ace6faac3d71ed08c14d2 (diff) |
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/x86/Context.S')
-rw-r--r-- | coroutine/x86/Context.S | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/coroutine/x86/Context.S b/coroutine/x86/Context.S new file mode 100644 index 0000000000..5fc0cccc24 --- /dev/null +++ b/coroutine/x86/Context.S @@ -0,0 +1,39 @@ +## +## This file is part of the "Coroutine" project and released under the MIT License. +## +## Created by Samuel Williams on 3/11/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 registers + pushl %ebp + pushl %ebx + pushl %edi + pushl %esi + + # Save caller stack pointer + movl %esp, (%ecx) + + # Restore callee stack pointer + movl (%edx), %esp + + # Restore callee stack + popl %esi + popl %edi + popl %ebx + popl %ebp + + # Save the first argument as the return value + movl %ecx, %eax + + # Jump to the address on the stack + ret |