@@ -396,7 +396,7 @@ loop__no_mark_icache:
396396 print "mcause = {0}\n"
397397 set n mcause
398398 op add ret @counter 1
399- jump format_hex always
399+ jump format_mcause always
400400
401401 print "mtval = {0}\n"
402402 set n mtval
@@ -754,6 +754,48 @@ format_uart__rx_fifo_size__no_overrun:
754754
755755 set @counter ret
756756
757+ format_mcause:
758+ jump format_null strictEqual n null
759+ jump format_mcause__interrupt greaterThanEq n 0x80000000
760+ jump format_hex greaterThan n 19
761+ op mul jump n 2
762+ op add @counter @counter jump
763+ format "instr addr align"; set @counter ret
764+ format "instr access fault"; set @counter ret
765+ format "illegal instr"; set @counter ret
766+ format "breakpoint"; set @counter ret
767+ format "load addr align"; set @counter ret
768+ format "load access fault"; set @counter ret
769+ format "store/AMO addr align"; set @counter ret
770+ format "store/AMO access fault"; set @counter ret
771+ format "ecall from U-mode"; set @counter ret
772+ format "ecall from S-mode"; set @counter ret
773+ jump format_hex always; stop
774+ format "ecall from M-mode"; set @counter ret
775+ format "instr page fault"; set @counter ret
776+ format "load page fault"; set @counter ret
777+ jump format_hex always; stop
778+ format "store/AMO page fault"; set @counter ret
779+ jump format_hex always; stop
780+ jump format_hex always; stop
781+ format "software check"; set @counter ret
782+ format "hardware check"; set @counter ret
783+
784+ format_mcause__interrupt:
785+ op and n2 n 0x7fffffff
786+ op mod rem n2 2
787+ jump format_hex notEqual rem 1
788+ jump format_hex greaterThan n2 13
789+ op sub jump n2 1
790+ op add @counter @counter jump
791+ format "S software int"; set @counter ret
792+ format "M software int"; set @counter ret
793+ format "S timer int"; set @counter ret
794+ format "M timer int"; set @counter ret
795+ format "S external int"; set @counter ret
796+ format "M external int"; set @counter ret
797+ format "cntr overflow int"; set @counter ret
798+
757799# creates a marker on the ram proc containing a given address
758800# the caller should print a format string with a placeholder for the address
759801# address ->
0 commit comments