12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- /*
- * Copyright 1992, Linus Torvalds.
- * Copyright 2010 Tilera Corporation. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation, version 2.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT. See the GNU General Public License for
- * more details.
- */
- #ifndef _ASM_TILE_BITOPS_H
- #define _ASM_TILE_BITOPS_H
- #include <linux/types.h>
- #include <asm/barrier.h>
- #ifndef _LINUX_BITOPS_H
- #error only <linux/bitops.h> can be included directly
- #endif
- #ifdef __tilegx__
- #include <asm/bitops_64.h>
- #else
- #include <asm/bitops_32.h>
- #endif
- /**
- * ffz - find first zero bit in word
- * @word: The word to search
- *
- * Undefined if no zero exists, so code should check against ~0UL first.
- */
- static inline unsigned long ffz(unsigned long word)
- {
- return __builtin_ctzl(~word);
- }
- static inline int fls64(__u64 w)
- {
- return (sizeof(__u64) * 8) - __builtin_clzll(w);
- }
- /**
- * fls - find last set bit in word
- * @x: the word to search
- *
- * This is defined in a similar way as the libc and compiler builtin
- * ffs, but returns the position of the most significant set bit.
- *
- * fls(value) returns 0 if value is 0 or the position of the last
- * set bit if value is nonzero. The last (most significant) bit is
- * at position 32.
- */
- static inline int fls(int x)
- {
- return fls64((unsigned int) x);
- }
- static inline unsigned int __arch_hweight32(unsigned int w)
- {
- return __builtin_popcount(w);
- }
- static inline unsigned int __arch_hweight16(unsigned int w)
- {
- return __builtin_popcount(w & 0xffff);
- }
- static inline unsigned int __arch_hweight8(unsigned int w)
- {
- return __builtin_popcount(w & 0xff);
- }
- static inline unsigned long __arch_hweight64(__u64 w)
- {
- return __builtin_popcountll(w);
- }
- #include <asm-generic/bitops/builtin-__ffs.h>
- #include <asm-generic/bitops/builtin-__fls.h>
- #include <asm-generic/bitops/builtin-ffs.h>
- #include <asm-generic/bitops/const_hweight.h>
- #include <asm-generic/bitops/lock.h>
- #include <asm-generic/bitops/find.h>
- #include <asm-generic/bitops/sched.h>
- #include <asm-generic/bitops/non-atomic.h>
- #include <asm-generic/bitops/le.h>
- #endif /* _ASM_TILE_BITOPS_H */
|