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