# create executable
gcc -DCALL=\"${i%.0}.call\" -o $TMPNAME $TMPNAME.s $TESTMAIN $CALLCONV
- # count instructions
- $DUMPINSTR $TMPNAME call >/dev/null
- if [ $? != 0 ]; then
- echo "$bi FEHLGESCHLAGEN"
- continue
- fi
# extract the exported symbols from the .s file
#LABEL=`grep '.globl' $TMPNAME.s | sed 's/^.*\\.globl *\\([a-zA-Z0-9_]\\+\\).*$/\1/g'`
# this won't work, we need all actual labels
- LABEL=`grep '[a-zA-Z0-9_.$]\\+:' $TMPNAME.s | sed 's/^\\(.*[^a-zA-Z0-9_.$]\\)\\?\\([a-zA-Z0-9_.$]\\+\\):.*$/\2/g'`
+ grep '[a-zA-Z0-9_.$]\+:' $TMPNAME.s | sed 's/^\(.*[^a-zA-Z0-9_.$]\)\?\([a-zA-Z0-9_.$]\+\):.*$/\2/g' > $TMPNAME.uniq
- MATCHES=0
+ LABEL_ASM=`cat $TMPNAME.uniq`
+
+ # functionidentifiers from CALL-file
+ grep '[a-zA-Z_][a-zA-Z0-9_]*(.*)' ${i%.0}.call | sed 's/.*[^a-zA-Z_]\([a-zA-Z_][a-zA-Z0-9_]*\)(.*)\;/\1/g' | sort | uniq >> $TMPNAME.uniq
+
+ LABEL=`sort $TMPNAME.uniq | uniq -d`
+ rm $TMPNAME.uniq
+
+ rm -f $TMPNAME.trace
for j in $LABEL; do
- MATCHES="$MATCHES\\|$j"
+ # count instructions
+ $DUMPINSTR $TMPNAME $j > /dev/null
+ if [ $? != 0 ]; then
+ echo "$bi FEHLGESCHLAGEN"
+ continue
+ fi
done
+ MATCHES=0
+ for j in $LABEL_ASM; do
+ MATCHES="$MATCHES\\|$j"
+ done
+
# filter trace
grep "<\\($MATCHES\\)\\(+[0-9]*\\)\\?>:" $TMPNAME.trace > $TRACEDIR/$bi.trace
if [ -f $TEST/${bi}.instr ]; then
ti=`cat $TEST/$bi.instr`
else
- echo "err: fuer den testfall \"$bi\" existiert noch keine referenzdatei"
+ echo "err: fuer den testfall \"$bi\" existiert noch keine referenzdatei. instruktionen werden verworfen."
ti=0
fi
- echo "$bi: $ni (referenz: $ti)"
+
+ if [ $ni -gt $ti ]; then
+ #red
+ bcolor="\033[01;31m"
+ else
+ if [ $ni -eq $ti ]; then
+ #gray
+ bcolor="\033[01;30m"
+ else
+ #green
+ bcolor="\033[01;32m"
+ fi
+ fi
+
+ echo -e "$bcolor $bi: $ni (referenz: $ti) \033[0m"
echo "$bi $ni" >> $RESULT
- let gni=gni+$ni
- let gti=gti+$ti
+ if [ -f $TEST/${bi}.instr ]; then
+ let gni=gni+$ni
+ let gti=gti+$ti
+ fi
# remove waste
rm -f $TMPNAME $TMPNAME.s $TMPNAME.trace
echo "Statistik:"
echo "=========="
echo " $gni Instruktionen"
-echo " $gni Referenzinstruktionen"
+echo " $gti Referenzinstruktionen"