fmtinsns.pl: handle compiler fields; do some case mangling
authorH. Peter Anvin <hpa@zytor.com>
Fri, 23 May 2008 23:59:59 +0000 (16:59 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Fri, 23 May 2008 23:59:59 +0000 (16:59 -0700)
Handle compiler-generated fields, and at least try to do some case
mangling.

misc/fmtinsns.pl

index 9acde06..848ee2d 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 #
-# Re-align the columns in insns.dat
+# Re-align the columns in insns.dat, and enforce case conventions
 #
 
 @cols = (0, 16, 48, 96);
@@ -9,21 +9,30 @@ while ($line = <STDIN>) {
     chomp $line;
     if ($line !~ /^\s*(\;.*|)$/) {
        ($ln = $line) =~ s/\s+$//;
-       @fields = split(/\s+/, $line);
-       if (scalar(@fields) == 4) {
+       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;
+                   $c = ($c+8) & ~7;
                }
                $line .= $fields[$i];
-               $c += length($fields[$i]);
+               for ($j = 0; $j < length($fields[$i]); $j++) {
+                   if (substr($fields[$i], $j, 1) eq "\t") {
+                       $c = ($c+8) & ~7;
+                   } else {
+                       $c++;
+                   }
+               }
            }
        }
     }