GNU Linux-libre 6.6.34-gnu
[releases.git] / include / vdso / math64.h
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 */