1*bb722a7dSDimitry Andric //===-- Definition of macros from endian.h --------------------------------===// 2*bb722a7dSDimitry Andric // 3*bb722a7dSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*bb722a7dSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*bb722a7dSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*bb722a7dSDimitry Andric // 7*bb722a7dSDimitry Andric //===----------------------------------------------------------------------===// 8*bb722a7dSDimitry Andric 9*bb722a7dSDimitry Andric #ifndef LLVM_LIBC_MACROS_ENDIAN_MACROS_H 10*bb722a7dSDimitry Andric #define LLVM_LIBC_MACROS_ENDIAN_MACROS_H 11*bb722a7dSDimitry Andric 12*bb722a7dSDimitry Andric #include "stdint-macros.h" 13*bb722a7dSDimitry Andric 14*bb722a7dSDimitry Andric #define LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__ 15*bb722a7dSDimitry Andric #define BIG_ENDIAN __ORDER_BIG_ENDIAN__ 16*bb722a7dSDimitry Andric #define BYTE_ORDER __BYTE_ORDER__ 17*bb722a7dSDimitry Andric 18*bb722a7dSDimitry Andric #if BYTE_ORDER == LITTLE_ENDIAN 19*bb722a7dSDimitry Andric 20*bb722a7dSDimitry Andric #define htobe16(x) __builtin_bswap16((x)) 21*bb722a7dSDimitry Andric #define htobe32(x) __builtin_bswap32((x)) 22*bb722a7dSDimitry Andric #define htobe64(x) __builtin_bswap64((x)) 23*bb722a7dSDimitry Andric #define htole16(x) __LLVM_LIBC_CAST(static_cast, uint16_t, x) 24*bb722a7dSDimitry Andric #define htole32(x) __LLVM_LIBC_CAST(static_cast, uint32_t, x) 25*bb722a7dSDimitry Andric #define htole64(x) __LLVM_LIBC_CAST(static_cast, uint64_t, x) 26*bb722a7dSDimitry Andric #define be16toh(x) __builtin_bswap16((x)) 27*bb722a7dSDimitry Andric #define be32toh(x) __builtin_bswap32((x)) 28*bb722a7dSDimitry Andric #define be64toh(x) __builtin_bswap64((x)) 29*bb722a7dSDimitry Andric #define le16toh(x) __LLVM_LIBC_CAST(static_cast, uint16_t, x) 30*bb722a7dSDimitry Andric #define le32toh(x) __LLVM_LIBC_CAST(static_cast, uint32_t, x) 31*bb722a7dSDimitry Andric #define le64toh(x) __LLVM_LIBC_CAST(static_cast, uint64_t, x) 32*bb722a7dSDimitry Andric 33*bb722a7dSDimitry Andric #else 34*bb722a7dSDimitry Andric 35*bb722a7dSDimitry Andric #define htobe16(x) __LLVM_LIBC_CAST(static_cast, uint16_t, x) 36*bb722a7dSDimitry Andric #define htobe32(x) __LLVM_LIBC_CAST(static_cast, uint32_t, x) 37*bb722a7dSDimitry Andric #define htobe64(x) __LLVM_LIBC_CAST(static_cast, uint64_t, x) 38*bb722a7dSDimitry Andric #define htole16(x) __builtin_bswap16((x)) 39*bb722a7dSDimitry Andric #define htole32(x) __builtin_bswap32((x)) 40*bb722a7dSDimitry Andric #define htole64(x) __builtin_bswap64((x)) 41*bb722a7dSDimitry Andric #define be16toh(x) __LLVM_LIBC_CAST(static_cast, uint16_t, x) 42*bb722a7dSDimitry Andric #define be32toh(x) __LLVM_LIBC_CAST(static_cast, uint32_t, x) 43*bb722a7dSDimitry Andric #define be64toh(x) __LLVM_LIBC_CAST(static_cast, uint64_t, x) 44*bb722a7dSDimitry Andric #define le16toh(x) __builtin_bswap16((x)) 45*bb722a7dSDimitry Andric #define le32toh(x) __builtin_bswap32((x)) 46*bb722a7dSDimitry Andric #define le64toh(x) __builtin_bswap64((x)) 47*bb722a7dSDimitry Andric 48*bb722a7dSDimitry Andric #endif 49*bb722a7dSDimitry Andric 50*bb722a7dSDimitry Andric #endif // LLVM_LIBC_MACROS_ENDIAN_MACROS_H 51