Projet_SETI_RISC-V/riscv-gnu-toolchain/test/benchmarks/dhrystone/check
2023-03-06 14:48:14 +01:00

66 lines
2 KiB
Bash
Executable file

#!/bin/bash
set -e
unset cc
unset objdump
unset march
unset mabi
unset specs
unset sim
unset out
c=()
while [[ "$1" != "" ]]
do
case "$1" in
-cc=*) cc="$(echo "$1" | cut -d= -f2-)";;
-objdump=*) objdump="$(echo "$1" | cut -d= -f2-)";;
-march=*) march="$(echo "$1" | cut -d= -f2-)";;
-mabi=*) mabi="$(echo "$1" | cut -d= -f2-)";;
-specs=*) specs=("$1");;
-sim=*) sim="$(echo "$1" | cut -d= -f2-)";;
-out=*) out="$(echo "$1" | cut -d= -f2-)";;
*.c) c+=("$1");;
*) echo "unknown argument $1" >&2; exit 1;;
esac
shift
done
echo "ERROR: $march-$mabi failed to run" >$out
tempdir=$(mktemp -d)
trap "rm -rf $tempdir" EXIT
for f in ${c[@]}
do
$cc -c $f -march=$march -mabi=$mabi $specs -O3 -fno-common -fno-inline -o $tempdir/$(basename $f).o -static -Wno-all
done
$cc -march=$march -mabi=$mabi $specs $tempdir/*.o -o $tempdir/dhrystone
$objdump -d $tempdir/dhrystone > ~/dump
begin_pc=$($objdump -d $tempdir/dhrystone | grep 'Begin_Time' | grep -e 'sd' -e 'sw' | cut -d: -f1 | xargs echo)
end_pc=$($objdump -d $tempdir/dhrystone | grep 'End_Time' | grep -e 'sd' -e 'sw' | cut -d: -f1 | xargs echo)
$sim -Wq,-singlestep -Wq,-d -Wq,exec $tempdir/dhrystone >& $tempdir/log
begin_cycle="$(grep -n 00$begin_pc $tempdir/log | cut -d: -f1)"
end_cycle="$(grep -n 00$end_pc $tempdir/log | cut -d: -f1)"
cycles="$(echo $((end_cycle - begin_cycle)) | rev | cut -c4- | rev)"
unset max_cycles
case "$march-$mabi" in
rv32i-ilp32) max_cycles=377;;
rv32iac-ilp32) max_cycles=377;;
rv32im-ilp32) max_cycles=304;;
rv32imac-ilp32) max_cycles=304;;
rv32imafc-ilp32f)max_cycles=304;;
rv64imac-lp64) max_cycles=287;;
rv64imafdc-lp64) max_cycles=287;;
rv64imafdc-lp64d)max_cycles=287;;
*) echo "ERROR: Unknown ISA-ABI pair: $march-$mabi" >$out; exit 0;;
esac
if test $cycles -le $max_cycles
then
echo "PASS: $march-mabi in $cycles instructions (max is $max_cycles)" >$out
else
echo "FAIL: $march-mabi in $cycles instructions (max is $max_cycles)" >$out
fi