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

david at codespeak.net david at codespeak.net
Thu Dec 9 15:04:58 CET 2010


Author: david
Date: Thu Dec  9 15:04:57 2010
New Revision: 79932

Modified:
   pypy/branch/arm-backend/pypy/jit/backend/arm/opassembler.py
Log:
Fix some more allocation issues in copy operations

Modified: pypy/branch/arm-backend/pypy/jit/backend/arm/opassembler.py
==============================================================================
--- pypy/branch/arm-backend/pypy/jit/backend/arm/opassembler.py	(original)
+++ pypy/branch/arm-backend/pypy/jit/backend/arm/opassembler.py	Thu Dec  9 15:04:57 2010
@@ -710,13 +710,19 @@
             regalloc.possibly_free_var(args[2])     # it if ==args[3] or args[4]
         srcaddr_box = TempBox()
         forbidden_vars = [args[1], args[3], args[4], srcaddr_box]
-        srcaddr_loc = regalloc.force_allocate_reg(srcaddr_box, forbidden_vars)
+        srcaddr_loc = regalloc.force_allocate_reg(srcaddr_box,
+                                    forbidden_vars, selected_reg=r.r1)
         self._gen_address_inside_string(base_loc, ofs_loc, srcaddr_loc,
                                         is_unicode=is_unicode)
 
         # compute the destination address
+        forbidden_vars = [args[4], args[3], srcaddr_box]
+        dstaddr_box = TempBox()
+        dstaddr_loc = regalloc.force_allocate_reg(dstaddr_box, selected_reg=r.r0)
+        forbidden_vars.append(dstaddr_box)
         base_loc, box = self._ensure_value_is_boxed(args[1], regalloc, forbidden_vars)
         args.append(box)
+        forbidden_vars.append(box)
         ofs_loc, box = self._ensure_value_is_boxed(args[3], regalloc, forbidden_vars)
         args.append(box)
         assert base_loc.is_reg()
@@ -724,10 +730,6 @@
         regalloc.possibly_free_var(args[1])
         if args[3] is not args[4]:     # more of the MESS described above
             regalloc.possibly_free_var(args[3])
-        forbidden_vars = [args[4], srcaddr_box]
-        dstaddr_box = TempBox()
-        dstaddr_loc = regalloc.force_allocate_reg(dstaddr_box,
-                                forbidden_vars)
         self._gen_address_inside_string(base_loc, ofs_loc, dstaddr_loc,
                                         is_unicode=is_unicode)
 



More information about the Pypy-commit mailing list