Linux 6.13-rc4
[linux.git] / arch / sh / lib / div64.S
blob4a9a966e71b0e7871536a68c36e0cc3c44000e4d
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*      
3  * unsigned long __xdiv64_32(unsigned long long n, unsigned long d); 
4  */
6 #include <linux/linkage.h>
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
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
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