mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
GAS style assembly for win64 (mingw).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65876 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
5e8a1dad86
commit
495dffba43
2 changed files with 79 additions and 3 deletions
|
@ -7,13 +7,12 @@
|
|||
|
||||
.text
|
||||
|
||||
.globl coroutine_transfer
|
||||
coroutine_transfer:
|
||||
|
||||
# For older linkers
|
||||
.globl _coroutine_transfer
|
||||
_coroutine_transfer:
|
||||
|
||||
.globl coroutine_transfer
|
||||
coroutine_transfer:
|
||||
# Save caller state
|
||||
pushq %rbp
|
||||
pushq %rbx
|
||||
|
|
77
coroutine/win64/Context.s
Normal file
77
coroutine/win64/Context.s
Normal file
|
@ -0,0 +1,77 @@
|
|||
##
|
||||
## This file is part of the "Coroutine" project and released under the MIT License.
|
||||
##
|
||||
## Created by Samuel Williams on 4/11/2018.
|
||||
## Copyright, 2018, by Samuel Williams. All rights reserved.
|
||||
##
|
||||
|
||||
.text
|
||||
|
||||
.globl coroutine_transfer
|
||||
coroutine_transfer:
|
||||
# Save the thread information block:
|
||||
pushq %gs:8
|
||||
pushq %gs:16
|
||||
|
||||
# Save caller registers:
|
||||
pushq %rbp
|
||||
pushq %rbx
|
||||
pushq %rdi
|
||||
pushq %rsi
|
||||
pushq %r12
|
||||
pushq %r13
|
||||
pushq %r14
|
||||
pushq %r15
|
||||
|
||||
movaps -24(%rsp), %xmm6
|
||||
movaps -40(%rsp), %xmm7
|
||||
movaps -56(%rsp), %xmm8
|
||||
movaps -72(%rsp), %xmm9
|
||||
movaps -88(%rsp), %xmm10
|
||||
movaps -104(%rsp), %xmm11
|
||||
movaps -120(%rsp), %xmm12
|
||||
movaps -136(%rsp), %xmm13
|
||||
movaps -152(%rsp), %xmm14
|
||||
movaps -168(%rsp), %xmm15
|
||||
|
||||
# Save caller stack pointer:
|
||||
mov %rsp, (%rcx)
|
||||
|
||||
# Restore callee stack pointer:
|
||||
mov (%rdx), %rsp
|
||||
|
||||
movaps %xmm15, -168(%rsp)
|
||||
movaps %xmm14, -152(%rsp)
|
||||
movaps %xmm13, -136(%rsp)
|
||||
movaps %xmm12, -120(%rsp)
|
||||
movaps %xmm11, -104(%rsp)
|
||||
movaps %xmm10, -88(%rsp)
|
||||
movaps %xmm9, -72(%rsp)
|
||||
movaps %xmm8, -56(%rsp)
|
||||
movaps %xmm7, -40(%rsp)
|
||||
movaps %xmm6, -24(%rsp)
|
||||
|
||||
# Restore callee stack:
|
||||
popq %r15
|
||||
popq %r14
|
||||
popq %r13
|
||||
popq %r12
|
||||
popq %rsi
|
||||
popq %rdi
|
||||
popq %rbx
|
||||
popq %rbp
|
||||
|
||||
# Restore the thread information block:
|
||||
popq %gs:16
|
||||
popq %gs:8
|
||||
|
||||
# Put the first argument into the return value:
|
||||
mov %rcx, %rax
|
||||
|
||||
# We pop the return address and jump to it:
|
||||
ret
|
||||
|
||||
.globl coroutine_trampoline
|
||||
coroutine_trampoline:
|
||||
# Do not remove this. This forces 16-byte alignment when entering the coroutine.
|
||||
ret
|
Loading…
Add table
Reference in a new issue