Mercurial > lcfOS
comparison python/ppci/codegen/canon.py @ 354:5477e499b039
Added some sort of string functionality
author | Windel Bouwman |
---|---|
date | Thu, 13 Mar 2014 18:59:06 +0100 |
parents | e609d5296ee9 |
children | c49459768aaa |
comparison
equal
deleted
inserted
replaced
353:b8ad45b3a573 | 354:5477e499b039 |
---|---|
62 offset = frame.allocVar(exp) | 62 offset = frame.allocVar(exp) |
63 return ir.Add(frame.fp, ir.Const(offset)) | 63 return ir.Add(frame.fp, ir.Const(offset)) |
64 elif isinstance(exp, ir.Mem): | 64 elif isinstance(exp, ir.Mem): |
65 exp.e = rewriteExp(exp.e, frame) | 65 exp.e = rewriteExp(exp.e, frame) |
66 return exp | 66 return exp |
67 elif isinstance(exp, ir.Addr): | |
68 exp.e = rewriteExp(exp.e, frame) | |
69 return exp | |
67 elif isinstance(exp, ir.Call): | 70 elif isinstance(exp, ir.Call): |
68 exp.arguments = [rewriteExp(p, frame) for p in exp.arguments] | 71 exp.arguments = [rewriteExp(p, frame) for p in exp.arguments] |
69 # Rewrite call into eseq: | 72 # Rewrite call into eseq: |
70 t = newTemp() | 73 t = newTemp() |
71 return ir.Eseq(ir.Move(t, exp), t) | 74 return ir.Eseq(ir.Move(t, exp), t) |
72 else: | 75 else: |
73 raise NotImplementedError('NI: {}'.format(exp)) | 76 raise NotImplementedError('NI: {}, {}'.format(exp, type(exp))) |
74 | 77 |
75 # The flatten functions pull out seq instructions to the sequence list. | 78 # The flatten functions pull out seq instructions to the sequence list. |
76 | 79 |
77 def flattenExp(exp): | 80 def flattenExp(exp): |
78 if isinstance(exp, ir.Binop): | 81 if isinstance(exp, ir.Binop): |
82 elif isinstance(exp, ir.Temp): | 85 elif isinstance(exp, ir.Temp): |
83 return exp, [] | 86 return exp, [] |
84 elif isinstance(exp, ir.Const): | 87 elif isinstance(exp, ir.Const): |
85 return exp, [] | 88 return exp, [] |
86 elif isinstance(exp, ir.Mem): | 89 elif isinstance(exp, ir.Mem): |
90 exp.e, s = flattenExp(exp.e) | |
91 return exp, s | |
92 elif isinstance(exp, ir.Addr): | |
87 exp.e, s = flattenExp(exp.e) | 93 exp.e, s = flattenExp(exp.e) |
88 return exp, s | 94 return exp, s |
89 elif isinstance(exp, ir.Eseq): | 95 elif isinstance(exp, ir.Eseq): |
90 s = flattenStmt(exp.stmt) | 96 s = flattenStmt(exp.stmt) |
91 exp.e, se = flattenExp(exp.e) | 97 exp.e, se = flattenExp(exp.e) |