Mercurial > repos > blastem
comparison 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 |
comparison
equal
deleted
inserted
replaced
2442:52cfc7b14dd2 | 2443:461fffc226e0 |
---|---|
17 '>>': 'lsr', | 17 '>>': 'lsr', |
18 '&': 'and', | 18 '&': 'and', |
19 '|': 'or', | 19 '|': 'or', |
20 '^': 'xor' | 20 '^': 'xor' |
21 } | 21 } |
22 unaryOps = { | |
23 '~': 'not', | |
24 '!': 'lnot', | |
25 '-': 'neg' | |
26 } | |
22 compareOps = {'>=U', '=', '!='} | 27 compareOps = {'>=U', '=', '!='} |
23 class Block: | 28 class Block: |
24 def addOp(self, op): | 29 def addOp(self, op): |
25 pass | 30 pass |
26 | 31 |
48 if op == '=': | 53 if op == '=': |
49 if len(parts) > 2 and parts[2] in binaryOps: | 54 if len(parts) > 2 and parts[2] in binaryOps: |
50 op = parts[2] | 55 op = parts[2] |
51 parts[0] = binaryOps[op] | 56 parts[0] = binaryOps[op] |
52 del parts[2] | 57 del parts[2] |
58 elif len(parts) > 1 and parts[1][0] in unaryOps: | |
59 rest = parts[1][1:] | |
60 op = parts[1][0] | |
61 if rest: | |
62 parts[1] = rest | |
63 else: | |
64 del parts[1] | |
65 parts[0] = unaryOps[op] | |
53 else: | 66 else: |
54 if op == '<<=' or op == '>>=': | 67 if op == '<<=' or op == '>>=': |
55 parts.insert(1, dst) | 68 parts.insert(1, dst) |
56 else: | 69 else: |
57 parts.append(dst) | 70 parts.append(dst) |