1 1.4 skrll /* $NetBSD: byte_swap.h,v 1.4 2006/02/17 08:23:26 skrll Exp $ */ 2 1.1 dsl 3 1.1 dsl /* Written by Manuel Bouyer. Public domain */ 4 1.1 dsl 5 1.2 skrll #ifndef _SH3_BYTE_SWAP_H_ 6 1.2 skrll #define _SH3_BYTE_SWAP_H_ 7 1.1 dsl 8 1.1 dsl #include <sys/cdefs.h> 9 1.1 dsl 10 1.1 dsl #ifdef __GNUC__ 11 1.1 dsl #include <sys/types.h> 12 1.1 dsl __BEGIN_DECLS 13 1.1 dsl 14 1.1 dsl #define __BYTE_SWAP_U16_VARIABLE __byte_swap_u16_variable 15 1.3 perry static __inline uint16_t 16 1.1 dsl __byte_swap_u16_variable(uint16_t x) 17 1.1 dsl { 18 1.1 dsl uint16_t rval; 19 1.1 dsl 20 1.1 dsl __asm volatile ("swap.b %1,%0" : "=r"(rval) : "r"(x)); 21 1.1 dsl 22 1.1 dsl return (rval); 23 1.1 dsl } 24 1.1 dsl 25 1.1 dsl #define __BYTE_SWAP_U32_VARIABLE __byte_swap_u32_variable 26 1.3 perry static __inline uint32_t 27 1.1 dsl __byte_swap_u32_variable(uint32_t x) 28 1.1 dsl { 29 1.1 dsl uint32_t rval; 30 1.1 dsl 31 1.1 dsl __asm volatile ("swap.b %1,%0; swap.w %0,%0; swap.b %0,%0" 32 1.1 dsl : "=r"(rval) : "r"(x)); 33 1.1 dsl 34 1.1 dsl return (rval); 35 1.1 dsl } 36 1.1 dsl 37 1.1 dsl __END_DECLS 38 1.4 skrll #endif /* __GNUC_ */ 39 1.1 dsl 40 1.2 skrll #endif /* !_SH3_BYPE_SWAP_H_ */ 41