Mercurial > repos > blastem
diff cpu_dsl.py @ 2611:9bd90cd94000
Fix asr and lsr in new 68K core
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 15 Feb 2025 23:06:49 -0800 |
parents | 2de52352936c |
children | cbd54de385d3 |
line wrap: on
line diff
--- a/cpu_dsl.py Sat Feb 15 19:11:40 2025 -0800 +++ b/cpu_dsl.py Sat Feb 15 23:06:49 2025 -0800 @@ -646,11 +646,9 @@ if after: output.append(after) elif calc == 'zero': - if prog.carryFlowDst: - realSize = prog.getLastSize() - output.append(f'\n\t//realSize = {realSize}, carryFlowDst size = {prog.paramSize(prog.carryFlowDst)}, carryFLowDst = {prog.carryFlowDst}') - if realSize != prog.paramSize(prog.carryFlowDst): - lastDst = '({res} & {mask})'.format(res=lastDst, mask = (1 << realSize) - 1) + realSize = prog.getLastSize() + if realSize != prog.paramSize(lastDst): + lastDst = '({res} & {mask})'.format(res=lastDst, mask = (1 << realSize) - 1) if type(storage) is tuple: reg,storageBit = storage reg = prog.resolveParam(reg, None, {}) @@ -793,18 +791,18 @@ prog.lastB = params[1] if needsSizeAdjust: sizeMask = (1 << size) - 1 - return decl + '\n\t{name} = (({a} & {sizeMask}) >> ({b} & {sizeMask})) | ({a} & {mask} ? 0xFFFFFFFFU << ({size} - ({b} & {sizeMask})) : 0);'.format( + return decl + '\n\t{name} = (({a} & {sizeMask}) >> ({b} & {sizeMask})) | (({a} & {mask}) && {b} ? 0xFFFFFFFFU << ({size} - ({b} & {sizeMask})) : 0);'.format( name = name, a = params[0], b = params[1], dst = dst, mask = mask, size=size, sizeMask=sizeMask) elif needsSizeAdjust: decl,name = prog.getTemp(size) sizeMask = (1 << size) - 1 - return decl + ('\n\t{name} = (({a} & {sizeMask}) >> ({b} & {sizeMask})) | ({a} & {mask} ? 0xFFFFFFFFU << ({size} - ({b} & {sizeMask})) : 0);' + + return decl + ('\n\t{name} = (({a} & {sizeMask}) >> ({b} & {sizeMask})) | (({a} & {mask}) && {b} ? 0xFFFFFFFFU << ({size} - ({b} & {sizeMask})) : 0);' + '\n\t{dst} = ({dst} & ~{sizeMask}) | {name};').format( - name = name, a = params[0], b = params[1], dst = dst, mask = mask, size=size, sizeMask=sizeMask) + name = name, a = params[0], b = params[1], dst = params[2], mask = mask, size=size, sizeMask=sizeMask) else: dst = params[2] - return decl + '\n\t{dst} = ({a} >> {b}) | ({a} & {mask} ? 0xFFFFFFFFU << ({size} - {b}) : 0);'.format( + return decl + '\n\t{dst} = ({a} >> {b}) | (({a} & {mask}) && {b} ? 0xFFFFFFFFU << ({size} - {b}) : 0);'.format( a = params[0], b = params[1], dst = dst, mask = mask, size=size) def _sext(size, src):