#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 |