Line data Source code
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 0 : u32 ret = 0; 9 : 10 0 : while (dividend >= divisor) { 11 : /* The following asm() prevents the compiler from 12 : optimising this loop into a modulo operation. */ 13 0 : asm("" : "+rm"(dividend)); 14 : 15 0 : dividend -= divisor; 16 0 : ret++; 17 : } 18 : 19 0 : *remainder = dividend; 20 : 21 : return ret; 22 : } 23 : 24 : #endif /* __VDSO_MATH64_H */