aboutsummaryrefslogtreecommitdiffstats
path: root/src/endian.h
blob: a4862235434b057fbf79a6d6d36c7cf0a0633715 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef L2SU_ENDIAN_H_INCLUDED
#define L2SU_ENDIAN_H_INCLUDED

#include <stdint.h>
#include "config.h"

uint64_t l2__bswap_64_int(uint64_t in);
uint32_t l2__bswap_32_int(uint32_t in);
uint16_t l2__bswap_16_int(uint16_t in);

#ifdef __GNUC__
#define l2__bswap_64 __builtin_bswap64
#define l2__bswap_32 __builtin_bswap32
#define l2__bswap_16 __builtin_bswap16
#else
#define l2__bswap_64 l2__bswap_64_int
#define l2__bswap_32 l2__bswap_32_int
#define l2__bswap_16 l2__bswap_16_int
#endif

#if defined(L2SU_ENDIAN_LITTLE)

#define l2_htobe64 l2__bswap_64
#define l2_betoh64 l2__bswap_64
#define l2_htobe32 l2__bswap_32
#define l2_betoh32 l2__bswap_32
#define l2_htobe16 l2__bswap_16
#define l2_betoh16 l2__bswap_16

#elif defined(L2SU_ENDIAN_BIG)

#define l2_htobe64
#define l2_betoh64
#define l2_htobe32
#define l2_betoh32
#define l2_htobe16
#define l2_betoh16

#else
#error "middle endian unsupported"
#endif

#endif /* include guard */