xref: /netbsd/sys/arch/sh3/include/bswap.h (revision bf9ec67e)
1 /*      $NetBSD: bswap.h,v 1.4 2002/04/28 17:10:33 uch Exp $      */
2 
3 /* Written by Manuel Bouyer. Public domain */
4 
5 #ifndef _SH3_BSWAP_H_
6 #define	_SH3_BSWAP_H_
7 
8 #include <sys/cdefs.h>
9 
10 #ifndef _KERNEL
11 
12 __BEGIN_DECLS
13 u_int16_t bswap16(u_int16_t);
14 u_int32_t bswap32(u_int32_t);
15 u_int64_t bswap64(u_int64_t);
16 __END_DECLS
17 
18 #else /* _KERNEL */
19 
20 __BEGIN_DECLS
21 static __inline u_int16_t bswap16(u_int16_t);
22 static __inline u_int32_t bswap32(u_int32_t);
23 u_int64_t bswap64(u_int64_t);
24 __END_DECLS
25 
26 static __inline u_int16_t
27 bswap16(u_int16_t x)
28 {
29 	u_int16_t rval;
30 
31 	__asm __volatile ("swap.b %1,%0" : "=r"(rval) : "r"(x));
32 
33 	return (rval);
34 }
35 
36 static __inline u_int32_t
37 bswap32(u_int32_t x)
38 {
39 	u_int32_t rval;
40 
41 	__asm __volatile ("swap.b %1,%0; swap.w %0,%0; swap.b %0,%0"
42 			  : "=r"(rval) : "r"(x));
43 
44 	return (rval);
45 }
46 #endif /* _KERNEL */
47 
48 #endif /* !_SH3_BSWAP_H_ */
49