diff options
-rw-r--r-- | include/asm-generic/div64.h | 14 | ||||
-rw-r--r-- | lib/div64.c | 6 |
2 files changed, 20 insertions, 0 deletions
diff --git a/include/asm-generic/div64.h b/include/asm-generic/div64.h index 163f77999ea4..3de84f64423f 100644 --- a/include/asm-generic/div64.h +++ b/include/asm-generic/div64.h | |||
@@ -25,6 +25,20 @@ | |||
25 | 25 | ||
26 | #if BITS_PER_LONG == 64 | 26 | #if BITS_PER_LONG == 64 |
27 | 27 | ||
28 | /** | ||
29 | * do_div - returns 2 values: calculate remainder and update new dividend | ||
30 | * @n: pointer to uint64_t dividend (will be updated) | ||
31 | * @base: uint32_t divisor | ||
32 | * | ||
33 | * Summary: | ||
34 | * ``uint32_t remainder = *n % base;`` | ||
35 | * ``*n = *n / base;`` | ||
36 | * | ||
37 | * Return: (uint32_t)remainder | ||
38 | * | ||
39 | * NOTE: macro parameter @n is evaluated multiple times, | ||
40 | * beware of side effects! | ||
41 | */ | ||
28 | # define do_div(n,base) ({ \ | 42 | # define do_div(n,base) ({ \ |
29 | uint32_t __base = (base); \ | 43 | uint32_t __base = (base); \ |
30 | uint32_t __rem; \ | 44 | uint32_t __rem; \ |
diff --git a/lib/div64.c b/lib/div64.c index 7f345259c32f..5660e8233293 100644 --- a/lib/div64.c +++ b/lib/div64.c | |||
@@ -60,6 +60,12 @@ uint32_t __attribute__((weak)) __div64_32(uint64_t *n, uint32_t base) | |||
60 | EXPORT_SYMBOL(__div64_32); | 60 | EXPORT_SYMBOL(__div64_32); |
61 | #endif | 61 | #endif |
62 | 62 | ||
63 | /** | ||
64 | * div_s64_rem - signed 64bit divide with 64bit divisor and remainder | ||
65 | * @dividend: 64bit dividend | ||
66 | * @divisor: 64bit divisor | ||
67 | * @remainder: 64bit remainder | ||
68 | */ | ||
63 | #ifndef div_s64_rem | 69 | #ifndef div_s64_rem |
64 | s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder) | 70 | s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder) |
65 | { | 71 | { |