1 #ifndef __ASM_SH_SWAB_H 2 #define __ASM_SH_SWAB_H 3 4 /* 5 * Copyright (C) 1999 Niibe Yutaka 6 * Copyright (C) 2000, 2001 Paolo Alberelli 7 */ 8 #include <linux/compiler.h> 9 #include <linux/types.h> 10 #include <asm-generic/swab.h> 11 12 static inline __attribute_const__ __u32 __arch_swab32(__u32 x) 13 { 14 __asm__( 15 #ifdef __SH5__ 16 "byterev %1, %0\n\t" 17 "shari %0, 32, %0" 18 #else 19 "swap.b %1, %0\n\t" 20 "swap.w %0, %0\n\t" 21 "swap.b %0, %0" 22 #endif 23 : "=r" (x) 24 : "r" (x)); 25 26 return x; 27 } 28 #define __arch_swab32 __arch_swab32 29 30 static inline __attribute_const__ __u16 __arch_swab16(__u16 x) 31 { 32 __asm__( 33 #ifdef __SH5__ 34 "byterev %1, %0\n\t" 35 "shari %0, 32, %0" 36 #else 37 "swap.b %1, %0" 38 #endif 39 : "=r" (x) 40 : "r" (x)); 41 42 return x; 43 } 44 #define __arch_swab16 __arch_swab16 45 46 static inline __u64 __arch_swab64(__u64 val) 47 { 48 union { 49 struct { __u32 a,b; } s; 50 __u64 u; 51 } v, w; 52 v.u = val; 53 w.s.b = __arch_swab32(v.s.a); 54 w.s.a = __arch_swab32(v.s.b); 55 return w.u; 56 } 57 #define __arch_swab64 __arch_swab64 58 59 #endif /* __ASM_SH_SWAB_H */ 60