mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 11:37:35 +00:00
fa20edc44d
- Remove most __ASSEMBLER__ __LINKER__ ifdefs - Rename libc/intrin/bits.h to libc/serialize.h - Block pthread cancelation in fchmodat() polyfill - Remove `clang-format off` statements in third_party
116 lines
3.5 KiB
C
116 lines
3.5 KiB
C
#ifndef COSMOPOLITAN_SERIALIZE_H_
|
|
#define COSMOPOLITAN_SERIALIZE_H_
|
|
#ifdef _COSMO_SOURCE
|
|
|
|
#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
|
#define __SWAPBE16(x) (x)
|
|
#define __SWAPBE32(x) (x)
|
|
#define __SWAPBE64(x) (x)
|
|
#else
|
|
#define __SWAPBE16(x) __builtin_bswap16(x)
|
|
#define __SWAPBE32(x) __builtin_bswap32(x)
|
|
#define __SWAPBE64(x) __builtin_bswap64(x)
|
|
#endif
|
|
|
|
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
|
#define __SWAPLE16(x) (x)
|
|
#define __SWAPLE32(x) (x)
|
|
#define __SWAPLE64(x) (x)
|
|
#else
|
|
#define __SWAPLE16(x) __builtin_bswap16(x)
|
|
#define __SWAPLE32(x) __builtin_bswap32(x)
|
|
#define __SWAPLE64(x) __builtin_bswap64(x)
|
|
#endif
|
|
|
|
#define READ16LE(P) \
|
|
(__extension__({ \
|
|
uint16_t __x; \
|
|
__builtin_memcpy(&__x, P, 16 / 8); \
|
|
__SWAPLE16(__x); \
|
|
}))
|
|
|
|
#define READ16BE(P) \
|
|
(__extension__({ \
|
|
uint16_t __x; \
|
|
__builtin_memcpy(&__x, P, 16 / 8); \
|
|
__SWAPBE16(__x); \
|
|
}))
|
|
|
|
#define READ32LE(P) \
|
|
(__extension__({ \
|
|
uint32_t __x; \
|
|
__builtin_memcpy(&__x, P, 32 / 8); \
|
|
__SWAPLE32(__x); \
|
|
}))
|
|
|
|
#define READ32BE(P) \
|
|
(__extension__({ \
|
|
uint32_t __x; \
|
|
__builtin_memcpy(&__x, P, 32 / 8); \
|
|
__SWAPBE32(__x); \
|
|
}))
|
|
|
|
#define READ64LE(P) \
|
|
(__extension__({ \
|
|
uint64_t __x; \
|
|
__builtin_memcpy(&__x, P, 64 / 8); \
|
|
__SWAPLE32(__x); \
|
|
}))
|
|
|
|
#define READ64BE(P) \
|
|
(__extension__({ \
|
|
uint64_t __x; \
|
|
__builtin_memcpy(&__x, P, 64 / 8); \
|
|
__SWAPBE64(__x); \
|
|
}))
|
|
|
|
#define WRITE16LE(P, X) \
|
|
(__extension__({ \
|
|
__typeof__(&(P)[0]) __p = (P); \
|
|
uint16_t __x = __SWAPLE16(X); \
|
|
__builtin_memcpy(__p, &__x, 16 / 8); \
|
|
__p + 16 / 8; \
|
|
}))
|
|
|
|
#define WRITE16BE(P, X) \
|
|
(__extension__({ \
|
|
__typeof__(&(P)[0]) __p = (P); \
|
|
uint16_t __x = __SWAPBE16(X); \
|
|
__builtin_memcpy(__p, &__x, 16 / 8); \
|
|
__p + 16 / 8; \
|
|
}))
|
|
|
|
#define WRITE32LE(P, X) \
|
|
(__extension__({ \
|
|
__typeof__(&(P)[0]) __p = (P); \
|
|
uint32_t __x = __SWAPLE32(X); \
|
|
__builtin_memcpy(__p, &__x, 32 / 8); \
|
|
__p + 32 / 8; \
|
|
}))
|
|
|
|
#define WRITE32BE(P, X) \
|
|
(__extension__({ \
|
|
__typeof__(&(P)[0]) __p = (P); \
|
|
uint32_t __x = __SWAPBE32(X); \
|
|
__builtin_memcpy(__p, &__x, 32 / 8); \
|
|
__p + 32 / 8; \
|
|
}))
|
|
|
|
#define WRITE64LE(P, X) \
|
|
(__extension__({ \
|
|
__typeof__(&(P)[0]) __p = (P); \
|
|
uint64_t __x = __SWAPLE64(X); \
|
|
__builtin_memcpy(__p, &__x, 64 / 8); \
|
|
__p + 64 / 8; \
|
|
}))
|
|
|
|
#define WRITE64BE(P, X) \
|
|
(__extension__({ \
|
|
__typeof__(&(P)[0]) __p = (P); \
|
|
uint64_t __x = __SWAPBE64(X); \
|
|
__builtin_memcpy(__p, &__x, 64 / 8); \
|
|
__p + 64 / 8; \
|
|
}))
|
|
|
|
#endif /* _COSMO_SOURCE */
|
|
#endif /* COSMOPOLITAN_SERIALIZE_H_ */
|