lshiftc.asm revision 1.1.1.1.8.2 1 1.1.1.1.8.2 tls dnl PowerPC-32 mpn_lshiftc.
2 1.1.1.1.8.2 tls
3 1.1.1.1.8.2 tls dnl Copyright 1995, 1998, 2000, 2002, 2003, 2004, 2005, 2010 Free Software
4 1.1.1.1.8.2 tls dnl Foundation, Inc.
5 1.1.1.1.8.2 tls
6 1.1.1.1.8.2 tls dnl This file is part of the GNU MP Library.
7 1.1.1.1.8.2 tls
8 1.1.1.1.8.2 tls dnl The GNU MP Library is free software; you can redistribute it and/or modify
9 1.1.1.1.8.2 tls dnl it under the terms of the GNU Lesser General Public License as published
10 1.1.1.1.8.2 tls dnl by the Free Software Foundation; either version 3 of the License, or (at
11 1.1.1.1.8.2 tls dnl your option) any later version.
12 1.1.1.1.8.2 tls
13 1.1.1.1.8.2 tls dnl The GNU MP Library is distributed in the hope that it will be useful, but
14 1.1.1.1.8.2 tls dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 1.1.1.1.8.2 tls dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16 1.1.1.1.8.2 tls dnl License for more details.
17 1.1.1.1.8.2 tls
18 1.1.1.1.8.2 tls dnl You should have received a copy of the GNU Lesser General Public License
19 1.1.1.1.8.2 tls dnl along with the GNU MP Library. If not, see http://www.gnu.org/licenses/.
20 1.1.1.1.8.2 tls
21 1.1.1.1.8.2 tls include(`../config.m4')
22 1.1.1.1.8.2 tls
23 1.1.1.1.8.2 tls C cycles/limb
24 1.1.1.1.8.2 tls C 603e: ?
25 1.1.1.1.8.2 tls C 604e: 3.0
26 1.1.1.1.8.2 tls C 75x (G3): 3.0
27 1.1.1.1.8.2 tls C 7400,7410 (G4): 3.0
28 1.1.1.1.8.2 tls C 7445,7455 (G4+): 2.5
29 1.1.1.1.8.2 tls C 7447,7457 (G4+): 2.25
30 1.1.1.1.8.2 tls C power4/ppc970: 2.5
31 1.1.1.1.8.2 tls C power5: 2.5
32 1.1.1.1.8.2 tls
33 1.1.1.1.8.2 tls C INPUT PARAMETERS
34 1.1.1.1.8.2 tls C rp r3
35 1.1.1.1.8.2 tls C up r4
36 1.1.1.1.8.2 tls C n r5
37 1.1.1.1.8.2 tls C cnt r6
38 1.1.1.1.8.2 tls
39 1.1.1.1.8.2 tls ASM_START()
40 1.1.1.1.8.2 tls PROLOGUE(mpn_lshiftc)
41 1.1.1.1.8.2 tls cmpwi cr0, r5, 30 C more than 30 limbs?
42 1.1.1.1.8.2 tls slwi r0, r5, 2
43 1.1.1.1.8.2 tls add r4, r4, r0 C make r4 point at end of s1
44 1.1.1.1.8.2 tls add r7, r3, r0 C make r7 point at end of res
45 1.1.1.1.8.2 tls bgt L(BIG) C branch if more than 12 limbs
46 1.1.1.1.8.2 tls
47 1.1.1.1.8.2 tls mtctr r5 C copy size into CTR
48 1.1.1.1.8.2 tls subfic r8, r6, 32
49 1.1.1.1.8.2 tls lwzu r11, -4(r4) C load first s1 limb
50 1.1.1.1.8.2 tls srw r3, r11, r8 C compute function return value
51 1.1.1.1.8.2 tls bdz L(end1)
52 1.1.1.1.8.2 tls
53 1.1.1.1.8.2 tls L(oop): lwzu r10, -4(r4)
54 1.1.1.1.8.2 tls slw r9, r11, r6
55 1.1.1.1.8.2 tls srw r12, r10, r8
56 1.1.1.1.8.2 tls nor r9, r9, r12
57 1.1.1.1.8.2 tls stwu r9, -4(r7)
58 1.1.1.1.8.2 tls bdz L(end2)
59 1.1.1.1.8.2 tls lwzu r11, -4(r4)
60 1.1.1.1.8.2 tls slw r9, r10, r6
61 1.1.1.1.8.2 tls srw r12, r11, r8
62 1.1.1.1.8.2 tls nor r9, r9, r12
63 1.1.1.1.8.2 tls stwu r9, -4(r7)
64 1.1.1.1.8.2 tls bdnz L(oop)
65 1.1.1.1.8.2 tls
66 1.1.1.1.8.2 tls L(end1):
67 1.1.1.1.8.2 tls slw r0, r11, r6
68 1.1.1.1.8.2 tls nor r0, r0, r0
69 1.1.1.1.8.2 tls stw r0, -4(r7)
70 1.1.1.1.8.2 tls blr
71 1.1.1.1.8.2 tls L(end2):
72 1.1.1.1.8.2 tls slw r0, r10, r6
73 1.1.1.1.8.2 tls nor r0, r0, r0
74 1.1.1.1.8.2 tls stw r0, -4(r7)
75 1.1.1.1.8.2 tls blr
76 1.1.1.1.8.2 tls
77 1.1.1.1.8.2 tls L(BIG):
78 1.1.1.1.8.2 tls stmw r24, -32(r1) C save registers we are supposed to preserve
79 1.1.1.1.8.2 tls lwzu r9, -4(r4)
80 1.1.1.1.8.2 tls subfic r8, r6, 32
81 1.1.1.1.8.2 tls srw r3, r9, r8 C compute function return value
82 1.1.1.1.8.2 tls slw r0, r9, r6
83 1.1.1.1.8.2 tls addi r5, r5, -1
84 1.1.1.1.8.2 tls
85 1.1.1.1.8.2 tls andi. r10, r5, 3 C count for spill loop
86 1.1.1.1.8.2 tls beq L(e)
87 1.1.1.1.8.2 tls mtctr r10
88 1.1.1.1.8.2 tls lwzu r28, -4(r4)
89 1.1.1.1.8.2 tls bdz L(xe0)
90 1.1.1.1.8.2 tls
91 1.1.1.1.8.2 tls L(loop0):
92 1.1.1.1.8.2 tls slw r12, r28, r6
93 1.1.1.1.8.2 tls srw r24, r28, r8
94 1.1.1.1.8.2 tls lwzu r28, -4(r4)
95 1.1.1.1.8.2 tls nor r24, r0, r24
96 1.1.1.1.8.2 tls stwu r24, -4(r7)
97 1.1.1.1.8.2 tls mr r0, r12
98 1.1.1.1.8.2 tls bdnz L(loop0) C taken at most once!
99 1.1.1.1.8.2 tls
100 1.1.1.1.8.2 tls L(xe0): slw r12, r28, r6
101 1.1.1.1.8.2 tls srw r24, r28, r8
102 1.1.1.1.8.2 tls nor r24, r0, r24
103 1.1.1.1.8.2 tls stwu r24, -4(r7)
104 1.1.1.1.8.2 tls mr r0, r12
105 1.1.1.1.8.2 tls
106 1.1.1.1.8.2 tls L(e): srwi r5, r5, 2 C count for unrolled loop
107 1.1.1.1.8.2 tls addi r5, r5, -1
108 1.1.1.1.8.2 tls mtctr r5
109 1.1.1.1.8.2 tls lwz r28, -4(r4)
110 1.1.1.1.8.2 tls lwz r29, -8(r4)
111 1.1.1.1.8.2 tls lwz r30, -12(r4)
112 1.1.1.1.8.2 tls lwzu r31, -16(r4)
113 1.1.1.1.8.2 tls
114 1.1.1.1.8.2 tls L(loopU):
115 1.1.1.1.8.2 tls slw r9, r28, r6
116 1.1.1.1.8.2 tls srw r24, r28, r8
117 1.1.1.1.8.2 tls lwz r28, -4(r4)
118 1.1.1.1.8.2 tls slw r10, r29, r6
119 1.1.1.1.8.2 tls srw r25, r29, r8
120 1.1.1.1.8.2 tls lwz r29, -8(r4)
121 1.1.1.1.8.2 tls slw r11, r30, r6
122 1.1.1.1.8.2 tls srw r26, r30, r8
123 1.1.1.1.8.2 tls lwz r30, -12(r4)
124 1.1.1.1.8.2 tls slw r12, r31, r6
125 1.1.1.1.8.2 tls srw r27, r31, r8
126 1.1.1.1.8.2 tls lwzu r31, -16(r4)
127 1.1.1.1.8.2 tls nor r24, r0, r24
128 1.1.1.1.8.2 tls stw r24, -4(r7)
129 1.1.1.1.8.2 tls nor r25, r9, r25
130 1.1.1.1.8.2 tls stw r25, -8(r7)
131 1.1.1.1.8.2 tls nor r26, r10, r26
132 1.1.1.1.8.2 tls stw r26, -12(r7)
133 1.1.1.1.8.2 tls nor r27, r11, r27
134 1.1.1.1.8.2 tls stwu r27, -16(r7)
135 1.1.1.1.8.2 tls mr r0, r12
136 1.1.1.1.8.2 tls bdnz L(loopU)
137 1.1.1.1.8.2 tls
138 1.1.1.1.8.2 tls slw r9, r28, r6
139 1.1.1.1.8.2 tls srw r24, r28, r8
140 1.1.1.1.8.2 tls slw r10, r29, r6
141 1.1.1.1.8.2 tls srw r25, r29, r8
142 1.1.1.1.8.2 tls slw r11, r30, r6
143 1.1.1.1.8.2 tls srw r26, r30, r8
144 1.1.1.1.8.2 tls slw r12, r31, r6
145 1.1.1.1.8.2 tls srw r27, r31, r8
146 1.1.1.1.8.2 tls nor r24, r0, r24
147 1.1.1.1.8.2 tls stw r24, -4(r7)
148 1.1.1.1.8.2 tls nor r25, r9, r25
149 1.1.1.1.8.2 tls stw r25, -8(r7)
150 1.1.1.1.8.2 tls nor r26, r10, r26
151 1.1.1.1.8.2 tls stw r26, -12(r7)
152 1.1.1.1.8.2 tls nor r27, r11, r27
153 1.1.1.1.8.2 tls stw r27, -16(r7)
154 1.1.1.1.8.2 tls nor r12, r12, r12
155 1.1.1.1.8.2 tls stw r12, -20(r7)
156 1.1.1.1.8.2 tls lmw r24, -32(r1) C restore registers
157 1.1.1.1.8.2 tls blr
158 1.1.1.1.8.2 tls EPILOGUE()
159