2020-08-25 11:23:25 +00:00
|
|
|
#ifndef COSMOPOLITAN_TOOL_BUILD_LIB_ENDIAN_H_
|
|
|
|
#define COSMOPOLITAN_TOOL_BUILD_LIB_ENDIAN_H_
|
2021-04-18 18:34:59 +00:00
|
|
|
#include "libc/bits/bits.h"
|
2020-08-25 11:23:25 +00:00
|
|
|
|
2021-04-18 18:34:59 +00:00
|
|
|
#define Read8(P) (*(const uint8_t *)(P))
|
2020-08-25 11:23:25 +00:00
|
|
|
|
2021-04-18 18:34:59 +00:00
|
|
|
#define Read16(P) \
|
|
|
|
({ \
|
|
|
|
const uint8_t *Ptr = (const uint8_t *)(P); \
|
|
|
|
READ16LE(P); \
|
2020-08-25 11:23:25 +00:00
|
|
|
})
|
|
|
|
|
2021-04-18 18:34:59 +00:00
|
|
|
#define Read32(P) \
|
|
|
|
({ \
|
|
|
|
const uint8_t *Ptr = (const uint8_t *)(P); \
|
|
|
|
READ32LE(P); \
|
2020-08-25 11:23:25 +00:00
|
|
|
})
|
|
|
|
|
2021-04-18 18:34:59 +00:00
|
|
|
#define Read64(P) \
|
|
|
|
({ \
|
|
|
|
const uint8_t *Ptr = (const uint8_t *)(P); \
|
|
|
|
READ64LE(P); \
|
2020-08-25 11:23:25 +00:00
|
|
|
})
|
|
|
|
|
2021-04-18 18:34:59 +00:00
|
|
|
#define Write8(P, V) \
|
2020-08-25 11:23:25 +00:00
|
|
|
do { \
|
2021-04-18 18:34:59 +00:00
|
|
|
uint8_t Val = (V); \
|
2020-08-25 11:23:25 +00:00
|
|
|
uint8_t *Ptr = (P); \
|
2021-04-18 18:34:59 +00:00
|
|
|
*Ptr = Val; \
|
2020-08-25 11:23:25 +00:00
|
|
|
} while (0)
|
|
|
|
|
2021-04-18 18:34:59 +00:00
|
|
|
#define Write16(P, V) \
|
|
|
|
do { \
|
|
|
|
uint16_t Val = (V); \
|
|
|
|
uint8_t *Ptr = (P); \
|
|
|
|
WRITE16LE(Ptr, Val); \
|
2020-08-25 11:23:25 +00:00
|
|
|
} while (0)
|
|
|
|
|
2021-04-18 18:34:59 +00:00
|
|
|
#define Write32(P, V) \
|
|
|
|
do { \
|
|
|
|
uint32_t Val = (V); \
|
|
|
|
uint8_t *Ptr = (P); \
|
|
|
|
WRITE32LE(Ptr, Val); \
|
2020-08-25 11:23:25 +00:00
|
|
|
} while (0)
|
|
|
|
|
2021-04-18 18:34:59 +00:00
|
|
|
#define Write64(P, V) \
|
|
|
|
do { \
|
|
|
|
uint64_t Val = (V); \
|
|
|
|
uint8_t *Ptr = (P); \
|
|
|
|
WRITE64LE(Ptr, Val); \
|
2020-08-25 11:23:25 +00:00
|
|
|
} while (0)
|
|
|
|
|
|
|
|
#endif /* COSMOPOLITAN_TOOL_BUILD_LIB_ENDIAN_H_ */
|