]>
Commit | Line | Data |
---|---|---|
ba848785 | 1 | ! sparc __mpn_rshift -- |
f41c8091 | 2 | ! |
2b778ceb | 3 | ! Copyright (C) 1995-2021 Free Software Foundation, Inc. |
f41c8091 | 4 | ! |
ba848785 | 5 | ! This file is part of the GNU MP Library. |
f41c8091 | 6 | ! |
ba848785 | 7 | ! The GNU MP Library is free software; you can redistribute it and/or modify |
6d84f89a AJ |
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 | |
ba848785 | 10 | ! option) any later version. |
f41c8091 | 11 | ! |
ba848785 RM |
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 | |
6d84f89a | 14 | ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public |
ba848785 | 15 | ! License for more details. |
f41c8091 | 16 | ! |
6d84f89a | 17 | ! You should have received a copy of the GNU Lesser General Public License |
59ba27a6 | 18 | ! along with the GNU MP Library; see the file COPYING.LIB. If not, |
5a82c748 | 19 | ! see <https://www.gnu.org/licenses/>. |
ba848785 RM |
20 | |
21 | ||
22 | ! INPUT PARAMETERS | |
f41c8091 UD |
23 | ! RES_PTR %o0 |
24 | ! SRC_PTR %o1 | |
25 | ! SIZE %o2 | |
26 | ! CNT %o3 | |
ba848785 | 27 | |
f41c8091 | 28 | #include <sysdep.h> |
ba848785 | 29 | |
f41c8091 | 30 | ENTRY(__mpn_rshift) |
ba848785 RM |
31 | ld [%o1],%g2 ! load first limb |
32 | sub %g0,%o3,%o5 ! negate shift count | |
33 | add %o2,-1,%o2 | |
34 | andcc %o2,4-1,%g4 ! number of limbs in first loop | |
35 | sll %g2,%o5,%g1 ! compute function result | |
f41c8091 | 36 | be LOC(0) ! if multiple of 4 limbs, skip first loop |
ba848785 RM |
37 | st %g1,[%sp+80] |
38 | ||
39 | sub %o2,%g4,%o2 ! adjust count for main loop | |
40 | ||
f41c8091 UD |
41 | LOC(loop0): |
42 | ld [%o1+4],%g3 | |
ba848785 RM |
43 | add %o0,4,%o0 |
44 | add %o1,4,%o1 | |
45 | addcc %g4,-1,%g4 | |
46 | srl %g2,%o3,%o4 | |
47 | sll %g3,%o5,%g1 | |
48 | mov %g3,%g2 | |
49 | or %o4,%g1,%o4 | |
f41c8091 | 50 | bne LOC(loop0) |
ba848785 RM |
51 | st %o4,[%o0-4] |
52 | ||
f41c8091 UD |
53 | LOC(0): tst %o2 |
54 | be LOC(end) | |
ba848785 RM |
55 | nop |
56 | ||
f41c8091 UD |
57 | LOC(loop): |
58 | ld [%o1+4],%g3 | |
ba848785 RM |
59 | add %o0,16,%o0 |
60 | addcc %o2,-4,%o2 | |
61 | srl %g2,%o3,%o4 | |
62 | sll %g3,%o5,%g1 | |
63 | ||
64 | ld [%o1+8],%g2 | |
65 | srl %g3,%o3,%g4 | |
66 | or %o4,%g1,%o4 | |
67 | st %o4,[%o0-16] | |
68 | sll %g2,%o5,%g1 | |
69 | ||
70 | ld [%o1+12],%g3 | |
71 | srl %g2,%o3,%o4 | |
72 | or %g4,%g1,%g4 | |
73 | st %g4,[%o0-12] | |
74 | sll %g3,%o5,%g1 | |
75 | ||
76 | ld [%o1+16],%g2 | |
77 | srl %g3,%o3,%g4 | |
78 | or %o4,%g1,%o4 | |
79 | st %o4,[%o0-8] | |
80 | sll %g2,%o5,%g1 | |
81 | ||
82 | add %o1,16,%o1 | |
83 | or %g4,%g1,%g4 | |
f41c8091 | 84 | bne LOC(loop) |
ba848785 RM |
85 | st %g4,[%o0-4] |
86 | ||
f41c8091 UD |
87 | LOC(end): |
88 | srl %g2,%o3,%g2 | |
ba848785 RM |
89 | st %g2,[%o0-0] |
90 | retl | |
91 | ld [%sp+80],%o0 | |
f41c8091 UD |
92 | |
93 | END(__mpn_rshift) |