aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/include/odp/byteorder.h
blob: 173b0475dcb9c4c87154e1c80dc83af0f6c40d52 (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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/* Copyright (c) 2014, Linaro Limited
 * All rights reserved.
 *
 * SPDX-License-Identifier:     BSD-3-Clause
 */

/**
 * @file
 *
 * ODP byteorder
 */

#ifndef ODP_PLAT_BYTEORDER_H_
#define ODP_PLAT_BYTEORDER_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <endian.h>
#include <asm/byteorder.h>
#include <odp/plat/byteorder_types.h>
#include <odp/std_types.h>
#include <odp/compiler.h>

/** @ingroup odp_compiler_optim
 *  @{
 */

static inline uint16_t odp_be_to_cpu_16(uint16be_t be16)
{
#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
	return __odp_builtin_bswap16((__odp_force uint16_t)be16);
#else
	return (__odp_force uint16_t)be16;
#endif
}

static inline uint32_t odp_be_to_cpu_32(uint32be_t be32)
{
#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
	return __builtin_bswap32((__odp_force uint32_t)be32);
#else
	return (__odp_force uint32_t)be32;
#endif
}

static inline uint64_t odp_be_to_cpu_64(uint64be_t be64)
{
#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
	return __builtin_bswap64((__odp_force uint64_t)be64);
#else
	return (__odp_force uint64_t)be64;
#endif
}


static inline uint16be_t odp_cpu_to_be_16(uint16_t cpu16)
{
#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
	return (__odp_force uint16be_t)__odp_builtin_bswap16(cpu16);
#else
	return (__odp_force uint16be_t)cpu16;
#endif
}

static inline uint32be_t odp_cpu_to_be_32(uint32_t cpu32)
{
#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
	return (__odp_force uint32be_t)__builtin_bswap32(cpu32);
#else
	return (__odp_force uint32be_t)cpu32;
#endif
}

static inline uint64be_t odp_cpu_to_be_64(uint64_t cpu64)
{
#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
	return (__odp_force uint64be_t)__builtin_bswap64(cpu64);
#else
	return (__odp_force uint64be_t)cpu64;
#endif
}


static inline uint16_t odp_le_to_cpu_16(uint16le_t le16)
{
#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
	return (__odp_force uint16_t)le16;
#else
	return __odp_builtin_bswap16((__odp_force uint16_t)le16);
#endif
}

static inline uint32_t odp_le_to_cpu_32(uint32le_t le32)
{
#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
	return (__odp_force uint32_t)le32;
#else
	return __builtin_bswap32((__odp_force uint32_t)le32);
#endif
}

static inline uint64_t odp_le_to_cpu_64(uint64le_t le64)
{
#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
	return (__odp_force uint64_t)le64;
#else
	return __builtin_bswap64((__odp_force uint64_t)le64);
#endif
}


static inline uint16le_t odp_cpu_to_le_16(uint16_t cpu16)
{
#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
	return (__odp_force uint16le_t)cpu16;
#else
	return (__odp_force uint16le_t)__odp_builtin_bswap16(cpu16);
#endif
}

static inline uint32le_t odp_cpu_to_le_32(uint32_t cpu32)
{
#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
	return (__odp_force uint32le_t)cpu32;
#else
	return (__odp_force uint32le_t)__builtin_bswap32(cpu32);
#endif
}

static inline uint64le_t odp_cpu_to_le_64(uint64_t cpu64)
{
#if ODP_BYTE_ORDER == ODP_LITTLE_ENDIAN
	return (__odp_force uint64le_t)cpu64;
#else
	return (__odp_force uint64le_t)__builtin_bswap64(cpu64);
#endif
}

/**
 * @}
 */

#include <odp/api/byteorder.h>

#ifdef __cplusplus
}
#endif

#endif