1/* 2 * Copyright 1992, Linus Torvalds. 3 * Copyright 2010 Tilera Corporation. All Rights Reserved. 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License 7 * as published by the Free Software Foundation, version 2. 8 * 9 * This program is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 12 * NON INFRINGEMENT. See the GNU General Public License for 13 * more details. 14 */ 15 16#ifndef _ASM_TILE_BITOPS_H 17#define _ASM_TILE_BITOPS_H 18 19#include <linux/types.h> 20 21#ifndef _LINUX_BITOPS_H 22#error only <linux/bitops.h> can be included directly 23#endif 24 25#ifdef __tilegx__ 26#include <asm/bitops_64.h> 27#else 28#include <asm/bitops_32.h> 29#endif 30 31/** 32 * ffz - find first zero bit in word 33 * @word: The word to search 34 * 35 * Undefined if no zero exists, so code should check against ~0UL first. 36 */ 37static inline unsigned long ffz(unsigned long word) 38{ 39 return __builtin_ctzl(~word); 40} 41 42static inline int fls64(__u64 w) 43{ 44 return (sizeof(__u64) * 8) - __builtin_clzll(w); 45} 46 47/** 48 * fls - find last set bit in word 49 * @x: the word to search 50 * 51 * This is defined in a similar way as the libc and compiler builtin 52 * ffs, but returns the position of the most significant set bit. 53 * 54 * fls(value) returns 0 if value is 0 or the position of the last 55 * set bit if value is nonzero. The last (most significant) bit is 56 * at position 32. 57 */ 58static inline int fls(int x) 59{ 60 return fls64((unsigned int) x); 61} 62 63static inline unsigned int __arch_hweight32(unsigned int w) 64{ 65 return __builtin_popcount(w); 66} 67 68static inline unsigned int __arch_hweight16(unsigned int w) 69{ 70 return __builtin_popcount(w & 0xffff); 71} 72 73static inline unsigned int __arch_hweight8(unsigned int w) 74{ 75 return __builtin_popcount(w & 0xff); 76} 77 78static inline unsigned long __arch_hweight64(__u64 w) 79{ 80 return __builtin_popcountll(w); 81} 82 83#include <asm-generic/bitops/builtin-__ffs.h> 84#include <asm-generic/bitops/builtin-__fls.h> 85#include <asm-generic/bitops/builtin-ffs.h> 86#include <asm-generic/bitops/const_hweight.h> 87#include <asm-generic/bitops/lock.h> 88#include <asm-generic/bitops/find.h> 89#include <asm-generic/bitops/sched.h> 90#include <asm-generic/bitops/non-atomic.h> 91#include <asm-generic/bitops/le.h> 92 93#endif /* _ASM_TILE_BITOPS_H */ 94