# HG changeset patch # User Michael Pavone # Date 1739612138 28800 # Node ID fbb5115b1a275ab034aead47a9ee5323766f22a2 # Parent 898386e48243eea2d29074b56f6d48102202bd83 Fix issues in CPU DSL that caused regressions in Z80 core diff -r 898386e48243 -r fbb5115b1a27 cpu_dsl.py --- a/cpu_dsl.py Sat Feb 15 01:35:23 2025 -0800 +++ b/cpu_dsl.py Sat Feb 15 01:35:38 2025 -0800 @@ -351,6 +351,7 @@ a = params[0] b = params[1] needsSizeAdjust = False + destSize = prog.paramSize(rawParams[2]) if len(params) > 3: size = params[3] if size == 0: @@ -359,11 +360,12 @@ size = 16 else: size = 32 - prog.lastSize = size - destSize = prog.paramSize(rawParams[2]) if destSize > size: needsSizeAdjust = True prog.sizeAdjust = size + else: + size = destSize + prog.lastSize = size needsCarry = needsOflow = needsHalf = False if flagUpdates: for flag in flagUpdates: @@ -376,8 +378,6 @@ needsOflow = True decl = '' if needsCarry or needsOflow or needsHalf or (flagUpdates and needsSizeAdjust): - if len(params) <= 3: - size = prog.paramSize(rawParams[2]) if needsCarry and op != '>>': size *= 2 decl,name = prog.getTemp(size) @@ -412,6 +412,7 @@ dst = params[1] decl = '' needsSizeAdjust = False + destSize = prog.paramSize(rawParams[1]) if len(params) > 2: size = params[2] if size == 0: @@ -420,11 +421,12 @@ size = 16 else: size = 32 - prog.lastSize = size - destSize = prog.paramSize(rawParams[1]) if destSize > size: needsSizeAdjust = True prog.sizeAdjust = size + else: + size = destSize + prog.lastSize = size needsCarry = needsOflow = needsHalf = False if op == '-': if flagUpdates: @@ -437,7 +439,6 @@ elif calc == 'overflow': needsOflow = True if needsCarry or needsOflow or needsHalf or (flagUpdates and needsSizeAdjust): - size = prog.paramSize(rawParams[1]) decl,name = prog.getTemp(size) dst = prog.carryFlowDst = name prog.lastA = 0 @@ -784,12 +785,12 @@ size = 16 else: size = 32 - prog.lastSize = size if destSize > size: needsSizeAdjust = True prog.sizeAdjust = size else: size = destSize + prog.lastSize = size mask = 1 << (size - 1) if needsCarry: decl,name = prog.getTemp(size) @@ -912,12 +913,12 @@ size = 16 else: size = 32 - prog.lastSize = size if destSize > size: needsSizeAdjust = True prog.sizeAdjust = size else: size = destSize + prog.lastSize = size needsCarry = needsOflow = needsHalf = False if flagUpdates: for flag in flagUpdates: @@ -977,12 +978,12 @@ size = 16 else: size = 32 - prog.lastSize = size if destSize > size: needsSizeAdjust = True prog.sizeAdjust = size else: size = destSize + prog.lastSize = size needsCarry = needsOflow = needsHalf = False if flagUpdates: for flag in flagUpdates: @@ -1048,13 +1049,13 @@ size = 16 else: size = 32 - prog.lastSize = size if destSize > size: needsSizeAdjust = True if needsCarry: prog.sizeAdjust = size else: size = destSize + prog.lastSize = size rotMask = size - 1 if type(params[1]) is int: b = params[1] & rotMask @@ -1102,13 +1103,13 @@ size = 16 else: size = 32 - prog.lastSize = size if destSize > size: needsSizeAdjust = True if needsCarry: prog.sizeAdjust = size else: size = destSize + prog.lastSize = size carryCheck = _getCarryCheck(prog) if prog.paramSize(rawParams[0]) > size: mask = (1 << size) - 1 @@ -1150,13 +1151,13 @@ size = 16 else: size = 32 - prog.lastSize = size if destSize > size: needsSizeAdjust = True if needsCarry: prog.sizeAdjust = size else: size = destSize + prog.lastSize = size rotMask = size - 1 if type(params[1]) is int: b = params[1] & rotMask @@ -1204,13 +1205,13 @@ size = 16 else: size = 32 - prog.lastSize = size if destSize > size: needsSizeAdjust = True if needsCarry: prog.sizeAdjust = size else: size = destSize + prog.lastSize = size carryCheck = _getCarryCheck(prog) if prog.paramSize(rawParams[0]) > size: mask = (1 << size) - 1