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