1 /* $Id: byteorder.h,v 1.8 1997/12/18 02:44:14 ecd Exp $ */
2 #ifndef _SPARC64_BYTEORDER_H
3 #define _SPARC64_BYTEORDER_H
4 
5 #include <asm/types.h>
6 #include <asm/asi.h>
7 
8 #ifdef __GNUC__
9 
___arch__swab16p(__u16 * addr)10 static __inline__ __u16 ___arch__swab16p(__u16 *addr)
11 {
12 	__u16 ret;
13 
14 	__asm__ __volatile__ ("lduha [%1] %2, %0"
15 			      : "=r" (ret)
16 			      : "r" (addr), "i" (ASI_PL));
17 	return ret;
18 }
19 
___arch__swab32p(__u32 * addr)20 static __inline__ __u32 ___arch__swab32p(__u32 *addr)
21 {
22 	__u32 ret;
23 
24 	__asm__ __volatile__ ("lduwa [%1] %2, %0"
25 			      : "=r" (ret)
26 			      : "r" (addr), "i" (ASI_PL));
27 	return ret;
28 }
29 
___arch__swab64p(__u64 * addr)30 static __inline__ __u64 ___arch__swab64p(__u64 *addr)
31 {
32 	__u64 ret;
33 
34 	__asm__ __volatile__ ("ldxa [%1] %2, %0"
35 			      : "=r" (ret)
36 			      : "r" (addr), "i" (ASI_PL));
37 	return ret;
38 }
39 
40 #define __arch__swab16p(x) ___arch__swab16p(x)
41 #define __arch__swab32p(x) ___arch__swab32p(x)
42 #define __arch__swab64p(x) ___arch__swab64p(x)
43 
44 #define __BYTEORDER_HAS_U64__
45 
46 #endif /* __GNUC__ */
47 
48 #include <linux/byteorder/big_endian.h>
49 
50 #endif /* _SPARC64_BYTEORDER_H */
51