mirror of
https://github.com/PiMaker/rvc.git
synced 2024-11-21 19:40:08 +00:00
7f47c7655d
Note that the 'riscv32ima-unknown-none-elf' target is not available by default in rustc, you need a patched version. I'm also pretty sure just converting the ELF binary to raw using objdump messes with stack and heap addresses, but it seems to work fine for now.
117 lines
2.1 KiB
Bash
Executable File
117 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
echo "==== Building rvc ===="
|
|
make clean
|
|
intercept-build make
|
|
|
|
CLEAN="$2"
|
|
|
|
function run_test {
|
|
pushd ./riscv-tests/isa
|
|
|
|
# rm "$1"
|
|
# rm "$1.text"
|
|
if [ ! -f "$1" ] || [ -n "$CLEAN" ]; then
|
|
make "$1"
|
|
fi
|
|
|
|
# riscv64-unknown-elf-objcopy -j .text.init -O binary "$1" "$1.text"
|
|
|
|
popd
|
|
|
|
echo "Running: ./rvc -e \"./riscv-tests/isa/$1\" -v 1"
|
|
timeout 5s ./rvc -e "./riscv-tests/isa/$1" -v 1
|
|
|
|
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
|
|
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
|
|
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
|
|
|
|
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
|
|
echo "./test.sh (all|rv32ui-p-foo...) [--clean]"
|
|
fi
|