This doesn't reduce coverage for cache-based RV64 systems, but will
improve test runtime and work around the need for smaller test footprint
for scratchpad-based RV32 systems.
I would argue that these microarchitectural tests should be in the
domain of torture, and that the last one should be removed, too.
17 files changed:
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sd a0, 0(a3); \
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sd a0, 0(a3); \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
amoadd.d a4, a1, 0(a3); \
)
amoadd.d a4, a1, 0(a3); \
)
# try again after a cache miss
TEST_CASE(4, a4, 0xffffffff7ffff800, \
# try again after a cache miss
TEST_CASE(4, a4, 0xffffffff7ffff800, \
- li a4, 16384; \
- add a5, a3, a4; \
- ld x0, 0(a5); \
- add a5, a5, a4; \
- ld x0, 0(a5); \
- add a5, a5, a4; \
- ld x0, 0(a5); \
- add a5, a5, a4; \
- ld x0, 0(a5); \
amoadd.d a4, a1, 0(a3); \
)
amoadd.d a4, a1, 0(a3); \
)
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sw a0, 0(a3); \
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sw a0, 0(a3); \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
amoadd.w a4, a1, 0(a3); \
)
amoadd.w a4, a1, 0(a3); \
)
# try again after a cache miss
TEST_CASE(4, a4, 0x000000007ffff800, \
li a1, 0xffffffff80000000; \
# try again after a cache miss
TEST_CASE(4, a4, 0x000000007ffff800, \
li a1, 0xffffffff80000000; \
- li a4, 16384; \
- add a5, a3, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
amoadd.w a4, a1, 0(a3); \
)
amoadd.w a4, a1, 0(a3); \
)
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sd a0, 0(a3); \
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sd a0, 0(a3); \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
amoand.d a4, a1, 0(a3); \
)
amoand.d a4, a1, 0(a3); \
)
# try again after a cache miss
TEST_CASE(4, a4, 0xffffffff80000000, \
li a1, 0x0000000080000000; \
# try again after a cache miss
TEST_CASE(4, a4, 0xffffffff80000000, \
li a1, 0x0000000080000000; \
- li a4, 16384; \
- add a5, a3, a4; \
- ld x0, 0(a5); \
- add a5, a5, a4; \
- ld x0, 0(a5); \
- add a5, a5, a4; \
- ld x0, 0(a5); \
- add a5, a5, a4; \
- ld x0, 0(a5); \
amoand.d a4, a1, 0(a3); \
)
amoand.d a4, a1, 0(a3); \
)
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sw a0, 0(a3); \
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sw a0, 0(a3); \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
amoand.w a4, a1, 0(a3); \
)
amoand.w a4, a1, 0(a3); \
)
# try again after a cache miss
TEST_CASE(4, a4, 0xffffffff80000000, \
li a1, 0x0000000080000000; \
# try again after a cache miss
TEST_CASE(4, a4, 0xffffffff80000000, \
li a1, 0x0000000080000000; \
- li a4, 16384; \
- add a5, a3, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
amoand.w a4, a1, 0(a3); \
)
amoand.w a4, a1, 0(a3); \
)
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sd a0, 0(a3); \
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sd a0, 0(a3); \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
amoor.d a4, a1, 0(a3); \
)
amoor.d a4, a1, 0(a3); \
)
# try again after a cache miss
TEST_CASE(4, a4, 0xfffffffffffff800, \
li a1, 1; \
# try again after a cache miss
TEST_CASE(4, a4, 0xfffffffffffff800, \
li a1, 1; \
- li a4, 16384; \
- add a5, a3, a4; \
- ld x0, 0(a5); \
- add a5, a5, a4; \
- ld x0, 0(a5); \
- add a5, a5, a4; \
- ld x0, 0(a5); \
- add a5, a5, a4; \
- ld x0, 0(a5); \
amoor.d a4, a1, 0(a3); \
)
amoor.d a4, a1, 0(a3); \
)
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sw a0, 0(a3); \
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sw a0, 0(a3); \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
amoor.w a4, a1, 0(a3); \
)
amoor.w a4, a1, 0(a3); \
)
# try again after a cache miss
TEST_CASE(4, a4, 0xfffffffffffff800, \
li a1, 1; \
# try again after a cache miss
TEST_CASE(4, a4, 0xfffffffffffff800, \
li a1, 1; \
- li a4, 16384; \
- add a5, a3, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
amoor.w a4, a1, 0(a3); \
)
amoor.w a4, a1, 0(a3); \
)
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sd a0, 0(a3); \
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sd a0, 0(a3); \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
amoswap.d a4, a1, 0(a3); \
)
amoswap.d a4, a1, 0(a3); \
)
# try again after a cache miss
TEST_CASE(4, a4, 0xfffffffffffff800, \
li a1, 0x0000000080000000; \
# try again after a cache miss
TEST_CASE(4, a4, 0xfffffffffffff800, \
li a1, 0x0000000080000000; \
- li a4, 16384; \
- add a5, a3, a4; \
- ld x0, 0(a5); \
- add a5, a5, a4; \
- ld x0, 0(a5); \
- add a5, a5, a4; \
- ld x0, 0(a5); \
- add a5, a5, a4; \
- ld x0, 0(a5); \
amoswap.d a4, a1, 0(a3); \
)
amoswap.d a4, a1, 0(a3); \
)
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sw a0, 0(a3); \
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sw a0, 0(a3); \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
amoswap.w a4, a1, 0(a3); \
)
amoswap.w a4, a1, 0(a3); \
)
# try again after a cache miss
TEST_CASE(4, a4, 0xfffffffffffff800, \
li a1, 0x0000000080000000; \
# try again after a cache miss
TEST_CASE(4, a4, 0xfffffffffffff800, \
li a1, 0x0000000080000000; \
- li a4, 16384; \
- add a5, a3, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
amoswap.w a4, a1, 0(a3); \
)
amoswap.w a4, a1, 0(a3); \
)
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sw a0, 0(a3); \
li a1, 0xfffffffffffff800; \
la a3, amo_operand; \
sw a0, 0(a3); \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
- nop; nop; nop; nop; \
amoxor.w a4, a1, 0(a3); \
)
amoxor.w a4, a1, 0(a3); \
)
# try again after a cache miss
TEST_CASE(4, a4, 0x7ffff800, \
li a1, 0xc0000001; \
# try again after a cache miss
TEST_CASE(4, a4, 0x7ffff800, \
li a1, 0xc0000001; \
- li a4, 16384; \
- add a5, a3, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
- add a5, a5, a4; \
- lw x0, 0(a5); \
amoxor.w a4, a1, 0(a3); \
)
amoxor.w a4, a1, 0(a3); \
)
.align 3
amo_operand:
.dword 0
.align 3
amo_operand:
.dword 0