GNU Linux-libre 4.14.259-gnu1
[releases.git] / arch / sh / lib / div64.S
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