byteorder.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #ifndef _SPARC_BYTEORDER_H
  2. #define _SPARC_BYTEORDER_H
  3. #include <asm/types.h>
  4. #include <asm/asi.h>
  5. #ifdef __GNUC__
  6. #ifdef CONFIG_SPARC32
  7. #define __SWAB_64_THRU_32__
  8. #endif
  9. #ifdef CONFIG_SPARC64
  10. static inline __u16 ___arch__swab16p(const __u16 *addr)
  11. {
  12. __u16 ret;
  13. __asm__ __volatile__ ("lduha [%1] %2, %0"
  14. : "=r" (ret)
  15. : "r" (addr), "i" (ASI_PL));
  16. return ret;
  17. }
  18. static inline __u32 ___arch__swab32p(const __u32 *addr)
  19. {
  20. __u32 ret;
  21. __asm__ __volatile__ ("lduwa [%1] %2, %0"
  22. : "=r" (ret)
  23. : "r" (addr), "i" (ASI_PL));
  24. return ret;
  25. }
  26. static inline __u64 ___arch__swab64p(const __u64 *addr)
  27. {
  28. __u64 ret;
  29. __asm__ __volatile__ ("ldxa [%1] %2, %0"
  30. : "=r" (ret)
  31. : "r" (addr), "i" (ASI_PL));
  32. return ret;
  33. }
  34. #define __arch__swab16p(x) ___arch__swab16p(x)
  35. #define __arch__swab32p(x) ___arch__swab32p(x)
  36. #define __arch__swab64p(x) ___arch__swab64p(x)
  37. #endif /* CONFIG_SPARC64 */
  38. #define __BYTEORDER_HAS_U64__
  39. #endif
  40. #include <linux/byteorder/big_endian.h>
  41. #endif /* _SPARC_BYTEORDER_H */