[pypy-svn] r79484 - pypy/trunk/pypy/jit/backend/x86
arigo at codespeak.net
arigo at codespeak.net
Wed Nov 24 18:48:12 CET 2010
Author: arigo
Date: Wed Nov 24 18:48:10 2010
New Revision: 79484
Modified:
pypy/trunk/pypy/jit/backend/x86/assembler.py
pypy/trunk/pypy/jit/backend/x86/regalloc.py
Log:
Caching of tons of identical 2-tuples.
Modified: pypy/trunk/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/assembler.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/assembler.py Wed Nov 24 18:48:10 2010
@@ -188,6 +188,7 @@
self._debug = False
self.debug_counter_descr = cpu.fielddescrof(DEBUG_COUNTER, 'i')
self.fail_boxes_count = 0
+ self._current_depths_cache = (0, 0)
def leave_jitted_hook(self):
ptrs = self.fail_boxes_ptr.ar
Modified: pypy/trunk/pypy/jit/backend/x86/regalloc.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/regalloc.py (original)
+++ pypy/trunk/pypy/jit/backend/x86/regalloc.py Wed Nov 24 18:48:10 2010
@@ -320,11 +320,22 @@
def locs_for_fail(self, guard_op):
return [self.loc(v) for v in guard_op.getfailargs()]
+ def get_current_depth(self):
+ # return (self.fm.frame_depth, self.param_depth), but trying to share
+ # the resulting tuple among several calls
+ arg0 = self.fm.frame_depth
+ arg1 = self.param_depth
+ result = self.assembler._current_depths_cache
+ if result[0] != arg0 or result[1] != arg1:
+ result = (arg0, arg1)
+ self.assembler._current_depths_cache = result
+ return result
+
def perform_with_guard(self, op, guard_op, arglocs, result_loc):
faillocs = self.locs_for_fail(guard_op)
self.rm.position += 1
self.xrm.position += 1
- current_depths = (self.fm.frame_depth, self.param_depth)
+ current_depths = self.get_current_depth()
self.assembler.regalloc_perform_with_guard(op, guard_op, faillocs,
arglocs, result_loc,
current_depths)
@@ -340,7 +351,7 @@
arglocs))
else:
self.assembler.dump('%s(%s)' % (guard_op, arglocs))
- current_depths = (self.fm.frame_depth, self.param_depth)
+ current_depths = self.get_current_depth()
self.assembler.regalloc_perform_guard(guard_op, faillocs, arglocs,
result_loc,
current_depths)
More information about the Pypy-commit
mailing list