source: trunk/libs/newlib/src/newlib/libc/machine/frv/setjmp.S @ 444

Last change on this file since 444 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 2.5 KB
Line 
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
11#
12# R8 contains the pointer to jmpbuf
13
14#include <frv-asm.h>
15
16        .text
17        .global EXT(setjmp)
18        .type   EXT(setjmp),@function
19EXT(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
38
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
59
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)
69
70        .global EXT(longjmp)
71        .type   EXT(longjmp),@function
72EXT(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
91
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
112
113        ldi     @(gr8,256), gr4
114        movgs   gr4,lr
115
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(longjmp)
Note: See TracBrowser for help on using the repository browser.