diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-03-05 14:47:28 +0300 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-03-05 14:47:28 +0300 |
commit | 7df4edb07cf54a4868b9a750424c0d2aa68f8d66 (patch) | |
tree | 0ad0ad3f3dcb6f9edf26dde42ba625053dddf54f /arch/m68k/include/asm/div64_mm.h | |
parent | 0d688da5505d77bcef2441e0a22d8cc26459702d (diff) | |
parent | 559595a985e106d2fa9f0c79b7f5805453fed593 (diff) | |
download | linux-7df4edb07cf54a4868b9a750424c0d2aa68f8d66.tar.xz |
Merge branch 'linus' into core/iommu
Diffstat (limited to 'arch/m68k/include/asm/div64_mm.h')
-rw-r--r-- | arch/m68k/include/asm/div64_mm.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/arch/m68k/include/asm/div64_mm.h b/arch/m68k/include/asm/div64_mm.h new file mode 100644 index 000000000000..8243c931b5c0 --- /dev/null +++ b/arch/m68k/include/asm/div64_mm.h @@ -0,0 +1,28 @@ +#ifndef _M68K_DIV64_H +#define _M68K_DIV64_H + +#include <linux/types.h> + +/* n = n / base; return rem; */ + +#define do_div(n, base) ({ \ + union { \ + unsigned long n32[2]; \ + unsigned long long n64; \ + } __n; \ + unsigned long __rem, __upper; \ + \ + __n.n64 = (n); \ + if ((__upper = __n.n32[0])) { \ + asm ("divul.l %2,%1:%0" \ + : "=d" (__n.n32[0]), "=d" (__upper) \ + : "d" (base), "0" (__n.n32[0])); \ + } \ + asm ("divu.l %2,%1:%0" \ + : "=d" (__n.n32[1]), "=d" (__rem) \ + : "d" (base), "1" (__upper), "0" (__n.n32[1])); \ + (n) = __n.n64; \ + __rem; \ +}) + +#endif /* _M68K_DIV64_H */ |