Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v5.5-rc2 46 lines 1.1 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * linux/arch/unicore32/include/asm/bitops.h 4 * 5 * Code specific to PKUnity SoC and UniCore ISA 6 * 7 * Copyright (C) 2001-2010 GUAN Xue-tao 8 */ 9 10#ifndef __UNICORE_BITOPS_H__ 11#define __UNICORE_BITOPS_H__ 12 13#define _ASM_GENERIC_BITOPS_FLS_H_ 14#define _ASM_GENERIC_BITOPS___FLS_H_ 15#define _ASM_GENERIC_BITOPS_FFS_H_ 16#define _ASM_GENERIC_BITOPS___FFS_H_ 17/* 18 * On UNICORE, those functions can be implemented around 19 * the cntlz instruction for much better code efficiency. 20 */ 21 22static inline int fls(unsigned int x) 23{ 24 int ret; 25 26 asm("cntlz\t%0, %1" : "=r" (ret) : "r" (x) : "cc"); 27 ret = 32 - ret; 28 29 return ret; 30} 31 32#define __fls(x) (fls(x) - 1) 33#define ffs(x) ({ unsigned long __t = (x); fls(__t & -__t); }) 34#define __ffs(x) (ffs(x) - 1) 35 36#include <asm-generic/bitops.h> 37 38/* following definitions: to avoid using codes in lib/find_*.c */ 39#define find_next_bit find_next_bit 40#define find_next_zero_bit find_next_zero_bit 41#define find_first_bit find_first_bit 42#define find_first_zero_bit find_first_zero_bit 43 44#include <asm-generic/bitops/find.h> 45 46#endif /* __UNICORE_BITOPS_H__ */