1#define _SETJMP_H
2#define _ASM
3#include <bits/setjmp.h>
4
5#include <libc-symbols.h>
6
7.text
8.global C_SYMBOL_NAME(setjmp)
9.type C_SYMBOL_NAME(setjmp),@function
10.align 4
11
12C_SYMBOL_NAME(setjmp):
13    mvi     r2, 1       /* save the signal mask */
14    bi      C_SYMBOL_NAME(__sigsetjmp)
15
16.text
17.global C_SYMBOL_NAME(_setjmp)
18.type C_SYMBOL_NAME(_setjmp),@function
19.align 4
20
21C_SYMBOL_NAME(_setjmp):
22    mvi     r2, 0       /* don't save the signal mask */
23    bi      C_SYMBOL_NAME(__sigsetjmp)
24
25.text
26.global C_SYMBOL_NAME(__sigsetjmp)
27.type C_SYMBOL_NAME(__sigsetjmp),@function
28.align 4
29
30C_SYMBOL_NAME(__sigsetjmp):
31    /* save registers relative to r1 (arg0) */
32    sw      (r1+0), r11
33    sw      (r1+4), r12
34    sw      (r1+8), r13
35    sw      (r1+12), r14
36    sw      (r1+16), r15
37    sw      (r1+20), r16
38    sw      (r1+24), r17
39    sw      (r1+28), r18
40    sw      (r1+32), r19
41    sw      (r1+36), r20
42    sw      (r1+40), r21
43    sw      (r1+44), r22
44    sw      (r1+48), r23
45    sw      (r1+52), r24
46    sw      (r1+56), r25
47    sw      (r1+60), gp
48    sw      (r1+64), fp
49    sw      (r1+68), sp
50    sw      (r1+72), ra
51
52    /* make a tail call to __sigjmp_save; it takes the same args */
53    bi      C_SYMBOL_NAME(__sigjmp_save)
54