|  | /* | 
|  | * This file is subject to the terms and conditions of the GNU General Public | 
|  | * License.  See the file "COPYING" in the main directory of this archive | 
|  | * for more details. | 
|  | * | 
|  | * Copyright (C) 1996, 99, 2003 by Ralf Baechle | 
|  | */ | 
|  | #ifndef _ASM_BYTEORDER_H | 
|  | #define _ASM_BYTEORDER_H | 
|  |  | 
|  | #include <linux/compiler.h> | 
|  | #include <asm/types.h> | 
|  |  | 
|  | #ifdef __GNUC__ | 
|  |  | 
|  | #ifdef CONFIG_CPU_MIPSR2 | 
|  |  | 
|  | static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x) | 
|  | { | 
|  | __asm__( | 
|  | "	wsbh	%0, %1			\n" | 
|  | : "=r" (x) | 
|  | : "r" (x)); | 
|  |  | 
|  | return x; | 
|  | } | 
|  | #define __arch__swab16(x)	___arch__swab16(x) | 
|  |  | 
|  | static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x) | 
|  | { | 
|  | __asm__( | 
|  | "	wsbh	%0, %1			\n" | 
|  | "	rotr	%0, %0, 16		\n" | 
|  | : "=r" (x) | 
|  | : "r" (x)); | 
|  |  | 
|  | return x; | 
|  | } | 
|  | #define __arch__swab32(x)	___arch__swab32(x) | 
|  |  | 
|  | #ifdef CONFIG_CPU_MIPS64_R2 | 
|  |  | 
|  | static __inline__ __attribute_const__ __u64 ___arch__swab64(__u64 x) | 
|  | { | 
|  | __asm__( | 
|  | "	dsbh	%0, %1			\n" | 
|  | "	dshd	%0, %0			\n" | 
|  | "	drotr	%0, %0, 32		\n" | 
|  | : "=r" (x) | 
|  | : "r" (x)); | 
|  |  | 
|  | return x; | 
|  | } | 
|  |  | 
|  | #define __arch__swab64(x)	___arch__swab64(x) | 
|  |  | 
|  | #endif /* CONFIG_CPU_MIPS64_R2 */ | 
|  |  | 
|  | #endif /* CONFIG_CPU_MIPSR2 */ | 
|  |  | 
|  | #if !defined(__STRICT_ANSI__) || defined(__KERNEL__) | 
|  | #  define __BYTEORDER_HAS_U64__ | 
|  | #  define __SWAB_64_THRU_32__ | 
|  | #endif | 
|  |  | 
|  | #endif /* __GNUC__ */ | 
|  |  | 
|  | #if defined(__MIPSEB__) | 
|  | #  include <linux/byteorder/big_endian.h> | 
|  | #elif defined(__MIPSEL__) | 
|  | #  include <linux/byteorder/little_endian.h> | 
|  | #else | 
|  | #  error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???" | 
|  | #endif | 
|  |  | 
|  | #endif /* _ASM_BYTEORDER_H */ |