xref: /openbmc/u-boot/arch/mips/include/asm/byteorder.h (revision e8f80a5a)
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