oppc: refactor output
authorDmitry Selyutin <ghostmansd@gmail.com>
Tue, 16 Jan 2024 19:09:45 +0000 (22:09 +0300)
committerDmitry Selyutin <ghostmansd@gmail.com>
Tue, 16 Jan 2024 19:10:08 +0000 (22:10 +0300)
src/openpower/oppc/__main__.py

index e3a12f9633a1cb491e0b26b076681721865399f7..846f3ab82b8e5f1c736bf1fdebc4aa20ce8bacdc 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,18 @@ 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}")
+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()