home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-m68k / div64.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  621 b   |  27 lines

  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 */
  27.