## ## 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. ## #define TOKEN_PASTE(x,y) x##y #define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) .text .globl PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) PREFIXED_SYMBOL(SYMBOL_PREFIX,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 state 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 #if defined(__linux__) && defined(__ELF__) .section .note.GNU-stack,"",%progbits #endif