/*
 * 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
