diff python/ppci/ir2tree.py @ 322:44f336460c2a

Half of use of burg spec for arm
author Windel Bouwman
date Mon, 27 Jan 2014 19:58:07 +0100
parents
children e9fe6988497c
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python/ppci/ir2tree.py	Mon Jan 27 19:58:07 2014 +0100
@@ -0,0 +1,42 @@
+from tree import Tree
+from . import ir
+
+f_map = {}    # Mapping from types to tree creation functions
+
+def register(tp):
+    """ Register a function for type tp """
+    def reg_f(f):
+        f_map[tp] = f
+        return f
+    return reg_f
+
+@register(ir.Binop)
+def binop_to_tree(e):
+    names = {'+':'ADDI32', '-':'SUBI32', '|':'ORI32', '<<':'SHLI32',
+        '*':'MULI32'}
+    op = names[e.operation]
+    return Tree(op, makeTree(e.a), makeTree(e.b))
+
+@register(ir.Temp)
+def temp_to_tree(e):
+    t = Tree('REGI32')
+    t.value = e
+    return t
+
+@register(ir.Const)
+def const_to_tree(e):
+    t = Tree('CONSTI32')
+    t.value = e.value
+    return t
+
+@register(ir.Mem)
+def mem_to_tree(e):
+    return Tree('MEMI32', makeTree(e.e))
+
+@register(ir.Call)
+def call_to_tree(e):
+    return Tree('CALL')
+
+def makeTree(ir_node):
+    """ Transform an ir node into a tree usable for matching """
+    return f_map[type(ir_node)](ir_node)