/* setjmp for SH4.
   Copyright (C) 1999-2014 Free Software Foundation, Inc.
   This file is part of the GNU C Library.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   <http://www.gnu.org/licenses/>.  */

#include <sysdep.h>
#include <jmpbuf-offsets.h>

ENTRY (__sigsetjmp)
	/* Save registers */
#ifdef __SH_FPU_ANY__
	add	#JB_SIZE, r4
	fmov.s	fr15, @-r4
	fmov.s	fr14, @-r4
	fmov.s	fr13, @-r4
	fmov.s	fr12, @-r4
	sts.l	fpscr, @-r4
#else
	add	#(JB_SIZE - 4 * 5), r4
#endif /* __SH_FPU_ANY__ */
	stc.l	gbr, @-r4
#ifdef PTR_MANGLE
	sts	pr, r2
	PTR_MANGLE (r2, r1)
	mov.l	r2, @-r4
	mov	r15, r2
	PTR_MANGLE2 (r2, r1)
	mov.l	r2, @-r4
	mov	r14, r2
	PTR_MANGLE2 (r2, r1)
	mov.l	r2, @-r4
	mov	#0, r1
#else
	sts.l	pr, @-r4
	mov.l	r15, @-r4
	mov.l	r14, @-r4
#endif
	mov.l	r13, @-r4
	mov.l	r12, @-r4
	mov.l	r11, @-r4
	mov.l	r10, @-r4
	mov.l	r9, @-r4
	mov.l	r8, @-r4

#if defined NOT_IN_libc && defined IS_IN_rtld
	/* In ld.so we never save the signal mask.  */
	rts
	 mov	#0, r0
#else
	/* Make a tail call to __sigjmp_save; it takes the same args.  */
# ifdef SHARED
	mov.l	1f, r1
	mova	1f, r0
	bra	2f
	 add	r1, r0
	.align	2
1:
	.long	_GLOBAL_OFFSET_TABLE_
2:
	mov.l	.L1, r1
	mov.l	@(r0,r1), r1
	jmp	@r1
	 nop
	.align	2
.L1:
	.long	C_SYMBOL_NAME(__sigjmp_save@GOT)
# else
	mov.l	.L1, r1
	jmp	@r1
	 nop
	.align	2
.L1:
	.long	C_SYMBOL_NAME(__sigjmp_save)
# endif
#endif
END (__sigsetjmp)
