1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * unsigned long __xdiv64_32(unsigned long long n, unsigned long d);
4  */
5 
6 #include <linux/linkage.h>
7 
8 .text
9 ENTRY(__xdiv64_32)
10 #ifdef CONFIG_CPU_LITTLE_ENDIAN
11 	mov	r4, r0
12 	mov	r5, r1
13 #else
14 	mov	r4, r1
15 	mov	r5, r0
16 #endif
17 	cmp/hs	r6, r1
18 	bf.s	1f
19 	 mov	#0, r2
20 
21 	mov	r1, r2
22 	mov	#0, r3
23 	div0u
24 	.rept	32
25 	rotcl	r2
26 	div1	r6, r3
27 	.endr
28 	rotcl	r2
29 	mul.l	r6, r2
30 	sts	macl, r3
31 	sub	r3, r1
32 1:
33 	div0u
34 	.rept	32
35 	rotcl	r0
36 	div1	r6, r1
37 	.endr
38 #ifdef CONFIG_CPU_LITTLE_ENDIAN
39 	mov	r2, r1
40 	rts
41 	 rotcl	r0
42 #else
43 	rotcl	r0
44 	mov	r0, r1
45 	rts
46 	 mov	r2, r0
47 #endif
48