Home | History | Annotate | Download | only in asm
      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 #if defined(__mips_isa_rev) && (__mips_isa_rev >= 2)
     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 MIPS R2, enable the optimized version for
     43  * 64-bit kernel on r2 CPUs.
     44  */
     45 #ifdef __mips64
     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 /* __mips64 */
     58 #endif /* MIPS R2 or newer  */
     59 #endif /* _ASM_SWAB_H */
     60