chiark / gitweb /
to-insn-aliases wip; before redo from aliases
authorian <ian>
Tue, 20 Dec 2005 19:27:24 +0000 (19:27 +0000)
committerian <ian>
Tue, 20 Dec 2005 19:27:24 +0000 (19:27 +0000)
iwjpictest/to-insn-aliases [new file with mode: 0755]

diff --git a/iwjpictest/to-insn-aliases b/iwjpictest/to-insn-aliases
new file mode 100755 (executable)
index 0000000..1ed00fb
--- /dev/null
@@ -0,0 +1,44 @@
+#!/usr/bin/perl -p
+chomp;
+$comment= s/\;.*// ? $& : '';
+if (m/^(\w*\s+)(\w+)(\s+)(.*?)(\s*)$/) {
+    ($lhs,$opcode,$midspc,$args,$rhs) = ($1,$2,$3,$4,$5);
+    if ($opcode =~ m/^(b(c|s|tg)f|btfs[sc])$/ &&
+       $args =~ m/\,.*\,/ &&
+       $args =~ s/\,\s*0$/ ' 'x length($&) /e) {
+       $opcode =~ s/f/_f/;
+       $opcode =~ s/ss$/_if0/;
+       $opcode =~ s/sc$/_if1/;
+    } elsif ($opcode =~ m/^(mul)wf$/ &&
+       $args =~ m/\,/ &&
+       $args =~ s/\,\s*0$/ ' 'x length($&) /e) {
+       $opcode= 'mul_wf';
+    } elsif ($opcode =~ m/^((and|add|xor|ior)wf|addwfc|subwfb)$/ &&
+            $args =~ m/\,.*\,/ &&
+            $args =~ s/\,\s*([01])$/ ' 'x length($&) /e) {
+       $opcode =~ s/wf/ $1 ? 'wff' : 'wfw' /e;
+    } elsif ($opcode =~ m/^(com|dec|inc|neg|r[lr]n?c|neg|swap)f$/ &&
+            $args =~ m/\,.*\,/ &&
+            $args =~ s/\,\s*([01])$/ ' 'x length($&) /e) {
+       $opcode =~ s/f/ $1 ? 'f' : 'fw' /e;
+    } elsif ($opcode =~ m/^(and|add|xor|ior|mul|mov)lw$/) {
+       $opcode =~ s/lw$/_lw/;
+    } elsif ($opcode =~ m/^b(n?(?:c|n|ov|z))$/) {
+       $opcode =~ s/^b/bra_/;
+    } elsif ($opcode =~ m/^movff$/) {
+       $opcode =~ s/ff/_ff/;
+    } elsif ($opcode =~ m/^macro$/) {
+       $macro= $lhs;
+       $macro =~ s/\s.*//;
+       $macro{$macro}= 1;
+    } elsif ($opcode =~ m/^(res|equ|include|udata|udata_acs)$/ ||
+            $opcode =~ m/^(ifn?def)$/ ||
+            $opcode =~ m/^(r?call|bra|goto)$/ ||
+            $opcode =~ m/_/) {
+    } elsif ($macro{$opcode}) {
+    } else {
+       warn "unknown $opcode $args";
+    }
+    $_= $lhs.$opcode.$midspc.$args.$rhs;
+}
+$_.= $comment."\n";