/* * 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 */