summaryrefslogtreecommitdiff
path: root/vere/ext/nasm/misc/fmtinsns.pl
diff options
context:
space:
mode:
Diffstat (limited to 'vere/ext/nasm/misc/fmtinsns.pl')
-rwxr-xr-xvere/ext/nasm/misc/fmtinsns.pl40
1 files changed, 40 insertions, 0 deletions
diff --git a/vere/ext/nasm/misc/fmtinsns.pl b/vere/ext/nasm/misc/fmtinsns.pl
new file mode 100755
index 0000000..848ee2d
--- /dev/null
+++ b/vere/ext/nasm/misc/fmtinsns.pl
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+#
+# Re-align the columns in insns.dat, and enforce case conventions
+#
+
+@cols = (0, 16, 48, 96);
+
+while ($line = <STDIN>) {
+ chomp $line;
+ if ($line !~ /^\s*(\;.*|)$/) {
+ ($ln = $line) =~ s/\s+$//;
+ if ($line =~ /^\s*(\S+)\s+(\S+)\s+(\S+|\[.*\])\s+(\S+)\s*$/) {
+ @fields = ($1, $2, $3, $4);
+ $fields[0] = "\U$fields[0]" unless ($fields[0] =~ /^[^a-z]+cc$/);
+ $fields[3] =~ s/\,+$//;
+ $fields[3] = "\U$fields[3]" unless ($fields[3] eq 'ignore');
+ $c = 0;
+ $line = '';
+ for ($i = 0; $i < scalar(@fields); $i++) {
+ if ($i > 0 && $c >= $cols[$i]) {
+ $line .= ' ';
+ $c++;
+ }
+ while ($c < $cols[$i]) {
+ $line .= "\t";
+ $c = ($c+8) & ~7;
+ }
+ $line .= $fields[$i];
+ for ($j = 0; $j < length($fields[$i]); $j++) {
+ if (substr($fields[$i], $j, 1) eq "\t") {
+ $c = ($c+8) & ~7;
+ } else {
+ $c++;
+ }
+ }
+ }
+ }
+ }
+ print $line, "\n";
+}