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