home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / s390 / include / asm / sfp-util.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.8 KB  |  78 lines

  1. #include <linux/kernel.h>
  2. #include <linux/sched.h>
  3. #include <linux/types.h>
  4. #include <asm/byteorder.h>
  5.  
  6. #define add_ssaaaa(sh, sl, ah, al, bh, bl) ({        \
  7.     unsigned int __sh = (ah);            \
  8.     unsigned int __sl = (al);            \
  9.     asm volatile(                    \
  10.         "    alr    %1,%3\n"        \
  11.         "    brc    12,0f\n"        \
  12.         "    ahi    %0,1\n"            \
  13.         "0:    alr  %0,%2"            \
  14.         : "+&d" (__sh), "+d" (__sl)        \
  15.         : "d" (bh), "d" (bl) : "cc");        \
  16.     (sh) = __sh;                    \
  17.     (sl) = __sl;                    \
  18. })
  19.  
  20. #define sub_ddmmss(sh, sl, ah, al, bh, bl) ({        \
  21.     unsigned int __sh = (ah);            \
  22.     unsigned int __sl = (al);            \
  23.     asm volatile(                    \
  24.         "    slr    %1,%3\n"        \
  25.         "    brc    3,0f\n"            \
  26.         "    ahi    %0,-1\n"        \
  27.         "0:    slr    %0,%2"            \
  28.         : "+&d" (__sh), "+d" (__sl)        \
  29.         : "d" (bh), "d" (bl) : "cc");        \
  30.     (sh) = __sh;                    \
  31.     (sl) = __sl;                    \
  32. })
  33.  
  34. /* a umul b = a mul b + (a>=2<<31) ? b<<32:0 + (b>=2<<31) ? a<<32:0 */
  35. #define umul_ppmm(wh, wl, u, v) ({            \
  36.     unsigned int __wh = u;                \
  37.     unsigned int __wl = v;                \
  38.     asm volatile(                    \
  39.         "    ltr    1,%0\n"            \
  40.         "    mr    0,%1\n"            \
  41.         "    jnm    0f\n"                \
  42.         "    alr    0,%1\n"            \
  43.         "0:    ltr    %1,%1\n"            \
  44.         "    jnm    1f\n"                \
  45.         "    alr    0,%0\n"            \
  46.         "1:    lr    %0,0\n"            \
  47.         "    lr    %1,1\n"            \
  48.         : "+d" (__wh), "+d" (__wl)        \
  49.         : : "0", "1", "cc");            \
  50.     wh = __wh;                    \
  51.     wl = __wl;                    \
  52. })
  53.  
  54. #ifdef __s390x__
  55. #define udiv_qrnnd(q, r, n1, n0, d)            \
  56.   do { unsigned long __n;                \
  57.        unsigned int __r, __d;                \
  58.     __n = ((unsigned long)(n1) << 32) + n0;        \
  59.     __d = (d);                        \
  60.     (q) = __n / __d;                    \
  61.     (r) = __n % __d;                    \
  62.   } while (0)
  63. #else
  64. #define udiv_qrnnd(q, r, n1, n0, d)            \
  65.   do { unsigned int __r;                \
  66.     (q) = __udiv_qrnnd (&__r, (n1), (n0), (d));        \
  67.     (r) = __r;                        \
  68.   } while (0)
  69. extern unsigned long __udiv_qrnnd (unsigned int *, unsigned int,
  70.                    unsigned int , unsigned int);
  71. #endif
  72.  
  73. #define UDIV_NEEDS_NORMALIZATION 0
  74.  
  75. #define abort() return 0
  76.  
  77. #define __BYTE_ORDER __BIG_ENDIAN
  78.