diff options
Diffstat (limited to 'src/libthread/OpenBSD-x86_64-asm.S')
-rw-r--r-- | src/libthread/OpenBSD-x86_64-asm.S | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/libthread/OpenBSD-x86_64-asm.S b/src/libthread/OpenBSD-x86_64-asm.S new file mode 100644 index 00000000..e982cdef --- /dev/null +++ b/src/libthread/OpenBSD-x86_64-asm.S @@ -0,0 +1,44 @@ +.text +.align 8 + +.globl libthread_getmcontext +libthread_getmcontext: + movq $1, 0*8(%rdi) // rax + movq %rbx, 1*8(%rdi) + movq %rcx, 2*8(%rdi) + movq %rdx, 3*8(%rdi) + movq %rsi, 4*8(%rdi) + movq %rdi, 5*8(%rdi) + movq %rbp, 6*8(%rdi) + movq %rsp, 7*8(%rdi) + movq %r8, 8*8(%rdi) + movq %r9, 9*8(%rdi) + movq %r10, 10*8(%rdi) + movq %r11, 11*8(%rdi) + movq %r12, 12*8(%rdi) + movq %r13, 13*8(%rdi) + movq %r14, 14*8(%rdi) + movq %r15, 15*8(%rdi) + movq $0, %rax + ret + +.globl libthread_setmcontext +libthread_setmcontext: + movq 0*8(%rdi), %rax + movq 1*8(%rdi), %rbx + movq 2*8(%rdi), %rcx + movq 3*8(%rdi), %rdx + movq 4*8(%rdi), %rsi + // %rdi later + movq 6*8(%rdi), %rbp + movq 7*8(%rdi), %rsp + movq 8*8(%rdi), %r8 + movq 9*8(%rdi), %r9 + movq 10*8(%rdi), %r10 + movq 11*8(%rdi), %r11 + movq 12*8(%rdi), %r12 + movq 13*8(%rdi), %r13 + movq 14*8(%rdi), %r14 + movq 15*8(%rdi), %r15 + movq 5*8(%rdi), %rdi + ret |