pysvp64dis: remove obsolete imports
[openpower-isa.git] / src / openpower / sv / trans / pysvp64dis.py
1 import argparse as _argparse
2 import enum as _enum
3 import sys as _sys
4
5 from openpower.decoder.power_enums import (
6 find_wiki_dir as _find_wiki_dir,
7 )
8 from openpower.decoder.power_insn import (
9 Database as _Database,
10 WordInstruction as _WordInstruction,
11 PrefixedInstruction as _PrefixedInstruction,
12 SVP64Instruction as _SVP64Instruction,
13 )
14
15
16 class ByteOrder(_enum.Enum):
17 LITTLE = "little"
18 BIG = "big"
19
20 def __str__(self):
21 return self.name.lower()
22
23
24 def load(ifile, byteorder, **_):
25 byteorder = str(byteorder)
26
27 while True:
28 prefix = ifile.read(4)
29 length = len(prefix)
30 if length == 0:
31 return
32 elif length < 4:
33 raise IOError(prefix)
34 prefix = _WordInstruction.integer(value=prefix, byteorder=byteorder)
35
36 suffix = ifile.read(4)
37 length = len(suffix)
38 if length == 0:
39 yield prefix
40 elif length < 4:
41 raise IOError(suffix)
42 suffix = _WordInstruction.integer(value=suffix, byteorder=byteorder)
43
44 if prefix.po == 0x1:
45 insn = _SVP64Instruction.pair(prefix=prefix, suffix=suffix)
46 if insn.prefix.id != 0b11:
47 insn = _PrefixedInstruction.pair(prefix=prefix, suffix=suffix)
48 yield insn
49 else:
50 yield prefix
51 yield suffix
52
53
54 def dump(insns, **_):
55 db = _Database(_find_wiki_dir())
56 for insn in insns:
57 yield from insn.disassemble(db=db)
58
59
60 def main():
61 parser = _argparse.ArgumentParser()
62 parser.add_argument("ifile", nargs="?",
63 type=_argparse.FileType("rb"), default=_sys.stdin.buffer)
64 parser.add_argument("ofile", nargs="?",
65 type=_argparse.FileType("w"), default=_sys.stdout)
66 parser.add_argument("-b", "--byteorder",
67 type=ByteOrder, default=ByteOrder.LITTLE)
68
69 args = dict(vars(parser.parse_args()))
70 ifile = args["ifile"]
71 ofile = args["ofile"]
72 byteorder = args["byteorder"]
73
74 insns = load(ifile, byteorder)
75 for line in dump(insns):
76 print(line, file=ofile)
77
78
79 if __name__ == "__main__":
80 main()