Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/agpgart
[linux-2.6] / arch / sh / lib / div64.S
1 /*      
2  * unsigned long long __xdiv64_32(unsigned long long n, unsigned long d); 
3  */
4
5 #include <linux/linkage.h>
6
7 .text
8 ENTRY(__xdiv64_32)
9 #ifdef  __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
19
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
31 1:
32         div0u
33         .rept   32
34         rotcl   r0
35         div1    r6, r1
36         .endr
37 #ifdef  __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