#include "macros.inc" test_suite loop test loop movi a2, 0 movi a3, 5 loop a3, 1f addi a2, a2, 1 1: assert eqi, a2, 5 test_end test loop0 movi a2, 0 loop a2, 1f rsr a2, lcount assert eqi, a2, -1 j 1f 1: test_end test loop_jump movi a2, 0 movi a3, 5 loop a3, 1f addi a2, a2, 1 j 1f 1: assert eqi, a2, 1 test_end test loop_branch movi a2, 0 movi a3, 5 loop a3, 1f addi a2, a2, 1 beqi a2, 3, 1f 1: assert eqi, a2, 3 test_end test loop_manual movi a2, 0 movi a3, 5 movi a4, 1f movi a5, 2f wsr a3, lcount wsr a4, lbeg wsr a5, lend isync j 1f .align 4 1: addi a2, a2, 1 2: assert eqi, a2, 6 test_end test loop_excm movi a2, 0 movi a3, 5 rsr a4, ps movi a5, 0x10 or a4, a4, a5 wsr a4, ps isync loop a3, 1f addi a2, a2, 1 1: xor a4, a4, a5 isync wsr a4, ps assert eqi, a2, 1 test_end test lbeg_invalidation movi a2, 0 movi a3, 1 movi a4, 1f movi a5, 3f wsr a3, lcount wsr a4, lbeg wsr a5, lend isync j 1f .align 4 1: addi a2, a2, 1 j 2f .align 4 2: addi a2, a2, 2 movi a3, 2b wsr a3, lbeg isync nop 3: assert eqi, a2, 5 test_end test lend_invalidation movi a2, 0 movi a3, 5 movi a4, 1f movi a5, 2f wsr a3, lcount wsr a4, lbeg wsr a5, lend isync j 1f .align 4 1: addi a2, a2, 1 2: beqi a3, 3, 1f assert eqi, a2, 6 movi a3, 3 wsr a3, lcount wsr a4, lend isync j 1b 1: assert eqi, a2, 7 test_end test loopnez movi a2, 0 movi a3, 5 loopnez a3, 1f addi a2, a2, 1 1: assert eqi, a2, 5 movi a2, 0 movi a3, 0 loopnez a3, 1f test_fail 1: test_end test loopgtz movi a2, 0 movi a3, 5 loopgtz a3, 1f addi a2, a2, 1 1: assert eqi, a2, 5 movi a2, 0 movi a3, 0 loopgtz a3, 1f test_fail 1: movi a2, 0 movi a3, 0x80000000 loopgtz a3, 1f test_fail 1: test_end test_suite_end