2021-05-28 13:08:21 +00:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
echo "==== Building rvc ===="
|
|
|
|
make clean
|
|
|
|
intercept-build make
|
|
|
|
|
2021-05-28 17:02:11 +00:00
|
|
|
CLEAN="$2"
|
|
|
|
|
2021-05-28 13:08:21 +00:00
|
|
|
function run_test {
|
|
|
|
pushd ./riscv-tests/isa
|
|
|
|
|
|
|
|
# rm "$1"
|
|
|
|
# rm "$1.text"
|
2021-05-28 17:02:11 +00:00
|
|
|
if [ ! -f "$1" ] || [ -n "$CLEAN" ]; then
|
|
|
|
make "$1"
|
|
|
|
fi
|
2021-05-28 13:08:21 +00:00
|
|
|
|
|
|
|
# riscv64-unknown-elf-objcopy -j .text.init -O binary "$1" "$1.text"
|
|
|
|
|
|
|
|
popd
|
|
|
|
|
2021-06-09 16:38:46 +00:00
|
|
|
echo "Running: ./rvc -e \"./riscv-tests/isa/$1\" -v 1"
|
|
|
|
timeout 5s ./rvc -e "./riscv-tests/isa/$1" -v 1
|
2021-05-28 13:08:21 +00:00
|
|
|
|
|
|
|
if [ $? -gt 0 ]; then
|
|
|
|
echo "Test failed!"
|
|
|
|
exit $?
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
if [ "$1" == "all" ]; then
|
|
|
|
TESTS="rv32ui-p-add
|
|
|
|
rv32ui-p-addi
|
|
|
|
rv32ui-p-and
|
|
|
|
rv32ui-p-andi
|
|
|
|
rv32ui-p-auipc
|
|
|
|
rv32ui-p-beq
|
|
|
|
rv32ui-p-bge
|
|
|
|
rv32ui-p-bgeu
|
|
|
|
rv32ui-p-blt
|
|
|
|
rv32ui-p-bltu
|
|
|
|
rv32ui-p-bne
|
|
|
|
rv32ui-p-fence_i
|
|
|
|
rv32ui-p-jal
|
|
|
|
rv32ui-p-jalr
|
|
|
|
rv32ui-p-lb
|
|
|
|
rv32ui-p-lbu
|
|
|
|
rv32ui-p-lh
|
|
|
|
rv32ui-p-lhu
|
|
|
|
rv32ui-p-lui
|
|
|
|
rv32ui-p-lw
|
|
|
|
rv32ui-p-or
|
|
|
|
rv32ui-p-ori
|
|
|
|
rv32ui-p-sb
|
|
|
|
rv32ui-p-sh
|
|
|
|
rv32ui-p-simple
|
|
|
|
rv32ui-p-sll
|
|
|
|
rv32ui-p-slli
|
|
|
|
rv32ui-p-slt
|
|
|
|
rv32ui-p-slti
|
|
|
|
rv32ui-p-sltiu
|
|
|
|
rv32ui-p-sltu
|
|
|
|
rv32ui-p-sra
|
|
|
|
rv32ui-p-srai
|
|
|
|
rv32ui-p-srl
|
|
|
|
rv32ui-p-srli
|
|
|
|
rv32ui-p-sub
|
|
|
|
rv32ui-p-sw
|
|
|
|
rv32ui-p-xor
|
|
|
|
rv32ui-p-xori
|
|
|
|
rv32um-p-div
|
|
|
|
rv32um-p-divu
|
|
|
|
rv32um-p-mul
|
|
|
|
rv32um-p-mulh
|
|
|
|
rv32um-p-mulhsu
|
|
|
|
rv32um-p-mulhu
|
|
|
|
rv32um-p-rem
|
|
|
|
rv32um-p-remu
|
2021-05-28 17:02:11 +00:00
|
|
|
rv32ua-p-lrsc
|
|
|
|
rv32ua-p-amoadd_w
|
|
|
|
rv32ua-p-amoand_w
|
|
|
|
rv32ua-p-amomaxu_w
|
|
|
|
rv32ua-p-amomax_w
|
|
|
|
rv32ua-p-amominu_w
|
|
|
|
rv32ua-p-amomin_w
|
|
|
|
rv32ua-p-amoor_w
|
|
|
|
rv32ua-p-amoswap_w
|
|
|
|
rv32ua-p-amoxor_w
|
|
|
|
rv32mi-p-mcsr
|
|
|
|
rv32mi-p-csr
|
2021-06-03 20:42:59 +00:00
|
|
|
rv32si-p-csr
|
|
|
|
rv32si-p-scall"
|
|
|
|
|
|
|
|
# excluded tests:
|
|
|
|
# rv32mi-p-scall, successful, but defined as "success if never returning"
|
|
|
|
# rv32mi-p-shamt, newer spec says ignoring is OK, so we do that instead
|
|
|
|
# rv32mi-p-sbreak, breakpoint, I believe from debug spec, no need
|
|
|
|
# rv32mi-p-illegal, requires virtual machine paging? (TVM)
|
|
|
|
# rv32mi-p-ma_addr, misaligned address access is ignored (this one passes though?)
|
|
|
|
# rv32mi-p-ma_fetch, ignored for same reason, fails though
|
|
|
|
|
2021-05-28 13:08:21 +00:00
|
|
|
for t in $TESTS; do
|
|
|
|
if [[ "$t" =~ ^# ]]; then continue; fi
|
|
|
|
echo
|
|
|
|
echo "==== TEST: $t ===="
|
|
|
|
echo
|
|
|
|
run_test "$t"
|
|
|
|
done
|
|
|
|
|
|
|
|
echo
|
|
|
|
echo "All tests done!"
|
|
|
|
elif [ -n "$1" ]; then
|
|
|
|
run_test "$1"
|
|
|
|
else
|
2021-05-28 17:02:11 +00:00
|
|
|
echo "./test.sh (all|rv32ui-p-foo...) [--clean]"
|
2021-05-28 13:08:21 +00:00
|
|
|
fi
|