Skip to content

Commit

Permalink
GAS style assembly for win64 (mingw).
Browse files Browse the repository at this point in the history
  • Loading branch information
ioquatix committed Nov 4, 2018
1 parent 1901022 commit 67b4c2f
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 3 deletions.
5 changes: 2 additions & 3 deletions coroutine/amd64/Context.s
Expand Up @@ -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
Expand Down
77 changes: 77 additions & 0 deletions coroutine/win64/Context.s
@@ -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 8(%gs)
pushq 16(%gs)

; 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 16(%gs)
popq 8(%gs)

; 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

0 comments on commit 67b4c2f

Please sign in to comment.