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