Author: hager <sven.ha...@uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r53231:58aa53f6623d
Date: 2012-03-05 07:11 -0800
http://bitbucket.org/pypy/pypy/changeset/58aa53f6623d/

Log:    adjust prepare_cond_call_gc_wb to ARM backend

diff --git a/pypy/jit/backend/ppc/regalloc.py b/pypy/jit/backend/ppc/regalloc.py
--- a/pypy/jit/backend/ppc/regalloc.py
+++ b/pypy/jit/backend/ppc/regalloc.py
@@ -22,6 +22,7 @@
 from pypy.jit.backend.llsupport.descr import unpack_arraydescr
 from pypy.jit.backend.llsupport.descr import unpack_fielddescr
 from pypy.jit.backend.llsupport.descr import unpack_interiorfielddescr
+from pypy.rlib.objectmodel import we_are_translated
 
 # xxx hack: set a default value for TargetToken._arm_loop_code.  If 0, we know
 # that it is a LABEL that was not compiled yet.
@@ -812,14 +813,26 @@
     def prepare_cond_call_gc_wb(self, op):
         assert op.result is None
         N = op.numargs()
-        # we force all arguments in a reg (unless they are Consts),
-        # because it will be needed anyway by the following setfield_gc
-        # or setarrayitem_gc. It avoids loading it twice from the memory.
+        # we force all arguments in a reg because it will be needed anyway by
+        # the following setfield_gc or setarrayitem_gc. It avoids loading it
+        # twice from the memory.
         arglocs = []
         args = op.getarglist()
         for i in range(N):
             loc = self._ensure_value_is_boxed(op.getarg(i), args)
             arglocs.append(loc)
+        card_marking = False
+        if op.getopnum() == rop.COND_CALL_GC_WB_ARRAY:
+            descr = op.getdescr()
+            if we_are_translated():
+                cls = self.cpu.gc_ll_descr.has_write_barrier_class()
+                assert cls is not None and isinstance(descr, cls)
+            card_marking = descr.jit_wb_cards_set != 0
+        if card_marking:  # allocate scratch registers
+            tmp1 = self.get_scratch_reg(INT)
+            tmp2 = self.get_scratch_reg(INT)
+            arglocs.append(tmp1)
+            arglocs.append(tmp2)
         return arglocs
 
     prepare_cond_call_gc_wb_array = prepare_cond_call_gc_wb
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to