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