diff options
author | Michael Pavone <pavone@retrodev.com> | 2019-01-28 21:15:27 -0800 |
---|---|---|
committer | Michael Pavone <pavone@retrodev.com> | 2019-01-28 21:15:27 -0800 |
commit | 8e5cb9d205e58ed143f058e0305748f363d440db (patch) | |
tree | f99b03b7da3453d36607e6de2e8dfbdf7e470a47 /cpu_dsl.py | |
parent | be5da8b8183d25dda735deca880c0bcee028aa52 (diff) |
Initial stab at overflow flag implementation in CPU DSL. Probably broken for subtraction
Diffstat (limited to 'cpu_dsl.py')
-rwxr-xr-x | cpu_dsl.py | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -304,7 +304,7 @@ def _updateFlagsCImpl(prog, params, rawParams): else: lastDst = prog.resolveParam(prog.lastDst, None, {}) storage = prog.flags.getStorage(flag) - if calc == 'bit' or calc == 'sign' or calc == 'carry' or calc == 'half': + if calc == 'bit' or calc == 'sign' or calc == 'carry' or calc == 'half' or calc == 'overflow': myRes = lastDst if calc == 'sign': resultBit = prog.paramSize(prog.lastDst) - 1 @@ -313,6 +313,9 @@ def _updateFlagsCImpl(prog, params, rawParams): elif calc == 'half': resultBit = 4 myRes = '({a} ^ {b} ^ {res})'.format(a = prog.lastA, b = prog.lastB, res = lastDst) + elif calc == 'overflow': + resultBit = prog.paramSize(prog.lastDst) - 1 + myRes = '((~({a} ^ {b})) & ({a} ^ {res}))'.format(a = prog.lastA, b = prog.lastB, res = lastDst) else: resultBit = int(resultBit) if type(storage) is tuple: @@ -347,9 +350,7 @@ def _updateFlagsCImpl(prog, params, rawParams): reg = prog.resolveParam(storage, None, {}) output.append('\n\t{reg} = {res} == 0;'.format( reg = reg, res = lastDst - )) - elif calc == 'overflow': - pass + )) elif calc == 'parity': pass else: |