1 import argparse
as _argparse
5 from openpower
.decoder
.power_enums
import (
6 find_wiki_dir
as _find_wiki_dir
,
8 from openpower
.decoder
.power_insn
import (
10 WordInstruction
as _WordInstruction
,
11 PrefixedInstruction
as _PrefixedInstruction
,
12 SVP64Instruction
as _SVP64Instruction
,
16 class ByteOrder(_enum
.Enum
):
21 return self
.name
.lower()
24 def load(ifile
, byteorder
, **_
):
25 byteorder
= str(byteorder
)
28 prefix
= ifile
.read(4)
34 prefix
= _WordInstruction
.integer(value
=prefix
, byteorder
=byteorder
)
36 suffix
= ifile
.read(4)
43 suffix
= _WordInstruction
.integer(value
=suffix
, byteorder
=byteorder
)
46 insn
= _SVP64Instruction
.pair(prefix
=prefix
, suffix
=suffix
)
47 if insn
.prefix
.id != 0b11:
48 insn
= _PrefixedInstruction
.pair(prefix
=prefix
, suffix
=suffix
)
56 db
= _Database(_find_wiki_dir())
58 yield from insn
.disassemble(db
=db
)
62 parser
= _argparse
.ArgumentParser()
63 parser
.add_argument("ifile", nargs
="?",
64 type=_argparse
.FileType("rb"), default
=_sys
.stdin
.buffer)
65 parser
.add_argument("ofile", nargs
="?",
66 type=_argparse
.FileType("w"), default
=_sys
.stdout
)
67 parser
.add_argument("-b", "--byteorder",
68 type=ByteOrder
, default
=ByteOrder
.LITTLE
)
70 args
= dict(vars(parser
.parse_args()))
73 byteorder
= args
["byteorder"]
75 insns
= load(ifile
, byteorder
)
76 for line
in dump(insns
):
77 print(line
, file=ofile
)
80 if __name__
== "__main__":