summaryrefslogtreecommitdiff
path: root/cpu_dsl.py
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2019-01-28 22:37:46 -0800
committerMichael Pavone <pavone@retrodev.com>2019-01-28 22:37:46 -0800
commit4c0f1c402fee72a4b57cfb0dde9870265eab622a (patch)
treeb3fa12a615de60cbe013760a9e8a334e7e415c35 /cpu_dsl.py
parent53391a660236901354e6568c4fc31a0e682e1814 (diff)
Fixed flag calculation for sub instructions in CPU DSL
Diffstat (limited to 'cpu_dsl.py')
-rwxr-xr-xcpu_dsl.py11
1 files changed, 5 insertions, 6 deletions
diff --git a/cpu_dsl.py b/cpu_dsl.py
index 99d94d8..3bef9e7 100755
--- a/cpu_dsl.py
+++ b/cpu_dsl.py
@@ -240,8 +240,8 @@ class Op:
decl,name = prog.getTemp(size)
dst = prog.carryFlowDst = name
prog.lastA = a
- prog.lastB = '(-' + b + ')' if op == '-' else b
- prog.lastWasSub = op == '-'
+ prog.lastB = b
+ prog.lastBFlow = '(-' + b + ')' if op == '-' else b
else:
dst = params[2]
return decl + '\n\t{dst} = {a} {op} {b};'.format(
@@ -313,11 +313,10 @@ def _updateFlagsCImpl(prog, params, rawParams):
resultBit = prog.paramSize(prog.lastDst)
elif calc == 'half':
resultBit = 4
- fmt = '({a} ^ {b} ^ ~{res})' if prog.lastWasSub else '({a} ^ {b} ^ {res})'
- myRes = fmt.format(a = prog.lastA, b = prog.lastB, res = lastDst)
+ 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)
+ myRes = '((~({a} ^ {b})) & ({a} ^ {res}))'.format(a = prog.lastA, b = prog.lastBFlow, res = lastDst)
else:
resultBit = int(resultBit)
if type(storage) is tuple:
@@ -991,7 +990,7 @@ class Program:
self.carryFlowDst = None
self.lastA = None
self.lastB = None
- self.lastWasSub = False
+ self.lastBFlow = None
def __str__(self):
pieces = []