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 / sh / include / asm / bitops.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.4 KB  |  106 lines

  1. #ifndef __ASM_SH_BITOPS_H
  2. #define __ASM_SH_BITOPS_H
  3.  
  4. #ifdef __KERNEL__
  5.  
  6. #ifndef _LINUX_BITOPS_H
  7. #error only <linux/bitops.h> can be included directly
  8. #endif
  9.  
  10. #include <asm/system.h>
  11. /* For __swab32 */
  12. #include <asm/byteorder.h>
  13.  
  14. #ifdef CONFIG_GUSA_RB
  15. #include <asm/bitops-grb.h>
  16. #elif defined(CONFIG_CPU_SH4A)
  17. #include <asm/bitops-llsc.h>
  18. #else
  19. #include <asm/bitops-irq.h>
  20. #endif
  21.  
  22.  
  23. /*
  24.  * clear_bit() doesn't provide any barrier for the compiler.
  25.  */
  26. #define smp_mb__before_clear_bit()    barrier()
  27. #define smp_mb__after_clear_bit()    barrier()
  28.  
  29. #include <asm-generic/bitops/non-atomic.h>
  30.  
  31. #ifdef CONFIG_SUPERH32
  32. static inline unsigned long ffz(unsigned long word)
  33. {
  34.     unsigned long result;
  35.  
  36.     __asm__("1:\n\t"
  37.         "shlr    %1\n\t"
  38.         "bt/s    1b\n\t"
  39.         " add    #1, %0"
  40.         : "=r" (result), "=r" (word)
  41.         : "0" (~0L), "1" (word)
  42.         : "t");
  43.     return result;
  44. }
  45.  
  46. /**
  47.  * __ffs - find first bit in word.
  48.  * @word: The word to search
  49.  *
  50.  * Undefined if no bit exists, so code should check against 0 first.
  51.  */
  52. static inline unsigned long __ffs(unsigned long word)
  53. {
  54.     unsigned long result;
  55.  
  56.     __asm__("1:\n\t"
  57.         "shlr    %1\n\t"
  58.         "bf/s    1b\n\t"
  59.         " add    #1, %0"
  60.         : "=r" (result), "=r" (word)
  61.         : "0" (~0L), "1" (word)
  62.         : "t");
  63.     return result;
  64. }
  65. #else
  66. static inline unsigned long ffz(unsigned long word)
  67. {
  68.     unsigned long result, __d2, __d3;
  69.  
  70.         __asm__("gettr  tr0, %2\n\t"
  71.                 "pta    $+32, tr0\n\t"
  72.                 "andi   %1, 1, %3\n\t"
  73.                 "beq    %3, r63, tr0\n\t"
  74.                 "pta    $+4, tr0\n"
  75.                 "0:\n\t"
  76.                 "shlri.l        %1, 1, %1\n\t"
  77.                 "addi   %0, 1, %0\n\t"
  78.                 "andi   %1, 1, %3\n\t"
  79.                 "beqi   %3, 1, tr0\n"
  80.                 "1:\n\t"
  81.                 "ptabs  %2, tr0\n\t"
  82.                 : "=r" (result), "=r" (word), "=r" (__d2), "=r" (__d3)
  83.                 : "0" (0L), "1" (word));
  84.  
  85.     return result;
  86. }
  87.  
  88. #include <asm-generic/bitops/__ffs.h>
  89. #endif
  90.  
  91. #include <asm-generic/bitops/find.h>
  92. #include <asm-generic/bitops/ffs.h>
  93. #include <asm-generic/bitops/hweight.h>
  94. #include <asm-generic/bitops/lock.h>
  95. #include <asm-generic/bitops/sched.h>
  96. #include <asm-generic/bitops/ext2-non-atomic.h>
  97. #include <asm-generic/bitops/ext2-atomic.h>
  98. #include <asm-generic/bitops/minix.h>
  99. #include <asm-generic/bitops/fls.h>
  100. #include <asm-generic/bitops/__fls.h>
  101. #include <asm-generic/bitops/fls64.h>
  102.  
  103. #endif /* __KERNEL__ */
  104.  
  105. #endif /* __ASM_SH_BITOPS_H */
  106.