scripts: fix... damn regex *sigh*
[testub10.git] / scripts / bench.sh
index 4973e7b2e9261da2faf64e0d912b0cffad48a83c..51aa12bae441f153734ef3a669795cd361ca1766 100755 (executable)
@@ -48,24 +48,36 @@ for i in $TEST/*.0; do
     # 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
 
@@ -73,14 +85,30 @@ for i in $TEST/*.0; do
        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