1*819833afSPeter Tyser /* 2*819833afSPeter Tyser * This file is subject to the terms and conditions of the GNU General Public 3*819833afSPeter Tyser * License. See the file "COPYING" in the main directory of this archive 4*819833afSPeter Tyser * for more details. 5*819833afSPeter Tyser * 6*819833afSPeter Tyser * Copyright (C) 1996, 99, 2003 by Ralf Baechle 7*819833afSPeter Tyser */ 8*819833afSPeter Tyser #ifndef _ASM_BYTEORDER_H 9*819833afSPeter Tyser #define _ASM_BYTEORDER_H 10*819833afSPeter Tyser 11*819833afSPeter Tyser #include <asm/types.h> 12*819833afSPeter Tyser 13*819833afSPeter Tyser #ifdef __GNUC__ 14*819833afSPeter Tyser 15*819833afSPeter Tyser #ifdef CONFIG_CPU_MIPSR2 16*819833afSPeter Tyser 17*819833afSPeter Tyser static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x) 18*819833afSPeter Tyser { 19*819833afSPeter Tyser __asm__( 20*819833afSPeter Tyser " wsbh %0, %1 \n" 21*819833afSPeter Tyser : "=r" (x) 22*819833afSPeter Tyser : "r" (x)); 23*819833afSPeter Tyser 24*819833afSPeter Tyser return x; 25*819833afSPeter Tyser } 26*819833afSPeter Tyser #define __arch__swab16(x) ___arch__swab16(x) 27*819833afSPeter Tyser 28*819833afSPeter Tyser static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x) 29*819833afSPeter Tyser { 30*819833afSPeter Tyser __asm__( 31*819833afSPeter Tyser " wsbh %0, %1 \n" 32*819833afSPeter Tyser " rotr %0, %0, 16 \n" 33*819833afSPeter Tyser : "=r" (x) 34*819833afSPeter Tyser : "r" (x)); 35*819833afSPeter Tyser 36*819833afSPeter Tyser return x; 37*819833afSPeter Tyser } 38*819833afSPeter Tyser #define __arch__swab32(x) ___arch__swab32(x) 39*819833afSPeter Tyser 40*819833afSPeter Tyser #ifdef CONFIG_CPU_MIPS64_R2 41*819833afSPeter Tyser 42*819833afSPeter Tyser static __inline__ __attribute_const__ __u64 ___arch__swab64(__u64 x) 43*819833afSPeter Tyser { 44*819833afSPeter Tyser __asm__( 45*819833afSPeter Tyser " dsbh %0, %1 \n" 46*819833afSPeter Tyser " dshd %0, %0 \n" 47*819833afSPeter Tyser " drotr %0, %0, 32 \n" 48*819833afSPeter Tyser : "=r" (x) 49*819833afSPeter Tyser : "r" (x)); 50*819833afSPeter Tyser 51*819833afSPeter Tyser return x; 52*819833afSPeter Tyser } 53*819833afSPeter Tyser 54*819833afSPeter Tyser #define __arch__swab64(x) ___arch__swab64(x) 55*819833afSPeter Tyser 56*819833afSPeter Tyser #endif /* CONFIG_CPU_MIPS64_R2 */ 57*819833afSPeter Tyser 58*819833afSPeter Tyser #endif /* CONFIG_CPU_MIPSR2 */ 59*819833afSPeter Tyser 60*819833afSPeter Tyser #if !defined(__STRICT_ANSI__) || defined(__KERNEL__) 61*819833afSPeter Tyser # define __BYTEORDER_HAS_U64__ 62*819833afSPeter Tyser # define __SWAB_64_THRU_32__ 63*819833afSPeter Tyser #endif 64*819833afSPeter Tyser 65*819833afSPeter Tyser #endif /* __GNUC__ */ 66*819833afSPeter Tyser 67*819833afSPeter Tyser #if defined(__MIPSEB__) 68*819833afSPeter Tyser # include <linux/byteorder/big_endian.h> 69*819833afSPeter Tyser #elif defined(__MIPSEL__) 70*819833afSPeter Tyser # include <linux/byteorder/little_endian.h> 71*819833afSPeter Tyser #else 72*819833afSPeter Tyser # error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???" 73*819833afSPeter Tyser #endif 74*819833afSPeter Tyser 75*819833afSPeter Tyser #endif /* _ASM_BYTEORDER_H */ 76