Компилятор - GCC15, но собран специально для WCH (из дистрибутыва
MRS2) и учитывает специфические расширения. Если оставить настройки
целевого ЦП в Eclipse по-умолчанию, компилятор вызывается с
ключами: Для полноты картины, все ключи:
-march=rv32ec -mabi=ilp32e -msmall-data-limit=0 -mno-save-restore -Ofast -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common -fsingle-precision-constant -flto=auto -Werror -Wunused -Wuninitialized -Wall -Wextra -Wfloat-equal -Wdouble-promotion
И при изменении режима работы программы, получаю NMI по адресу 0x5a4, с кодом mcause=4 "load instruction address misalignment". Ниже кусок кода - это загрузка состояния конечного автомата и дальнейшее ветвление в зависимости от состояния автомата. Это насколько я могу судить. Оптимизация -Ofast, LTO:
590: 20000537 lui a0,0x20000
594: 00452503 lw a0,4(a0) # 20000004
598: 4325 li t1,9
59a: 60a36163 bltu t1,a0,b9c
59e: 4302 lw t1,0(sp)
5a0: 050a slli a0,a0,0x2
5a2: 951a add a0,a0,t1
5a4: 4108 lw a0,0(a0)
5a6: 8502 jr a0