Update.
[platform/upstream/glibc.git] / sysdeps / powerpc / lshift.s
1  # Shift a limb left, low level routine.
2  # Copyright (C) 1996, 1997 Free Software Foundation, Inc.
3  # This file is part of the GNU C Library.
4  #
5  # The GNU C Library is free software; you can redistribute it and/or
6  # modify it under the terms of the GNU Library General Public License as
7  # published by the Free Software Foundation; either version 2 of the
8  # License, or (at your option) any later version.
9  #
10  # The GNU C Library is distributed in the hope that it will be useful,
11  # but WITHOUT ANY WARRANTY; without even the implied warranty of
12  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  # Library General Public License for more details.
14  #
15  # You should have received a copy of the GNU Library General Public
16  # License along with the GNU C Library; see the file COPYING.LIB.  If not,
17  # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18  # Boston, MA 02111-1307, USA.
19
20  # mp_limb_t mpn_lshift (mp_ptr wp, mp_srcptr up, mp_size_t usize,
21  #                       unsigned int cnt)
22
23         .align 3
24         .globl __mpn_lshift
25         .type    __mpn_lshift,@function
26 __mpn_lshift:
27         mtctr   %r5             # copy size into CTR
28         cmplwi  %cr0,%r5,16     # is size < 16
29         slwi    %r0,%r5,2
30         add     %r7,%r3,%r0     # make r7 point at end of res
31         add     %r4,%r4,%r0     # make r4 point at end of s1
32         lwzu    %r11,-4(%r4)    # load first s1 limb
33         subfic  %r8,%r6,32
34         srw     %r3,%r11,%r8    # compute function return value
35         bge     %cr0,Lbig       # branch if size >= 16
36
37         bdz     Lend1
38
39 Loop:   lwzu    %r10,-4(%r4)
40         slw     %r9,%r11,%r6
41         srw     %r12,%r10,%r8
42         or      %r9,%r9,%r12
43         stwu    %r9,-4(%r7)
44         bdz     Lend2
45         lwzu    %r11,-4(%r4)
46         slw     %r9,%r10,%r6
47         srw     %r12,%r11,%r8
48         or      %r9,%r9,%r12
49         stwu    %r9,-4(%r7)
50         bdnz    Loop
51         b       Lend1
52
53  # Guaranteed not to succeed.
54 LBoom:  tweq    %r0,%r0
55
56  # We imitate a case statement, by using (yuk!) fixed-length code chunks,
57  # of size 4*12 bytes.  We have to do this (or something) to make this PIC.
58 Lbig:   mflr    %r9
59         bltl    %cr0,LBoom      # Never taken, only used to set LR.
60         slwi    %r10,%r6,4
61         mflr    %r12
62         add     %r10,%r12,%r10
63         slwi    %r8,%r6,5
64         add     %r10,%r8,%r10
65         mtctr   %r10
66         addi    %r5,%r5,-1
67         mtlr    %r9
68         bctr
69
70 Lend1:  slw     %r0,%r11,%r6
71         stw     %r0,-4(%r7)
72         blr
73
74         mtctr   %r5
75 Loop1:  lwzu    %r10,-4(%r4)
76         slwi    %r9,%r11,1
77         inslwi  %r9,%r10,1,31
78         stwu    %r9,-4(%r7)
79         bdz     Lend2
80         lwzu    %r11,-4(%r4)
81         slwi    %r9,%r10,1
82         inslwi  %r9,%r11,1,31
83         stwu    %r9,-4(%r7)
84         bdnz    Loop1
85         b       Lend1
86
87         mtctr   %r5
88 Loop2:  lwzu    %r10,-4(%r4)
89         slwi    %r9,%r11,2
90         inslwi  %r9,%r10,2,30
91         stwu    %r9,-4(%r7)
92         bdz     Lend2
93         lwzu    %r11,-4(%r4)
94         slwi    %r9,%r10,2
95         inslwi  %r9,%r11,2,30
96         stwu    %r9,-4(%r7)
97         bdnz    Loop2
98         b       Lend1
99
100         mtctr   %r5
101 Loop3:  lwzu    %r10,-4(%r4)
102         slwi    %r9,%r11,3
103         inslwi  %r9,%r10,3,29
104         stwu    %r9,-4(%r7)
105         bdz     Lend2
106         lwzu    %r11,-4(%r4)
107         slwi    %r9,%r10,3
108         inslwi  %r9,%r11,3,29
109         stwu    %r9,-4(%r7)
110         bdnz    Loop3
111         b       Lend1
112
113         mtctr   %r5
114 Loop4:  lwzu    %r10,-4(%r4)
115         slwi    %r9,%r11,4
116         inslwi  %r9,%r10,4,28
117         stwu    %r9,-4(%r7)
118         bdz     Lend2
119         lwzu    %r11,-4(%r4)
120         slwi    %r9,%r10,4
121         inslwi  %r9,%r11,4,28
122         stwu    %r9,-4(%r7)
123         bdnz    Loop4
124         b       Lend1
125
126         mtctr   %r5
127 Loop5:  lwzu    %r10,-4(%r4)
128         slwi    %r9,%r11,5
129         inslwi  %r9,%r10,5,27
130         stwu    %r9,-4(%r7)
131         bdz     Lend2
132         lwzu    %r11,-4(%r4)
133         slwi    %r9,%r10,5
134         inslwi  %r9,%r11,5,27
135         stwu    %r9,-4(%r7)
136         bdnz    Loop5
137         b       Lend1
138
139         mtctr   %r5
140 Loop6:  lwzu    %r10,-4(%r4)
141         slwi    %r9,%r11,6
142         inslwi  %r9,%r10,6,26
143         stwu    %r9,-4(%r7)
144         bdz     Lend2
145         lwzu    %r11,-4(%r4)
146         slwi    %r9,%r10,6
147         inslwi  %r9,%r11,6,26
148         stwu    %r9,-4(%r7)
149         bdnz    Loop6
150         b       Lend1
151
152         mtctr   %r5
153 Loop7:  lwzu    %r10,-4(%r4)
154         slwi    %r9,%r11,7
155         inslwi  %r9,%r10,7,25
156         stwu    %r9,-4(%r7)
157         bdz     Lend2
158         lwzu    %r11,-4(%r4)
159         slwi    %r9,%r10,7
160         inslwi  %r9,%r11,7,25
161         stwu    %r9,-4(%r7)
162         bdnz    Loop7
163         b       Lend1
164
165         mtctr   %r5
166 Loop8:  lwzu    %r10,-4(%r4)
167         slwi    %r9,%r11,8
168         inslwi  %r9,%r10,8,24
169         stwu    %r9,-4(%r7)
170         bdz     Lend2
171         lwzu    %r11,-4(%r4)
172         slwi    %r9,%r10,8
173         inslwi  %r9,%r11,8,24
174         stwu    %r9,-4(%r7)
175         bdnz    Loop8
176         b       Lend1
177
178         mtctr   %r5
179 Loop9:  lwzu    %r10,-4(%r4)
180         slwi    %r9,%r11,9
181         inslwi  %r9,%r10,9,23
182         stwu    %r9,-4(%r7)
183         bdz     Lend2
184         lwzu    %r11,-4(%r4)
185         slwi    %r9,%r10,9
186         inslwi  %r9,%r11,9,23
187         stwu    %r9,-4(%r7)
188         bdnz    Loop9
189         b       Lend1
190
191         mtctr   %r5
192 Loop10: lwzu    %r10,-4(%r4)
193         slwi    %r9,%r11,10
194         inslwi  %r9,%r10,10,22
195         stwu    %r9,-4(%r7)
196         bdz     Lend2
197         lwzu    %r11,-4(%r4)
198         slwi    %r9,%r10,10
199         inslwi  %r9,%r11,10,22
200         stwu    %r9,-4(%r7)
201         bdnz    Loop10
202         b       Lend1
203
204         mtctr   %r5
205 Loop11: lwzu    %r10,-4(%r4)
206         slwi    %r9,%r11,11
207         inslwi  %r9,%r10,11,21
208         stwu    %r9,-4(%r7)
209         bdz     Lend2
210         lwzu    %r11,-4(%r4)
211         slwi    %r9,%r10,11
212         inslwi  %r9,%r11,11,21
213         stwu    %r9,-4(%r7)
214         bdnz    Loop11
215         b       Lend1
216
217         mtctr   %r5
218 Loop12: lwzu    %r10,-4(%r4)
219         slwi    %r9,%r11,12
220         inslwi  %r9,%r10,12,20
221         stwu    %r9,-4(%r7)
222         bdz     Lend2
223         lwzu    %r11,-4(%r4)
224         slwi    %r9,%r10,12
225         inslwi  %r9,%r11,12,20
226         stwu    %r9,-4(%r7)
227         bdnz    Loop12
228         b       Lend1
229
230         mtctr   %r5
231 Loop13: lwzu    %r10,-4(%r4)
232         slwi    %r9,%r11,13
233         inslwi  %r9,%r10,13,19
234         stwu    %r9,-4(%r7)
235         bdz     Lend2
236         lwzu    %r11,-4(%r4)
237         slwi    %r9,%r10,13
238         inslwi  %r9,%r11,13,19
239         stwu    %r9,-4(%r7)
240         bdnz    Loop13
241         b       Lend1
242
243         mtctr   %r5
244 Loop14: lwzu    %r10,-4(%r4)
245         slwi    %r9,%r11,14
246         inslwi  %r9,%r10,14,18
247         stwu    %r9,-4(%r7)
248         bdz     Lend2
249         lwzu    %r11,-4(%r4)
250         slwi    %r9,%r10,14
251         inslwi  %r9,%r11,14,18
252         stwu    %r9,-4(%r7)
253         bdnz    Loop14
254         b       Lend1
255
256         mtctr   %r5
257 Loop15: lwzu    %r10,-4(%r4)
258         slwi    %r9,%r11,15
259         inslwi  %r9,%r10,15,17
260         stwu    %r9,-4(%r7)
261         bdz     Lend2
262         lwzu    %r11,-4(%r4)
263         slwi    %r9,%r10,15
264         inslwi  %r9,%r11,15,17
265         stwu    %r9,-4(%r7)
266         bdnz    Loop15
267         b       Lend1
268
269         mtctr   %r5
270 Loop16: lwzu    %r10,-4(%r4)
271         slwi    %r9,%r11,16
272         inslwi  %r9,%r10,16,16
273         stwu    %r9,-4(%r7)
274         bdz     Lend2
275         lwzu    %r11,-4(%r4)
276         slwi    %r9,%r10,16
277         inslwi  %r9,%r11,16,16
278         stwu    %r9,-4(%r7)
279         bdnz    Loop16
280         b       Lend1
281
282         mtctr   %r5
283 Loop17: lwzu    %r10,-4(%r4)
284         slwi    %r9,%r11,17
285         inslwi  %r9,%r10,17,15
286         stwu    %r9,-4(%r7)
287         bdz     Lend2
288         lwzu    %r11,-4(%r4)
289         slwi    %r9,%r10,17
290         inslwi  %r9,%r11,17,15
291         stwu    %r9,-4(%r7)
292         bdnz    Loop17
293         b       Lend1
294
295         mtctr   %r5
296 Loop18: lwzu    %r10,-4(%r4)
297         slwi    %r9,%r11,18
298         inslwi  %r9,%r10,18,14
299         stwu    %r9,-4(%r7)
300         bdz     Lend2
301         lwzu    %r11,-4(%r4)
302         slwi    %r9,%r10,18
303         inslwi  %r9,%r11,18,14
304         stwu    %r9,-4(%r7)
305         bdnz    Loop18
306         b       Lend1
307
308         mtctr   %r5
309 Loop19: lwzu    %r10,-4(%r4)
310         slwi    %r9,%r11,19
311         inslwi  %r9,%r10,19,13
312         stwu    %r9,-4(%r7)
313         bdz     Lend2
314         lwzu    %r11,-4(%r4)
315         slwi    %r9,%r10,19
316         inslwi  %r9,%r11,19,13
317         stwu    %r9,-4(%r7)
318         bdnz    Loop19
319         b       Lend1
320
321         mtctr   %r5
322 Loop20: lwzu    %r10,-4(%r4)
323         slwi    %r9,%r11,20
324         inslwi  %r9,%r10,20,12
325         stwu    %r9,-4(%r7)
326         bdz     Lend2
327         lwzu    %r11,-4(%r4)
328         slwi    %r9,%r10,20
329         inslwi  %r9,%r11,20,12
330         stwu    %r9,-4(%r7)
331         bdnz    Loop20
332         b       Lend1
333
334         mtctr   %r5
335 Loop21: lwzu    %r10,-4(%r4)
336         slwi    %r9,%r11,21
337         inslwi  %r9,%r10,21,11
338         stwu    %r9,-4(%r7)
339         bdz     Lend2
340         lwzu    %r11,-4(%r4)
341         slwi    %r9,%r10,21
342         inslwi  %r9,%r11,21,11
343         stwu    %r9,-4(%r7)
344         bdnz    Loop21
345         b       Lend1
346
347         mtctr   %r5
348 Loop22: lwzu    %r10,-4(%r4)
349         slwi    %r9,%r11,22
350         inslwi  %r9,%r10,22,10
351         stwu    %r9,-4(%r7)
352         bdz     Lend2
353         lwzu    %r11,-4(%r4)
354         slwi    %r9,%r10,22
355         inslwi  %r9,%r11,22,10
356         stwu    %r9,-4(%r7)
357         bdnz    Loop22
358         b       Lend1
359
360         mtctr   %r5
361 Loop23: lwzu    %r10,-4(%r4)
362         slwi    %r9,%r11,23
363         inslwi  %r9,%r10,23,9
364         stwu    %r9,-4(%r7)
365         bdz     Lend2
366         lwzu    %r11,-4(%r4)
367         slwi    %r9,%r10,23
368         inslwi  %r9,%r11,23,9
369         stwu    %r9,-4(%r7)
370         bdnz    Loop23
371         b       Lend1
372
373         mtctr   %r5
374 Loop24: lwzu    %r10,-4(%r4)
375         slwi    %r9,%r11,24
376         inslwi  %r9,%r10,24,8
377         stwu    %r9,-4(%r7)
378         bdz     Lend2
379         lwzu    %r11,-4(%r4)
380         slwi    %r9,%r10,24
381         inslwi  %r9,%r11,24,8
382         stwu    %r9,-4(%r7)
383         bdnz    Loop24
384         b       Lend1
385
386         mtctr   %r5
387 Loop25: lwzu    %r10,-4(%r4)
388         slwi    %r9,%r11,25
389         inslwi  %r9,%r10,25,7
390         stwu    %r9,-4(%r7)
391         bdz     Lend2
392         lwzu    %r11,-4(%r4)
393         slwi    %r9,%r10,25
394         inslwi  %r9,%r11,25,7
395         stwu    %r9,-4(%r7)
396         bdnz    Loop25
397         b       Lend1
398
399         mtctr   %r5
400 Loop26: lwzu    %r10,-4(%r4)
401         slwi    %r9,%r11,26
402         inslwi  %r9,%r10,26,6
403         stwu    %r9,-4(%r7)
404         bdz     Lend2
405         lwzu    %r11,-4(%r4)
406         slwi    %r9,%r10,26
407         inslwi  %r9,%r11,26,6
408         stwu    %r9,-4(%r7)
409         bdnz    Loop26
410         b       Lend1
411
412         mtctr   %r5
413 Loop27: lwzu    %r10,-4(%r4)
414         slwi    %r9,%r11,27
415         inslwi  %r9,%r10,27,5
416         stwu    %r9,-4(%r7)
417         bdz     Lend2
418         lwzu    %r11,-4(%r4)
419         slwi    %r9,%r10,27
420         inslwi  %r9,%r11,27,5
421         stwu    %r9,-4(%r7)
422         bdnz    Loop27
423         b       Lend1
424
425         mtctr   %r5
426 Loop28: lwzu    %r10,-4(%r4)
427         slwi    %r9,%r11,28
428         inslwi  %r9,%r10,28,4
429         stwu    %r9,-4(%r7)
430         bdz     Lend2
431         lwzu    %r11,-4(%r4)
432         slwi    %r9,%r10,28
433         inslwi  %r9,%r11,28,4
434         stwu    %r9,-4(%r7)
435         bdnz    Loop28
436         b       Lend1
437
438         mtctr   %r5
439 Loop29: lwzu    %r10,-4(%r4)
440         slwi    %r9,%r11,29
441         inslwi  %r9,%r10,29,3
442         stwu    %r9,-4(%r7)
443         bdz     Lend2
444         lwzu    %r11,-4(%r4)
445         slwi    %r9,%r10,29
446         inslwi  %r9,%r11,29,3
447         stwu    %r9,-4(%r7)
448         bdnz    Loop29
449         b       Lend1
450
451         mtctr   %r5
452 Loop30: lwzu    %r10,-4(%r4)
453         slwi    %r9,%r11,30
454         inslwi  %r9,%r10,30,2
455         stwu    %r9,-4(%r7)
456         bdz     Lend2
457         lwzu    %r11,-4(%r4)
458         slwi    %r9,%r10,30
459         inslwi  %r9,%r11,30,2
460         stwu    %r9,-4(%r7)
461         bdnz    Loop30
462         b       Lend1
463
464         mtctr   %r5
465 Loop31: lwzu    %r10,-4(%r4)
466         slwi    %r9,%r11,31
467         inslwi  %r9,%r10,31,1
468         stwu    %r9,-4(%r7)
469         bdz     Lend2
470         lwzu    %r11,-4(%r4)
471         slwi    %r9,%r10,31
472         inslwi  %r9,%r11,31,1
473         stwu    %r9,-4(%r7)
474         bdnz    Loop31
475         b       Lend1
476
477 Lend2:  slw     %r0,%r10,%r6
478         stw     %r0,-4(%r7)
479         blr