blob: 4a9a966e71b0e7871536a68c36e0cc3c44000e4d [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002/*
Paul Mundt04c7d952007-07-06 10:58:04 +09003 * unsigned long __xdiv64_32(unsigned long long n, unsigned long d);
Linus Torvalds1da177e2005-04-16 15:20:36 -07004 */
5
6#include <linux/linkage.h>
7
8.text
9ENTRY(__xdiv64_32)
Paul Mundt04c7d952007-07-06 10:58:04 +090010#ifdef CONFIG_CPU_LITTLE_ENDIAN
Linus Torvalds1da177e2005-04-16 15:20:36 -070011 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
321:
33 div0u
34 .rept 32
35 rotcl r0
36 div1 r6, r1
37 .endr
Paul Mundt04c7d952007-07-06 10:58:04 +090038#ifdef CONFIG_CPU_LITTLE_ENDIAN
Linus Torvalds1da177e2005-04-16 15:20:36 -070039 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