endian: add standard <endian.h> instead of target-specific one

This commit is contained in:
Lephenixnoir 2025-02-21 10:28:33 +01:00
parent 09610f59de
commit 381570e3ef
No known key found for this signature in database
GPG key ID: 1BBA026E13FC0495
2 changed files with 55 additions and 21 deletions

55
include/endian.h Normal file
View file

@ -0,0 +1,55 @@
#ifndef __ENDIAN_H__
# define __ENDIAN_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
/* Follow macros provided by GCC. */
#define LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__
#define BIG_ENDIAN __ORDER_BIG_ENDIAN__
#define BYTE_ORDER __BYTE_ORDER__
#if BYTE_ORDER == LITTLE_ENDIAN
#define htobe16(x) __builtin_bswap16(x)
#define htole16(x) (x)
#define be16toh(x) __builtin_bswap16(x)
#define le16toh(x) (x)
#define htobe32(x) __builtin_bswap32(x)
#define htole32(x) (x)
#define be32toh(x) __builtin_bswap32(x)
#define le32toh(x) (x)
#define htobe64(x) __builtin_bswap64(x)
#define htole64(x) (x)
#define be64toh(x) __builtin_bswap64(x)
#define le64toh(x) (x)
#elif BYTE_ORDER == BIG_ENDIAN
#define htobe16(x) (x)
#define htole16(x) __builtin_bswap16(x)
#define be16toh(x) (x)
#define le16toh(x) __builtin_bswap16(x)
#define htobe32(x) (x)
#define htole32(x) __builtin_bswap32(x)
#define be32toh(x) (x)
#define le32toh(x) __builtin_bswap32(x)
#define htobe64(x) (x)
#define htole64(x) __builtin_bswap64(x)
#define be64toh(x) (x)
#define le64toh(x) __builtin_bswap64(x)
#endif /* LITTLE_ENDIAN vs. BIG_ENDIAN */
#ifdef __cplusplus
}
#endif
#endif /*__ENDIAN_H__*/

View file

@ -1,21 +0,0 @@
#ifndef __ENDIAN_H__
# define __ENDIAN_H__
/* CASIO calculators are configured as big-endian. */
#define htobe16(x) (x)
#define htole16(x) (__builtin_bswap16(x))
#define be16toh(x) (x)
#define le16toh(x) (__builtin_bswap16(x))
#define htobe32(x) (x)
#define htole32(x) (__builtin_bswap32(x))
#define be32toh(x) (x)
#define le32toh(x) (__builtin_bswap32(x))
#define htobe64(x) (x)
#define htole64(x) (__builtin_bswap64(x))
#define be64toh(x) (x)
#define le64toh(x) (__builtin_bswap64(x))
#endif /*__ENDIAN_H__*/