at v2.6.16-rc4 59 lines 1.2 kB view raw
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_BYTEORDER_H 9#define _ASM_BYTEORDER_H 10 11#include <linux/config.h> 12#include <linux/compiler.h> 13#include <asm/types.h> 14 15#ifdef __GNUC__ 16 17#ifdef CONFIG_CPU_MIPSR2 18 19static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x) 20{ 21 __asm__( 22 " wsbh %0, %1 \n" 23 : "=r" (x) 24 : "r" (x)); 25 26 return x; 27} 28#define __arch__swab16(x) ___arch__swab16(x) 29 30static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x) 31{ 32 __asm__( 33 " wsbh %0, %1 \n" 34 " rotr %0, %0, 16 \n" 35 : "=r" (x) 36 : "r" (x)); 37 38 return x; 39} 40#define __arch__swab32(x) ___arch__swab32(x) 41 42#endif /* CONFIG_CPU_MIPSR2 */ 43 44#if !defined(__STRICT_ANSI__) || defined(__KERNEL__) 45# define __BYTEORDER_HAS_U64__ 46# define __SWAB_64_THRU_32__ 47#endif 48 49#endif /* __GNUC__ */ 50 51#if defined (__MIPSEB__) 52# include <linux/byteorder/big_endian.h> 53#elif defined (__MIPSEL__) 54# include <linux/byteorder/little_endian.h> 55#else 56# error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???" 57#endif 58 59#endif /* _ASM_BYTEORDER_H */