Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
1da177e4 | 2 | /* |
04c7d957 | 3 | * unsigned long __xdiv64_32(unsigned long long n, unsigned long d); |
1da177e4 LT |
4 | */ |
5 | ||
6 | #include <linux/linkage.h> | |
7 | ||
8 | .text | |
9 | ENTRY(__xdiv64_32) | |
04c7d957 | 10 | #ifdef CONFIG_CPU_LITTLE_ENDIAN |
1da177e4 LT |
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 | |
04c7d957 | 38 | #ifdef CONFIG_CPU_LITTLE_ENDIAN |
1da177e4 LT |
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 |