no python files to be committed in isafunctions
[openpower-isa.git] / src / openpower / decoder / pseudo / pywriter.py
index 355d8ae5ba1fbc8485f918921258aa98b474cc25..efca91c9094a0c473affb50f666901fc968d45a7 100644 (file)
@@ -19,16 +19,31 @@ 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
 
 """
 
@@ -47,12 +62,18 @@ class PyISAWriter(ISA):
 
     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]
@@ -72,8 +93,12 @@ class PyISAWriter(ISA):
                 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()
@@ -114,9 +139,10 @@ class PyISAWriter(ISA):
 
         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)