e3a12f9633a1cb491e0b26b076681721865399f7
[openpower-isa.git] / src / openpower / oppc / __main__.py
1 import glob
2 import io
3 import re
4
5 from openpower.decoder.power_enums import (
6 find_wiki_dir,
7 )
8 from openpower.insndb.core import Database
9
10 import openpower.oppc.pc_code as pc_code
11 import openpower.oppc.pc_lexer as pc_lexer
12 import openpower.oppc.pc_parser as pc_parser
13 import openpower.oppc.pc_pseudocode as pc_pseudocode
14
15
16 lexer = pc_lexer.IndentLexer(debug=False)
17 parser = pc_parser.Parser(lexer=lexer)
18 db = Database(find_wiki_dir())
19 for insn in db:
20 if insn.name == "sync":
21 continue
22 try:
23 tree = parser.parse(code="\n".join(insn.pcode))
24 for (level, line) in pc_code.code(insn=insn, root=tree):
25 print(f"{' ' * 4 * level}{line}")
26 except Exception as exc:
27 print(insn.name)
28 print(insn.pcode)
29 raise exc
30
31 insn = db["tdi"]
32 code = "\n".join(insn.pcode)
33 tree = parser.parse(code=code)
34 print(tree)
35 for (level, line) in pc_pseudocode.pseudocode(tree):
36 print(f"{' ' * 4 * level}{line}")
37
38 for (level, line) in pc_code.code(insn=insn, root=tree):
39 print(f"{' ' * 4 * level}{line}")