Index: fusl/src/setjmp/x86_64/setjmp.s |
diff --git a/fusl/src/setjmp/x86_64/setjmp.s b/fusl/src/setjmp/x86_64/setjmp.s |
new file mode 100644 |
index 0000000000000000000000000000000000000000..98f58b8d6551e391f426fc53c81678a03ac89074 |
--- /dev/null |
+++ b/fusl/src/setjmp/x86_64/setjmp.s |
@@ -0,0 +1,22 @@ |
+/* Copyright 2011-2012 Nicholas J. Kain, licensed under standard MIT license */ |
+.global __setjmp |
+.global _setjmp |
+.global setjmp |
+.type __setjmp,@function |
+.type _setjmp,@function |
+.type setjmp,@function |
+__setjmp: |
+_setjmp: |
+setjmp: |
+ mov %rbx,(%rdi) /* rdi is jmp_buf, move registers onto it */ |
+ mov %rbp,8(%rdi) |
+ mov %r12,16(%rdi) |
+ mov %r13,24(%rdi) |
+ mov %r14,32(%rdi) |
+ mov %r15,40(%rdi) |
+ lea 8(%rsp),%rdx /* this is our rsp WITHOUT current ret addr */ |
+ mov %rdx,48(%rdi) |
+ mov (%rsp),%rdx /* save return addr ptr for new rip */ |
+ mov %rdx,56(%rdi) |
+ xor %rax,%rax /* always return 0 */ |
+ ret |