1735ee005SGuo Ren /* SPDX-License-Identifier: GPL-2.0 */ 2735ee005SGuo Ren 3735ee005SGuo Ren #ifndef __ASM_CSKY_BITOPS_H 4735ee005SGuo Ren #define __ASM_CSKY_BITOPS_H 5735ee005SGuo Ren 6735ee005SGuo Ren #include <linux/compiler.h> 7735ee005SGuo Ren #include <asm/barrier.h> 8735ee005SGuo Ren 9735ee005SGuo Ren /* 10735ee005SGuo Ren * asm-generic/bitops/ffs.h 11735ee005SGuo Ren */ ffs(int x)12735ee005SGuo Renstatic inline int ffs(int x) 13735ee005SGuo Ren { 14735ee005SGuo Ren if (!x) 15735ee005SGuo Ren return 0; 16735ee005SGuo Ren 17735ee005SGuo Ren asm volatile ( 18735ee005SGuo Ren "brev %0\n" 19735ee005SGuo Ren "ff1 %0\n" 20735ee005SGuo Ren "addi %0, 1\n" 21735ee005SGuo Ren : "=&r"(x) 22735ee005SGuo Ren : "0"(x)); 23735ee005SGuo Ren return x; 24735ee005SGuo Ren } 25735ee005SGuo Ren 26735ee005SGuo Ren /* 27735ee005SGuo Ren * asm-generic/bitops/__ffs.h 28735ee005SGuo Ren */ __ffs(unsigned long x)29735ee005SGuo Renstatic __always_inline unsigned long __ffs(unsigned long x) 30735ee005SGuo Ren { 31735ee005SGuo Ren asm volatile ( 32735ee005SGuo Ren "brev %0\n" 33735ee005SGuo Ren "ff1 %0\n" 34735ee005SGuo Ren : "=&r"(x) 35735ee005SGuo Ren : "0"(x)); 36735ee005SGuo Ren return x; 37735ee005SGuo Ren } 38735ee005SGuo Ren 39735ee005SGuo Ren /* 40735ee005SGuo Ren * asm-generic/bitops/fls.h 41735ee005SGuo Ren */ fls(unsigned int x)42*3fc2579eSMatthew Wilcoxstatic __always_inline int fls(unsigned int x) 43735ee005SGuo Ren { 44735ee005SGuo Ren asm volatile( 45735ee005SGuo Ren "ff1 %0\n" 46735ee005SGuo Ren : "=&r"(x) 47735ee005SGuo Ren : "0"(x)); 48735ee005SGuo Ren 49735ee005SGuo Ren return (32 - x); 50735ee005SGuo Ren } 51735ee005SGuo Ren 52735ee005SGuo Ren /* 53735ee005SGuo Ren * asm-generic/bitops/__fls.h 54735ee005SGuo Ren */ __fls(unsigned long x)55735ee005SGuo Renstatic __always_inline unsigned long __fls(unsigned long x) 56735ee005SGuo Ren { 57735ee005SGuo Ren return fls(x) - 1; 58735ee005SGuo Ren } 59735ee005SGuo Ren 60735ee005SGuo Ren #include <asm-generic/bitops/ffz.h> 61735ee005SGuo Ren #include <asm-generic/bitops/fls64.h> 62735ee005SGuo Ren 63735ee005SGuo Ren #ifndef _LINUX_BITOPS_H 64735ee005SGuo Ren #error only <linux/bitops.h> can be included directly 65735ee005SGuo Ren #endif 66735ee005SGuo Ren 67735ee005SGuo Ren #include <asm-generic/bitops/sched.h> 68735ee005SGuo Ren #include <asm-generic/bitops/hweight.h> 69735ee005SGuo Ren #include <asm-generic/bitops/lock.h> 70735ee005SGuo Ren #include <asm-generic/bitops/atomic.h> 71735ee005SGuo Ren 72735ee005SGuo Ren /* 73735ee005SGuo Ren * bug fix, why only could use atomic!!!! 74735ee005SGuo Ren */ 75735ee005SGuo Ren #include <asm-generic/bitops/non-atomic.h> 76735ee005SGuo Ren 77735ee005SGuo Ren #include <asm-generic/bitops/le.h> 78735ee005SGuo Ren #include <asm-generic/bitops/ext2-atomic.h> 79735ee005SGuo Ren #endif /* __ASM_CSKY_BITOPS_H */ 80