yann@1
|
1 |
Fixes the problem
|
yann@1
|
2 |
[ libdemo.so and main.o both use assignment on structures ]
|
yann@1
|
3 |
$ sh4-unknown-linux-gnu-gcc libdemo.so main.o
|
yann@1
|
4 |
sh4-unknown-linux-gnu/bin/ld: warning: type and size of dynamic symbol `__movstr_i4_even' are not defined
|
yann@1
|
5 |
[ resulting app links, but crashes at runtime ]
|
yann@1
|
6 |
See testcase at http://tsukuba.m17n.org/linux-sh/ml/linux-sh/2003-11/msg00016.html
|
yann@1
|
7 |
|
yann@1
|
8 |
Patch was posted as http://gcc.gnu.org/ml/gcc-patches/2002-11/msg01641.html
|
yann@1
|
9 |
and is in cvs as http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/sh/lib1funcs.asm.diff?r1=1.29.4.1&r2=1.29.4.2
|
yann@1
|
10 |
|
yann@1
|
11 |
but see also sh-libgcc-hidden.patch (part of gcc-3.3.3 as of 20040119 or so)
|
yann@1
|
12 |
|
yann@1
|
13 |
===================================================================
|
yann@1
|
14 |
|
yann@1
|
15 |
--- gcc/gcc/config/sh/lib1funcs.asm 2002/09/20 01:29:21 1.29.4.1
|
yann@1
|
16 |
+++ gcc/gcc/config/sh/lib1funcs.asm 2003/11/18 12:27:31
|
yann@1
|
17 |
@@ -38,9 +38,14 @@
|
yann@1
|
18 |
amylaar@cygnus.com */
|
yann@1
|
19 |
|
yann@1
|
20 |
#ifdef __ELF__
|
yann@1
|
21 |
-#define LOCAL(X) .L_##X
|
yann@1
|
22 |
-#else
|
yann@1
|
23 |
-#define LOCAL(X) L_##X
|
yann@1
|
24 |
+#define LOCAL(X) .L_##X
|
yann@1
|
25 |
+#define FUNC(X) .type X,@function
|
yann@1
|
26 |
+#define ENDFUNC0(X) .Lfe_##X: .size X,.Lfe_##X-X
|
yann@1
|
27 |
+#define ENDFUNC(X) ENDFUNC0(X)
|
yann@1
|
28 |
+#else
|
yann@1
|
29 |
+#define LOCAL(X) L_##X
|
yann@1
|
30 |
+#define FUNC(X)
|
yann@1
|
31 |
+#define ENDFUNC(X)
|
yann@1
|
32 |
#endif
|
yann@1
|
33 |
|
yann@1
|
34 |
#define CONCAT(A,B) A##B
|
yann@1
|
35 |
@@ -87,6 +92,40 @@
|
yann@1
|
36 |
.global GLOBAL(ashiftrt_r4_31)
|
yann@1
|
37 |
.global GLOBAL(ashiftrt_r4_32)
|
yann@1
|
38 |
|
yann@1
|
39 |
+ FUNC(GLOBAL(ashiftrt_r4_0))
|
yann@1
|
40 |
+ FUNC(GLOBAL(ashiftrt_r4_1))
|
yann@1
|
41 |
+ FUNC(GLOBAL(ashiftrt_r4_2))
|
yann@1
|
42 |
+ FUNC(GLOBAL(ashiftrt_r4_3))
|
yann@1
|
43 |
+ FUNC(GLOBAL(ashiftrt_r4_4))
|
yann@1
|
44 |
+ FUNC(GLOBAL(ashiftrt_r4_5))
|
yann@1
|
45 |
+ FUNC(GLOBAL(ashiftrt_r4_6))
|
yann@1
|
46 |
+ FUNC(GLOBAL(ashiftrt_r4_7))
|
yann@1
|
47 |
+ FUNC(GLOBAL(ashiftrt_r4_8))
|
yann@1
|
48 |
+ FUNC(GLOBAL(ashiftrt_r4_9))
|
yann@1
|
49 |
+ FUNC(GLOBAL(ashiftrt_r4_10))
|
yann@1
|
50 |
+ FUNC(GLOBAL(ashiftrt_r4_11))
|
yann@1
|
51 |
+ FUNC(GLOBAL(ashiftrt_r4_12))
|
yann@1
|
52 |
+ FUNC(GLOBAL(ashiftrt_r4_13))
|
yann@1
|
53 |
+ FUNC(GLOBAL(ashiftrt_r4_14))
|
yann@1
|
54 |
+ FUNC(GLOBAL(ashiftrt_r4_15))
|
yann@1
|
55 |
+ FUNC(GLOBAL(ashiftrt_r4_16))
|
yann@1
|
56 |
+ FUNC(GLOBAL(ashiftrt_r4_17))
|
yann@1
|
57 |
+ FUNC(GLOBAL(ashiftrt_r4_18))
|
yann@1
|
58 |
+ FUNC(GLOBAL(ashiftrt_r4_19))
|
yann@1
|
59 |
+ FUNC(GLOBAL(ashiftrt_r4_20))
|
yann@1
|
60 |
+ FUNC(GLOBAL(ashiftrt_r4_21))
|
yann@1
|
61 |
+ FUNC(GLOBAL(ashiftrt_r4_22))
|
yann@1
|
62 |
+ FUNC(GLOBAL(ashiftrt_r4_23))
|
yann@1
|
63 |
+ FUNC(GLOBAL(ashiftrt_r4_24))
|
yann@1
|
64 |
+ FUNC(GLOBAL(ashiftrt_r4_25))
|
yann@1
|
65 |
+ FUNC(GLOBAL(ashiftrt_r4_26))
|
yann@1
|
66 |
+ FUNC(GLOBAL(ashiftrt_r4_27))
|
yann@1
|
67 |
+ FUNC(GLOBAL(ashiftrt_r4_28))
|
yann@1
|
68 |
+ FUNC(GLOBAL(ashiftrt_r4_29))
|
yann@1
|
69 |
+ FUNC(GLOBAL(ashiftrt_r4_30))
|
yann@1
|
70 |
+ FUNC(GLOBAL(ashiftrt_r4_31))
|
yann@1
|
71 |
+ FUNC(GLOBAL(ashiftrt_r4_32))
|
yann@1
|
72 |
+
|
yann@1
|
73 |
.align 1
|
yann@1
|
74 |
GLOBAL(ashiftrt_r4_32):
|
yann@1
|
75 |
GLOBAL(ashiftrt_r4_31):
|
yann@1
|
76 |
@@ -166,6 +205,40 @@
|
yann@1
|
77 |
GLOBAL(ashiftrt_r4_0):
|
yann@1
|
78 |
rts
|
yann@1
|
79 |
nop
|
yann@1
|
80 |
+
|
yann@1
|
81 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_0))
|
yann@1
|
82 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_1))
|
yann@1
|
83 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_2))
|
yann@1
|
84 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_3))
|
yann@1
|
85 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_4))
|
yann@1
|
86 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_5))
|
yann@1
|
87 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_6))
|
yann@1
|
88 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_7))
|
yann@1
|
89 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_8))
|
yann@1
|
90 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_9))
|
yann@1
|
91 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_10))
|
yann@1
|
92 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_11))
|
yann@1
|
93 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_12))
|
yann@1
|
94 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_13))
|
yann@1
|
95 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_14))
|
yann@1
|
96 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_15))
|
yann@1
|
97 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_16))
|
yann@1
|
98 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_17))
|
yann@1
|
99 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_18))
|
yann@1
|
100 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_19))
|
yann@1
|
101 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_20))
|
yann@1
|
102 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_21))
|
yann@1
|
103 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_22))
|
yann@1
|
104 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_23))
|
yann@1
|
105 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_24))
|
yann@1
|
106 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_25))
|
yann@1
|
107 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_26))
|
yann@1
|
108 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_27))
|
yann@1
|
109 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_28))
|
yann@1
|
110 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_29))
|
yann@1
|
111 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_30))
|
yann@1
|
112 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_31))
|
yann@1
|
113 |
+ ENDFUNC(GLOBAL(ashiftrt_r4_32))
|
yann@1
|
114 |
#endif
|
yann@1
|
115 |
|
yann@1
|
116 |
#ifdef L_ashiftrt_n
|
yann@1
|
117 |
@@ -188,6 +261,7 @@
|
yann@1
|
118 |
!
|
yann@1
|
119 |
|
yann@1
|
120 |
.global GLOBAL(ashrsi3)
|
yann@1
|
121 |
+ FUNC(GLOBAL(ashrsi3))
|
yann@1
|
122 |
.align 2
|
yann@1
|
123 |
GLOBAL(ashrsi3):
|
yann@1
|
124 |
mov #31,r0
|
yann@1
|
125 |
@@ -315,6 +389,7 @@
|
yann@1
|
126 |
rts
|
yann@1
|
127 |
nop
|
yann@1
|
128 |
|
yann@1
|
129 |
+ ENDFUNC(GLOBAL(ashrsi3))
|
yann@1
|
130 |
#endif
|
yann@1
|
131 |
|
yann@1
|
132 |
#ifdef L_ashiftlt
|
yann@1
|
133 |
@@ -336,6 +411,7 @@
|
yann@1
|
134 |
! (none)
|
yann@1
|
135 |
!
|
yann@1
|
136 |
.global GLOBAL(ashlsi3)
|
yann@1
|
137 |
+ FUNC(GLOBAL(ashlsi3))
|
yann@1
|
138 |
.align 2
|
yann@1
|
139 |
GLOBAL(ashlsi3):
|
yann@1
|
140 |
mov #31,r0
|
yann@1
|
141 |
@@ -472,6 +548,7 @@
|
yann@1
|
142 |
rts
|
yann@1
|
143 |
nop
|
yann@1
|
144 |
|
yann@1
|
145 |
+ ENDFUNC(GLOBAL(ashlsi3))
|
yann@1
|
146 |
#endif
|
yann@1
|
147 |
|
yann@1
|
148 |
#ifdef L_lshiftrt
|
yann@1
|
149 |
@@ -493,6 +570,7 @@
|
yann@1
|
150 |
! (none)
|
yann@1
|
151 |
!
|
yann@1
|
152 |
.global GLOBAL(lshrsi3)
|
yann@1
|
153 |
+ FUNC(GLOBAL(lshrsi3))
|
yann@1
|
154 |
.align 2
|
yann@1
|
155 |
GLOBAL(lshrsi3):
|
yann@1
|
156 |
mov #31,r0
|
yann@1
|
157 |
@@ -629,6 +707,7 @@
|
yann@1
|
158 |
rts
|
yann@1
|
159 |
nop
|
yann@1
|
160 |
|
yann@1
|
161 |
+ ENDFUNC(GLOBAL(lshrsi3))
|
yann@1
|
162 |
#endif
|
yann@1
|
163 |
|
yann@1
|
164 |
#ifdef L_movstr
|
yann@1
|
165 |
@@ -645,76 +724,113 @@
|
yann@1
|
166 |
add #64,r4
|
yann@1
|
167 |
.align 4
|
yann@1
|
168 |
.global GLOBAL(movstrSI64)
|
yann@1
|
169 |
+ FUNC(GLOBAL(movstrSI64))
|
yann@1
|
170 |
GLOBAL(movstrSI64):
|
yann@1
|
171 |
mov.l @(60,r5),r0
|
yann@1
|
172 |
mov.l r0,@(60,r4)
|
yann@1
|
173 |
.global GLOBAL(movstrSI60)
|
yann@1
|
174 |
+ FUNC(GLOBAL(movstrSI60))
|
yann@1
|
175 |
GLOBAL(movstrSI60):
|
yann@1
|
176 |
mov.l @(56,r5),r0
|
yann@1
|
177 |
mov.l r0,@(56,r4)
|
yann@1
|
178 |
.global GLOBAL(movstrSI56)
|
yann@1
|
179 |
+ FUNC(GLOBAL(movstrSI56))
|
yann@1
|
180 |
GLOBAL(movstrSI56):
|
yann@1
|
181 |
mov.l @(52,r5),r0
|
yann@1
|
182 |
mov.l r0,@(52,r4)
|
yann@1
|
183 |
.global GLOBAL(movstrSI52)
|
yann@1
|
184 |
+ FUNC(GLOBAL(movstrSI52))
|
yann@1
|
185 |
GLOBAL(movstrSI52):
|
yann@1
|
186 |
mov.l @(48,r5),r0
|
yann@1
|
187 |
mov.l r0,@(48,r4)
|
yann@1
|
188 |
.global GLOBAL(movstrSI48)
|
yann@1
|
189 |
+ FUNC(GLOBAL(movstrSI48))
|
yann@1
|
190 |
GLOBAL(movstrSI48):
|
yann@1
|
191 |
mov.l @(44,r5),r0
|
yann@1
|
192 |
mov.l r0,@(44,r4)
|
yann@1
|
193 |
.global GLOBAL(movstrSI44)
|
yann@1
|
194 |
+ FUNC(GLOBAL(movstrSI44))
|
yann@1
|
195 |
GLOBAL(movstrSI44):
|
yann@1
|
196 |
mov.l @(40,r5),r0
|
yann@1
|
197 |
mov.l r0,@(40,r4)
|
yann@1
|
198 |
.global GLOBAL(movstrSI40)
|
yann@1
|
199 |
+ FUNC(GLOBAL(movstrSI40))
|
yann@1
|
200 |
GLOBAL(movstrSI40):
|
yann@1
|
201 |
mov.l @(36,r5),r0
|
yann@1
|
202 |
mov.l r0,@(36,r4)
|
yann@1
|
203 |
.global GLOBAL(movstrSI36)
|
yann@1
|
204 |
+ FUNC(GLOBAL(movstrSI36))
|
yann@1
|
205 |
GLOBAL(movstrSI36):
|
yann@1
|
206 |
mov.l @(32,r5),r0
|
yann@1
|
207 |
mov.l r0,@(32,r4)
|
yann@1
|
208 |
.global GLOBAL(movstrSI32)
|
yann@1
|
209 |
+ FUNC(GLOBAL(movstrSI32))
|
yann@1
|
210 |
GLOBAL(movstrSI32):
|
yann@1
|
211 |
mov.l @(28,r5),r0
|
yann@1
|
212 |
mov.l r0,@(28,r4)
|
yann@1
|
213 |
.global GLOBAL(movstrSI28)
|
yann@1
|
214 |
+ FUNC(GLOBAL(movstrSI28))
|
yann@1
|
215 |
GLOBAL(movstrSI28):
|
yann@1
|
216 |
mov.l @(24,r5),r0
|
yann@1
|
217 |
mov.l r0,@(24,r4)
|
yann@1
|
218 |
.global GLOBAL(movstrSI24)
|
yann@1
|
219 |
+ FUNC(GLOBAL(movstrSI24))
|
yann@1
|
220 |
GLOBAL(movstrSI24):
|
yann@1
|
221 |
mov.l @(20,r5),r0
|
yann@1
|
222 |
mov.l r0,@(20,r4)
|
yann@1
|
223 |
.global GLOBAL(movstrSI20)
|
yann@1
|
224 |
+ FUNC(GLOBAL(movstrSI20))
|
yann@1
|
225 |
GLOBAL(movstrSI20):
|
yann@1
|
226 |
mov.l @(16,r5),r0
|
yann@1
|
227 |
mov.l r0,@(16,r4)
|
yann@1
|
228 |
.global GLOBAL(movstrSI16)
|
yann@1
|
229 |
+ FUNC(GLOBAL(movstrSI16))
|
yann@1
|
230 |
GLOBAL(movstrSI16):
|
yann@1
|
231 |
mov.l @(12,r5),r0
|
yann@1
|
232 |
mov.l r0,@(12,r4)
|
yann@1
|
233 |
.global GLOBAL(movstrSI12)
|
yann@1
|
234 |
+ FUNC(GLOBAL(movstrSI12))
|
yann@1
|
235 |
GLOBAL(movstrSI12):
|
yann@1
|
236 |
mov.l @(8,r5),r0
|
yann@1
|
237 |
mov.l r0,@(8,r4)
|
yann@1
|
238 |
.global GLOBAL(movstrSI8)
|
yann@1
|
239 |
+ FUNC(GLOBAL(movstrSI8))
|
yann@1
|
240 |
GLOBAL(movstrSI8):
|
yann@1
|
241 |
mov.l @(4,r5),r0
|
yann@1
|
242 |
mov.l r0,@(4,r4)
|
yann@1
|
243 |
.global GLOBAL(movstrSI4)
|
yann@1
|
244 |
+ FUNC(GLOBAL(movstrSI4))
|
yann@1
|
245 |
GLOBAL(movstrSI4):
|
yann@1
|
246 |
mov.l @(0,r5),r0
|
yann@1
|
247 |
mov.l r0,@(0,r4)
|
yann@1
|
248 |
+ .global GLOBAL(movstrSI0)
|
yann@1
|
249 |
+ FUNC(GLOBAL(movstrSI0))
|
yann@1
|
250 |
GLOBAL(movstrSI0):
|
yann@1
|
251 |
rts
|
yann@1
|
252 |
nop
|
yann@1
|
253 |
|
yann@1
|
254 |
+ ENDFUNC(GLOBAL(movstrSI64))
|
yann@1
|
255 |
+ ENDFUNC(GLOBAL(movstrSI60))
|
yann@1
|
256 |
+ ENDFUNC(GLOBAL(movstrSI56))
|
yann@1
|
257 |
+ ENDFUNC(GLOBAL(movstrSI52))
|
yann@1
|
258 |
+ ENDFUNC(GLOBAL(movstrSI48))
|
yann@1
|
259 |
+ ENDFUNC(GLOBAL(movstrSI44))
|
yann@1
|
260 |
+ ENDFUNC(GLOBAL(movstrSI40))
|
yann@1
|
261 |
+ ENDFUNC(GLOBAL(movstrSI36))
|
yann@1
|
262 |
+ ENDFUNC(GLOBAL(movstrSI32))
|
yann@1
|
263 |
+ ENDFUNC(GLOBAL(movstrSI28))
|
yann@1
|
264 |
+ ENDFUNC(GLOBAL(movstrSI24))
|
yann@1
|
265 |
+ ENDFUNC(GLOBAL(movstrSI20))
|
yann@1
|
266 |
+ ENDFUNC(GLOBAL(movstrSI16))
|
yann@1
|
267 |
+ ENDFUNC(GLOBAL(movstrSI12))
|
yann@1
|
268 |
+ ENDFUNC(GLOBAL(movstrSI8))
|
yann@1
|
269 |
+ ENDFUNC(GLOBAL(movstrSI4))
|
yann@1
|
270 |
+ ENDFUNC(GLOBAL(movstrSI0))
|
yann@1
|
271 |
+
|
yann@1
|
272 |
.align 4
|
yann@1
|
273 |
|
yann@1
|
274 |
.global GLOBAL(movstr)
|
yann@1
|
275 |
+ FUNC(GLOBAL(movstr))
|
yann@1
|
276 |
GLOBAL(movstr):
|
yann@1
|
277 |
mov.l @(60,r5),r0
|
yann@1
|
278 |
mov.l r0,@(60,r4)
|
yann@1
|
279 |
@@ -771,6 +887,8 @@
|
yann@1
|
280 |
add #64,r5
|
yann@1
|
281 |
bra GLOBAL(movstr)
|
yann@1
|
282 |
add #64,r4
|
yann@1
|
283 |
+
|
yann@1
|
284 |
+ FUNC(GLOBAL(movstr))
|
yann@1
|
285 |
#endif
|
yann@1
|
286 |
|
yann@1
|
287 |
#ifdef L_movstr_i4
|
yann@1
|
288 |
@@ -779,6 +897,10 @@
|
yann@1
|
289 |
.global GLOBAL(movstr_i4_odd)
|
yann@1
|
290 |
.global GLOBAL(movstrSI12_i4)
|
yann@1
|
291 |
|
yann@1
|
292 |
+ FUNC(GLOBAL(movstr_i4_even))
|
yann@1
|
293 |
+ FUNC(GLOBAL(movstr_i4_odd))
|
yann@1
|
294 |
+ FUNC(GLOBAL(movstrSI12_i4))
|
yann@1
|
295 |
+
|
yann@1
|
296 |
.p2align 5
|
yann@1
|
297 |
L_movstr_2mod4_end:
|
yann@1
|
298 |
mov.l r0,@(16,r4)
|
yann@1
|
299 |
@@ -787,6 +909,11 @@
|
yann@1
|
300 |
|
yann@1
|
301 |
.p2align 2
|
yann@1
|
302 |
|
yann@1
|
303 |
+GLOBAL(movstr_i4_even):
|
yann@1
|
304 |
+ mov.l @r5+,r0
|
yann@1
|
305 |
+ bra L_movstr_start_even
|
yann@1
|
306 |
+ mov.l @r5+,r1
|
yann@1
|
307 |
+
|
yann@1
|
308 |
GLOBAL(movstr_i4_odd):
|
yann@1
|
309 |
mov.l @r5+,r1
|
yann@1
|
310 |
add #-4,r4
|
yann@1
|
311 |
@@ -813,10 +940,8 @@
|
yann@1
|
312 |
rts
|
yann@1
|
313 |
mov.l r3,@(12,r4)
|
yann@1
|
314 |
|
yann@1
|
315 |
-GLOBAL(movstr_i4_even):
|
yann@1
|
316 |
- mov.l @r5+,r0
|
yann@1
|
317 |
- bra L_movstr_start_even
|
yann@1
|
318 |
- mov.l @r5+,r1
|
yann@1
|
319 |
+ ENDFUNC(GLOBAL(movstr_i4_even))
|
yann@1
|
320 |
+ ENDFUNC(GLOBAL(movstr_i4_odd))
|
yann@1
|
321 |
|
yann@1
|
322 |
.p2align 4
|
yann@1
|
323 |
GLOBAL(movstrSI12_i4):
|
yann@1
|
324 |
@@ -827,12 +952,15 @@
|
yann@1
|
325 |
mov.l r1,@(4,r4)
|
yann@1
|
326 |
rts
|
yann@1
|
327 |
mov.l r2,@(8,r4)
|
yann@1
|
328 |
+
|
yann@1
|
329 |
+ ENDFUNC(GLOBAL(movstrSI12_i4))
|
yann@1
|
330 |
#endif
|
yann@1
|
331 |
|
yann@1
|
332 |
#ifdef L_mulsi3
|
yann@1
|
333 |
|
yann@1
|
334 |
|
yann@1
|
335 |
.global GLOBAL(mulsi3)
|
yann@1
|
336 |
+ FUNC(GLOBAL(mulsi3))
|
yann@1
|
337 |
|
yann@1
|
338 |
! r4 = aabb
|
yann@1
|
339 |
! r5 = ccdd
|
yann@1
|
340 |
@@ -865,7 +993,7 @@
|
yann@1
|
341 |
rts
|
yann@1
|
342 |
add r2,r0
|
yann@1
|
343 |
|
yann@1
|
344 |
-
|
yann@1
|
345 |
+ FUNC(GLOBAL(mulsi3))
|
yann@1
|
346 |
#endif
|
yann@1
|
347 |
#endif /* ! __SH5__ */
|
yann@1
|
348 |
#ifdef L_sdivsi3_i4
|
yann@1
|
349 |
@@ -875,6 +1003,7 @@
|
yann@1
|
350 |
!! args in r4 and r5, result in fpul, clobber dr0, dr2
|
yann@1
|
351 |
|
yann@1
|
352 |
.global GLOBAL(sdivsi3_i4)
|
yann@1
|
353 |
+ FUNC(GLOBAL(sdivsi3_i4))
|
yann@1
|
354 |
GLOBAL(sdivsi3_i4):
|
yann@1
|
355 |
lds r4,fpul
|
yann@1
|
356 |
float fpul,dr0
|
yann@1
|
357 |
@@ -884,6 +1013,7 @@
|
yann@1
|
358 |
rts
|
yann@1
|
359 |
ftrc dr0,fpul
|
yann@1
|
360 |
|
yann@1
|
361 |
+ ENDFUNC(GLOBAL(sdivsi3_i4))
|
yann@1
|
362 |
#elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) || (defined (__SH5__) && ! defined __SH4_NOFPU__)
|
yann@1
|
363 |
!! args in r4 and r5, result in fpul, clobber r2, dr0, dr2
|
yann@1
|
364 |
|
yann@1
|
365 |
@@ -892,6 +1022,7 @@
|
yann@1
|
366 |
.mode SHcompact
|
yann@1
|
367 |
#endif
|
yann@1
|
368 |
.global GLOBAL(sdivsi3_i4)
|
yann@1
|
369 |
+ FUNC(GLOBAL(sdivsi3_i4))
|
yann@1
|
370 |
GLOBAL(sdivsi3_i4):
|
yann@1
|
371 |
sts.l fpscr,@-r15
|
yann@1
|
372 |
mov #8,r2
|
yann@1
|
373 |
@@ -906,6 +1037,7 @@
|
yann@1
|
374 |
rts
|
yann@1
|
375 |
lds.l @r15+,fpscr
|
yann@1
|
376 |
|
yann@1
|
377 |
+ ENDFUNC(GLOBAL(sdivsi3_i4))
|
yann@1
|
378 |
#endif /* ! __SH5__ || __SH5__ == 32 */
|
yann@1
|
379 |
#endif /* ! __SH4__ */
|
yann@1
|
380 |
#endif
|
yann@1
|
381 |
@@ -920,9 +1052,10 @@
|
yann@1
|
382 |
!!
|
yann@1
|
383 |
!!
|
yann@1
|
384 |
|
yann@1
|
385 |
-!! args in r4 and r5, result in r0 clobber r1,r2,r3
|
yann@1
|
386 |
+!! args in r4 and r5, result in r0 clobber r1, r2, r3, and t bit
|
yann@1
|
387 |
|
yann@1
|
388 |
.global GLOBAL(sdivsi3)
|
yann@1
|
389 |
+ FUNC(GLOBAL(sdivsi3))
|
yann@1
|
390 |
#if __SHMEDIA__
|
yann@1
|
391 |
#if __SH5__ == 32
|
yann@1
|
392 |
.section .text..SHmedia32,"ax"
|
yann@1
|
393 |
@@ -1166,6 +1299,7 @@
|
yann@1
|
394 |
div0: rts
|
yann@1
|
395 |
mov #0,r0
|
yann@1
|
396 |
|
yann@1
|
397 |
+ ENDFUNC(GLOBAL(sdivsi3))
|
yann@1
|
398 |
#endif /* ! __SHMEDIA__ */
|
yann@1
|
399 |
#endif /* ! __SH4__ */
|
yann@1
|
400 |
#endif
|
yann@1
|
401 |
@@ -1174,9 +1308,11 @@
|
yann@1
|
402 |
.title "SH DIVIDE"
|
yann@1
|
403 |
!! 4 byte integer Divide code for the Hitachi SH
|
yann@1
|
404 |
#ifdef __SH4__
|
yann@1
|
405 |
-!! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4
|
yann@1
|
406 |
+!! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4,
|
yann@1
|
407 |
+!! and t bit
|
yann@1
|
408 |
|
yann@1
|
409 |
.global GLOBAL(udivsi3_i4)
|
yann@1
|
410 |
+ FUNC(GLOBAL(udivsi3_i4))
|
yann@1
|
411 |
GLOBAL(udivsi3_i4):
|
yann@1
|
412 |
mov #1,r1
|
yann@1
|
413 |
cmp/hi r1,r5
|
yann@1
|
414 |
@@ -1217,11 +1353,13 @@
|
yann@1
|
415 |
L1:
|
yann@1
|
416 |
.double 2147483648
|
yann@1
|
417 |
|
yann@1
|
418 |
+ ENDFUNC(GLOBAL(udivsi3_i4))
|
yann@1
|
419 |
#elif defined (__SH5__) && ! defined (__SH4_NOFPU__)
|
yann@1
|
420 |
#if ! __SH5__ || __SH5__ == 32
|
yann@1
|
421 |
!! args in r4 and r5, result in fpul, clobber r20, r21, dr0, fr33
|
yann@1
|
422 |
.mode SHmedia
|
yann@1
|
423 |
.global GLOBAL(udivsi3_i4)
|
yann@1
|
424 |
+ FUNC(GLOBAL(udivsi3_i4))
|
yann@1
|
425 |
GLOBAL(udivsi3_i4):
|
yann@1
|
426 |
addz.l r4,r63,r20
|
yann@1
|
427 |
addz.l r5,r63,r21
|
yann@1
|
428 |
@@ -1234,6 +1372,8 @@
|
yann@1
|
429 |
ftrc.dq dr0,dr32
|
yann@1
|
430 |
fmov.s fr33,fr32
|
yann@1
|
431 |
blink tr0,r63
|
yann@1
|
432 |
+
|
yann@1
|
433 |
+ ENDFUNC(GLOBAL(udivsi3_i4))
|
yann@1
|
434 |
#endif /* ! __SH5__ || __SH5__ == 32 */
|
yann@1
|
435 |
#elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__)
|
yann@1
|
436 |
!! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4
|
yann@1
|
437 |
@@ -1287,6 +1427,7 @@
|
yann@1
|
438 |
#endif
|
yann@1
|
439 |
.double 2147483648
|
yann@1
|
440 |
|
yann@1
|
441 |
+ ENDFUNC(GLOBAL(udivsi3_i4))
|
yann@1
|
442 |
#endif /* ! __SH4__ */
|
yann@1
|
443 |
#endif
|
yann@1
|
444 |
|
yann@1
|
445 |
@@ -1297,6 +1438,7 @@
|
yann@1
|
446 |
|
yann@1
|
447 |
!! args in r4 and r5, result in r0, clobbers r4, pr, and t bit
|
yann@1
|
448 |
.global GLOBAL(udivsi3)
|
yann@1
|
449 |
+ FUNC(GLOBAL(udivsi3))
|
yann@1
|
450 |
|
yann@1
|
451 |
#if __SHMEDIA__
|
yann@1
|
452 |
#if __SH5__ == 32
|
yann@1
|
453 |
@@ -1485,6 +1627,7 @@
|
yann@1
|
454 |
rts
|
yann@1
|
455 |
rotcl r0
|
yann@1
|
456 |
|
yann@1
|
457 |
+ ENDFUNC(GLOBAL(udivsi3))
|
yann@1
|
458 |
#endif /* ! __SHMEDIA__ */
|
yann@1
|
459 |
#endif /* __SH4__ */
|
yann@1
|
460 |
#endif /* L_udivsi3 */
|
yann@1
|
461 |
@@ -1790,6 +1933,7 @@
|
yann@1
|
462 |
.mode SHcompact
|
yann@1
|
463 |
#endif
|
yann@1
|
464 |
.global GLOBAL(set_fpscr)
|
yann@1
|
465 |
+ FUNC(GLOBAL(set_fpscr))
|
yann@1
|
466 |
GLOBAL(set_fpscr):
|
yann@1
|
467 |
lds r4,fpscr
|
yann@1
|
468 |
mov.l LOCAL(set_fpscr_L1),r1
|
yann@1
|
469 |
@@ -1822,6 +1966,8 @@
|
yann@1
|
470 |
.align 2
|
yann@1
|
471 |
LOCAL(set_fpscr_L1):
|
yann@1
|
472 |
.long GLOBAL(fpscr_values)
|
yann@1
|
473 |
+
|
yann@1
|
474 |
+ ENDFUNC(GLOBAL(set_fpscr))
|
yann@1
|
475 |
#ifdef __ELF__
|
yann@1
|
476 |
.comm GLOBAL(fpscr_values),8,4
|
yann@1
|
477 |
#else
|
yann@1
|
478 |
@@ -1860,6 +2006,7 @@
|
yann@1
|
479 |
blink tr0, r63
|
yann@1
|
480 |
#elif defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__)
|
yann@1
|
481 |
.global GLOBAL(ic_invalidate)
|
yann@1
|
482 |
+ FUNC(GLOBAL(ic_invalidate))
|
yann@1
|
483 |
GLOBAL(ic_invalidate):
|
yann@1
|
484 |
ocbwb @r4
|
yann@1
|
485 |
mova 0f,r0
|
yann@1
|
486 |
@@ -1882,6 +2029,8 @@
|
yann@1
|
487 |
nop
|
yann@1
|
488 |
.endr
|
yann@1
|
489 |
.endr
|
yann@1
|
490 |
+
|
yann@1
|
491 |
+ ENDFUNC(GLOBAL(ic_invalidate))
|
yann@1
|
492 |
#endif /* SH4 */
|
yann@1
|
493 |
#endif /* L_ic_invalidate */
|
yann@1
|
494 |
|
yann@1
|
495 |
@@ -1940,6 +2089,7 @@
|
yann@1
|
496 |
will be expanded into r2/r3 upon return. */
|
yann@1
|
497 |
|
yann@1
|
498 |
.global GLOBAL(GCC_shcompact_call_trampoline)
|
yann@1
|
499 |
+ FUNC(GLOBAL(GCC_shcompact_call_trampoline))
|
yann@1
|
500 |
GLOBAL(GCC_shcompact_call_trampoline):
|
yann@1
|
501 |
ptabs/l r0, tr0 /* Prepare to call the actual function. */
|
yann@1
|
502 |
movi ((datalabel LOCAL(ct_main_table) - 31 * 2) >> 16) & 65535, r0
|
yann@1
|
503 |
@@ -2290,6 +2440,8 @@
|
yann@1
|
504 |
shari r2, 32, r2
|
yann@1
|
505 |
#endif
|
yann@1
|
506 |
blink tr0, r63
|
yann@1
|
507 |
+
|
yann@1
|
508 |
+ ENDFUNC(GLOBAL(GCC_shcompact_call_trampoline))
|
yann@1
|
509 |
#endif /* L_shcompact_call_trampoline */
|
yann@1
|
510 |
|
yann@1
|
511 |
#ifdef L_shcompact_return_trampoline
|
yann@1
|
512 |
@@ -2302,6 +2454,7 @@
|
yann@1
|
513 |
.section .text..SHmedia32, "ax"
|
yann@1
|
514 |
.align 2
|
yann@1
|
515 |
.global GLOBAL(GCC_shcompact_return_trampoline)
|
yann@1
|
516 |
+ FUNC(GLOBAL(GCC_shcompact_return_trampoline))
|
yann@1
|
517 |
GLOBAL(GCC_shcompact_return_trampoline):
|
yann@1
|
518 |
ptabs/l r18, tr0
|
yann@1
|
519 |
#if __LITTLE_ENDIAN__
|
yann@1
|
520 |
@@ -2313,6 +2466,8 @@
|
yann@1
|
521 |
#endif
|
yann@1
|
522 |
or r3, r2, r2
|
yann@1
|
523 |
blink tr0, r63
|
yann@1
|
524 |
+
|
yann@1
|
525 |
+ ENDFUNC(GLOBAL(GCC_shcompact_return_trampoline))
|
yann@1
|
526 |
#endif /* L_shcompact_return_trampoline */
|
yann@1
|
527 |
|
yann@1
|
528 |
#ifdef L_shcompact_incoming_args
|
yann@1
|
529 |
@@ -2367,6 +2522,7 @@
|
yann@1
|
530 |
actual bit pattern. */
|
yann@1
|
531 |
|
yann@1
|
532 |
.global GLOBAL(GCC_shcompact_incoming_args)
|
yann@1
|
533 |
+ FUNC(GLOBAL(GCC_shcompact_incoming_args))
|
yann@1
|
534 |
GLOBAL(GCC_shcompact_incoming_args):
|
yann@1
|
535 |
ptabs/l r18, tr0 /* Prepare to return. */
|
yann@1
|
536 |
shlri r17, 32, r0 /* Load the cookie. */
|
yann@1
|
537 |
@@ -2519,6 +2675,7 @@
|
yann@1
|
538 |
LOCAL(ia_return): /* Return. */
|
yann@1
|
539 |
blink tr0, r63
|
yann@1
|
540 |
LOCAL(ia_end_of_push_seq): /* Label used to compute the first push instruction. */
|
yann@1
|
541 |
+ ENDFUNC(GLOBAL(GCC_shcompact_incoming_args))
|
yann@1
|
542 |
#endif /* L_shcompact_incoming_args */
|
yann@1
|
543 |
#endif
|
yann@1
|
544 |
#if __SH5__
|
yann@1
|
545 |
@@ -2530,6 +2687,7 @@
|
yann@1
|
546 |
#endif
|
yann@1
|
547 |
.align 3 /* It is copied in units of 8 bytes in SHmedia mode. */
|
yann@1
|
548 |
.global GLOBAL(GCC_nested_trampoline)
|
yann@1
|
549 |
+ FUNC(GLOBAL(GCC_nested_trampoline))
|
yann@1
|
550 |
GLOBAL(GCC_nested_trampoline):
|
yann@1
|
551 |
.mode SHmedia
|
yann@1
|
552 |
ptrel/u r63, tr0
|
yann@1
|
553 |
@@ -2546,6 +2704,8 @@
|
yann@1
|
554 |
ld.l r0, 28, r1
|
yann@1
|
555 |
#endif
|
yann@1
|
556 |
blink tr1, r63
|
yann@1
|
557 |
+
|
yann@1
|
558 |
+ ENDFUNC(GLOBAL(GCC_nested_trampoline))
|
yann@1
|
559 |
#endif /* L_nested_trampoline */
|
yann@1
|
560 |
#endif /* __SH5__ */
|
yann@1
|
561 |
#if __SH5__ == 32
|
yann@1
|
562 |
@@ -2555,6 +2715,7 @@
|
yann@1
|
563 |
.align 2
|
yann@1
|
564 |
#ifndef __SH4_NOFPU__
|
yann@1
|
565 |
.global GLOBAL(GCC_push_shmedia_regs)
|
yann@1
|
566 |
+ FUNC(GLOBAL(GCC_push_shmedia_regs))
|
yann@1
|
567 |
GLOBAL(GCC_push_shmedia_regs):
|
yann@1
|
568 |
addi.l r15, -14*8, r15
|
yann@1
|
569 |
fst.d r15, 13*8, dr62
|
yann@1
|
570 |
@@ -2573,6 +2734,7 @@
|
yann@1
|
571 |
fst.d r15, 0*8, dr36
|
yann@1
|
572 |
#endif
|
yann@1
|
573 |
.global GLOBAL(GCC_push_shmedia_regs_nofpu)
|
yann@1
|
574 |
+ FUNC(GLOBAL(GCC_push_shmedia_regs_nofpu))
|
yann@1
|
575 |
GLOBAL(GCC_push_shmedia_regs_nofpu):
|
yann@1
|
576 |
ptabs/l r18, tr0
|
yann@1
|
577 |
addi.l r15, -27*8, r15
|
yann@1
|
578 |
@@ -2608,8 +2770,13 @@
|
yann@1
|
579 |
st.q r15, 0*8, r28
|
yann@1
|
580 |
blink tr0, r63
|
yann@1
|
581 |
|
yann@1
|
582 |
+#ifndef __SH4_NOFPU__
|
yann@1
|
583 |
+ ENDFUNC(GLOBAL(GCC_push_shmedia_regs))
|
yann@1
|
584 |
+#endif
|
yann@1
|
585 |
+ ENDFUNC(GLOBAL(GCC_push_shmedia_regs_nofpu))
|
yann@1
|
586 |
#ifndef __SH4_NOFPU__
|
yann@1
|
587 |
.global GLOBAL(GCC_pop_shmedia_regs)
|
yann@1
|
588 |
+ FUNC(GLOBAL(GCC_pop_shmedia_regs))
|
yann@1
|
589 |
GLOBAL(GCC_pop_shmedia_regs):
|
yann@1
|
590 |
pt .L0, tr1
|
yann@1
|
591 |
movi 41*8, r0
|
yann@1
|
592 |
@@ -2630,6 +2797,7 @@
|
yann@1
|
593 |
blink tr1, r63
|
yann@1
|
594 |
#endif
|
yann@1
|
595 |
.global GLOBAL(GCC_pop_shmedia_regs_nofpu)
|
yann@1
|
596 |
+ FUNC(GLOBAL(GCC_pop_shmedia_regs_nofpu))
|
yann@1
|
597 |
GLOBAL(GCC_pop_shmedia_regs_nofpu):
|
yann@1
|
598 |
movi 27*8, r0
|
yann@1
|
599 |
.L0:
|
yann@1
|
600 |
@@ -2666,5 +2834,10 @@
|
yann@1
|
601 |
ld.q r15, 0*8, r28
|
yann@1
|
602 |
add.l r15, r0, r15
|
yann@1
|
603 |
blink tr0, r63
|
yann@1
|
604 |
+
|
yann@1
|
605 |
+#ifndef __SH4_NOFPU__
|
yann@1
|
606 |
+ ENDFUNC(GLOBAL(GCC_pop_shmedia_regs))
|
yann@1
|
607 |
+#endif
|
yann@1
|
608 |
+ ENDFUNC(GLOBAL(GCC_pop_shmedia_regs_nofpu))
|
yann@1
|
609 |
#endif /* __SH5__ == 32 */
|
yann@1
|
610 |
#endif /* L_push_pop_shmedia_regs */
|