xref: /rk3399_rockchip-uboot/arch/mips/include/asm/byteorder.h (revision b57843e68804c2d53d2cff2b8b2238e37b388faa)
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