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