1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef __MIPS_ASM_BITREV_H__ 3*4882a593Smuzhiyun #define __MIPS_ASM_BITREV_H__ 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/swab.h> 6*4882a593Smuzhiyun __arch_bitrev32(u32 x)7*4882a593Smuzhiyunstatic __always_inline __attribute_const__ u32 __arch_bitrev32(u32 x) 8*4882a593Smuzhiyun { 9*4882a593Smuzhiyun u32 ret; 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun asm("bitswap %0, %1" : "=r"(ret) : "r"(__swab32(x))); 12*4882a593Smuzhiyun return ret; 13*4882a593Smuzhiyun } 14*4882a593Smuzhiyun __arch_bitrev16(u16 x)15*4882a593Smuzhiyunstatic __always_inline __attribute_const__ u16 __arch_bitrev16(u16 x) 16*4882a593Smuzhiyun { 17*4882a593Smuzhiyun u16 ret; 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun asm("bitswap %0, %1" : "=r"(ret) : "r"(__swab16(x))); 20*4882a593Smuzhiyun return ret; 21*4882a593Smuzhiyun } 22*4882a593Smuzhiyun __arch_bitrev8(u8 x)23*4882a593Smuzhiyunstatic __always_inline __attribute_const__ u8 __arch_bitrev8(u8 x) 24*4882a593Smuzhiyun { 25*4882a593Smuzhiyun u8 ret; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun asm("bitswap %0, %1" : "=r"(ret) : "r"(x)); 28*4882a593Smuzhiyun return ret; 29*4882a593Smuzhiyun } 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #endif /* __MIPS_ASM_BITREV_H__ */ 32