diff --git a/m1/perf/eval.pl b/m1/perf/eval.pl index 24d0f17..4f62ef1 100755 --- a/m1/perf/eval.pl +++ b/m1/perf/eval.pl @@ -1,18 +1,39 @@ #!/usr/bin/perl -while (<>) { - last if /per-vertex PFPU fragment/; + +sub flush +{ + for (sort keys %use) { + print "$_ = ".$reg{$_}."\n"; + } + print $res; } -$i = 0; + while (<>) { + if (/FPVM fragment:/) { + &flush if $i; + undef %tmp; + undef $i; + } + if (/PFPU fragment:/) { + undef $res; + undef %reg; + undef @val; + %use = %tmp; + $i = 0; + } + + $tmp{"R$1"} = 1 if /^\d+:.*-> R0(\d+)/; + next unless defined $i; + next unless /^(\d+):\s+(\S+)\s+(R\d+)?(,(R\d+))?.*?(->\s+(R\d+))?\s*$/; # 1 2 3 4 5 6 7 ($c, $op, $a, $b, $d) = ($1, $2, $3, $5, $7); undef $e; $e = $1 if /E=(\d+)>/; - die if $c != $i; + die "($i) $_" if $c != $i; $a = $reg{$a} if defined $reg{$a}; $b = $reg{$b} if defined $reg{$b}; @@ -20,7 +41,7 @@ while (<>) { if ($op eq "IF") { $expr = "(IF ".$reg{"R002"}." $a $b)"; } elsif ($op eq "VECTOUT") { - $res = "$a\n$b\n"; + $res = "A = $a\nB = $b\n"; } elsif (defined $b) { $expr = "($op $a $b)"; } elsif (defined $a) { @@ -33,5 +54,4 @@ while (<>) { $reg{$d} = $val[$i] if defined $d; $i++; } - -print $res; +&flush;