[project @ 1998-06-05 14:44:05 by simonm]
[ghc-hetmet.git] / ghc / rts / gmp / mpn / powerpc32 / lshift.s
1 # PowerPC-32 __mpn_lshift --
2
3 # Copyright (C) 1995 Free Software Foundation, Inc.
4
5 # This file is part of the GNU MP Library.
6
7 # The GNU MP Library is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU Library General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or (at your
10 # option) any later version.
11
12 # The GNU MP Library is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
15 # License for more details.
16
17 # You should have received a copy of the GNU Library General Public License
18 # along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
19 # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
20 # MA 02111-1307, USA.
21
22
23 # INPUT PARAMETERS
24 # res_ptr       r3
25 # s1_ptr        r4
26 # size          r5
27 # cnt           r6
28
29         .toc
30 .csect  .text[PR]
31         .align  2
32         .globl  __mpn_lshift
33         .globl  .__mpn_lshift
34         .csect  __mpn_lshift[DS]
35 __mpn_lshift:
36         .long   .__mpn_lshift,  TOC[tc0],       0
37         .csect  .text[PR]
38 .__mpn_lshift:
39         mtctr   5               # copy size into CTR
40         slwi    0,5,2
41         add     7,3,0           # make r7 point at end of res
42         add     4,4,0           # make r4 point at end of s1
43         subfic  8,6,32
44         lwzu    11,-4(4)        # load first s1 limb
45         srw     3,11,8          # compute function return value
46         bdz     Lend1
47
48 Loop:   lwzu    10,-4(4)
49         slw     9,11,6
50         srw     12,10,8
51         or      9,9,12
52         stwu    9,-4(7)
53         bdz     Lend2
54         lwzu    11,-4(4)
55         slw     9,10,6
56         srw     12,11,8
57         or      9,9,12
58         stwu    9,-4(7)
59         bdnz    Loop
60
61 Lend1:  slw     0,11,6
62         stw     0,-4(7)
63         blr
64
65 Lend2:  slw     0,10,6
66         stw     0,-4(7)
67         blr