xref: /OK3568_Linux_fs/kernel/arch/arm64/include/asm/bitrev.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #ifndef __ASM_BITREV_H
3*4882a593Smuzhiyun #define __ASM_BITREV_H
__arch_bitrev32(u32 x)4*4882a593Smuzhiyun static __always_inline __attribute_const__ u32 __arch_bitrev32(u32 x)
5*4882a593Smuzhiyun {
6*4882a593Smuzhiyun 	__asm__ ("rbit %w0, %w1" : "=r" (x) : "r" (x));
7*4882a593Smuzhiyun 	return x;
8*4882a593Smuzhiyun }
9*4882a593Smuzhiyun 
__arch_bitrev16(u16 x)10*4882a593Smuzhiyun static __always_inline __attribute_const__ u16 __arch_bitrev16(u16 x)
11*4882a593Smuzhiyun {
12*4882a593Smuzhiyun 	return __arch_bitrev32((u32)x) >> 16;
13*4882a593Smuzhiyun }
14*4882a593Smuzhiyun 
__arch_bitrev8(u8 x)15*4882a593Smuzhiyun static __always_inline __attribute_const__ u8 __arch_bitrev8(u8 x)
16*4882a593Smuzhiyun {
17*4882a593Smuzhiyun 	return __arch_bitrev32((u32)x) >> 24;
18*4882a593Smuzhiyun }
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #endif
21