oppc: emit header include directive
[openpower-isa.git] / src / openpower / oppc / __main__.py
index e3a12f9633a1cb491e0b26b076681721865399f7..692897128cb671aebac89c0e1eb659650a1c954f 100644 (file)
@@ -13,6 +13,7 @@ import openpower.oppc.pc_parser as pc_parser
 import openpower.oppc.pc_pseudocode as pc_pseudocode
 
 
+table = {}
 lexer = pc_lexer.IndentLexer(debug=False)
 parser = pc_parser.Parser(lexer=lexer)
 db = Database(find_wiki_dir())
@@ -21,19 +22,20 @@ for insn in db:
         continue
     try:
         tree = parser.parse(code="\n".join(insn.pcode))
-        for (level, line) in pc_code.code(insn=insn, root=tree):
-            print(f"{' ' * 4 * level}{line}")
+        code = pc_code.code(insn=insn, root=tree)
+        handler = ("oppc_handler_" + insn.name.replace(".", "_"))
+        table[handler] = code
     except Exception as exc:
         print(insn.name)
         print(insn.pcode)
         raise exc
 
-insn = db["tdi"]
-code = "\n".join(insn.pcode)
-tree = parser.parse(code=code)
-print(tree)
-for (level, line) in pc_pseudocode.pseudocode(tree):
-    print(f"{' ' * 4 * level}{line}")
-
-for (level, line) in pc_code.code(insn=insn, root=tree):
-    print(f"{' ' * 4 * level}{line}")
+print("#include <oppc.h>")
+print()
+for (handler, code) in table.items():
+    print("void")
+    print(f"{handler}(struct oppc_value const *insn) {{")
+    for (level, line) in code:
+        print(f"{' ' * 4 * (level + 1)}{line}")
+    print(f"}}")
+    print()