aboutsummaryrefslogtreecommitdiff
path: root/arch/all/core-sh/bits/byteswap.h
blob: 358a9b38175e4412d8144b28b01e553abfde4e21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#define __BYTESWAP_SUB16
#define __BYTESWAP_SUB32

#if __RENESAS_PREREQ(9, 4)
# define __bswap_16(_X) _builtin_swapb(_X)
# define __bswap_32(_X) _builtin_swapb(_builtin_swapw(_builtin_swapb(_X)))

#elif __GNUC_ASM
static __asm_inline __uint16_t __byteswap_swapb(__uint16_t __data) {
	uint16_t __res; asm("swap.b %1, %0":"=r"(__res):"r"(__data));
	return (__res); }
static __asm_inline __uint32_t __byteswap_swapw(__uint32_t __data) {
	uint32_t __res; asm("swap.w %1, %0":"=r"(__res):"r"(__data));
	return (__res); }

# define __bswap_16(_X) __byteswap_swapb(_X)
# define __bswap_32(_X) \
	__byteswap_swapb(__byteswap_swapw(__byteswap_swapb(_X)))

#elif __GNUC_PREREQ(4, 3)
# define __bswap_16(_X) __builtin_bswap16(_X)
# define __bswap_32(_X) __builtin_bswap32(_X)

#endif