1
2
3
4
5
6
7
8;
9; input (r0,r1) src
10; input r2 shift val
11; r3 scratch
12; output (r0,r1)
13;
14
15#ifdef CONFIG_ISA_DUAL_ISSUE
16
17#ifndef __LITTLE_ENDIAN__
18
19 .text
20 .align 4
21 .globl __ashrdi3
22__ashrdi3:
23 cmpz r2 || ldi r3,
24 jc r14 || cmpu r2, r3
25 bc 1f
26 ; case 32 =< shift
27 mv r1, r0 || srai r0,
28 addi r2,
29 sra r1, r2
30 jmp r14
31 .fillinsn
321: ; case shift <32
33 mv r3, r0 || srl r1, r2
34 sra r0, r2 || neg r2, r2
35 sll r3, r2
36 or r1, r3 || jmp r14
37
38 .align 4
39 .globl __ashldi3
40 .globl __lshldi3
41__ashldi3:
42__lshldi3:
43 cmpz r2 || ldi r3,
44 jc r14 || cmpu r2, r3
45 bc 1f
46 ; case 32 =< shift
47 mv r0, r1 || addi r2,
48 sll r0, r2 || ldi r1,
49 jmp r14
50 .fillinsn
511: ; case shift <32
52 mv r3, r1 || sll r0, r2
53 sll r1, r2 || neg r2, r2
54 srl r3, r2
55 or r0, r3 || jmp r14
56
57 .align 4
58 .globl __lshrdi3
59__lshrdi3:
60 cmpz r2 || ldi r3,
61 jc r14 || cmpu r2, r3
62 bc 1f
63 ; case 32 =< shift
64 mv r1, r0 || addi r2,
65 ldi r0,
66 jmp r14
67 .fillinsn
681: ; case shift <32
69 mv r3, r0 || srl r1, r2
70 srl r0, r2 || neg r2, r2
71 sll r3, r2
72 or r1, r3 || jmp r14
73
74#else
75
76 .text
77 .align 4
78 .globl __ashrdi3
79__ashrdi3:
80 cmpz r2 || ldi r3,
81 jc r14 || cmpu r2, r3
82 bc 1f
83 ; case 32 =< shift
84 mv r0, r1 || srai r1,
85 addi r2,
86 sra r0, r2
87 jmp r14
88 .fillinsn
891: ; case shift <32
90 mv r3, r1 || srl r0, r2
91 sra r1, r2 || neg r2, r2
92 sll r3, r2
93 or r0, r3 || jmp r14
94
95 .align 4
96 .globl __ashldi3
97 .globl __lshldi3
98__ashldi3:
99__lshldi3:
100 cmpz r2 || ldi r3,
101 jc r14 || cmpu r2, r3
102 bc 1f
103 ; case 32 =< shift
104 mv r1, r0 || addi r2,
105 sll r1, r2 || ldi r0,
106 jmp r14
107 .fillinsn
1081: ; case shift <32
109 mv r3, r0 || sll r1, r2
110 sll r0, r2 || neg r2, r2
111 srl r3, r2
112 or r1, r3 || jmp r14
113
114 .align 4
115 .globl __lshrdi3
116__lshrdi3:
117 cmpz r2 || ldi r3,
118 jc r14 || cmpu r2, r3
119 bc 1f
120 ; case 32 =< shift
121 mv r0, r1 || addi r2,
122 ldi r1,
123 jmp r14
124 .fillinsn
1251: ; case shift <32
126 mv r3, r1 || srl r0, r2
127 srl r1, r2 || neg r2, r2
128 sll r3, r2
129 or r0, r3 || jmp r14
130
131#endif
132
133#else
134
135#ifndef __LITTLE_ENDIAN__
136
137 .text
138 .align 4
139 .globl __ashrdi3
140__ashrdi3:
141 beqz r2, 2f
142 cmpui r2,
143 bc 1f
144 ; case 32 =< shift
145 mv r1, r0
146 srai r0,
147 addi r2,
148 sra r1, r2
149 jmp r14
150 .fillinsn
1511: ; case shift <32
152 mv r3, r0
153 srl r1, r2
154 sra r0, r2
155 neg r2, r2
156 sll r3, r2
157 or r1, r3
158 .fillinsn
1592:
160 jmp r14
161
162 .align 4
163 .globl __ashldi3
164 .globl __lshldi3
165__ashldi3:
166__lshldi3:
167 beqz r2, 2f
168 cmpui r2,
169 bc 1f
170 ; case 32 =< shift
171 mv r0, r1
172 addi r2,
173 sll r0, r2
174 ldi r1,
175 jmp r14
176 .fillinsn
1771: ; case shift <32
178 mv r3, r1
179 sll r0, r2
180 sll r1, r2
181 neg r2, r2
182 srl r3, r2
183 or r0, r3
184 .fillinsn
1852:
186 jmp r14
187
188 .align 4
189 .globl __lshrdi3
190__lshrdi3:
191 beqz r2, 2f
192 cmpui r2,
193 bc 1f
194 ; case 32 =< shift
195 mv r1, r0
196 ldi r0,
197 addi r2,
198 srl r1, r2
199 jmp r14
200 .fillinsn
2011: ; case shift <32
202 mv r3, r0
203 srl r1, r2
204 srl r0, r2
205 neg r2, r2
206 sll r3, r2
207 or r1, r3
208 .fillinsn
2092:
210 jmp r14
211
212#else
213
214 .text
215 .align 4
216 .globl __ashrdi3
217__ashrdi3:
218 beqz r2, 2f
219 cmpui r2,
220 bc 1f
221 ; case 32 =< shift
222 mv r0, r1
223 srai r1,
224 addi r2,
225 sra r0, r2
226 jmp r14
227 .fillinsn
2281: ; case shift <32
229 mv r3, r1
230 srl r0, r2
231 sra r1, r2
232 neg r2, r2
233 sll r3, r2
234 or r0, r3
235 .fillinsn
2362:
237 jmp r14
238
239 .align 4
240 .globl __ashldi3
241 .globl __lshldi3
242__ashldi3:
243__lshldi3:
244 beqz r2, 2f
245 cmpui r2,
246 bc 1f
247 ; case 32 =< shift
248 mv r1, r0
249 addi r2,
250 sll r1, r2
251 ldi r0,
252 jmp r14
253 .fillinsn
2541: ; case shift <32
255 mv r3, r0
256 sll r1, r2
257 sll r0, r2
258 neg r2, r2
259 srl r3, r2
260 or r1, r3
261 .fillinsn
2622:
263 jmp r14
264
265 .align 4
266 .globl __lshrdi3
267__lshrdi3:
268 beqz r2, 2f
269 cmpui r2,
270 bc 1f
271 ; case 32 =< shift
272 mv r0, r1
273 ldi r1,
274 addi r2,
275 srl r0, r2
276 jmp r14
277 .fillinsn
2781: ; case shift <32
279 mv r3, r1
280 srl r0, r2
281 srl r1, r2
282 neg r2, r2
283 sll r3, r2
284 or r0, r3
285 .fillinsn
2862:
287 jmp r14
288
289#endif
290
291#endif
292
293 .end
294