1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0 */
2819833afSPeter Tyser /*
3819833afSPeter Tyser * Copyright (C) 1996, 99, 2003 by Ralf Baechle
4819833afSPeter Tyser */
5819833afSPeter Tyser #ifndef _ASM_BYTEORDER_H
6819833afSPeter Tyser #define _ASM_BYTEORDER_H
7819833afSPeter Tyser
8819833afSPeter Tyser #include <asm/types.h>
9819833afSPeter Tyser
10819833afSPeter Tyser #ifdef __GNUC__
11819833afSPeter Tyser
12819833afSPeter Tyser #ifdef CONFIG_CPU_MIPSR2
13819833afSPeter Tyser
___arch__swab16(__u16 x)14819833afSPeter Tyser static __inline__ __attribute_const__ __u16 ___arch__swab16(__u16 x)
15819833afSPeter Tyser {
16819833afSPeter Tyser __asm__(
17819833afSPeter Tyser " wsbh %0, %1 \n"
18819833afSPeter Tyser : "=r" (x)
19819833afSPeter Tyser : "r" (x));
20819833afSPeter Tyser
21819833afSPeter Tyser return x;
22819833afSPeter Tyser }
23819833afSPeter Tyser #define __arch__swab16(x) ___arch__swab16(x)
24819833afSPeter Tyser
___arch__swab32(__u32 x)25819833afSPeter Tyser static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x)
26819833afSPeter Tyser {
27819833afSPeter Tyser __asm__(
28819833afSPeter Tyser " wsbh %0, %1 \n"
29819833afSPeter Tyser " rotr %0, %0, 16 \n"
30819833afSPeter Tyser : "=r" (x)
31819833afSPeter Tyser : "r" (x));
32819833afSPeter Tyser
33819833afSPeter Tyser return x;
34819833afSPeter Tyser }
35819833afSPeter Tyser #define __arch__swab32(x) ___arch__swab32(x)
36819833afSPeter Tyser
37819833afSPeter Tyser #ifdef CONFIG_CPU_MIPS64_R2
38819833afSPeter Tyser
___arch__swab64(__u64 x)39819833afSPeter Tyser static __inline__ __attribute_const__ __u64 ___arch__swab64(__u64 x)
40819833afSPeter Tyser {
41819833afSPeter Tyser __asm__(
42819833afSPeter Tyser " dsbh %0, %1 \n"
43819833afSPeter Tyser " dshd %0, %0 \n"
44819833afSPeter Tyser " drotr %0, %0, 32 \n"
45819833afSPeter Tyser : "=r" (x)
46819833afSPeter Tyser : "r" (x));
47819833afSPeter Tyser
48819833afSPeter Tyser return x;
49819833afSPeter Tyser }
50819833afSPeter Tyser
51819833afSPeter Tyser #define __arch__swab64(x) ___arch__swab64(x)
52819833afSPeter Tyser
53819833afSPeter Tyser #endif /* CONFIG_CPU_MIPS64_R2 */
54819833afSPeter Tyser
55819833afSPeter Tyser #endif /* CONFIG_CPU_MIPSR2 */
56819833afSPeter Tyser
57819833afSPeter Tyser #if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
58819833afSPeter Tyser # define __BYTEORDER_HAS_U64__
59819833afSPeter Tyser # define __SWAB_64_THRU_32__
60819833afSPeter Tyser #endif
61819833afSPeter Tyser
62819833afSPeter Tyser #endif /* __GNUC__ */
63819833afSPeter Tyser
64819833afSPeter Tyser #if defined(__MIPSEB__)
65819833afSPeter Tyser # include <linux/byteorder/big_endian.h>
66819833afSPeter Tyser #elif defined(__MIPSEL__)
67819833afSPeter Tyser # include <linux/byteorder/little_endian.h>
68819833afSPeter Tyser #else
69819833afSPeter Tyser # error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???"
70819833afSPeter Tyser #endif
71819833afSPeter Tyser
72819833afSPeter Tyser #endif /* _ASM_BYTEORDER_H */
73