1 # python code-writer for OpenPOWER ISA pseudo-code parsing
7 from openpower
.decoder
.pseudo
.functionreader
import ISAFunctions
8 from openpower
.decoder
.power_pseudo
import convert_to_pure_python
11 def get_isafn_src_dir():
12 fdir
= os
.path
.abspath(os
.path
.dirname(__file__
))
13 fdir
= os
.path
.split(fdir
)[0]
14 return os
.path
.join(fdir
, "isafunctions")
18 # auto-generated by pyfnwriter.py, do not edit or commit
20 from openpower.decoder.helpers import ISACallerHelper
21 from openpower.decoder.selectable_int import SelectableInt
22 from openpower.decoder.selectable_int import selectconcat as concat
28 class PyISAFnWriter(ISAFunctions
):
30 ISAFunctions
.__init
__(self
)
31 self
.pages_written
= []
33 def write_pysource(self
, pagename
):
34 self
.pages_written
.append(pagename
)
35 function
= self
.fns
[pagename
]
36 isadir
= get_isafn_src_dir()
37 os
.makedirs(isadir
, exist_ok
=True)
38 fname
= os
.path
.join(isadir
, "%s.py" % pagename
)
39 with
open(fname
, "w") as f
:
40 f
.write(header
% function
['desc']) # write out header
41 # go through all instructions
42 pcode
= function
['pcode']
44 pycode
= convert_to_pure_python(pcode
, True)
47 def write_isa_class(self
):
48 isadir
= get_isafn_src_dir()
49 fname
= os
.path
.join(isadir
, "all.py")
51 with
open(fname
, "w") as f
:
53 f
.write('# auto-generated by pyfnwriter.py: do not edit or commit\n')
54 f
.write('from openpower.decoder.helpers import ISACallerHelper\n')
55 for page
in self
.pages_written
:
56 module
= 'openpower.decoder.isafunctions.' + page
57 helper
= 'ISACallerFnHelper_' + page
58 helpers
.append(helper
)
59 f
.write('from %s import ISACallerFnHelper as %s\n' % (module
, helper
))
62 f
.write('class ISACallerFnHelper(%s):\n' % ', '.join(helpers
+ ['ISACallerHelper']))
68 write_isa_class
= True
69 if len(sys
.argv
) == 1: # quick way to do it
71 sources
= isa
.fns
.keys()
73 sources
= sys
.argv
[1:]
74 if sources
[0] == "noall": # don't rewrite all.py
75 write_isa_class
= False
77 print ("sources", write_isa_class
, sources
)
78 for source
in sources
:
79 isa
.write_pysource(source
)
83 if __name__
== '__main__':