Author: David Schneider <[email protected]>
Branch: arm-backed-float
Changeset: r44836:6c515b82b046
Date: 2011-06-08 18:23 +0200
http://bitbucket.org/pypy/pypy/changeset/6c515b82b046/

Log:    (arigo, bivab) swap the use of the r1 and ip registers here, because
        ip is really a scratch register that is trashed by a random
        operation

diff --git a/pypy/jit/backend/arm/assembler.py 
b/pypy/jit/backend/arm/assembler.py
--- a/pypy/jit/backend/arm/assembler.py
+++ b/pypy/jit/backend/arm/assembler.py
@@ -249,8 +249,8 @@
         mc.PUSH([r.lr.value])
         with saved_registers(mc, [], r.all_vfp_regs):
             # At this point we know that the values we need to compute the size
-            # are stored in r0 and IP.
-            mc.SUB_rr(r.r0.value, r.ip.value, r.r0.value)
+            # are stored in r0 and r1.
+            mc.SUB_rr(r.r0.value, r.r1.value, r.r0.value)
             addr = self.cpu.gc_ll_descr.get_malloc_slowpath_addr()
             # XXX replace with an STMxx operation
             for reg, ofs in 
ARMv7RegisterMananger.REGLOC_TO_COPY_AREA_OFS.items():
@@ -259,15 +259,15 @@
             for reg, ofs in 
ARMv7RegisterMananger.REGLOC_TO_COPY_AREA_OFS.items():
                 mc.LDR_ri(reg.value, r.fp.value, imm=ofs)
         nursery_free_adr = self.cpu.gc_ll_descr.get_nursery_free_addr()
-        mc.gen_load_int(r.ip.value, nursery_free_adr)
-        mc.LDR_ri(r.ip.value, r.ip.value)
+        mc.gen_load_int(r.r1.value, nursery_free_adr)
+        mc.LDR_ri(r.r1.value, r.r1.value)
         mc.POP([r.pc.value])
         rawstart = mc.materialize(self.cpu.asmmemmgr, [])
         self.malloc_slowpath = rawstart
 
     def _gen_leave_jitted_hook_code(self, save_exc=False):
         mc = ARMv7Builder()
-        # XXX add a check if cpu supports floats 
+        # XXX add a check if cpu supports floats
         with saved_registers(mc, r.caller_resp + [r.ip], r.caller_vfp_resp):
             addr = self.cpu.get_on_leave_jitted_int(save_exception=save_exc)
             mc.BL(addr)
@@ -914,13 +914,13 @@
         self.mc.gen_load_int(r.r0.value, nursery_free_adr)
         self.mc.LDR_ri(r.r0.value, r.r0.value)
 
-        self.mc.ADD_ri(r.ip.value, r.r0.value, size)
+        self.mc.ADD_ri(r.r1.value, r.r0.value, size)
 
         # XXX maybe use an offset from the valeu nursery_free_addr
-        self.mc.gen_load_int(r.r1.value, nursery_top_adr)
-        self.mc.LDR_ri(r.r1.value, r.r1.value)
+        self.mc.gen_load_int(r.ip.value, nursery_top_adr)
+        self.mc.LDR_ri(r.ip.value, r.ip.value)
 
-        self.mc.CMP_rr(r.ip.value, r.r1.value)
+        self.mc.CMP_rr(r.r1.value, r.ip.value)
 
         fast_jmp_pos = self.mc.currpos()
         self.mc.NOP()
@@ -936,7 +936,6 @@
         # result in EAX; slowpath_addr2 additionally returns in EDX a
         # copy of heap(nursery_free_adr), so that the final MOV below is
         # a no-op.
-
         self.mark_gc_roots(self.write_new_force_index(),
                            use_copy_area=True)
         slowpath_addr2 = self.malloc_slowpath
@@ -946,8 +945,8 @@
         pmc = OverwritingBuilder(self.mc, fast_jmp_pos, WORD)
         pmc.ADD_ri(r.pc.value, r.pc.value, offset - PC_OFFSET, cond=c.LS)
 
-        self.mc.gen_load_int(r.r1.value, nursery_free_adr)
-        self.mc.STR_ri(r.ip.value, r.r1.value)
+        self.mc.gen_load_int(r.ip.value, nursery_free_adr)
+        self.mc.STR_ri(r.r1.value, r.ip.value)
 
         self.mc.gen_load_int(r.ip.value, tid)
         self.mc.STR_ri(r.ip.value, r.r0.value)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to