Bug #13968
openДекодирование кода из бинарного формата не учитывает assert-ы
0%
Description
Используемая модель riscv32 (RV32FULL).
Конфликт возникает между инструкциями c_lui и c_addi16sp. Эти инструкции делят один опкод и выбор корректной инструкции при декодировании определяется её аргументами. Различить их на уровне модели позволяет строка assert(rd.i != 2, "C.LUI: rd == x2 (invalid)"); в спецификации c_lui. Однако MicroTESK при декодировании из бинарного формата не учитывает этот assert и декодирует код 0x7179 в некорректную инструкцию c.lui sp, 0x3e, а не c.addi16sp -48.
В приложенном архиве:
f.bin - бинарный код, подаваемый на вход microtesk
f.s - вывод microtesk с некорректными инструкциями на строках 1 и 35
f_objdump.s - вывод стандартной утилиты objdump. Вместо c.addi16sp imm используется формат addi sp, sp, imm
f.mir - лог построения mir.
Files
AP Updated by Alexander Protsenko 6 days ago
- Status changed from New to Open
Модель riscv, сборка с параметром: specRevision=RV32FULL
Запуск примера в Eclipse командой: -dp -d riscv riscv_examples\\build_f\\f.bin.
Было:
Стало:
c.addi16sp sp, -48
c.swsp ra, 44(sp)
c.swsp s0, 40(sp)
...
c.lwsp s0, 40(sp)
c.addi16sp sp, 48
c.jr ra
Необходимо обновить версию MicroTESK for RISC-V.
AP Updated by Alexander Protsenko 6 days ago
- Status changed from Open to Feedback
@Pavel Putro переведи задачу в статус "Resolved", если эта ошибка больше не проявляется.