| #include "macros.inc" |
| |
| .purgem test |
| .macro test name |
| movi a2, 1f |
| movi a3, 99f |
| 0: |
| ipf a2, 0 |
| ipf a2, 4 |
| ipf a2, 8 |
| ipf a2, 12 |
| addi a2, a2, 16 |
| blt a2, a3, 0b |
| j 1f |
| .align 4 |
| 1: |
| .endm |
| |
| test_suite pipeline |
| |
| test register_no_stall |
| rsr a3, ccount |
| add a5, a6, a6 |
| add a6, a5, a5 |
| rsr a4, ccount |
| sub a3, a4, a3 |
| assert eqi, a3, 3 |
| test_end |
| |
| test register_stall |
| l32i a5, a1, 0 /* data cache preload */ |
| nop |
| rsr a3, ccount |
| l32i a5, a1, 0 |
| add a6, a5, a5 /* M-to-E interlock */ |
| rsr a4, ccount |
| sub a3, a4, a3 |
| assert eqi, a3, 4 |
| test_end |
| |
| test j0_stall |
| rsr a3, ccount |
| j 1f /* E + 2-cycle penalty */ |
| 1: |
| rsr a4, ccount /* E */ |
| sub a3, a4, a3 |
| assert eqi, a3, 4 |
| test_end |
| |
| test j1_stall |
| rsr a3, ccount |
| j 1f |
| nop |
| 1: |
| rsr a4, ccount |
| sub a3, a4, a3 |
| assert eqi, a3, 4 |
| test_end |
| |
| test j5_stall |
| rsr a3, ccount |
| j 1f |
| nop |
| nop |
| nop |
| nop |
| nop |
| 1: |
| rsr a4, ccount |
| sub a3, a4, a3 |
| assert eqi, a3, 4 |
| test_end |
| |
| test b_no_stall |
| movi a5, 1 |
| rsr a3, ccount |
| beqi a5, 2, 1f |
| rsr a4, ccount |
| sub a3, a4, a3 |
| assert eqi, a3, 2 |
| 1: |
| test_end |
| |
| test b1_stall |
| movi a5, 1 |
| rsr a3, ccount |
| beqi a5, 1, 1f |
| nop |
| 1: |
| rsr a4, ccount |
| sub a3, a4, a3 |
| assert eqi, a3, 4 |
| test_end |
| |
| test b5_stall |
| movi a5, 1 |
| rsr a3, ccount |
| beqi a5, 1, 1f |
| nop |
| nop |
| nop |
| nop |
| nop |
| 1: |
| rsr a4, ccount |
| sub a3, a4, a3 |
| assert eqi, a3, 4 |
| test_end |
| |
| /* PS *SYNC */ |
| |
| test ps_dsync |
| rsr a5, ps |
| isync |
| rsr a3, ccount |
| wsr a5, ps |
| dsync |
| rsr a4, ccount |
| sub a3, a4, a3 |
| assert eqi, a3, 5 |
| test_end |
| |
| test ps_esync |
| rsr a5, ps |
| isync |
| rsr a3, ccount |
| wsr a5, ps |
| esync |
| rsr a4, ccount |
| sub a3, a4, a3 |
| assert eqi, a3, 5 |
| test_end |
| |
| test ps_rsync |
| rsr a5, ps |
| isync |
| rsr a3, ccount |
| wsr a5, ps |
| rsync |
| rsr a4, ccount |
| sub a3, a4, a3 |
| assert eqi, a3, 5 |
| test_end |
| |
| test ps_isync |
| rsr a5, ps |
| isync |
| rsr a3, ccount |
| wsr a5, ps |
| isync |
| rsr a4, ccount |
| sub a3, a4, a3 |
| movi a4, 9 |
| assert eq, a3, a4 |
| test_end |
| |
| test_suite_end |