Mercurial > repos > blastem
diff cpu_dsl.py @ 2443:461fffc226e0
Sugar for unary operators in CPU DSL
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 12 Feb 2024 07:42:32 -0800 |
parents | 52cfc7b14dd2 |
children | d1eec03dca09 |
line wrap: on
line diff
--- a/cpu_dsl.py Sun Feb 11 20:41:28 2024 -0800 +++ b/cpu_dsl.py Mon Feb 12 07:42:32 2024 -0800 @@ -19,6 +19,11 @@ '|': 'or', '^': 'xor' } +unaryOps = { + '~': 'not', + '!': 'lnot', + '-': 'neg' +} compareOps = {'>=U', '=', '!='} class Block: def addOp(self, op): @@ -50,6 +55,14 @@ op = parts[2] parts[0] = binaryOps[op] del parts[2] + elif len(parts) > 1 and parts[1][0] in unaryOps: + rest = parts[1][1:] + op = parts[1][0] + if rest: + parts[1] = rest + else: + del parts[1] + parts[0] = unaryOps[op] else: if op == '<<=' or op == '>>=': parts.insert(1, dst)