#include "macros.inc" test_suite interrupt .macro clear_interrupts movi a2, 0 wsr a2, intenable wsr a2, ccompare0 wsr a2, ccompare1 wsr a2, ccompare2 esync rsr a2, interrupt wsr a2, intclear esync rsr a2, interrupt assert eqi, a2, 0 .endm .macro check_l1 rsr a2, ps movi a3, 0x1f /* EXCM | INTMASK */ and a2, a2, a3 assert eqi, a2, 0x10 /* only EXCM is set for level-1 interrupt */ rsr a2, exccause assert eqi, a2, 4 .endm test rsil clear_interrupts rsr a2, ps rsil a3, 7 rsr a4, ps assert eq, a2, a3 movi a2, 0xf and a2, a4, a2 assert eqi, a2, 7 xor a3, a3, a4 movi a2, 0xfffffff0 and a2, a3, a2 assert eqi, a2, 0 test_end test soft_disabled set_vector kernel, 1f clear_interrupts movi a2, 0x80 wsr a2, intset esync rsr a3, interrupt assert eq, a2, a3 wsr a2, intclear esync rsr a3, interrupt assert eqi, a3, 0 j 2f 1: test_fail 2: test_end test soft_intenable set_vector kernel, 1f clear_interrupts movi a2, 0x80 wsr a2, intset esync rsr a3, interrupt assert eq, a2, a3 rsil a3, 0 wsr a2, intenable esync test_fail 1: check_l1 test_end test soft_rsil set_vector kernel, 1f clear_interrupts movi a2, 0x80 wsr a2, intset esync rsr a3, interrupt assert eq, a2, a3 wsr a2, intenable rsil a3, 0 esync test_fail 1: check_l1 test_end test soft_waiti set_vector kernel, 1f clear_interrupts movi a2, 0x80 wsr a2, intset esync rsr a3, interrupt assert eq, a2, a3 wsr a2, intenable waiti 0 test_fail 1: check_l1 test_end test soft_user set_vector kernel, 1f set_vector user, 2f clear_interrupts movi a2, 0x80 wsr a2, intset esync rsr a3, interrupt assert eq, a2, a3 wsr a2, intenable rsr a2, ps movi a3, 0x20 or a2, a2, a3 wsr a2, ps waiti 0 1: test_fail 2: check_l1 test_end test soft_priority set_vector kernel, 1f set_vector level3, 2f clear_interrupts movi a2, 0x880 wsr a2, intenable rsil a3, 0 esync wsr a2, intset esync 1: test_fail 2: rsr a2, ps movi a3, 0x1f /* EXCM | INTMASK */ and a2, a2, a3 movi a3, 0x13 assert eq, a2, a3 /* EXCM and INTMASK are set for high-priority interrupt */ test_end test eps_epc_rfi set_vector level3, 3f clear_interrupts reset_ps movi a2, 0x880 wsr a2, intenable rsil a3, 0 rsr a3, ps esync wsr a2, intset 1: esync 2: test_fail 3: rsr a2, eps3 assert eq, a2, a3 rsr a2, epc3 movi a3, 1b assert ge, a2, a3 movi a3, 2b assert ge, a3, a2 movi a2, 4f wsr a2, epc3 movi a2, 0x40003 wsr a2, eps3 rfi 3 test_fail 4: rsr a2, ps movi a3, 0x40003 assert eq, a2, a3 test_end test_suite_end