Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / arch / i386 / core / setjmp.S
diff --git a/qemu/roms/ipxe/src/arch/i386/core/setjmp.S b/qemu/roms/ipxe/src/arch/i386/core/setjmp.S
new file mode 100644 (file)
index 0000000..0372714
--- /dev/null
@@ -0,0 +1,42 @@
+/* setjmp and longjmp. Use of these functions is deprecated. */
+
+FILE_LICENCE ( GPL2_OR_LATER )
+
+       .text
+       .arch i386
+       .code32
+       
+/**************************************************************************
+SETJMP - Save stack context for non-local goto
+**************************************************************************/
+       .globl  setjmp
+setjmp:
+       movl    4(%esp),%ecx            /* jmpbuf */
+       movl    0(%esp),%edx            /* return address */
+       movl    %edx,0(%ecx)
+       movl    %ebx,4(%ecx)
+       movl    %esp,8(%ecx)
+       movl    %ebp,12(%ecx)
+       movl    %esi,16(%ecx)
+       movl    %edi,20(%ecx)
+       movl    $0,%eax
+       ret
+
+/**************************************************************************
+LONGJMP - Non-local jump to a saved stack context
+**************************************************************************/
+       .globl  longjmp
+longjmp:
+       movl    4(%esp),%edx            /* jumpbuf */
+       movl    8(%esp),%eax            /* result */
+       movl    0(%edx),%ecx
+       movl    4(%edx),%ebx
+       movl    8(%edx),%esp
+       movl    12(%edx),%ebp
+       movl    16(%edx),%esi
+       movl    20(%edx),%edi
+       cmpl    $0,%eax
+       jne     1f
+       movl    $1,%eax
+1:     movl    %ecx,0(%esp)
+       ret