Author: Maciej Fijalkowski <fij...@gmail.com> Branch: share-guard-info Changeset: r79748:defd45638c14 Date: 2015-09-21 22:25 +0200 http://bitbucket.org/pypy/pypy/changeset/defd45638c14/
Log: I don't know how to handle exceptions yet diff --git a/rpython/jit/backend/llgraph/runner.py b/rpython/jit/backend/llgraph/runner.py --- a/rpython/jit/backend/llgraph/runner.py +++ b/rpython/jit/backend/llgraph/runner.py @@ -1028,7 +1028,6 @@ def execute_guard_overflow(self, descr): if not self.overflow_flag: self.fail_guard(descr) - return lltype.nullptr(llmemory.GCREF.TO) # I think it's fine.... def execute_jump(self, descr, *args): raise Jump(descr._llgraph_target, args) diff --git a/rpython/jit/metainterp/blackhole.py b/rpython/jit/metainterp/blackhole.py --- a/rpython/jit/metainterp/blackhole.py +++ b/rpython/jit/metainterp/blackhole.py @@ -212,6 +212,20 @@ assert lltype.typeOf(result) is longlong.FLOATSTORAGE self.registers_f[ord(code[position])] = result position += 1 + elif resulttype == "iL": + result, new_position = result + if new_position != -1: + position = new_position + next_argcode = next_argcode + 2 + else: + assert argcodes[next_argcode] == '>' + assert argcodes[next_argcode + 1] == 'i' + next_argcode = next_argcode + 2 + if lltype.typeOf(result) is lltype.Bool: + result = int(result) + assert lltype.typeOf(result) is lltype.Signed + self.registers_i[ord(code[position])] = result + position += 1 elif resulttype == 'L': assert result >= 0 position = result @@ -402,12 +416,12 @@ def bhimpl_int_sub_ovf(a, b): return ovfcheck(a - b) - @arguments("L", "i", "i", returns="i") + @arguments("L", "i", "i", returns="iL") def bhimpl_int_mul_jump_if_ovf(label, a, b): try: - return ovfcheck(a * b) + return ovfcheck(a * b), -1 except OverflowError: - xxx + return 0, label @arguments("i", "i", returns="i") def bhimpl_int_floordiv(a, b): diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py --- a/rpython/jit/metainterp/pyjitpl.py +++ b/rpython/jit/metainterp/pyjitpl.py @@ -2023,7 +2023,7 @@ moreargs = [box] + extraargs else: moreargs = list(extraargs) - if opnum == rop.GUARD_EXCEPTION or opnum == rop.GUARD_OVERFLOW: + if opnum == rop.GUARD_EXCEPTION: guard_op = self.history.record(opnum, moreargs, lltype.nullptr(llmemory.GCREF.TO)) else: @@ -2454,46 +2454,16 @@ self.jitdriver_sd.warmstate.execute_assembler(loop_token, *args) def prepare_resume_from_failure(self, deadframe): - xxx - frame = self.framestack[-1] - if opnum == rop.GUARD_FUTURE_CONDITION: - pass - elif opnum == rop.GUARD_TRUE: # a goto_if_not that jumps only now - pass # frame.pc = frame.jitcode.follow_jump(frame.pc) - elif opnum == rop.GUARD_FALSE: # a goto_if_not that stops jumping; - pass # or a switch that was in its "default" case - elif opnum == rop.GUARD_VALUE or opnum == rop.GUARD_CLASS: - pass # the pc is already set to the *start* of the opcode - elif (opnum == rop.GUARD_NONNULL or - opnum == rop.GUARD_ISNULL or - opnum == rop.GUARD_NONNULL_CLASS): - pass # the pc is already set to the *start* of the opcode - elif opnum == rop.GUARD_NO_EXCEPTION or opnum == rop.GUARD_EXCEPTION: - exception = self.cpu.grab_exc_value(deadframe) - if exception: - self.execute_ll_raised(lltype.cast_opaque_ptr(rclass.OBJECTPTR, - exception)) - else: - self.clear_exception() - try: - self.handle_possible_exception() - except ChangeFrame: - pass - elif opnum == rop.GUARD_NOT_INVALIDATED: - pass # XXX we want to do something special in resume descr, - # but not now - elif opnum == rop.GUARD_NO_OVERFLOW: # an overflow now detected - pass - #self.execute_raised(OverflowError(), constant=True) - #try: - # self.finishframe_exception() - #except ChangeFrame: - # pass - elif opnum == rop.GUARD_OVERFLOW: # no longer overflowing - self.clear_exception() - else: - from rpython.jit.metainterp.resoperation import opname - raise NotImplementedError(opname[opnum]) + exception = self.cpu.grab_exc_value(deadframe) + if exception: + self.execute_ll_raised(lltype.cast_opaque_ptr(rclass.OBJECTPTR, + exception)) + #else: + # self.clear_exception() + #try: + # self.handle_possible_exception() + #except ChangeFrame: + # pass def get_procedure_token(self, greenkey, with_compiled_targets=False): JitCell = self.jitdriver_sd.warmstate.JitCell _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit