162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2020-2022 Loongson Technology Corporation Limited 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci#ifndef __LOONGARCH_ASM_BITREV_H__ 662306a36Sopenharmony_ci#define __LOONGARCH_ASM_BITREV_H__ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <linux/swab.h> 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cistatic __always_inline __attribute_const__ u32 __arch_bitrev32(u32 x) 1162306a36Sopenharmony_ci{ 1262306a36Sopenharmony_ci u32 ret; 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci asm("bitrev.4b %0, %1" : "=r"(ret) : "r"(__swab32(x))); 1562306a36Sopenharmony_ci return ret; 1662306a36Sopenharmony_ci} 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistatic __always_inline __attribute_const__ u16 __arch_bitrev16(u16 x) 1962306a36Sopenharmony_ci{ 2062306a36Sopenharmony_ci u16 ret; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci asm("bitrev.4b %0, %1" : "=r"(ret) : "r"(__swab16(x))); 2362306a36Sopenharmony_ci return ret; 2462306a36Sopenharmony_ci} 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cistatic __always_inline __attribute_const__ u8 __arch_bitrev8(u8 x) 2762306a36Sopenharmony_ci{ 2862306a36Sopenharmony_ci u8 ret; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci asm("bitrev.4b %0, %1" : "=r"(ret) : "r"(x)); 3162306a36Sopenharmony_ci return ret; 3262306a36Sopenharmony_ci} 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci#endif /* __LOONGARCH_ASM_BITREV_H__ */ 35