xref: /openbmc/linux/include/vdso/math64.h (revision fbb6b31a)
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