import sys
import shutil
import subprocess
-from soc.decoder.pseudo.pagereader import ISA
-from soc.decoder.power_pseudo import convert_to_python
-from soc.decoder.orderedset import OrderedSet
-from soc.decoder.isa.caller import create_args
+from openpower.decoder.pseudo.pagereader import ISA
+from openpower.decoder.power_pseudo import convert_to_python
+from openpower.decoder.orderedset import OrderedSet
+from openpower.decoder.isa.caller import create_args
def get_isasrc_dir():
header = """\
# auto-generated by pywriter.py, do not edit or commit
-from soc.decoder.isa.caller import inject, instruction_info
-from soc.decoder.helpers import (EXTS, EXTS64, EXTZ64, ROTL64, ROTL32, MASK,
+from openpower.decoder.isa.caller import inject, instruction_info
+from openpower.decoder.helpers import (EXTS, EXTS64, EXTZ64, ROTL64, ROTL32,
+ MASK, MASK32,
ne, eq, gt, ge, lt, le, ltu, gtu, length,
trunc_divs, trunc_rems, MULS, DIVS, MODS,
- EXTS128, undefined)
-from soc.decoder.selectable_int import SelectableInt
-from soc.decoder.selectable_int import selectconcat as concat
-from soc.decoder.orderedset import OrderedSet
+ EXTS128, undefined,
+ bitrev, SHL64,
+ )
+from openpower.decoder.selectable_int import SelectableInt
+from openpower.decoder.selectable_int import selectconcat as concat
+from openpower.decoder.orderedset import OrderedSet
+from openpower.decoder.isafunctions.bcd import BCD_TO_DPD, DPD_TO_BCD
-class %s:
+"""
+
+fpheader = """
+from openpower.decoder.helpers import (
+ SINGLE,
+ FPADD32, FPSUB32, FPMUL32, FPDIV32,
+ FPADD64, FPSUB64, FPMUL64, FPDIV64,
+ FPMULADD32,
+ FPSIN32, FPCOS32,
+ )
+from openpower.decoder.isafunctions.fpfromint import INT2FP
+from openpower.decoder.isafunctions.double2single import DOUBLE
"""
def write_pysource(self, pagename):
self.pages_written.append(pagename)
- instrs = isa.page[pagename]
+ instrs = self.page[pagename]
isadir = get_isasrc_dir()
fname = os.path.join(isadir, "%s.py" % pagename)
with open(fname, "w") as f:
iinf = ''
- f.write(header % pagename) # write out header
+ # write headers: FP gets extra imports
+ f.write(header) # write out header
+ if (pagename.startswith("fp") or
+ pagename.startswith("svfp")):
+ f.write(fpheader)
+ f.write("class %s:\n" % pagename)
+
# go through all instructions
for page in instrs:
d = self.instr[page]
op_fname = "op_%s" % page.replace(".", "_")
f.write(" @inject()\n")
f.write(" def %s(%s):\n" % (op_fname, args))
- if 'NIA' in pycode: # HACK - TODO fix
- f.write(" global NIA\n")
+ # blech! this works in combination with ISACaller
+ # @inject decorator, which works by injecting
+ # global variables into the function namespace.
+ for blech in ['NIA', 'end_loop']:
+ if blech in pycode: # HACK - TODO fix
+ f.write(" global %s\n" % blech)
pycode = pycode.split("\n")
pycode = '\n'.join(map(lambda x: " %s" % x, pycode))
pycode = pycode.rstrip()
with open(fname, "w") as f:
f.write('# auto-generated by pywriter.py: do not edit or commit\n')
- f.write('from soc.decoder.isa.caller import ISACaller\n')
+ f.write('from openpower.decoder.isa.caller import ISACaller\n')
for page in self.pages_written:
- f.write('from soc.decoder.isa.%s import %s\n' % (page, page))
+ f.write('from openpower.decoder.isa.%s ' \
+ 'import %s\n' % (page, page))
f.write('\n')
classes = ', '.join(['ISACaller'] + self.pages_written)
f.write(' }\n')
-if __name__ == '__main__':
+def pywriter():
isa = PyISAWriter()
write_isa_class = True
if len(sys.argv) == 1: # quick way to do it
isa.patch_if_needed(source)
if write_isa_class:
isa.write_isa_class()
+
+if __name__ == '__main__':
+ pywriter()