2005-04-16 15:20:36 -07:00
/*
* 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
2006-02-01 15:29:21 +00:00
# include <linux/compiler.h>
2005-04-16 15:20:36 -07:00
# include <asm/types.h>
# ifdef __GNUC__
2006-02-01 15:29:21 +00:00
# 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)
2006-02-15 13:06:34 +00:00
# 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 */
2006-02-01 15:29:21 +00:00
# endif /* CONFIG_CPU_MIPSR2 */
2005-04-16 15:20:36 -07:00
# if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
# define __BYTEORDER_HAS_U64__
# define __SWAB_64_THRU_32__
# endif
# endif /* __GNUC__ */
2007-10-11 23:46:15 +01:00
# if defined(__MIPSEB__)
2005-04-16 15:20:36 -07:00
# include <linux / byteorder / big_endian.h>
2007-10-11 23:46:15 +01:00
# elif defined(__MIPSEL__)
2005-04-16 15:20:36 -07:00
# include <linux / byteorder / little_endian.h>
# else
# error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???"
# endif
# endif /* _ASM_BYTEORDER_H */