chiark / gitweb /
volume_id: provide libvolume_id.a file
[elogind.git] / klibc / klibc / arch / sh / setjmp.S
1 #
2 # arch/sh/setjmp.S
3 #
4 # setjmp/longjmp for the SuperH architecture
5 #
6
7 #
8 # The jmp_buf is assumed to contain the following, in order:
9 #
10 #               r8
11 #               r9
12 #               r10
13 #               r11
14 #               r12
15 #               r13
16 #               r14
17 #               r15
18 #               pr
19 #
20
21         .text
22         .align 2
23
24         .globl setjmp
25         .type setjmp, #function
26
27 setjmp:
28         add     #(9*4), r4
29         sts.l   pr, @-r4
30         mov.l   r15, @-r4
31         mov.l   r14, @-r4
32         mov.l   r13, @-r4
33         mov.l   r12, @-r4
34         mov.l   r11, @-r4
35         mov.l   r10, @-r4
36         mov.l   r9, @-r4
37         mov.l   r8, @-r4
38         rts
39          mov    #0, r0
40
41         .size setjmp,.-setjmp
42
43         .align 2
44         .globl longjmp
45         .type setjmp, #function
46
47 longjmp:
48         mov.l   @r4+, r8
49         mov.l   @r4+, r9
50         mov.l   @r4+, r10
51         mov.l   @r4+, r11
52         mov.l   @r4+, r12
53         mov.l   @r4+, r13
54         mov.l   @r4+, r14
55         mov.l   @r4+, r15
56         lds.l   @r4+, pr
57         mov     r5, r0
58         tst     r0, r0
59         bf      1f
60         mov     #1, r0  ! in case val==0
61 1:      rts
62          nop
63
64         .size longjmp,.-longjmp
65