]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blob - arch/m32r/lib/ashxdi3.S
Merge master.kernel.org:/pub/scm/linux/kernel/git/sfrench/cifs-2.6
[mirror_ubuntu-zesty-kernel.git] / arch / m32r / lib / ashxdi3.S
1 /*
2 * linux/arch/m32r/lib/ashxdi3.S
3 *
4 * Copyright (C) 2001,2002 Hiroyuki Kondo, and Hirokazu Takata
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, #32
24 jc r14 || cmpu r2, r3
25 bc 1f
26 ; case 32 =< shift
27 mv r1, r0 || srai r0, #31
28 addi r2, #-32
29 sra r1, r2
30 jmp r14
31 .fillinsn
32 1: ; 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, #32
44 jc r14 || cmpu r2, r3
45 bc 1f
46 ; case 32 =< shift
47 mv r0, r1 || addi r2, #-32
48 sll r0, r2 || ldi r1, #0
49 jmp r14
50 .fillinsn
51 1: ; 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, #32
61 jc r14 || cmpu r2, r3
62 bc 1f
63 ; case 32 =< shift
64 mv r1, r0 || addi r2, #-32
65 ldi r0, #0 || srl r1, r2
66 jmp r14
67 .fillinsn
68 1: ; 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 /* LITTLE_ENDIAN */
75
76 .text
77 .align 4
78 .globl __ashrdi3
79 __ashrdi3:
80 cmpz r2 || ldi r3, #32
81 jc r14 || cmpu r2, r3
82 bc 1f
83 ; case 32 =< shift
84 mv r0, r1 || srai r1, #31
85 addi r2, #-32
86 sra r0, r2
87 jmp r14
88 .fillinsn
89 1: ; 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, #32
101 jc r14 || cmpu r2, r3
102 bc 1f
103 ; case 32 =< shift
104 mv r1, r0 || addi r2, #-32
105 sll r1, r2 || ldi r0, #0
106 jmp r14
107 .fillinsn
108 1: ; 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, #32
118 jc r14 || cmpu r2, r3
119 bc 1f
120 ; case 32 =< shift
121 mv r0, r1 || addi r2, #-32
122 ldi r1, #0 || srl r0, r2
123 jmp r14
124 .fillinsn
125 1: ; 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 /* not CONFIG_ISA_DUAL_ISSUE */
134
135 #ifndef __LITTLE_ENDIAN__
136
137 .text
138 .align 4
139 .globl __ashrdi3
140 __ashrdi3:
141 beqz r2, 2f
142 cmpui r2, #32
143 bc 1f
144 ; case 32 =< shift
145 mv r1, r0
146 srai r0, #31
147 addi r2, #-32
148 sra r1, r2
149 jmp r14
150 .fillinsn
151 1: ; 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
159 2:
160 jmp r14
161
162 .align 4
163 .globl __ashldi3
164 .globl __lshldi3
165 __ashldi3:
166 __lshldi3:
167 beqz r2, 2f
168 cmpui r2, #32
169 bc 1f
170 ; case 32 =< shift
171 mv r0, r1
172 addi r2, #-32
173 sll r0, r2
174 ldi r1, #0
175 jmp r14
176 .fillinsn
177 1: ; 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
185 2:
186 jmp r14
187
188 .align 4
189 .globl __lshrdi3
190 __lshrdi3:
191 beqz r2, 2f
192 cmpui r2, #32
193 bc 1f
194 ; case 32 =< shift
195 mv r1, r0
196 ldi r0, #0
197 addi r2, #-32
198 srl r1, r2
199 jmp r14
200 .fillinsn
201 1: ; 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
209 2:
210 jmp r14
211
212 #else
213
214 .text
215 .align 4
216 .globl __ashrdi3
217 __ashrdi3:
218 beqz r2, 2f
219 cmpui r2, #32
220 bc 1f
221 ; case 32 =< shift
222 mv r0, r1
223 srai r1, #31
224 addi r2, #-32
225 sra r0, r2
226 jmp r14
227 .fillinsn
228 1: ; 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
236 2:
237 jmp r14
238
239 .align 4
240 .globl __ashldi3
241 .globl __lshldi3
242 __ashldi3:
243 __lshldi3:
244 beqz r2, 2f
245 cmpui r2, #32
246 bc 1f
247 ; case 32 =< shift
248 mv r1, r0
249 addi r2, #-32
250 sll r1, r2
251 ldi r0, #0
252 jmp r14
253 .fillinsn
254 1: ; 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
262 2:
263 jmp r14
264
265 .align 4
266 .globl __lshrdi3
267 __lshrdi3:
268 beqz r2, 2f
269 cmpui r2, #32
270 bc 1f
271 ; case 32 =< shift
272 mv r0, r1
273 ldi r1, #0
274 addi r2, #-32
275 srl r0, r2
276 jmp r14
277 .fillinsn
278 1: ; 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
286 2:
287 jmp r14
288
289 #endif
290
291 #endif /* not CONFIG_ISA_DUAL_ISSUE */
292
293 .end