| #ifndef BEDROCK_UNVERIFIED_BAREMINIMUM_INC_H_ | |
| #define BEDROCK_UNVERIFIED_BAREMINIMUM_INC_H_ | |
| static_assert(sizeof(br_word_t) == sizeof(br_signed_t), ""); | |
| static_assert(UINTPTR_MAX <= BR_WORD_MAX, ""); | |
| // "An object shall have its stored value accessed only ... a character type." | |
| static inline br_word_t _br_load1(br_word_t a) { | |
| return *((uint8_t *)a); | |
| } | |
| static inline br_word_t _br_load2(br_word_t a) { | |
| uint16_t r = 0; | |
| memcpy(&r, (void *)a, sizeof(r)); | |
| return r; | |
| } | |
| static inline br_word_t _br_load4(br_word_t a) { | |
| uint32_t r = 0; | |
| memcpy(&r, (void *)a, sizeof(r)); | |
| return r; | |
| } | |
| static inline br_word_t _br_load(br_word_t a) { | |
| br_word_t r = 0; | |
| memcpy(&r, (void *)a, sizeof(r)); | |
| return r; | |
| } | |
| static inline void _br_store1(br_word_t a, uint8_t v) { | |
| *((uint8_t *)a) = v; | |
| } | |
| static inline void _br_store2(br_word_t a, uint16_t v) { | |
| memcpy((void *)a, &v, sizeof(v)); | |
| } | |
| static inline void _br_store4(br_word_t a, uint32_t v) { | |
| memcpy((void *)a, &v, sizeof(v)); | |
| } | |
| static inline void _br_store(br_word_t a, br_word_t v) { | |
| memcpy((void *)a, &v, sizeof(v)); | |
| } | |
| #endif // BEDROCK_UNVERIFIED_BAREMINIMUM_INC_H_ |