1*8e7a4cefSYalin Wang #ifndef __ASM_BITREV_H 2*8e7a4cefSYalin Wang #define __ASM_BITREV_H 3*8e7a4cefSYalin Wang static __always_inline __attribute_const__ u32 __arch_bitrev32(u32 x) 4*8e7a4cefSYalin Wang { 5*8e7a4cefSYalin Wang __asm__ ("rbit %w0, %w1" : "=r" (x) : "r" (x)); 6*8e7a4cefSYalin Wang return x; 7*8e7a4cefSYalin Wang } 8*8e7a4cefSYalin Wang 9*8e7a4cefSYalin Wang static __always_inline __attribute_const__ u16 __arch_bitrev16(u16 x) 10*8e7a4cefSYalin Wang { 11*8e7a4cefSYalin Wang return __arch_bitrev32((u32)x) >> 16; 12*8e7a4cefSYalin Wang } 13*8e7a4cefSYalin Wang 14*8e7a4cefSYalin Wang static __always_inline __attribute_const__ u8 __arch_bitrev8(u8 x) 15*8e7a4cefSYalin Wang { 16*8e7a4cefSYalin Wang return __arch_bitrev32((u32)x) >> 24; 17*8e7a4cefSYalin Wang } 18*8e7a4cefSYalin Wang 19*8e7a4cefSYalin Wang #endif 20