math64.h 468 B

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