Reorganisation of the source tree
[ghc-hetmet.git] / rts / gmp / mpn / pa64w / lshift.s
1 ; HP-PA 2.0 __gmpn_lshift --
2
3 ; Copyright (C) 1997, 2000 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 Lesser General Public License as published by
9 ; the Free Software Foundation; either version 2.1 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 Lesser General Public
15 ; License for more details.
16
17 ; You should have received a copy of the GNU Lesser 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       gr26
25 ; s1_ptr        gr25
26 ; size          gr24
27 ; cnt           gr23
28
29 ; This runs at 1.5 cycles/limb on PA8000.
30
31         .level  2.0w
32         .code
33         .export __gmpn_lshift,entry
34 __gmpn_lshift
35         .proc
36         .callinfo frame=0,args_saved
37         .entry
38
39         shladd          %r24,3,%r25,%r25
40         shladd          %r24,3,%r26,%r26
41         subi            64,%r23,%r23
42         mtsar           %r23
43         ldd             -8(%r25),%r21
44         addib,=         -1,%r24,L$end
45         shrpd           %r0,%r21,%sar,%r29      ; compute carry out limb
46         depw,z          %r24,31,3,%r28          ; r28 = (size & 7)
47         sub             %r0,%r24,%r22
48         depw,z          %r22,28,3,%r22          ; r22 = 8 * (-size & 7)
49         add             %r25,%r22,%r25          ; offset s1_ptr
50         blr             %r28,%r0                ; branch into jump table
51         add             %r26,%r22,%r26          ; offset res_ptr
52         b               L$0
53         nop
54         b               L$1
55         copy            %r21,%r20
56         b               L$2
57         nop
58         b               L$3
59         copy            %r21,%r20
60         b               L$4
61         nop
62         b               L$5
63         copy            %r21,%r20
64         b               L$6
65         nop
66         b               L$7
67         copy            %r21,%r20
68
69 L$loop
70 L$0     ldd             -16(%r25),%r20
71         shrpd           %r21,%r20,%sar,%r21
72         std             %r21,-8(%r26)
73 L$7     ldd             -24(%r25),%r21
74         shrpd           %r20,%r21,%sar,%r20
75         std             %r20,-16(%r26)
76 L$6     ldd             -32(%r25),%r20
77         shrpd           %r21,%r20,%sar,%r21
78         std             %r21,-24(%r26)
79 L$5     ldd             -40(%r25),%r21
80         shrpd           %r20,%r21,%sar,%r20
81         std             %r20,-32(%r26)
82 L$4     ldd             -48(%r25),%r20
83         shrpd           %r21,%r20,%sar,%r21
84         std             %r21,-40(%r26)
85 L$3     ldd             -56(%r25),%r21
86         shrpd           %r20,%r21,%sar,%r20
87         std             %r20,-48(%r26)
88 L$2     ldd             -64(%r25),%r20
89         shrpd           %r21,%r20,%sar,%r21
90         std             %r21,-56(%r26)
91 L$1     ldd             -72(%r25),%r21
92         ldo             -64(%r25),%r25
93         shrpd           %r20,%r21,%sar,%r20
94         std             %r20,-64(%r26)
95         addib,>         -8,%r24,L$loop
96         ldo             -64(%r26),%r26
97
98 L$end   shrpd           %r21,%r0,%sar,%r21
99         std             %r21,-8(%r26)
100         bve             (%r2)
101         .exit
102         copy            %r29,%r28
103         .procend