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-s390 / div64.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  1.3 KB  |  50 lines

  1. #ifndef __S390_DIV64
  2. #define __S390_DIV64
  3.  
  4. #ifndef __s390x__
  5.  
  6. /* for do_div "base" needs to be smaller than 2^31-1 */
  7. #define do_div(n, base) ({                                      \
  8.     unsigned long long __n = (n);                \
  9.     unsigned long __r;                    \
  10.                                 \
  11.     asm ("   slr  0,0\n"                    \
  12.          "   l    1,%1\n"                    \
  13.          "   srdl 0,1\n"                    \
  14.          "   dr   0,%2\n"                    \
  15.          "   alr  1,1\n"                    \
  16.          "   alr  0,0\n"                    \
  17.          "   lhi  2,1\n"                    \
  18.          "   n    2,%1\n"                    \
  19.          "   alr  0,2\n"                    \
  20.          "   clr  0,%2\n"                    \
  21.          "   jl   0f\n"                    \
  22.          "   slr  0,%2\n"                    \
  23.              "   ahi  1,1\n"                    \
  24.          "0: st   1,%1\n"                    \
  25.          "   l    1,4+%1\n"                    \
  26.          "   srdl 0,1\n"                    \
  27.              "   dr   0,%2\n"                    \
  28.          "   alr  1,1\n"                    \
  29.          "   alr  0,0\n"                    \
  30.          "   lhi  2,1\n"                    \
  31.          "   n    2,4+%1\n"                    \
  32.          "   alr  0,2\n"                    \
  33.          "   clr  0,%2\n"                    \
  34.              "   jl   1f\n"                    \
  35.          "   slr  0,%2\n"                    \
  36.          "   ahi  1,1\n"                    \
  37.          "1: st   1,4+%1\n"                    \
  38.              "   lr   %0,0"                    \
  39.          : "=d" (__r), "=m" (__n)                \
  40.          : "d" (base), "m" (__n) : "0", "1", "2", "cc" );    \
  41.     (n) = (__n);                        \
  42.         __r;                                                    \
  43. })
  44.  
  45. #else /* __s390x__ */
  46. #include <asm-generic/div64.h>
  47. #endif /* __s390x__ */
  48.  
  49. #endif
  50.