diff options
Diffstat (limited to 'arch/mips/include/asm/byteorder.h')
| -rw-r--r-- | arch/mips/include/asm/byteorder.h | 75 | 
1 files changed, 75 insertions, 0 deletions
| diff --git a/arch/mips/include/asm/byteorder.h b/arch/mips/include/asm/byteorder.h new file mode 100644 index 000000000..b5e685feb --- /dev/null +++ b/arch/mips/include/asm/byteorder.h @@ -0,0 +1,75 @@ +/* + * 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 <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 */ |