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)