xref: /kernel/linux/linux-6.6/include/vdso/math64.h
  • Home
  • History
  • Annotate Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
  • only in /kernel/linux/linux-6.6/include/vdso/
162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef __VDSO_MATH64_H
362306a36Sopenharmony_ci#define __VDSO_MATH64_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_cistatic __always_inline u32
662306a36Sopenharmony_ci__iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder)
762306a36Sopenharmony_ci{
862306a36Sopenharmony_ci	u32 ret = 0;
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci	while (dividend >= divisor) {
1162306a36Sopenharmony_ci		/* The following asm() prevents the compiler from
1262306a36Sopenharmony_ci		   optimising this loop into a modulo operation.  */
1362306a36Sopenharmony_ci		asm("" : "+rm"(dividend));
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci		dividend -= divisor;
1662306a36Sopenharmony_ci		ret++;
1762306a36Sopenharmony_ci	}
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci	*remainder = dividend;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	return ret;
2262306a36Sopenharmony_ci}
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci#endif /* __VDSO_MATH64_H */
25

Indexes created Thu Nov 07 10:32:03 CST 2024