summaryrefslogtreecommitdiffhomepage
path: root/src/setjmp/nt64/setjmp.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/setjmp/nt64/setjmp.s')
-rw-r--r--src/setjmp/nt64/setjmp.s23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/setjmp/nt64/setjmp.s b/src/setjmp/nt64/setjmp.s
new file mode 100644
index 0000000..3e8a1ea
--- /dev/null
+++ b/src/setjmp/nt64/setjmp.s
@@ -0,0 +1,23 @@
+.text
+.globl __setjmp
+.globl _setjmp
+.globl setjmp
+
+__setjmp:
+_setjmp:
+setjmp:
+ pop (%rcx) # return address
+ mov %rsp, 0x08(%rcx) # caller's stack pointer
+ push (%rcx) # restore own stack pointer
+
+ mov %rbx, 0x10(%rcx)
+ mov %rbp, 0x18(%rcx)
+ mov %rdi, 0x20(%rcx)
+ mov %rsi, 0x28(%rcx)
+ mov %r12, 0x30(%rcx)
+ mov %r13, 0x38(%rcx)
+ mov %r14, 0x40(%rcx)
+ mov %r15, 0x48(%rcx)
+
+ xor %eax, %eax
+ ret