bitrev.h 703 B

12345678910111213141516171819202122232425262728293031323334
  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. #include <linux/swab.h>
  8. static __always_inline __attribute_const__ u32 __arch_bitrev32(u32 x)
  9. {
  10. u32 ret;
  11. asm("bitrev.4b %0, %1" : "=r"(ret) : "r"(__swab32(x)));
  12. return ret;
  13. }
  14. static __always_inline __attribute_const__ u16 __arch_bitrev16(u16 x)
  15. {
  16. u16 ret;
  17. asm("bitrev.4b %0, %1" : "=r"(ret) : "r"(__swab16(x)));
  18. return ret;
  19. }
  20. static __always_inline __attribute_const__ u8 __arch_bitrev8(u8 x)
  21. {
  22. u8 ret;
  23. asm("bitrev.4b %0, %1" : "=r"(ret) : "r"(x));
  24. return ret;
  25. }
  26. #endif /* __LOONGARCH_ASM_BITREV_H__ */