#
# arch/sh/setjmp.S
#
# setjmp/longjmp for the SuperH architecture
#

#
# The jmp_buf is assumed to contain the following, in order:
#
#		r8
#		r9
#		r10
#		r11
#		r12
#		r13
#		r14
#		r15
#		pr
#

	.text
	.align 2

	.globl setjmp
	.type setjmp, #function

setjmp:
	add	#(9*4), r4
	sts.l	pr, @-r4
	mov.l	r15, @-r4
	mov.l	r14, @-r4
	mov.l	r13, @-r4
	mov.l	r12, @-r4
	mov.l	r11, @-r4
	mov.l	r10, @-r4
	mov.l	r9, @-r4
	mov.l	r8, @-r4
	rts
	 mov	#0, r0

	.size setjmp,.-setjmp

	.align 2
	.globl longjmp
	.type setjmp, #function

longjmp:
	mov.l	@r4+, r8
	mov.l	@r4+, r9
	mov.l	@r4+, r10
	mov.l	@r4+, r11
	mov.l	@r4+, r12
	mov.l	@r4+, r13
	mov.l	@r4+, r14
	mov.l	@r4+, r15
	lds.l	@r4+, pr
	mov	r5, r0
	tst	r0, r0
	bf	1f
	mov	#1, r0	! in case val==0
1:	rts
	 nop

	.size longjmp,.-longjmp
