[pypy-commit] pypy arm-backend-2: save correct registers around call to assembler_helper function in call_assembler

bivab noreply at buildbot.pypy.org
Thu Aug 2 12:12:51 CEST 2012


Author: David Schneider <david.schneider at picle.org>
Branch: arm-backend-2
Changeset: r56532:e3830cb63c1a
Date: 2012-08-02 11:42 +0200
http://bitbucket.org/pypy/pypy/changeset/e3830cb63c1a/

Log:	save correct registers around call to assembler_helper function in
	call_assembler

diff --git a/pypy/jit/backend/arm/opassembler.py b/pypy/jit/backend/arm/opassembler.py
--- a/pypy/jit/backend/arm/opassembler.py
+++ b/pypy/jit/backend/arm/opassembler.py
@@ -1188,7 +1188,16 @@
             floats = r.caller_vfp_resp
         else:
             floats = []
-        with saved_registers(self.mc, r.caller_resp[1:] + [r.ip], floats):
+        # in case the call has a result we do not need to save the
+        # corresponding result register because it was already allocated for
+        # the result
+        core = r.caller_resp
+        if op.result: 
+            if resloc.is_vfp_reg(): 
+                floats = r.caller_vfp_resp[1:]
+            else:
+                core = r.caller_resp[1:] + [r.ip] # keep alignment
+        with saved_registers(self.mc, core, floats):
             # result of previous call is in r0
             self.mov_loc_loc(arglocs[0], r.r1)
             self.mc.BL(asm_helper_adr)


More information about the pypy-commit mailing list