Changeset View
Changeset View
Standalone View
Standalone View
sys/riscv/include/endian.h
Show All 39 Lines | |||||
* address to high. | * address to high. | ||||
*/ | */ | ||||
#define _LITTLE_ENDIAN 1234 /* LSB first: i386, vax */ | #define _LITTLE_ENDIAN 1234 /* LSB first: i386, vax */ | ||||
#define _BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */ | #define _BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */ | ||||
#define _PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */ | #define _PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */ | ||||
#define _BYTE_ORDER _LITTLE_ENDIAN | #define _BYTE_ORDER _LITTLE_ENDIAN | ||||
/* | |||||
* Deprecated variants that don't have enough underscores to be useful in more | |||||
* strict namespaces. | |||||
*/ | |||||
#if __BSD_VISIBLE | #if __BSD_VISIBLE | ||||
#define LITTLE_ENDIAN _LITTLE_ENDIAN | #define LITTLE_ENDIAN _LITTLE_ENDIAN | ||||
#define BIG_ENDIAN _BIG_ENDIAN | #define BIG_ENDIAN _BIG_ENDIAN | ||||
#define PDP_ENDIAN _PDP_ENDIAN | #define PDP_ENDIAN _PDP_ENDIAN | ||||
#define BYTE_ORDER _BYTE_ORDER | #define BYTE_ORDER _BYTE_ORDER | ||||
#endif | #endif | ||||
/* | |||||
* Define the order of 32-bit words in 64-bit words. | |||||
*/ | |||||
#define _QUAD_HIGHWORD 1 | #define _QUAD_HIGHWORD 1 | ||||
#define _QUAD_LOWWORD 0 | #define _QUAD_LOWWORD 0 | ||||
#define __bswap16(x) __builtin_bswap16(x) | |||||
#define __bswap32(x) __builtin_bswap32(x) | |||||
#define __bswap64(x) __builtin_bswap64(x) | |||||
#define __ntohl(x) (__bswap32(x)) | #define __ntohl(x) (__bswap32(x)) | ||||
#define __ntohs(x) (__bswap16(x)) | #define __ntohs(x) (__bswap16(x)) | ||||
#define __htonl(x) (__bswap32(x)) | #define __htonl(x) (__bswap32(x)) | ||||
#define __htons(x) (__bswap16(x)) | #define __htons(x) (__bswap16(x)) | ||||
static __inline __uint64_t | |||||
__bswap64(__uint64_t _x) | |||||
{ | |||||
__uint64_t ret; | |||||
ret = (_x >> 56); | |||||
ret |= ((_x >> 40) & 0xff00); | |||||
ret |= ((_x >> 24) & 0xff0000); | |||||
ret |= ((_x >> 8) & 0xff000000); | |||||
ret |= ((_x << 8) & ((__uint64_t)0xff << 32)); | |||||
ret |= ((_x << 24) & ((__uint64_t)0xff << 40)); | |||||
ret |= ((_x << 40) & ((__uint64_t)0xff << 48)); | |||||
ret |= (_x << 56); | |||||
return (ret); | |||||
} | |||||
static __inline __uint32_t | |||||
__bswap32_var(__uint32_t _x) | |||||
{ | |||||
return ((_x >> 24) | ((_x >> 8) & 0xff00) | ((_x << 8) & 0xff0000) | | |||||
((_x << 24) & 0xff000000)); | |||||
} | |||||
static __inline __uint16_t | |||||
__bswap16_var(__uint16_t _x) | |||||
{ | |||||
__uint32_t ret; | |||||
ret = ((_x >> 8) | ((_x << 8) & 0xff00)); | |||||
return ((__uint16_t)ret); | |||||
} | |||||
#ifdef __OPTIMIZE__ | |||||
#define __bswap32_constant(x) \ | |||||
((((x) & 0xff000000U) >> 24) | \ | |||||
(((x) & 0x00ff0000U) >> 8) | \ | |||||
(((x) & 0x0000ff00U) << 8) | \ | |||||
(((x) & 0x000000ffU) << 24)) | |||||
#define __bswap16_constant(x) \ | |||||
((((x) & 0xff00) >> 8) | \ | |||||
(((x) & 0x00ff) << 8)) | |||||
#define __bswap16(x) \ | |||||
((__uint16_t)(__builtin_constant_p(x) ? \ | |||||
__bswap16_constant(x) : \ | |||||
__bswap16_var(x))) | |||||
#define __bswap32(x) \ | |||||
((__uint32_t)(__builtin_constant_p(x) ? \ | |||||
__bswap32_constant(x) : \ | |||||
__bswap32_var(x))) | |||||
#else | |||||
#define __bswap16(x) __bswap16_var(x) | |||||
#define __bswap32(x) __bswap32_var(x) | |||||
#endif /* __OPTIMIZE__ */ | |||||
#endif /* !_MACHINE_ENDIAN_H_ */ | #endif /* !_MACHINE_ENDIAN_H_ */ |