Author: Maciej Fijalkowski <[email protected]>
Branch: jitframe-on-heap
Changeset: r60414:15171e3e7dcd
Date: 2013-01-24 11:16 +0200
http://bitbucket.org/pypy/pypy/changeset/15171e3e7dcd/

Log:    Zero the gcmap after reloading the frame

diff --git a/rpython/jit/backend/x86/assembler.py 
b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -234,6 +234,7 @@
         assert not IS_X86_32
         # the arg is already in edi
         if hasattr(self.cpu.gc_ll_descr, 'passes_frame'):
+            # for tests only
             base_ofs = self.cpu.get_baseofs_of_frame_field()
             mc.LEA_rb(esi.value, -base_ofs)
         mc.SUB_ri(esp.value, 16 - WORD)
@@ -249,8 +250,8 @@
         nursery_free_adr = self.cpu.gc_ll_descr.get_nursery_free_addr()
         mc.MOV(edi, heap(nursery_free_adr))   # load this in EDX
         # clear the gc pattern
+        self._reload_frame_if_necessary(mc)
         mc.MOV_bi(ofs, 0)
-        self._reload_frame_if_necessary(mc)
         mc.RET()
         #
         # If the slowpath malloc failed, we raise a MemoryError that
@@ -1244,10 +1245,10 @@
         remap_frame_layout(self, src_locs, dst_locs, X86_64_SCRATCH_REG)
         self.push_gcmap(self.mc, self._regalloc.get_gcmap(), store=True)
         self.mc.CALL(x)
-        self.pop_gcmap(self.mc)
         if align:
             self.mc.ADD_ri(esp.value, align * WORD)
         self._reload_frame_if_necessary(self.mc)
+        self.pop_gcmap(self.mc)
 
     def _reload_frame_if_necessary(self, mc):
         gcrootmap = self.cpu.gc_ll_descr.gcrootmap
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to