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 WordInstruction
as _WordInstruction
,
13 PrefixedInstruction
as _PrefixedInstruction
,
14 SVP64Instruction
as _SVP64Instruction
,
16 from openpower
.decoder
.selectable_int
import (
17 SelectableInt
as _SelectableInt
,
18 FieldSelectableInt
as _FieldSelectableInt
22 class ByteOrder(_enum
.Enum
):
27 return self
.name
.lower()
30 def load(ifile
, byteorder
, **_
):
31 byteorder
= str(byteorder
)
34 prefix
= ifile
.read(4)
40 prefix
= _WordInstruction
.integer(value
=prefix
, byteorder
=byteorder
)
42 suffix
= ifile
.read(4)
48 suffix
= _WordInstruction
.integer(value
=suffix
, byteorder
=byteorder
)
51 insn
= _SVP64Instruction
.pair(prefix
=prefix
, suffix
=suffix
)
52 if insn
.prefix
.id != 0b11:
53 insn
= _PrefixedInstruction
.pair(prefix
=prefix
, suffix
=suffix
)
61 db
= _Database(_find_wiki_dir())
63 yield from insn
.disassemble(db
=db
)
67 parser
= _argparse
.ArgumentParser()
68 parser
.add_argument("ifile", nargs
="?",
69 type=_argparse
.FileType("rb"), default
=_sys
.stdin
.buffer)
70 parser
.add_argument("ofile", nargs
="?",
71 type=_argparse
.FileType("w"), default
=_sys
.stdout
)
72 parser
.add_argument("-b", "--byteorder",
73 type=ByteOrder
, default
=ByteOrder
.LITTLE
)
75 args
= dict(vars(parser
.parse_args()))
78 byteorder
= args
["byteorder"]
80 insns
= load(ifile
, byteorder
)
81 for line
in dump(insns
):
82 print(line
, file=ofile
)
85 if __name__
== "__main__":