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
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, #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
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, #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
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 /* 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
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, #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
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, #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
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 /* 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
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, #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
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, #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
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, #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
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, #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
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, #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
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 /* not CONFIG_ISA_DUAL_ISSUE */
292
293	.end
294