Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | #ifndef _M68K_DIV64_H |
2 | #define _M68K_DIV64_H | |
3 | ||
4 | /* n = n / base; return rem; */ | |
5 | ||
6 | #define do_div(n, base) ({ \ | |
7 | union { \ | |
8 | unsigned long n32[2]; \ | |
9 | unsigned long long n64; \ | |
10 | } __n; \ | |
11 | unsigned long __rem, __upper; \ | |
12 | \ | |
13 | __n.n64 = (n); \ | |
14 | if ((__upper = __n.n32[0])) { \ | |
15 | asm ("divul.l %2,%1:%0" \ | |
16 | : "=d" (__n.n32[0]), "=d" (__upper) \ | |
17 | : "d" (base), "0" (__n.n32[0])); \ | |
18 | } \ | |
19 | asm ("divu.l %2,%1:%0" \ | |
20 | : "=d" (__n.n32[1]), "=d" (__rem) \ | |
21 | : "d" (base), "1" (__upper), "0" (__n.n32[1])); \ | |
22 | (n) = __n.n64; \ | |
23 | __rem; \ | |
24 | }) | |
25 | ||
26 | #endif /* _M68K_DIV64_H */ |