--- uae/src/md-68k/cpuopti 2018/04/24 16:40:31 1.1.1.1 +++ uae/src/md-68k/cpuopti 2018/04/24 16:43:03 1.1.1.2 @@ -27,7 +27,7 @@ if($#ARGV >= $[) { while(<>) { print; - last if /^_op_[0-9a-f]+:$/; + last if /^_op_[0-9a-f_]+:$/; } ############################################################################### @@ -39,12 +39,12 @@ while($last_func = &analyse_function) { while(&optimize_function) {} &dump_function; print $last_func;$_ = $last_func;chop; - print STDERR "$_\r"; + print STDERR "$_ ($num_opt) \r"; } while(&optimize_function) {} &dump_function; -print STDERR "$num_opt optimisations\n"; +print STDERR "$num_opt optimisations \n"; exit 0; @@ -145,7 +145,11 @@ sub optimize_function { for($k = $i; $line[$k] !~ /$An/; $k++) {} if($k == $j) { $N1 =~ s/^\+//; $N2 =~ y/+/-/; - $line[$i] =~ s/_regs(\+?)$N1/$An@\($N1$N2\)/g; + if($N1 + $N2) { + $line[$i] =~ s/_regs(\+?)$N1/$An@\($N1$N2\)/g; + } else { + $line[$i] =~ s/_regs(\+?)$N1/$An@/g; + } $ext = $line[$j]; for($k=$j; $k>$i; --$k) {$line[$k] = $line[$k-1];} $line[$i] = $ext; @@ -166,7 +170,11 @@ sub optimize_function { if($line[$j] =~ /_regs(\+\d+)?/) { $N2 = $1; $N1 =~ y/+/-/; $tmp = $N2; $tmp =~ s/[+]/\\+/; - $line[$j] =~ s/_regs$tmp/$An@\($N2$N1\)/g; + if($N1 + $N2) { + $line[$j] =~ s/_regs$tmp/$An@\($N2$N1\)/g; + } else { + $line[$j] =~ s/_regs$tmp/$An@/g; + } $line[$j] =~ s/\(\)//g; ++$num_opt; } @@ -249,7 +257,7 @@ sub analyse_function { $lineno = 0; while(<>) { next if /^#(NO_)?APP/; - last if /^_op_[0-9a-f]+:$/; + last if /^_op_[0-9a-f_]+:$/; $line[$lineno++] = $_; } return $_; @@ -260,7 +268,9 @@ sub analyse_function { sub dump_function { local($i); for($i=0;$i < $lineno; ++$i) { - print $line[$i]; + $_ = $line[$i]; + s/lea\s(a[0-7])\@\(\),/movel $1,/; + print; } }