|
@@ -1,38 +1 @@
|
|
-#ifndef _ASM_M32R_DIV64
|
|
|
|
-#define _ASM_M32R_DIV64
|
|
|
|
-
|
|
|
|
-/* $Id$ */
|
|
|
|
-
|
|
|
|
-/* unsigned long long division.
|
|
|
|
- * Input:
|
|
|
|
- * unsigned long long n
|
|
|
|
- * unsigned long base
|
|
|
|
- * Output:
|
|
|
|
- * n = n / base;
|
|
|
|
- * return value = n % base;
|
|
|
|
- */
|
|
|
|
-#define do_div(n, base) \
|
|
|
|
-({ \
|
|
|
|
- unsigned long _res, _high, _mid, _low; \
|
|
|
|
- \
|
|
|
|
- _low = (n) & 0xffffffffUL; \
|
|
|
|
- _high = (n) >> 32; \
|
|
|
|
- if (_high) { \
|
|
|
|
- _mid = (_high % (unsigned long)(base)) << 16; \
|
|
|
|
- _high = _high / (unsigned long)(base); \
|
|
|
|
- _mid += _low >> 16; \
|
|
|
|
- _low &= 0x0000ffffUL; \
|
|
|
|
- _low += (_mid % (unsigned long)(base)) << 16; \
|
|
|
|
- _mid = _mid / (unsigned long)(base); \
|
|
|
|
- _res = _low % (unsigned long)(base); \
|
|
|
|
- _low = _low / (unsigned long)(base); \
|
|
|
|
- n = _low + ((long long)_mid << 16) + \
|
|
|
|
- ((long long)_high << 32); \
|
|
|
|
- } else { \
|
|
|
|
- _res = _low % (unsigned long)(base); \
|
|
|
|
- n = (_low / (unsigned long)(base)); \
|
|
|
|
- } \
|
|
|
|
- _res; \
|
|
|
|
-})
|
|
|
|
-
|
|
|
|
-#endif /* _ASM_M32R_DIV64 */
|
|
|
|
|
|
+#include <asm-generic/div64.h>
|