diff options
Diffstat (limited to 'coroutine/win64/Context.asm')
-rw-r--r-- | coroutine/win64/Context.asm | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/coroutine/win64/Context.asm b/coroutine/win64/Context.asm new file mode 100644 index 0000000000..f57d3fd387 --- /dev/null +++ b/coroutine/win64/Context.asm @@ -0,0 +1,44 @@ +;; +;; win64.asm +;; 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. +;; + +.code + +coroutine_transfer proc + push rbp + push rbx + push rdi + push rsi + push r12 + push r13 + push r14 + push r15 + + ; Save caller stack pointer + mov [rcx], rsp + + ; Restore callee stack pointer + mov rsp, [rdx] + + ; Restore callee stack + pop r15 + pop r14 + pop r13 + pop r12 + pop rsi + pop rdi + pop rbx + pop rbp + + ; Put the first argument into the return value + mov rax, rcx + + ; We pop the return address and jump to it + ret +coroutine_transfer endp + +end |