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