1 /* 2 * This file is subject to the terms and conditions of the GNU General Public 3 * License. See the file "COPYING" in the main directory of this archive 4 * for more details. 5 * 6 * Copyright (C) 1996, 99, 2003 by Ralf Baechle 7 */ 8 #ifndef _ASM_SWAB_H 9 #define _ASM_SWAB_H 10 11 #include <linux/compiler.h> 12 #include <linux/types.h> 13 14 #define __SWAB_64_THRU_32__ 15 16 #ifdef CONFIG_CPU_MIPSR2 17 18 static inline __attribute_const__ __u16 __arch_swab16(__u16 x) 19 { 20 __asm__( 21 " wsbh %0, %1 \n" 22 : "=r" (x) 23 : "r" (x)); 24 25 return x; 26 } 27 #define __arch_swab16 __arch_swab16 28 29 static inline __attribute_const__ __u32 __arch_swab32(__u32 x) 30 { 31 __asm__( 32 " wsbh %0, %1 \n" 33 " rotr %0, %0, 16 \n" 34 : "=r" (x) 35 : "r" (x)); 36 37 return x; 38 } 39 #define __arch_swab32 __arch_swab32 40 41 /* 42 * Having already checked for CONFIG_CPU_MIPSR2, enable the 43 * optimized version for 64-bit kernel on r2 CPUs. 44 */ 45 #ifdef CONFIG_64BIT 46 static inline __attribute_const__ __u64 __arch_swab64(__u64 x) 47 { 48 __asm__( 49 " dsbh %0, %1\n" 50 " dshd %0, %0" 51 : "=r" (x) 52 : "r" (x)); 53 54 return x; 55 } 56 #define __arch_swab64 __arch_swab64 57 #endif /* CONFIG_64BIT */ 58 #endif /* CONFIG_CPU_MIPSR2 */ 59 #endif /* _ASM_SWAB_H */ 60