comparison cpu_dsl.py @ 2666:38c281ef57b0

Memory access optimizaiton in new 68K core that gives a modest speed bump on average and will allow low-cost watchpoints
author Michael Pavone <pavone@retrodev.com>
date Fri, 07 Mar 2025 23:40:58 -0800
parents 47e197d40ffe
children 6894a25ebfaa
comparison
equal deleted inserted replaced
2665:54ac5fe14cf9 2666:38c281ef57b0
1817 1817
1818 def processLine(self, parts): 1818 def processLine(self, parts):
1819 if len(parts) == 3: 1819 if len(parts) == 3:
1820 if parts[1].startswith('ptr'): 1820 if parts[1].startswith('ptr'):
1821 self.addPointer(parts[0], parts[1][3:], int(parts[2])) 1821 self.addPointer(parts[0], parts[1][3:], int(parts[2]))
1822 else: 1822 elif parts[1].isdigit():
1823 self.addRegArray(parts[0], int(parts[1]), int(parts[2])) 1823 self.addRegArray(parts[0], int(parts[1]), int(parts[2]))
1824 else:
1825 #assume some other C type
1826 self.addRegArray(parts[0], parts[1], int(parts[2]))
1824 elif len(parts) > 2: 1827 elif len(parts) > 2:
1825 self.addRegArray(parts[0], int(parts[1]), parts[2:]) 1828 self.addRegArray(parts[0], int(parts[1]), parts[2:])
1826 else: 1829 else:
1827 if parts[1].startswith('ptr'): 1830 if parts[1].startswith('ptr'):
1828 self.addPointer(parts[0], parts[1][3:], 1) 1831 self.addPointer(parts[0], parts[1][3:], 1)
1829 else: 1832 elif parts[1].isdigit():
1830 self.addReg(parts[0], int(parts[1])) 1833 self.addReg(parts[0], int(parts[1]))
1834 else:
1835 #assume some other C type
1836 self.addReg(parts[0], parts[1])
1831 return self 1837 return self
1832 1838
1833 def writeHeader(self, otype, hFile): 1839 def writeHeader(self, otype, hFile):
1834 fieldList = [] 1840 fieldList = []
1835 for pointer in self.pointers: 1841 for pointer in self.pointers:
1845 else: 1851 else:
1846 arr = '' 1852 arr = ''
1847 hFile.write('\n\t{ptype} {stars}{nm}{arr};'.format(nm=pointer, ptype=ptype, stars=stars, arr=arr)) 1853 hFile.write('\n\t{ptype} {stars}{nm}{arr};'.format(nm=pointer, ptype=ptype, stars=stars, arr=arr))
1848 for reg in self.regs: 1854 for reg in self.regs:
1849 if not self.isRegArrayMember(reg): 1855 if not self.isRegArrayMember(reg):
1850 fieldList.append((self.regs[reg], 1, reg)) 1856 if type(self.regs[reg]) is int:
1857 fieldList.append((self.regs[reg], 1, reg))
1858 else:
1859 hFile.write(f'\n\t{self.regs[reg]} {reg};')
1851 for arr in self.regArrays: 1860 for arr in self.regArrays:
1852 size,regs = self.regArrays[arr] 1861 size,regs = self.regArrays[arr]
1853 if not type(regs) is int: 1862 if not type(regs) is int:
1854 regs = len(regs) 1863 regs = len(regs)
1864 if not type(size) is int:
1865 hFile.write(f'\n\t{size} {arr}[{regs}];')
1866 continue
1855 fieldList.append((size, regs, arr)) 1867 fieldList.append((size, regs, arr))
1856 fieldList.sort() 1868 fieldList.sort()
1857 fieldList.reverse() 1869 fieldList.reverse()
1858 for size, count, name in fieldList: 1870 for size, count, name in fieldList:
1859 if count > 1: 1871 if count > 1: