Author: Eric Seckler <eric.seck...@student.hpi.uni-potsdam.de> Branch: Changeset: r752:1a5c22d99f3f Date: 2014-01-14 17:04 +0100 http://bitbucket.org/pypy/lang-smalltalk/changeset/1a5c22d99f3f/
Log: move stm breakpoint to trampoline loop diff --git a/spyvm/interpreter.py b/spyvm/interpreter.py --- a/spyvm/interpreter.py +++ b/spyvm/interpreter.py @@ -134,7 +134,7 @@ _last_indent = "" jit_driver = jit.JitDriver( greens=[], - reds=['pc', 's_context', 'self', 'method'], + reds=['self', 'w_active_context', 's_new_context', 's_sender'], # virtualizables=['s_context'], stm_do_transaction_breaks=True # get_printable_location=get_printable_location @@ -205,7 +205,15 @@ #assert self.remaining_stack_depth == self.max_stack_depth # Need to save s_sender, c_loop will nil this on return s_sender = s_new_context.s_sender() + try: + # STM-ONLY JITDRIVER! + self.jit_driver.jit_merge_point( + self=self, w_active_context=w_active_context, s_new_context=s_new_context, s_sender=s_sender) + if rstm.jit_stm_should_break_transaction(False): + rstm.jit_stm_transaction_break_point() + self = self._hints_for_stm() + s_new_context = self.c_loop(s_new_context) except StackOverflow, e: s_new_context = e.s_context @@ -243,15 +251,12 @@ # s_context=s_context) old_pc = pc - # STM-ONLY JITDRIVER! - self.jit_driver.jit_merge_point( - pc=pc, self=self, method=method, - s_context=s_context) - if rstm.jit_stm_should_break_transaction(False): - rstm.jit_stm_transaction_break_point() - self = self._hints_for_stm() try: self.step(s_context) + if pc % 2 == 0: + return s_context + if rstm.should_break_transaction(): + return s_context except Return, nlr: if nlr.s_target_context is not s_context: _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit