diff options
Diffstat (limited to 'arch/parisc/lib/libgcc/__udivmoddi4.c')
-rw-r--r-- | arch/parisc/lib/libgcc/__udivmoddi4.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/arch/parisc/lib/libgcc/__udivmoddi4.c b/arch/parisc/lib/libgcc/__udivmoddi4.c new file mode 100644 index 000000000000..2df0caa5a7d8 --- /dev/null +++ b/arch/parisc/lib/libgcc/__udivmoddi4.c | |||
@@ -0,0 +1,31 @@ | |||
1 | #include "libgcc.h" | ||
2 | |||
3 | u64 __udivmoddi4(u64 num, u64 den, u64 * rem_p) | ||
4 | { | ||
5 | u64 quot = 0, qbit = 1; | ||
6 | |||
7 | if (den == 0) { | ||
8 | BUG(); | ||
9 | } | ||
10 | |||
11 | /* Left-justify denominator and count shift */ | ||
12 | while ((s64) den >= 0) { | ||
13 | den <<= 1; | ||
14 | qbit <<= 1; | ||
15 | } | ||
16 | |||
17 | while (qbit) { | ||
18 | if (den <= num) { | ||
19 | num -= den; | ||
20 | quot += qbit; | ||
21 | } | ||
22 | den >>= 1; | ||
23 | qbit >>= 1; | ||
24 | } | ||
25 | |||
26 | if (rem_p) | ||
27 | *rem_p = num; | ||
28 | |||
29 | return quot; | ||
30 | } | ||
31 | EXPORT_SYMBOL(__udivmoddi4); | ||