1 import argparse
as _argparse
3 import functools
as _functools
6 from openpower
.decoder
.power_enums
import (
7 find_wiki_dir
as _find_wiki_dir
,
9 from openpower
.decoder
.power_insn
import (
10 Database
as _Database
,
11 Instruction
as _Instruction
,
12 PrefixedInstruction
as _PrefixedInstruction
,
13 SVP64Instruction
as _SVP64Instruction
,
17 class ByteOrder(_enum
.Enum
):
22 return self
.name
.lower()
25 def load(ifile
, byteorder
, **_
):
26 db
= _Database(_find_wiki_dir())
29 prefix
= ifile
.read(4)
35 prefix
= _Instruction(value
=prefix
, byteorder
=byteorder
, db
=db
)
36 if prefix
.major
!= 0x1:
39 suffix
= ifile
.read(4)
46 return _SVP64Instruction(prefix
=prefix
, suffix
=suffix
,
47 byteorder
=byteorder
, db
=db
)
48 except _SVP64Instruction
.PrefixError
:
49 return _PrefixedInstruction(prefix
=prefix
, suffix
=suffix
,
50 byteorder
=byteorder
, db
=db
)
61 yield from insn
.disassemble()
65 parser
= _argparse
.ArgumentParser()
66 parser
.add_argument("ifile", nargs
="?",
67 type=_argparse
.FileType("rb"), default
=_sys
.stdin
.buffer)
68 parser
.add_argument("ofile", nargs
="?",
69 type=_argparse
.FileType("w"), default
=_sys
.stdout
)
70 parser
.add_argument("-b", "--byteorder",
71 type=ByteOrder
, default
=ByteOrder
.LITTLE
)
73 args
= dict(vars(parser
.parse_args()))
76 byteorder
= args
["byteorder"]
78 insns
= load(ifile
, byteorder
)
79 for line
in dump(insns
):
80 print(line
, file=ofile
)
83 if __name__
== "__main__":