lshift.asm revision 1.1 1 1.1 mrg dnl HP-PA 2.0 mpn_lshift -- Left shift.
2 1.1 mrg
3 1.1 mrg dnl Copyright 1997, 2000, 2002, 2003 Free Software Foundation, Inc.
4 1.1 mrg
5 1.1 mrg dnl This file is part of the GNU MP Library.
6 1.1 mrg
7 1.1 mrg dnl The GNU MP Library is free software; you can redistribute it and/or modify
8 1.1 mrg dnl it under the terms of the GNU Lesser General Public License as published
9 1.1 mrg dnl by the Free Software Foundation; either version 3 of the License, or (at
10 1.1 mrg dnl your option) any later version.
11 1.1 mrg
12 1.1 mrg dnl The GNU MP Library is distributed in the hope that it will be useful, but
13 1.1 mrg dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 1.1 mrg dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15 1.1 mrg dnl License for more details.
16 1.1 mrg
17 1.1 mrg dnl You should have received a copy of the GNU Lesser General Public License
18 1.1 mrg dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/.
19 1.1 mrg
20 1.1 mrg
21 1.1 mrg dnl This runs at 1.5 cycles/limb on PA8000 and 1.0 cycles/limb on PA8500.
22 1.1 mrg
23 1.1 mrg include(`../config.m4')
24 1.1 mrg
25 1.1 mrg dnl INPUT PARAMETERS
26 1.1 mrg define(`rp',`%r26')
27 1.1 mrg define(`up',`%r25')
28 1.1 mrg define(`n',`%r24')
29 1.1 mrg define(`cnt',`%r23')
30 1.1 mrg
31 1.1 mrg ifdef(`HAVE_ABI_2_0w',
32 1.1 mrg ` .level 2.0w
33 1.1 mrg ',` .level 2.0
34 1.1 mrg ')
35 1.1 mrg PROLOGUE(mpn_lshift)
36 1.1 mrg shladd n, 3, up, up
37 1.1 mrg shladd n, 3, rp, rp
38 1.1 mrg subi 64, cnt, cnt
39 1.1 mrg mtsar cnt
40 1.1 mrg ldd -8(up), %r21
41 1.1 mrg addib,= -1, n, L(end)
42 1.1 mrg shrpd %r0, %r21, %sar, %r29 C compute carry out limb
43 1.1 mrg depw,z n, 31, 3, %r28 C r28 = (size & 7)
44 1.1 mrg sub %r0, n, %r22
45 1.1 mrg depw,z %r22, 28, 3, %r22 C r22 = 8 * (-size & 7)
46 1.1 mrg add up, %r22, up C offset up
47 1.1 mrg blr %r28, %r0 C branch into jump table
48 1.1 mrg add rp, %r22, rp C offset rp
49 1.1 mrg b L(0)
50 1.1 mrg nop
51 1.1 mrg b L(1)
52 1.1 mrg copy %r21, %r20
53 1.1 mrg b L(2)
54 1.1 mrg nop
55 1.1 mrg b L(3)
56 1.1 mrg copy %r21, %r20
57 1.1 mrg b L(4)
58 1.1 mrg nop
59 1.1 mrg b L(5)
60 1.1 mrg copy %r21, %r20
61 1.1 mrg b L(6)
62 1.1 mrg nop
63 1.1 mrg b L(7)
64 1.1 mrg copy %r21, %r20
65 1.1 mrg
66 1.1 mrg LDEF(loop)
67 1.1 mrg LDEF(0) ldd -16(up), %r20
68 1.1 mrg shrpd %r21, %r20, %sar, %r21
69 1.1 mrg std %r21, -8(rp)
70 1.1 mrg LDEF(7) ldd -24(up), %r21
71 1.1 mrg shrpd %r20, %r21, %sar, %r20
72 1.1 mrg std %r20, -16(rp)
73 1.1 mrg LDEF(6) ldd -32(up), %r20
74 1.1 mrg shrpd %r21, %r20, %sar, %r21
75 1.1 mrg std %r21, -24(rp)
76 1.1 mrg LDEF(5) ldd -40(up), %r21
77 1.1 mrg shrpd %r20, %r21, %sar, %r20
78 1.1 mrg std %r20, -32(rp)
79 1.1 mrg LDEF(4) ldd -48(up), %r20
80 1.1 mrg shrpd %r21, %r20, %sar, %r21
81 1.1 mrg std %r21, -40(rp)
82 1.1 mrg LDEF(3) ldd -56(up), %r21
83 1.1 mrg shrpd %r20, %r21, %sar, %r20
84 1.1 mrg std %r20, -48(rp)
85 1.1 mrg LDEF(2) ldd -64(up), %r20
86 1.1 mrg shrpd %r21, %r20, %sar, %r21
87 1.1 mrg std %r21, -56(rp)
88 1.1 mrg LDEF(1) ldd -72(up), %r21
89 1.1 mrg ldo -64(up), up
90 1.1 mrg shrpd %r20, %r21, %sar, %r20
91 1.1 mrg std %r20, -64(rp)
92 1.1 mrg addib,> -8, n, L(loop)
93 1.1 mrg ldo -64(rp), rp
94 1.1 mrg
95 1.1 mrg LDEF(end)
96 1.1 mrg shrpd %r21, %r0, %sar, %r21
97 1.1 mrg std %r21, -8(rp)
98 1.1 mrg bve (%r2)
99 1.1 mrg ifdef(`HAVE_ABI_2_0w',
100 1.1 mrg ` copy %r29,%r28
101 1.1 mrg ',` extrd,u %r29, 31, 32, %r28
102 1.1 mrg ')
103 1.1 mrg EPILOGUE(mpn_lshift)
104