~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/sh/math-emu/sfp-util.h

Version: ~ [ linux-5.7 ] ~ [ linux-5.6.15 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.43 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.125 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.182 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.225 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.225 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.84 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * These are copied from glibc/stdlib/longlong.h
  3  */
  4 
  5 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
  6   do {                                                                  \
  7     UWtype __x;                                                         \
  8     __x = (al) + (bl);                                                  \
  9     (sh) = (ah) + (bh) + (__x < (al));                                  \
 10     (sl) = __x;                                                         \
 11   } while (0)
 12 
 13 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
 14   do {                                                                  \
 15     UWtype __x;                                                         \
 16     __x = (al) - (bl);                                                  \
 17     (sh) = (ah) - (bh) - (__x > (al));                                  \
 18     (sl) = __x;                                                         \
 19   } while (0)
 20 
 21 #define umul_ppmm(w1, w0, u, v) \
 22   __asm__ ("dmulu.l %2,%3\n\tsts    macl,%1\n\tsts  mach,%0"    \
 23         : "=r" ((u32)(w1)), "=r" ((u32)(w0))    \
 24         :  "r" ((u32)(u)),   "r" ((u32)(v))     \
 25         : "macl", "mach")
 26 
 27 #define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2))
 28 #define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1))
 29 #define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2))
 30 
 31 #define udiv_qrnnd(q, r, n1, n0, d) \
 32   do {                                                                  \
 33     UWtype __d1, __d0, __q1, __q0;                                      \
 34     UWtype __r1, __r0, __m;                                             \
 35     __d1 = __ll_highpart (d);                                           \
 36     __d0 = __ll_lowpart (d);                                            \
 37                                                                         \
 38     __r1 = (n1) % __d1;                                                 \
 39     __q1 = (n1) / __d1;                                                 \
 40     __m = (UWtype) __q1 * __d0;                                         \
 41     __r1 = __r1 * __ll_B | __ll_highpart (n0);                          \
 42     if (__r1 < __m)                                                     \
 43       {                                                                 \
 44         __q1--, __r1 += (d);                                            \
 45         if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
 46           if (__r1 < __m)                                               \
 47             __q1--, __r1 += (d);                                        \
 48       }                                                                 \
 49     __r1 -= __m;                                                        \
 50                                                                         \
 51     __r0 = __r1 % __d1;                                                 \
 52     __q0 = __r1 / __d1;                                                 \
 53     __m = (UWtype) __q0 * __d0;                                         \
 54     __r0 = __r0 * __ll_B | __ll_lowpart (n0);                           \
 55     if (__r0 < __m)                                                     \
 56       {                                                                 \
 57         __q0--, __r0 += (d);                                            \
 58         if (__r0 >= (d))                                                \
 59           if (__r0 < __m)                                               \
 60             __q0--, __r0 += (d);                                        \
 61       }                                                                 \
 62     __r0 -= __m;                                                        \
 63                                                                         \
 64     (q) = (UWtype) __q1 * __ll_B | __q0;                                \
 65     (r) = __r0;                                                         \
 66   } while (0)
 67 
 68 #define abort() return 0
 69 
 70 #define __BYTE_ORDER __LITTLE_ENDIAN
 71 
 72 
 73 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp