59 lines
		
	
	
		
			963 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			963 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| #
 | |
| # arch/i386/setjmp.S
 | |
| #
 | |
| # setjmp/longjmp for the i386 architecture
 | |
| #
 | |
| 
 | |
| #
 | |
| # The jmp_buf is assumed to contain the following, in order:
 | |
| #	%ebx
 | |
| #	%esp
 | |
| #	%ebp
 | |
| #	%esi
 | |
| #	%edi
 | |
| #	<return address>
 | |
| #
 | |
| 
 | |
| 	.text
 | |
| 	.align 4
 | |
| 	.globl setjmp
 | |
| 	.type setjmp, @function
 | |
| setjmp:
 | |
| #ifdef _REGPARM
 | |
| 	movl %eax,%edx
 | |
| #else
 | |
| 	movl 4(%esp),%edx
 | |
| #endif
 | |
| 	popl %ecx			# Return address, and adjust the stack
 | |
| 	xorl %eax,%eax			# Return value
 | |
| 	movl %ebx,(%edx)
 | |
| 	movl %esp,4(%edx)		# Post-return %esp!
 | |
| 	pushl %ecx			# Make the call/return stack happy
 | |
| 	movl %ebp,8(%edx)
 | |
| 	movl %esi,12(%edx)
 | |
| 	movl %edi,16(%edx)
 | |
| 	movl %ecx,20(%edx)		# Return address
 | |
| 	ret
 | |
| 
 | |
| 	.size setjmp,.-setjmp
 | |
| 
 | |
| 	.text
 | |
| 	.align 4
 | |
| 	.globl longjmp
 | |
| 	.type longjmp, @function
 | |
| longjmp:
 | |
| #ifdef _REGPARM
 | |
| 	xchgl %eax,%edx
 | |
| #else
 | |
| 	movl 4(%esp),%edx		# jmp_ptr address
 | |
| 	movl 8(%esp),%eax		# Return value
 | |
| #endif
 | |
| 	movl (%edx),%ebx
 | |
| 	movl 4(%edx),%esp
 | |
| 	movl 8(%edx),%ebp
 | |
| 	movl 12(%edx),%esi
 | |
| 	movl 16(%edx),%edi
 | |
| 	jmp *20(%edx)
 | |
| 
 | |
| 	.size longjmp,.-longjmp
 |