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