1#ifndef __ASM_SH_BYTEORDER_H 2#define __ASM_SH_BYTEORDER_H 3 4/* 5 * Copyright (C) 1999 Niibe Yutaka 6 */ 7 8#include <asm/types.h> 9#include <linux/compiler.h> 10 11static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x) 12{ 13 __asm__("swap.b %0, %0\n\t" 14 "swap.w %0, %0\n\t" 15 "swap.b %0, %0" 16 : "=r" (x) 17 : "0" (x)); 18 return x; 19} 20 21static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x) 22{ 23 __asm__("swap.b %0, %0" 24 : "=r" (x) 25 : "0" (x)); 26 return x; 27} 28 29static inline __u64 ___arch__swab64(__u64 val) 30{ 31 union { 32 struct { __u32 a,b; } s; 33 __u64 u; 34 } v, w; 35 v.u = val; 36 w.s.b = ___arch__swab32(v.s.a); 37 w.s.a = ___arch__swab32(v.s.b); 38 return w.u; 39} 40 41#define __arch__swab64(x) ___arch__swab64(x) 42#define __arch__swab32(x) ___arch__swab32(x) 43#define __arch__swab16(x) ___arch__swab16(x) 44 45#if !defined(__STRICT_ANSI__) || defined(__KERNEL__) 46# define __BYTEORDER_HAS_U64__ 47# define __SWAB_64_THRU_32__ 48#endif 49 50#ifdef __LITTLE_ENDIAN__ 51#include <linux/byteorder/little_endian.h> 52#else 53#include <linux/byteorder/big_endian.h> 54#endif 55 56#endif /* __ASM_SH_BYTEORDER_H */ 57