Author: Armin Rigo <[email protected]>
Branch: branch-prediction
Changeset: r90994:a32d15769b44
Date: 2017-04-06 17:03 +0200
http://bitbucket.org/pypy/pypy/changeset/a32d15769b44/
Log: Next slowpath
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
@@ -125,6 +125,7 @@
self.pending_memoryerror_trampoline_from = None
self.mc = None
self.current_clt = None
+ self.frame_depth_to_patch = None
def _build_float_constants(self):
# 0x80000000000000008000000000000000
@@ -858,6 +859,14 @@
for ofs in self.frame_depth_to_patch:
self._patch_frame_depth(ofs + rawstart, framedepth)
+ class IncreaseStackSlowPath(SlowPath):
+ def generate_body(self, assembler, mc):
+ mc.MOV_si(WORD, 0xffffff) # force writing 32 bit
+ ofs2 = mc.get_relative_pos(break_basic_block=False) - 4
+ assembler.frame_depth_to_patch.append(ofs2)
+ assembler.push_gcmap(mc, self.gcmap, store=True)
+ mc.CALL(imm(assembler._frame_realloc_slowpath))
+
def _check_frame_depth(self, mc, gcmap):
""" check if the frame is of enough depth to follow this bridge.
Otherwise reallocate the frame in a helper.
@@ -868,16 +877,11 @@
ofs = self.cpu.unpack_fielddescr(descrs.arraydescr.lendescr)
mc.CMP_bi(ofs, 0xffffff) # force writing 32 bit
stack_check_cmp_ofs = mc.get_relative_pos(break_basic_block=False) - 4
- # PPP FIX ME
- jg_location = mc.emit_forward_jump('GE')
- mc.MOV_si(WORD, 0xffffff) # force writing 32 bit
- ofs2 = mc.get_relative_pos(break_basic_block=False) - 4
- self.push_gcmap(mc, gcmap, store=True)
- mc.CALL(imm(self._frame_realloc_slowpath))
- # patch the JG above
- mc.patch_forward_jump(jg_location)
self.frame_depth_to_patch.append(stack_check_cmp_ofs)
- self.frame_depth_to_patch.append(ofs2)
+ sp = self.IncreaseStackSlowPath(mc, rx86.Conditions['L'])
+ sp.gcmap = gcmap
+ sp.set_continue_addr(mc)
+ self.pending_slowpaths.append(sp)
def _check_frame_depth_debug(self, mc):
""" double check the depth size. It prints the error (and potentially
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit