Another improvement to SetLevels
[ghc.git] / rts / StgCRunAsm.S
1 #include "ghcconfig.h"
2 #include "rts/Constants.h"
3
4 #if defined(powerpc64le_HOST_ARCH)
5 # ifdef linux_HOST_OS
6 # define STACK_FRAME_SIZE RESERVED_C_STACK_BYTES+304
7         .file   "StgCRun.c"
8         .abiversion 2
9         .section        ".toc","aw"
10         .section        ".text"
11         .align 2
12 .globl StgRun
13 .hidden StgRun
14 .type StgRun,@function
15 StgRun:
16 .localentry StgRun,.-StgRun
17         mflr 0
18         mr 5, 1
19         std 0, 16(1)
20         stdu 1, -(STACK_FRAME_SIZE)(1)
21         std 2, -296(5)
22         std 14, -288(5)
23         std 15, -280(5)
24         std 16, -272(5)
25         std 17, -264(5)
26         std 18, -256(5)
27         std 19, -248(5)
28         std 20, -240(5)
29         std 21, -232(5)
30         std 22, -224(5)
31         std 23, -216(5)
32         std 24, -208(5)
33         std 25, -200(5)
34         std 26, -192(5)
35         std 27, -184(5)
36         std 28, -176(5)
37         std 29, -168(5)
38         std 30, -160(5)
39         std 31, -152(5)
40         stfd 14, -144(5)
41         stfd 15, -136(5)
42         stfd 16, -128(5)
43         stfd 17, -120(5)
44         stfd 18, -112(5)
45         stfd 19, -104(5)
46         stfd 20, -96(5)
47         stfd 21, -88(5)
48         stfd 22, -80(5)
49         stfd 23, -72(5)
50         stfd 24, -64(5)
51         stfd 25, -56(5)
52         stfd 26, -48(5)
53         stfd 27, -40(5)
54         stfd 28, -32(5)
55         stfd 29, -24(5)
56         stfd 30, -16(5)
57         stfd 31, -8(5)
58         mr 27, 4
59         mtctr 3
60         mr 12, 3
61         bctr
62 .globl StgReturn
63 .type StgReturn,@function
64 StgReturn:
65 .localentry StgReturn,.-StgReturn
66         mr 3,14
67         la 5, STACK_FRAME_SIZE(1)
68         ld 2, -296(5)
69         ld 14, -288(5)
70         ld 15, -280(5)
71         ld 16, -272(5)
72         ld 17, -264(5)
73         ld 18, -256(5)
74         ld 19, -248(5)
75         ld 20, -240(5)
76         ld 21, -232(5)
77         ld 22, -224(5)
78         ld 23, -216(5)
79         ld 24, -208(5)
80         ld 25, -200(5)
81         ld 26, -192(5)
82         ld 27, -184(5)
83         ld 28, -176(5)
84         ld 29, -168(5)
85         ld 30, -160(5)
86         ld 31, -152(5)
87         lfd 14, -144(5)
88         lfd 15, -136(5)
89         lfd 16, -128(5)
90         lfd 17, -120(5)
91         lfd 18, -112(5)
92         lfd 19, -104(5)
93         lfd 20, -96(5)
94         lfd 21, -88(5)
95         lfd 22, -80(5)
96         lfd 23, -72(5)
97         lfd 24, -64(5)
98         lfd 25, -56(5)
99         lfd 26, -48(5)
100         lfd 27, -40(5)
101         lfd 28, -32(5)
102         lfd 29, -24(5)
103         lfd 30, -16(5)
104         lfd 31, -8(5)
105         mr 1, 5
106         ld 0, 16(1)
107         mtlr 0
108         blr
109
110         .section        .note.GNU-stack,"",@progbits
111 # else // linux_HOST_OS
112 # error Only Linux support for power64 little endian right now.
113 # endif
114
115 #elif defined(powerpc_HOST_ARCH)
116 # if defined(aix_HOST_OS)
117 # define STACK_FRAME_SIZE RESERVED_C_STACK_BYTES+224
118         .toc
119         .csect StgRun[DS]
120         .globl StgRun[DS]
121         .long .StgRun, TOC[TC0], 0
122         .csect .text[PR]
123         .globl .StgRun
124 .StgRun:
125         mflr  0
126         mr    5,1
127         stw   0,8(1)
128         stwu  1,-(STACK_FRAME_SIZE)(1)
129         stw   2,-224(5)
130         stmw 13,-220(5)
131         stfd 14,-144(5)
132         stfd 15,-136(5)
133         stfd 16,-128(5)
134         stfd 17,-120(5)
135         stfd 18,-112(5)
136         stfd 19,-104(5)
137         stfd 20,-96(5)
138         stfd 21,-88(5)
139         stfd 22,-80(5)
140         stfd 23,-72(5)
141         stfd 24,-64(5)
142         stfd 25,-56(5)
143         stfd 26,-48(5)
144         stfd 27,-40(5)
145         stfd 28,-32(5)
146         stfd 29,-24(5)
147         stfd 30,-16(5)
148         stfd 31,-8(5)
149         mr   27,4
150         mtctr 3
151         bctr
152
153         .globl StgReturn
154 StgReturn:
155         mr   3,14
156         la   5,(STACK_FRAME_SIZE)(1)
157         lwz  2,-224(5)
158         lmw 13,-220(5)
159         lfd 14,-144(5)
160         lfd 15,-136(5)
161         lfd 16,-128(5)
162         lfd 17,-120(5)
163         lfd 18,-112(5)
164         lfd 19,-104(5)
165         lfd 20,-96(5)
166         lfd 21,-88(5)
167         lfd 22,-80(5)
168         lfd 23,-72(5)
169         lfd 24,-64(5)
170         lfd 25,-56(5)
171         lfd 26,-48(5)
172         lfd 27,-40(5)
173         lfd 28,-32(5)
174         lfd 29,-24(5)
175         lfd 30,-16(5)
176         lfd 31,-8(5)
177         mr   1,5
178         lwz  0,8(1)
179         mtlr 0
180         blr
181
182 # endif // aix_HOST_OS
183 #endif