Merge branch 'linus' into tracing/hw-branch-tracing
[linux-2.6] / arch / m68k / include / asm / div64.h
1 #ifndef _M68K_DIV64_H
2 #define _M68K_DIV64_H
3
4 #ifdef CONFIG_MMU
5
6 #include <linux/types.h>
7
8 /* n = n / base; return rem; */
9
10 #define do_div(n, base) ({                                      \
11         union {                                                 \
12                 unsigned long n32[2];                           \
13                 unsigned long long n64;                         \
14         } __n;                                                  \
15         unsigned long __rem, __upper;                           \
16                                                                 \
17         __n.n64 = (n);                                          \
18         if ((__upper = __n.n32[0])) {                           \
19                 asm ("divul.l %2,%1:%0"                         \
20                         : "=d" (__n.n32[0]), "=d" (__upper)     \
21                         : "d" (base), "0" (__n.n32[0]));        \
22         }                                                       \
23         asm ("divu.l %2,%1:%0"                                  \
24                 : "=d" (__n.n32[1]), "=d" (__rem)               \
25                 : "d" (base), "1" (__upper), "0" (__n.n32[1])); \
26         (n) = __n.n64;                                          \
27         __rem;                                                  \
28 })
29
30 #else
31 #include <asm-generic/div64.h>
32 #endif /* CONFIG_MMU */
33
34 #endif /* _M68K_DIV64_H */