Author: Maciej Fijalkowski <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit