aboutsummaryrefslogtreecommitdiff
path: root/src/libthread/OpenBSD-x86_64-asm.S
diff options
context:
space:
mode:
authorRuss Cox <rsc@swtch.com>2012-07-14 10:16:54 -0400
committerRuss Cox <rsc@swtch.com>2012-07-14 10:16:54 -0400
commit20f5692b7fe1190e6c518ed82764ded41dd92986 (patch)
treeab8d3b81a01e087180489b6c8627911440786976 /src/libthread/OpenBSD-x86_64-asm.S
parentc934984537a7673f980d731e10baec18d0c97c05 (diff)
downloadplan9port-20f5692b7fe1190e6c518ed82764ded41dd92986.tar.gz
plan9port-20f5692b7fe1190e6c518ed82764ded41dd92986.tar.bz2
plan9port-20f5692b7fe1190e6c518ed82764ded41dd92986.zip
openbsd updates (thanks Pascal Stumpf)
R=rsc http://codereview.appspot.com/6401049
Diffstat (limited to 'src/libthread/OpenBSD-x86_64-asm.S')
-rw-r--r--src/libthread/OpenBSD-x86_64-asm.S44
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