bitops.h (1326B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2 3#ifndef __ASM_CSKY_BITOPS_H 4#define __ASM_CSKY_BITOPS_H 5 6#include <linux/compiler.h> 7#include <asm/barrier.h> 8 9/* 10 * asm-generic/bitops/ffs.h 11 */ 12static inline int ffs(int x) 13{ 14 if (!x) 15 return 0; 16 17 asm volatile ( 18 "brev %0\n" 19 "ff1 %0\n" 20 "addi %0, 1\n" 21 : "=&r"(x) 22 : "0"(x)); 23 return x; 24} 25 26/* 27 * asm-generic/bitops/__ffs.h 28 */ 29static __always_inline unsigned long __ffs(unsigned long x) 30{ 31 asm volatile ( 32 "brev %0\n" 33 "ff1 %0\n" 34 : "=&r"(x) 35 : "0"(x)); 36 return x; 37} 38 39/* 40 * asm-generic/bitops/fls.h 41 */ 42static __always_inline int fls(unsigned int x) 43{ 44 asm volatile( 45 "ff1 %0\n" 46 : "=&r"(x) 47 : "0"(x)); 48 49 return (32 - x); 50} 51 52/* 53 * asm-generic/bitops/__fls.h 54 */ 55static __always_inline unsigned long __fls(unsigned long x) 56{ 57 return fls(x) - 1; 58} 59 60#include <asm-generic/bitops/ffz.h> 61#include <asm-generic/bitops/fls64.h> 62 63#ifndef _LINUX_BITOPS_H 64#error only <linux/bitops.h> can be included directly 65#endif 66 67#include <asm-generic/bitops/sched.h> 68#include <asm-generic/bitops/hweight.h> 69#include <asm-generic/bitops/lock.h> 70#include <asm-generic/bitops/atomic.h> 71 72/* 73 * bug fix, why only could use atomic!!!! 74 */ 75#include <asm-generic/bitops/non-atomic.h> 76 77#include <asm-generic/bitops/le.h> 78#include <asm-generic/bitops/ext2-atomic.h> 79#endif /* __ASM_CSKY_BITOPS_H */