Index: src/trusted/validator_mips/dgen/dgen_dump.py |
diff --git a/src/trusted/validator_mips/dgen/dgen_dump.py b/src/trusted/validator_mips/dgen/dgen_dump.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..8a6c53e7cb57736e72c62d1a5e46f5942e69ef51 |
--- /dev/null |
+++ b/src/trusted/validator_mips/dgen/dgen_dump.py |
@@ -0,0 +1,50 @@ |
+#!/usr/bin/python |
+# |
+# Copyright 2012 The Native Client Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can |
+# be found in the LICENSE file. |
+# Copyright 2012, Google Inc. |
+# |
+ |
+""" |
+Produces a table from the in-memory representation. Useful for storing the |
+optimized table for later use. |
+""" |
+ |
+import dgen_opt |
+ |
+def dump_tables(tables, out): |
+ """Dumps the given tables into a text file. |
+ |
+ Args: |
+ tables: list of Table objects to process. |
+ out: an output stream. |
+ """ |
+ if len(tables) == 0: raise Exception('No tables provided.') |
+ |
+ _generate_header(out) |
+ for t in tables: |
+ _generate_table(t, out) |
+ |
+def _generate_header(out): |
+ # TODO do we need a big ridiculous license banner in generated code? |
+ out.write('# DO NOT EDIT: GENERATED CODE\n') |
+ |
+ |
+def _generate_table(t, out): |
+ rows = dgen_opt.optimize_rows(t.rows) |
+ print ('Table %s: %d rows minimized to %d.' |
+ % (t.name, len(t.rows), len(rows))) |
+ |
+ out.write('\n') |
+ out.write('-- %s (%s)\n' % (t.name, t.citation)) |
+ num_cols = len(rows[0].patterns) |
+ headers = ['pat%- 31s' % (str(n) + '(31:0)') for n in range(0, num_cols)] |
+ out.write(''.join(headers)) |
+ out.write('\n') |
+ for row in rows: |
+ out.write(''.join(['%- 34s' % p for p in row.patterns])) |
+ out.write(row.action) |
+ if row.arch: |
+ out.write('(%s)' % row.arch) |
+ out.write('\n') |