sfp-util.h 1.9 KB

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