chiark / gitweb /
before add symbol map to to-insn-aliases
authorian <ian>
Tue, 20 Dec 2005 20:36:37 +0000 (20:36 +0000)
committerian <ian>
Tue, 20 Dec 2005 20:36:37 +0000 (20:36 +0000)
iwjpictest/to-insn-aliases

index c6c7e0c7596bc23a6e283a31ad4472ba2fb15954..e50837a2e13596d22120f0b97485a6d6141d64a7 100755 (executable)
@@ -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);