]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - include/asm-m32r/div64.h
Linux-2.6.12-rc2
[mirror_ubuntu-artful-kernel.git] / include / asm-m32r / div64.h
1 #ifndef _ASM_M32R_DIV64
2 #define _ASM_M32R_DIV64
3
4 /* $Id$ */
5
6 /* unsigned long long division.
7 * Input:
8 * unsigned long long n
9 * unsigned long base
10 * Output:
11 * n = n / base;
12 * return value = n % base;
13 */
14 #define do_div(n, base) \
15 ({ \
16 unsigned long _res, _high, _mid, _low; \
17 \
18 _low = (n) & 0xffffffffUL; \
19 _high = (n) >> 32; \
20 if (_high) { \
21 _mid = (_high % (unsigned long)(base)) << 16; \
22 _high = _high / (unsigned long)(base); \
23 _mid += _low >> 16; \
24 _low &= 0x0000ffffUL; \
25 _low += (_mid % (unsigned long)(base)) << 16; \
26 _mid = _mid / (unsigned long)(base); \
27 _res = _low % (unsigned long)(base); \
28 _low = _low / (unsigned long)(base); \
29 n = _low + ((long long)_mid << 16) + \
30 ((long long)_high << 32); \
31 } else { \
32 _res = _low % (unsigned long)(base); \
33 n = (_low / (unsigned long)(base)); \
34 } \
35 _res; \
36 })
37
38 #endif /* _ASM_M32R_DIV64 */