div64.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:1k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

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