blob: 5ee7334ea64ff7ff4e68a32f24a5161c8f195a71 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
Paul Mundt04c7d952007-07-06 10:58:04 +09002 * unsigned long __xdiv64_32(unsigned long long n, unsigned long d);
Linus Torvalds1da177e2005-04-16 15:20:36 -07003 */
4
5#include <linux/linkage.h>
6
7.text
8ENTRY(__xdiv64_32)
Paul Mundt04c7d952007-07-06 10:58:04 +09009#ifdef CONFIG_CPU_LITTLE_ENDIAN
Linus Torvalds1da177e2005-04-16 15:20:36 -070010 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
311:
32 div0u
33 .rept 32
34 rotcl r0
35 div1 r6, r1
36 .endr
Paul Mundt04c7d952007-07-06 10:58:04 +090037#ifdef CONFIG_CPU_LITTLE_ENDIAN
Linus Torvalds1da177e2005-04-16 15:20:36 -070038 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