+ def patch_if_needed(self, source):
+ isadir = get_isasrc_dir()
+ fname = os.path.join(isadir, "%s.py" % source)
+ patchname = os.path.join(isadir, "%s.patch" % source)
+
+ try:
+ with open(patchname, 'r') as patch:
+ newfname = fname + '.orig'
+ shutil.copyfile(fname, newfname)
+ subprocess.check_call(['patch', fname],
+ stdin=patch)
+ except:
+ pass
+
+
+ def write_isa_class(self):
+ isadir = get_isasrc_dir()
+ fname = os.path.join(isadir, "all.py")
+
+ 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')
+ for page in self.pages_written:
+ f.write('from soc.decoder.isa.%s import %s\n' % (page, page))
+ f.write('\n')
+
+ classes = ', '.join(['ISACaller'] + self.pages_written)
+ f.write('class ISA(%s):\n' % classes)
+ f.write(' def __init__(self, *args, **kwargs):\n')
+ f.write(' super().__init__(*args, **kwargs)\n')
+ f.write(' self.instrs = {\n')
+ for page in self.pages_written:
+ f.write(' **self.%s_instrs,\n' % page)
+ f.write(' }\n')
+
+