[pypy-svn] r77691 - pypy/branch/arm-backend/pypy/jit/backend/arm

david at codespeak.net david at codespeak.net
Thu Oct 7 17:26:23 CEST 2010


Author: david
Date: Thu Oct  7 17:26:22 2010
New Revision: 77691

Modified:
   pypy/branch/arm-backend/pypy/jit/backend/arm/assembler.py
   pypy/branch/arm-backend/pypy/jit/backend/arm/registers.py
Log:
updated arm calling convention code to store and restore all relevant registers on procedure entry/exit

Modified: pypy/branch/arm-backend/pypy/jit/backend/arm/assembler.py
==============================================================================
--- pypy/branch/arm-backend/pypy/jit/backend/arm/assembler.py	(original)
+++ pypy/branch/arm-backend/pypy/jit/backend/arm/assembler.py	Thu Oct  7 17:26:22 2010
@@ -31,19 +31,10 @@
                 self.gen_func_epilog()
 
     def gen_func_epilog(self):
-        self.mc.STR_ri(r.r3, r.fp, -16)
-        self.mc.LDR_ri(r.r3, r.fp, -16)
-        #self.mc.write32(0xe1a00003) #        mov     r0, r3
-        self.mc.SUB_ri(r.sp, r.fp, 12)
-        self.mc.LDM(r.sp, [r.fp, r.sp, r.pc])
-        #self.mc.write32(0xe89da800) #        ldm     sp, {fp, sp, pc}
+        self.mc.LDM(r.sp, r.callee_restored_registers)
 
     def gen_func_prolog(self):
-        self.mc.MOV_rr(r.ip, r.sp)
-        self.mc.PUSH([r.fp, r.ip, r.lr, r.pc])
-        self.mc.SUB_ri(r.fp, r.ip, 4)
-        self.mc.SUB_ri(r.sp, r.sp, 8)
-        self.mc.STR_ri(r.r0, r.fp, -20)
+        self.mc.PUSH(r.callee_saved_registers)
 
     def gen_load_int(self, reg, value):
         self.mc.MOV_ri(reg, (value & 0xFF))

Modified: pypy/branch/arm-backend/pypy/jit/backend/arm/registers.py
==============================================================================
--- pypy/branch/arm-backend/pypy/jit/backend/arm/registers.py	(original)
+++ pypy/branch/arm-backend/pypy/jit/backend/arm/registers.py	Thu Oct  7 17:26:22 2010
@@ -5,3 +5,7 @@
 sp = 13
 lr = 14
 pc = 15
+
+callee_resp = [r4, r5, r6, r7, r8, r9, r10, r11]
+callee_saved_registers = callee_resp+[lr]
+callee_restored_registers = callee_resp+[pc]



More information about the Pypy-commit mailing list