Mercurial > lcfOS
diff python/codegenarm.py @ 218:494828a7adf1
added some sort of cache to assembler
author | Windel Bouwman |
---|---|
date | Fri, 05 Jul 2013 15:30:22 +0200 |
parents | 62386bcee1ba |
children | 1fa3e0050b49 |
line wrap: on
line diff
--- a/python/codegenarm.py Fri Jul 05 14:13:59 2013 +0200 +++ b/python/codegenarm.py Fri Jul 05 15:30:22 2013 +0200 @@ -1,6 +1,6 @@ import ir from asmnodes import ALabel -import arm_cm3 as arm +import cortexm3 as arm from ppci import CompilerError class ArmCodeGenerator: @@ -24,7 +24,8 @@ self.outs.selectSection('code') for f in ircode.Functions: self.emit(ALabel(f.name)) - self.emit(arm.push_ins(arm.RegisterSet({arm.r2, arm.r3,arm.lr}))) + # Save some registers: + self.emit(arm.push_ins(arm.RegisterSet({arm.r4, arm.r5, arm.r6,arm.r7,arm.lr}))) for bb in f.BasicBlocks: self.emit(ALabel(bb.name)) for ins in bb.Instructions: @@ -43,15 +44,15 @@ elif type(ins) is ir.Store: print(ins) elif type(ins) is ir.Return: - self.emit(arm.pop_ins(arm.RegisterSet({arm.r2, arm.r3, arm.pc}))) + self.emit(arm.pop_ins(arm.RegisterSet({arm.r5, arm.r6, arm.pc}))) elif type(ins) is ir.Load: print(ins) elif type(ins) is ir.BinaryOperator: print(ins) elif type(ins) is ir.ConditionalBranch: print(ins) + self.emit(arm.cmp_ins(arm.r1, arm.r0)) else: - print(ins) raise CompilerError('IR "{}" not covered'.format(ins))