summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/alpha/setjmp.S
blob: 3768056be86782a958d5d3feca1dfb501877a99c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <setjmp.h>

.text
.global __sigsetjmp
__sigsetjmp:
	ldgp	$gp,  0($gp)

	mov	$sp, $1
	lda	$sp, -16($sp)

	stq	$26, 0($sp)	/* save ra */

	stq	 $9, (JB_S0*8) ($16)	/* s0 */
	stq	$10, (JB_S1*8) ($16)	/* s1 */
	stq	$11, (JB_S2*8) ($16)	/* s2 */
	stq	$12, (JB_S3*8) ($16)	/* s3 */
	stq	$13, (JB_S4*8) ($16)	/* s4 */
	stq	$14, (JB_S5*8) ($16)	/* s5 */

	stq	$26, (JB_PC*8) ($16)	/* ra */
	stq	$fp, (JB_FP*8) ($16)	/* fp */
	stq	 $1, (JB_SP*8) ($16)	/* sp */

	stt	$f2, (JB_F2*8) ($16)	/* f2 */
	stt	$f3, (JB_F3*8) ($16)	/* f3 */
	stt	$f4, (JB_F4*8) ($16)	/* f4 */
	stt	$f5, (JB_F5*8) ($16)	/* f5 */
	stt	$f6, (JB_F6*8) ($16)	/* f6 */
	stt	$f7, (JB_F7*8) ($16)	/* f7 */
	stt	$f8, (JB_F8*8) ($16)	/* f8 */
	stt	$f9, (JB_F9*8) ($16)	/* f9 */

	br	$26, __sigjmp_save	/* call __sigjmp_save */

	ldq	$26, 0($sp)	/* restore ra */

	lda	$sp, 16($sp)
	ret	$31, ($26), 1	/* back to caller */

.weak setjmp
setjmp:
.weak __setjmp
__setjmp:
	ldgp	$gp,  0($gp)
	mov	0, $17
	br	__sigsetjmp