Committer: Michael Beasley <mike@snafu.setup>
[mikesnafu-overlay.git] / arch / sh / lib / div64.S
blob5ee7334ea64ff7ff4e68a32f24a5161c8f195a71
1 /*      
2  * unsigned long __xdiv64_32(unsigned long long n, unsigned long d); 
3  */
5 #include <linux/linkage.h>
7 .text
8 ENTRY(__xdiv64_32)
9 #ifdef CONFIG_CPU_LITTLE_ENDIAN
10         mov     r4, r0
11         mov     r5, r1
12 #else
13         mov     r4, r1
14         mov     r5, r0
15 #endif
16         cmp/hs  r6, r1
17         bf.s    1f
18          mov    #0, r2
20         mov     r1, r2
21         mov     #0, r3
22         div0u
23         .rept   32
24         rotcl   r2
25         div1    r6, r3
26         .endr
27         rotcl   r2
28         mul.l   r6, r2
29         sts     macl, r3
30         sub     r3, r1
32         div0u
33         .rept   32
34         rotcl   r0
35         div1    r6, r1
36         .endr
37 #ifdef CONFIG_CPU_LITTLE_ENDIAN
38         mov     r2, r1
39         rts
40          rotcl  r0
41 #else
42         rotcl   r0
43         mov     r0, r1
44         rts
45          mov    r2, r0
46 #endif