Mercurial > repos > blastem
diff cpu_dsl.py @ 1750:01236179fc71
Optimization to memory access in new Z80 core
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 09 Feb 2019 11:34:31 -0800 |
parents | e4fe5a450d05 |
children | d6d4c006a7b3 |
line wrap: on
line diff
--- a/cpu_dsl.py Fri Feb 08 23:09:58 2019 -0800 +++ b/cpu_dsl.py Sat Feb 09 11:34:31 2019 -0800 @@ -1032,8 +1032,8 @@ def addReg(self, name, size): self.regs[name] = size - def addPointer(self, name, size): - self.pointers[name] = size + def addPointer(self, name, size, count): + self.pointers[name] = (size, count) def addRegArray(self, name, size, regs): self.regArrays[name] = (size, regs) @@ -1070,12 +1070,15 @@ def processLine(self, parts): if len(parts) == 3: - self.addRegArray(parts[0], int(parts[1]), int(parts[2])) + if parts[1].startswith('ptr'): + self.addPointer(parts[0], parts[1][3:], int(parts[2])) + else: + self.addRegArray(parts[0], int(parts[1]), int(parts[2])) elif len(parts) > 2: self.addRegArray(parts[0], int(parts[1]), parts[2:]) else: if parts[1].startswith('ptr'): - self.addPointer(parts[0], parts[1][3:]) + self.addPointer(parts[0], parts[1][3:], 1) else: self.addReg(parts[0], int(parts[1])) return self @@ -1084,13 +1087,17 @@ fieldList = [] for pointer in self.pointers: stars = '*' - ptype = self.pointers[pointer] + ptype, count = self.pointers[pointer] while ptype.startswith('ptr'): stars += '*' ptype = ptype[3:] if ptype.isdigit(): ptype = 'uint{sz}_t'.format(sz=ptype) - hFile.write('\n\t{ptype} {stars}{nm};'.format(nm=pointer, ptype=ptype, stars=stars)) + if count > 1: + arr = '[{n}]'.format(n=count) + else: + arr = '' + hFile.write('\n\t{ptype} {stars}{nm}{arr};'.format(nm=pointer, ptype=ptype, stars=stars, arr=arr)) for reg in self.regs: if not self.isRegArrayMember(reg): fieldList.append((self.regs[reg], 1, reg))