mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
bitops: Define generic___bitrev8/16/32 for reuse
Define generic___bitrev8/16/32 using the implementation in <linux/bitrev.h>, so they can be reused in <asm/bitrev.h>, such as RISCV. Reviewed-by: Yury Norov <ynorov@nvidia.com> Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com> Signed-off-by: Yury Norov <ynorov@nvidia.com>
This commit is contained in:
parent
00751d655e
commit
83aede8131
23
include/asm-generic/bitops/__bitrev.h
Normal file
23
include/asm-generic/bitops/__bitrev.h
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _ASM_GENERIC_BITOPS___BITREV_H_
|
||||
#define _ASM_GENERIC_BITOPS___BITREV_H_
|
||||
|
||||
#include <asm/types.h>
|
||||
|
||||
extern u8 const byte_rev_table[256];
|
||||
static __always_inline __attribute_const__ u8 generic___bitrev8(u8 byte)
|
||||
{
|
||||
return byte_rev_table[byte];
|
||||
}
|
||||
|
||||
static __always_inline __attribute_const__ u16 generic___bitrev16(u16 x)
|
||||
{
|
||||
return (generic___bitrev8(x & 0xff) << 8) | generic___bitrev8(x >> 8);
|
||||
}
|
||||
|
||||
static __always_inline __attribute_const__ u32 generic___bitrev32(u32 x)
|
||||
{
|
||||
return (generic___bitrev16(x & 0xffff) << 16) | generic___bitrev16(x >> 16);
|
||||
}
|
||||
|
||||
#endif /* _ASM_GENERIC_BITOPS___BITREV_H_ */
|
||||
|
|
@ -12,22 +12,10 @@
|
|||
#define __bitrev8 __arch_bitrev8
|
||||
|
||||
#else
|
||||
extern u8 const byte_rev_table[256];
|
||||
static inline u8 __bitrev8(u8 byte)
|
||||
{
|
||||
return byte_rev_table[byte];
|
||||
}
|
||||
|
||||
static inline u16 __bitrev16(u16 x)
|
||||
{
|
||||
return (__bitrev8(x & 0xff) << 8) | __bitrev8(x >> 8);
|
||||
}
|
||||
|
||||
static inline u32 __bitrev32(u32 x)
|
||||
{
|
||||
return (__bitrev16(x & 0xffff) << 16) | __bitrev16(x >> 16);
|
||||
}
|
||||
|
||||
#include <asm-generic/bitops/__bitrev.h>
|
||||
#define __bitrev32 generic___bitrev32
|
||||
#define __bitrev16 generic___bitrev16
|
||||
#define __bitrev8 generic___bitrev8
|
||||
#endif /* CONFIG_HAVE_ARCH_BITREVERSE */
|
||||
|
||||
#define __bitrev8x4(x) (__bitrev32(swab32(x)))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user