fixes for host gcc 4.6.1
[zpugcc/jano.git] / toolchain / gcc / newlib / libc / machine / frv / setjmp.S
blob296eff7192562968b8f0d9b04f443eadd2d15239
1 # setjmp/longjmp for Frv.  The jmpbuf looks like this:
2 #       
3 # Register      jmpbuf offset
4 # R16-R31       0x0-0x03c
5 # R48-R63       0x40-0x7c
6 # FR16-FR31     0x80-0xbc
7 # FR48-FR63     0xc0-0xfc
8 # LR            0x100
9 # SP            0x104
10 # FP            0x108
12 # R8 contains the pointer to jmpbuf
14 #include <frv-asm.h>
16         .text
17         .global EXT(setjmp)
18         .type   EXT(setjmp),@function
19 EXT(setjmp):
20         stdi    gr16, @(gr8,0)
21         stdi    gr18, @(gr8,8)
22         stdi    gr20, @(gr8,16)
23         stdi    gr22, @(gr8,24)
24         stdi    gr24, @(gr8,32)
25         stdi    gr26, @(gr8,40)
26         stdi    gr28, @(gr8,48)
27         stdi    gr30, @(gr8,56)
28 #if __FRV_GPR__ != 32
29         stdi    gr48, @(gr8,64)
30         stdi    gr50, @(gr8,72)
31         stdi    gr52, @(gr8,80)
32         stdi    gr54, @(gr8,88)
33         stdi    gr56, @(gr8,96)
34         stdi    gr58, @(gr8,104)
35         stdi    gr60, @(gr8,112)
36         stdi    gr62, @(gr8,120)
37 #endif
39 #if __FRV_FPR__ != 0
40         stdfi   fr16, @(gr8,128)
41         stdfi   fr18, @(gr8,136)
42         stdfi   fr20, @(gr8,144)
43         stdfi   fr22, @(gr8,152)
44         stdfi   fr24, @(gr8,160)
45         stdfi   fr26, @(gr8,168)
46         stdfi   fr28, @(gr8,176)
47         stdfi   fr30, @(gr8,184)
48 #if __FRV_FPR__ != 32
49         stdfi   fr48, @(gr8,192)
50         stdfi   fr50, @(gr8,200)
51         stdfi   fr52, @(gr8,208)
52         stdfi   fr54, @(gr8,216)
53         stdfi   fr56, @(gr8,224)
54         stdfi   fr58, @(gr8,232)
55         stdfi   fr60, @(gr8,240)
56         stdfi   fr62, @(gr8,248)
57 #endif
58 #endif
60         movsg   lr, gr4
61         sti     gr4, @(gr8,256)
62         sti     sp, @(gr8,260)
63         sti     fp, @(gr8,264)
64         
65         mov     gr0,gr8
66         ret
67 .Lend1:
68         .size   EXT(setjmp),.Lend1-EXT(setjmp)
70         .global EXT(longjmp)
71         .type   EXT(longjmp),@function
72 EXT(longjmp):
73         lddi    @(gr8,0), gr16
74         lddi    @(gr8,8), gr18
75         lddi    @(gr8,16), gr20
76         lddi    @(gr8,24), gr22
77         lddi    @(gr8,32), gr24
78         lddi    @(gr8,40), gr26
79         lddi    @(gr8,48), gr28
80         lddi    @(gr8,56), gr30
81 #if __FRV_GPR__ != 32
82         lddi    @(gr8,64), gr48
83         lddi    @(gr8,72), gr50
84         lddi    @(gr8,80), gr52
85         lddi    @(gr8,88), gr54
86         lddi    @(gr8,96), gr56
87         lddi    @(gr8,104), gr58
88         lddi    @(gr8,112), gr60
89         lddi    @(gr8,120), gr62
90 #endif
92 #if __FRV_FPR__ != 0
93         lddfi   @(gr8,128), fr16
94         lddfi   @(gr8,136), fr18
95         lddfi   @(gr8,144), fr20
96         lddfi   @(gr8,152), fr22
97         lddfi   @(gr8,160), fr24
98         lddfi   @(gr8,168), fr26
99         lddfi   @(gr8,176), fr28
100         lddfi   @(gr8,184), fr30
101 #if __FRV_FPR__ != 32
102         lddfi   @(gr8,192), fr48
103         lddfi   @(gr8,200), fr50
104         lddfi   @(gr8,208), fr52
105         lddfi   @(gr8,216), fr54
106         lddfi   @(gr8,224), fr56
107         lddfi   @(gr8,232), fr58
108         lddfi   @(gr8,240), fr60
109         lddfi   @(gr8,248), fr62
110 #endif
111 #endif
113         ldi     @(gr8,256), gr4
114         movgs   gr4,lr
116         ldi     @(gr8,260), sp
117         ldi     @(gr8,264), fp
118         
119 # Value to return is in r9.  If zero, return 1
120         cmp     gr9, gr0, icc0
121         setlos  #1, gr8
122         ckne    icc0, cc4
123         cmov    gr9, gr8, cc4, 1
124         ret
125 .Lend2:
126         .size   EXT(longjmp),.Lend2-EXT(longjmp2)