Monado OpenXR Runtime
xrt_byte_order.h
Go to the documentation of this file.
1// Copyright 2025, Beyley Cardellio
2// SPDX-License-Identifier: BSL-1.0
3/*!
4 * @file
5 * @brief Endian-specific byte order defines.
6 * @author Beyley Cardellio <ep1cm1n10n123@gmail.com>
7 * @ingroup aux_os
8 */
9
10#pragma once
11
12#include "xrt_compiler.h"
13
14#include <stdint.h>
15
16#ifdef __linux__
17
18// On Linux, all these conversion functions are defined for both endians
19#include <asm/byteorder.h>
20
21#elif defined(XRT_BIG_ENDIAN)
22
23#error "@todo: Add byte order constants and functions for this OS or big endian machines."
24
25#else
26
27#define __be64 uint64_t
28#define __be32 uint32_t
29#define __be16 uint16_t
30
31#define __be16_to_cpu(x) ((((uint16_t)x & (uint16_t)0x00FFU) << 8) | (((uint16_t)x & (uint16_t)0xFF00U) >> 8))
32#define __cpu_to_be16(x) __be16_to_cpu(x)
33
34#define __be32_to_cpu(x) \
35 ((((uint32_t)x & (uint32_t)0x000000FFUL) << 24) | (((uint32_t)x & (uint32_t)0x0000FF00UL) << 8) | \
36 (((uint32_t)x & (uint32_t)0x00FF0000UL) >> 8) | (((uint32_t)x & (uint32_t)0xFF000000UL) >> 24))
37#define __cpu_to_be32(x) __be32_to_cpu(x)
38
39#define __be64_to_cpu(x) \
40 ((((uint64_t)x & (uint64_t)0x00000000000000FFULL) << 56) | \
41 (((uint64_t)x & (uint64_t)0x000000000000FF00ULL) << 40) | \
42 (((uint64_t)x & (uint64_t)0x0000000000FF0000ULL) << 24) | \
43 (((uint64_t)x & (uint64_t)0x00000000FF000000ULL) << 8) | \
44 (((uint64_t)x & (uint64_t)0x000000FF00000000ULL) >> 8) | \
45 (((uint64_t)x & (uint64_t)0x0000FF0000000000ULL) >> 24) | \
46 (((uint64_t)x & (uint64_t)0x00FF000000000000ULL) >> 40) | \
47 (((uint64_t)x & (uint64_t)0xFF00000000000000ULL) >> 56)) |
48#define __cpu_to_be64(x) __be64_to_cpu(x)
49
50#define __le64 uint64_t
51#define __le32 uint32_t
52#define __le16 uint16_t
53#define __u8 uint8_t
54#define __s8 int8_t
55#define __cpu_to_le16
56#define __le16_to_cpu
57#define __cpu_to_le32
58#define __le32_to_cpu
59#define __cpu_to_le64
60#define __le64_to_cpu
61
62#endif
Header holding common defines.