[pypy-commit] pypy continulet-jit-2: In-progress.

arigo noreply at buildbot.pypy.org
Thu Mar 1 20:41:39 CET 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: continulet-jit-2
Changeset: r53078:430939a003f9
Date: 2012-03-01 20:41 +0100
http://bitbucket.org/pypy/pypy/changeset/430939a003f9/

Log:	In-progress.

diff --git a/pypy/jit/backend/x86/assembler.py b/pypy/jit/backend/x86/assembler.py
--- a/pypy/jit/backend/x86/assembler.py
+++ b/pypy/jit/backend/x86/assembler.py
@@ -442,7 +442,7 @@
 
         regalloc = RegAlloc(self, self.cpu.translate_support_code)
         #
-        self._call_header_with_stack_check()
+        frame_size_pos = self._call_header_with_stack_check()
         clt._debug_nbargs = len(inputargs)
         operations = regalloc.prepare_loop(inputargs, operations,
                                            looptoken, clt.allgcrefs)
@@ -467,8 +467,8 @@
             rawstart + size_excluding_failure_stuff,
             rawstart))
         debug_stop("jit-backend-addr")
-        #self._patch_stackadjust(rawstart + stackadjustpos,
-        #                        frame_depth )#+ param_depth)
+        self._patch_stackadjust(rawstart + frame_size_pos,
+                                frame_depth )#+ param_depth)
         self.patch_pending_failure_recoveries(rawstart)
         #
         ops_offset = self.mc.ops_offset
@@ -720,11 +720,19 @@
         return frame_depth#, param_depth
 
     def _patchable_stackadjust(self):
+        xxx
         # stack adjustment LEA
         self.mc.LEA32_rb(esp.value, 0)
         return self.mc.get_relative_pos() - 4
 
-    def _patch_stackadjust(self, adr_lea, allocated_depth):
+    def _patch_stackadjust(self, adr_to_fix, allocated_depth):
+        # patch the requested size in the call to malloc/realloc
+        mc = codebuf.MachineCodeBlockWrapper()
+        words = FRAME_FIXED_SIZE + 1 + allocated_depth
+        mc.writeimm32(words * WORD)
+        mc.copy_to_raw_memory(adr_to_fix)
+        return
+
         # patch stack adjustment LEA
         mc = codebuf.MachineCodeBlockWrapper()
         # Compute the correct offset for the instruction LEA ESP, [EBP-4*words]
@@ -744,7 +752,7 @@
         # Also, make sure this is consistent with FRAME_FIXED_SIZE.
         if IS_X86_32:
             self.mc.SUB_ri(esp.value, WORD * (OFFSTACK_REAL_FRAME-1))
-            self.mc.PUSH_i32(4096)     # XXX XXX!
+            self.mc.PUSH_i32(0x77777777)     # temporary
         elif IS_X86_64:
             # XXX very heavily save and restore all possible argument registers
             save_regs = [r9, r8, ecx, edx, esi, edi]
@@ -757,7 +765,8 @@
             for i in range(len(save_xmm_regs)):
                 self.mc.MOVSD_sx(WORD * (base + i), save_xmm_regs[i].value)
             #
-            self.mc.MOV_ri(edi.value, 4096)     # XXX XXX!
+            self.mc.MOV_riu32(edi.value, 0x77777777)     # temporary
+        frame_size_pos = self.mc.get_relative_pos() - 4
         #
         self.mc.CALL(imm(self.offstack_malloc_addr))
         #
@@ -779,6 +788,8 @@
         if gcrootmap and gcrootmap.is_shadow_stack:
             self._call_header_shadowstack(gcrootmap)
 
+        return frame_size_pos
+
     def _call_header_with_stack_check(self):
         if self.stack_check_slowpath == 0:
             pass                # no stack check (e.g. not translated)
@@ -795,7 +806,7 @@
             assert 0 < offset <= 127
             self.mc.overwrite(jb_location-1, chr(offset))
             #
-        self._call_header()
+        return self._call_header()
 
     def _call_footer(self, extra_esp=0):
         gcrootmap = self.cpu.gc_ll_descr.gcrootmap
@@ -2046,9 +2057,7 @@
 
         # now we return from the complete frame, which starts from
         # _call_header_with_stack_check().  We have to compute how many
-        # extra PUSHes we just did.
-        # throws away most of the frame, including all the PUSHes that we
-        # did just above.
+        # extra PUSHes we just did, to throw them away in one go.
 
         self._call_footer(extra_esp)
         rawstart = mc.materialize(self.cpu.asmmemmgr, [])


More information about the pypy-commit mailing list