From: ian Date: Tue, 20 Dec 2005 20:36:37 +0000 (+0000) Subject: before add symbol map to to-insn-aliases X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=fe00c878d5e3c8ffec49cd693b0efd2d4bba64e4;p=trains.git before add symbol map to to-insn-aliases --- diff --git a/iwjpictest/to-insn-aliases b/iwjpictest/to-insn-aliases index c6c7e0c..e50837a 100755 --- a/iwjpictest/to-insn-aliases +++ b/iwjpictest/to-insn-aliases @@ -62,13 +62,18 @@ sub printaliases () { sub mapinsn { my (@r) = @_; my ($org_opcode, @org_args) = @_; - my ($m,$i,$mismatch,$specified,$pattern,%arg); + my ($m,$i,$mismatch,$specified,$pattern,%arg,$fa,$aa); MAPPING: foreach $m (@{ $mapping{$org_opcode} }) { next unless @org_args == @{ $m->{ActualArgs} }; for ($i=0, $mismatch=0; !$mismatch && $i<@org_args; $i++) { $specified= $org_args[$i]; $pattern= $m->{ActualArgs}[$i]; - $pattern =~ s/W/WREG/; + if ($pattern eq 'W') { + $pattern= 'WREG|0xfe8|0xe8'; + $pattern= "(?:$pattern)"; + } elsif ($pattern =~ m/^[01]$/) { + $pattern= "(?:0x)?$pattern"; + } if ($pattern =~ m/^[a-z]$/) { $arg{$&}= $specified; } elsif ($specified !~ m/^\s*$pattern\s*$/) { @@ -77,8 +82,12 @@ sub mapinsn { } # yay! @r= ($m->{Macro}); - map { push @r, $arg{$_} if m/^[a-z]$/; } @{ $m->{FormalArgs} }; - last; + foreach $fa (@{ $m->{FormalArgs} }) { + next unless $fa =~ m/^[a-z]$/; + $aa= $arg{$fa}; + push @r, $aa; + } + last if @r==1; } return @r; } @@ -88,7 +97,7 @@ sub processfile () { while (<>) { chomp; $comment= s/\;.*// ? $& : ''; - if (m/^(\w*\s+)(\w+)(\s+)(.*?)(\s*)$/) { + if (m/^((?:[0-9a-f]{6}\:\s*)?\w*\s+)(\w+)(\s+)(.*?)(\s*)$/) { ($lhs,$opcode,$midspc,$args,$rhs) = ($1,$2,$3,$4,$5); @args= split /\,/, $args; ($opcode, @args) = mapinsn($opcode, @args);