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)