| #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_ |