.option norvc .text .global _start _start: lla t0, trap csrw mtvec, t0 # These are all illegal instructions csrw time, x0 .insn i CUSTOM_0, 0, x0, x0, 0x321 csrw time, x0 .insn i CUSTOM_0, 0, x0, x0, 0x123 csrw cycle, x0 # Success! li a0, 0 j _exit trap: # When an instruction traps, compare it to the insn in memory. csrr t0, mepc csrr t1, mtval lwu t2, 0(t0) bne t1, t2, fail # Skip the insn and continue. addi t0, t0, 4 csrw mepc, t0 mret fail: li a0, 1 # Exit code in a0 _exit: lla a1, semiargs li t0, 0x20026 # ADP_Stopped_ApplicationExit sd t0, 0(a1) sd a0, 8(a1) li a0, 0x20 # TARGET_SYS_EXIT_EXTENDED # Semihosting call sequence .balign 16 slli zero, zero, 0x1f ebreak srai zero, zero, 0x7 j . .data .balign 16 semiargs: .space 16