2#ifndef _ASM_GENERIC_DIV64_H
3#define _ASM_GENERIC_DIV64_H
29#if BITS_PER_LONG == 64
45# define do_div(n,base) ({ \
46 uint32_t __base = (base); \
48 __rem = ((uint64_t)(n)) % __base; \
49 (n) = ((uint64_t)(n)) / __base; \
53#elif BITS_PER_LONG == 32
65#define __div64_const32(n, ___b) \
76 uint64_t ___res, ___x, ___t, ___m, ___n = (n); \
78 bool ___bias = false; \
81 ___p = 1 << ilog2(___b); \
84 ___m = (~0ULL / ___b) * ___p; \
85 ___m += (((~0ULL % ___b + 1) * ___p) + ___b - 1) / ___b; \
88 ___x = ~0ULL / ___b * ___b - 1; \
91 ___res = (___m & 0xffffffff) * (___x & 0xffffffff); \
92 ___t = (___m & 0xffffffff) * (___x >> 32) + (___res >> 32); \
93 ___res = (___m >> 32) * (___x >> 32) + (___t >> 32); \
94 ___t = (___m >> 32) * (___x & 0xffffffff) + (___t & 0xffffffff);\
95 ___res = (___res + (___t >> 32)) / ___p; \
98 if (___res != ___x / ___b) { \
109 ___m = (~0ULL / ___b) * ___p; \
110 ___m += ((~0ULL % ___b + 1) * ___p) / ___b; \
114 ___p /= (___m & -___m); \
115 ___m /= (___m & -___m); \
121 ___res = __arch_xprod_64(___m, ___n, ___bias); \
126#ifndef __arch_xprod_64
137#ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
151 bool no_ovf = __builtin_constant_p(m) &&
152 ((m >> 32) + (m & 0xffffffff) < 0x100000000);
155 x = (
uint64_t)m_lo * n_lo + (bias ? m : 0);
162 x = (
uint64_t)m_lo * n_lo + (bias ? m_lo : 0);
180# define do_div(n,base) ({ \
181 uint32_t __base = (base); \
183 (void)(((typeof((n)) *)0) == ((uint64_t *)0)); \
184 if (__builtin_constant_p(__base) && \
185 is_power_of_2(__base)) { \
186 __rem = (n) & (__base - 1); \
187 (n) >>= ilog2(__base); \
188 } else if (__builtin_constant_p(__base) && \
190 uint32_t __res_lo, __n_lo = (n); \
191 (n) = __div64_const32(n, __base); \
194 __rem = __n_lo - __res_lo * __base; \
195 } else if (likely(((n) >> 32) == 0)) { \
196 __rem = (uint32_t)(n) % __base; \
197 (n) = (uint32_t)(n) / __base; \
199 __rem = __div64_32(&(n), __base); \
206# error do_div() does not yet support the C64
unsigned int uint32_t
Definition acefiex.h:163
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
#define __always_inline
Definition compiler_attributes.h:55
int y
Definition layout.c:118
int x
Definition layout.c:118