1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|---|
2 | #ifndef __VDSO_MATH64_H |
3 | #define __VDSO_MATH64_H |
4 | |
5 | static __always_inline u32 |
6 | __iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder) |
7 | { |
8 | u32 ret = 0; |
9 | |
10 | while (dividend >= divisor) { |
11 | /* The following asm() prevents the compiler from |
12 | optimising this loop into a modulo operation. */ |
13 | asm("": "+rm"(dividend)); |
14 | |
15 | dividend -= divisor; |
16 | ret++; |
17 | } |
18 | |
19 | *remainder = dividend; |
20 | |
21 | return ret; |
22 | } |
23 | |
24 | #endif /* __VDSO_MATH64_H */ |
25 |