diff options
Diffstat (limited to 'py/persistentcode.c')
| -rw-r--r-- | py/persistentcode.c | 19 | 
1 files changed, 17 insertions, 2 deletions
| diff --git a/py/persistentcode.c b/py/persistentcode.c index 7d71cfd98..b12c10074 100644 --- a/py/persistentcode.c +++ b/py/persistentcode.c @@ -63,6 +63,10 @@ typedef struct _bytecode_prelude_t {      uint code_info_size;  } bytecode_prelude_t; +#if MICROPY_EMIT_RV32 +#include "py/asmrv32.h" +#endif +  #endif // MICROPY_PERSISTENT_CODE_LOAD || MICROPY_PERSISTENT_CODE_SAVE  #if MICROPY_PERSISTENT_CODE_LOAD @@ -485,8 +489,19 @@ void mp_raw_code_load(mp_reader_t *reader, mp_compiled_module_t *cm) {      size_t arch_flags = 0;      if (MPY_FEATURE_ARCH_FLAGS_TEST(header[2])) { -        (void)arch_flags; -        mp_raise_ValueError(MP_ERROR_TEXT("incompatible .mpy file")); +        #if MICROPY_EMIT_RV32 +        arch_flags = read_uint(reader); + +        if (MPY_FEATURE_ARCH_TEST(MP_NATIVE_ARCH_RV32IMC)) { +            if ((arch_flags & (size_t)asm_rv32_allowed_extensions()) != arch_flags) { +                mp_raise_ValueError(MP_ERROR_TEXT("incompatible .mpy file")); +            } +        } else +        #endif +        { +            (void)arch_flags; +            mp_raise_ValueError(MP_ERROR_TEXT("incompatible .mpy file")); +        }      }      size_t n_qstr = read_uint(reader); | 
