66 lines
2 KiB
Bash
Executable file
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
|