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))