summaryrefslogtreecommitdiff
path: root/gnu-efi/lib/ia32/setjmp.S
diff options
context:
space:
mode:
Diffstat (limited to 'gnu-efi/lib/ia32/setjmp.S')
-rw-r--r--gnu-efi/lib/ia32/setjmp.S45
1 files changed, 45 insertions, 0 deletions
diff --git a/gnu-efi/lib/ia32/setjmp.S b/gnu-efi/lib/ia32/setjmp.S
new file mode 100644
index 00000000..aa9c0846
--- /dev/null
+++ b/gnu-efi/lib/ia32/setjmp.S
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.
+ * This program and the accompanying materials are licensed and made
+available
+ * under the terms and conditions of the BSD License which accompanies
+this
+ * distribution. The full text of the license may be found at
+ * http://opensource.org/licenses/bsd-license.php.
+ *
+ * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS"
+BASIS,
+ * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR
+ * IMPLIED.
+ */
+ .text
+ .globl setjmp
+#ifndef __MINGW32__
+ .type setjmp, @function
+#else
+ .def setjmp; .scl 2; .type 32; .endef
+#endif
+setjmp:
+ pop %ecx
+ movl (%esp), %edx
+ movl %ebx, (%edx)
+ movl %esi, 4(%edx)
+ movl %edi, 8(%edx)
+ movl %ebp, 12(%edx)
+ movl %esp, 16(%edx)
+ xorl %eax, %eax
+ jmp *%ecx
+
+ .globl longjmp
+#ifndef __MINGW32__
+ .type longjmp, @function
+#else
+ .def longjmp; .scl 2; .type 32; .endef
+#endif
+longjmp:
+ pop %eax
+ pop %edx
+ pop %eax
+ movl (%edx), %ebx
+ movl 4(%edx), %esi
+ movl 8(%edx), %edi