pytholith: add register muxes

This commit is contained in:
Sebastien Bourdeauducq 2012-11-08 21:49:20 +01:00
parent 18758d87f6
commit 9c182c47d1
1 changed files with 16 additions and 6 deletions

View File

@ -33,7 +33,8 @@ class _Register:
if not self.finalized:
raise FinalizeError
# do nothing when sel == 0
cases = [(v, self.storage.eq(k)) for k, v in self.source_encoding.items()]
cases = [(Constant(v, self.sel.bv),
self.storage.eq(k)) for k, v in self.source_encoding.items()]
sync = [Case(self.sel, *cases)]
return Fragment(sync=sync)
@ -53,13 +54,15 @@ class _Compiler:
# blocks and statements
def visit_block(self, statements):
r = []
states = []
for statement in statements:
if isinstance(statement, ast.Assign):
r += self.visit_assign(statement)
op = self.visit_assign(statement)
if op:
states.append(op)
else:
raise NotImplementedError
return r
return states
def visit_assign(self, node):
if isinstance(node.targets[0], ast.Name):
@ -155,9 +158,10 @@ def make_pytholite(func):
symdict = func.__globals__.copy()
registers = []
c = _Compiler(symdict, registers)
states = _Compiler(symdict, registers).visit_top(tree)
print("compilation result:")
print(c.visit_top(tree))
print(states)
print("registers:")
print(registers)
@ -166,3 +170,9 @@ def make_pytholite(func):
print("ast:")
print(ast.dump(tree))
regf = Fragment()
for register in registers:
register.finalize()
regf += register.get_fragment()
return regf