1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
4 */
5#ifndef __LOONGARCH_ASM_BITREV_H__
6#define __LOONGARCH_ASM_BITREV_H__
7
8#include <linux/swab.h>
9
10static __always_inline __attribute_const__ u32 __arch_bitrev32(u32 x)
11{
12	u32 ret;
13
14	asm("bitrev.4b	%0, %1" : "=r"(ret) : "r"(__swab32(x)));
15	return ret;
16}
17
18static __always_inline __attribute_const__ u16 __arch_bitrev16(u16 x)
19{
20	u16 ret;
21
22	asm("bitrev.4b	%0, %1" : "=r"(ret) : "r"(__swab16(x)));
23	return ret;
24}
25
26static __always_inline __attribute_const__ u8 __arch_bitrev8(u8 x)
27{
28	u8 ret;
29
30	asm("bitrev.4b	%0, %1" : "=r"(ret) : "r"(x));
31	return ret;
32}
33
34#endif /* __LOONGARCH_ASM_BITREV_H__ */
35