summaryrefslogtreecommitdiff
path: root/newlib/libc/sys/sysvi386/_setjmp.s
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/sys/sysvi386/_setjmp.s')
-rw-r--r--newlib/libc/sys/sysvi386/_setjmp.s24
1 files changed, 24 insertions, 0 deletions
diff --git a/newlib/libc/sys/sysvi386/_setjmp.s b/newlib/libc/sys/sysvi386/_setjmp.s
new file mode 100644
index 00000000000..8f191b59a7b
--- /dev/null
+++ b/newlib/libc/sys/sysvi386/_setjmp.s
@@ -0,0 +1,24 @@
+/
+/ our buffer looks like:
+/ eax,ebx,ecx,edx,esi,edi,esp,ebp,pc
+
+ .globl _setjmp
+ .globl setjmp
+_setjmp:
+setjmp:
+ pushl %ebx
+ movl 8(%esp), %ebx
+ movl %eax, (%ebx)
+ popl %eax
+ movl %eax, 4(%ebx)
+ movl %ecx, 8(%ebx)
+ movl %edx, 12(%ebx)
+ movl %esi, 16(%ebx)
+ movl %edi, 20(%ebx)
+ movl %esp, 24(%ebx)
+ movl %ebp, 28(%ebx)
+ movl (%esp), %eax
+ movl %eax, 32(%ebx)
+ xorl %eax, %eax
+ ret
+