[pypy-svn] r65807 - in pypy/branch/pyjitpl5/pypy/jit/metainterp: . test
arigo at codespeak.net
arigo at codespeak.net
Wed Jun 17 18:43:33 CEST 2009
Author: arigo
Date: Wed Jun 17 18:43:30 2009
New Revision: 65807
Modified:
pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_basic.py
Log:
Fix for test_div_overflow. The remaining cases seem to be
inefficiencies but not actual bugs.
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py Wed Jun 17 18:43:30 2009
@@ -392,7 +392,7 @@
def opimpl_check_neg_index(self, pc, arraybox, arraydesc, indexbox):
negbox = self.metainterp.execute_and_record(
rop.INT_LT, [indexbox, ConstInt(0)])
- # XXXXXXXXXXXXXXXXXXXXX fix me
+ # xxx inefficient
negbox = self.implement_guard_value(pc, negbox)
if negbox.getint():
# the index is < 0; add the array length to it
@@ -406,14 +406,14 @@
def opimpl_check_zerodivisionerror(self, pc, box):
nonzerobox = self.metainterp.execute_and_record(
rop.INT_NE, [box, ConstInt(0)])
- # XXXXXXXXXXXXXXXXXXXXX fix me
+ # xxx inefficient
nonzerobox = self.implement_guard_value(pc, nonzerobox)
if nonzerobox.getint():
return False
else:
# division by zero!
self.metainterp.cpu.set_zero_division_error()
- return self.metainterp.handle_exception()
+ return self.metainterp.raise_this_error()
@arguments("orgpc", "box", "box")
def opimpl_check_div_overflow(self, pc, box1, box2):
@@ -425,34 +425,25 @@
rop.INT_AND, [tmp1, box2]) # tmp2=-1
tmp3 = self.metainterp.execute_and_record(
rop.INT_EQ, [tmp2, ConstInt(-1)]) # tmp3?
- # XXXXXXXXXXXXXXXXXXXXX fix me
+ # xxx inefficient
tmp4 = self.implement_guard_value(pc, tmp3) # tmp4?
if not tmp4.getint():
return False
else:
# division overflow!
self.metainterp.cpu.set_overflow_error()
- return self.metainterp.handle_exception()
+ return self.metainterp.raise_this_error()
@arguments()
def opimpl_overflow_error(self):
- # xxx indirect
- cpu = self.metainterp.cpu
- cpu.set_overflow_error()
- etype = cpu.get_exception()
- evalue = cpu.get_exc_value()
- cpu.clear_exception()
- #
- ts = self.metainterp.staticdata.ts
- return self.metainterp.finishframe_exception(
- ts.get_exception_box(etype),
- ts.get_exc_value_box(evalue))
+ self.metainterp.cpu.set_overflow_error()
+ return self.metainterp.raise_this_error()
@arguments("orgpc", "box")
def opimpl_int_abs(self, pc, box):
nonneg = self.metainterp.execute_and_record(
rop.INT_GE, [box, ConstInt(0)])
- # XXXXXXXXXXXXXXXXXXXXX fix me
+ # xxx inefficient
nonneg = self.implement_guard_value(pc, nonneg)
if nonneg.getint():
self.make_result_box(box)
@@ -1044,6 +1035,14 @@
else:
raise self.staticdata.ExitFrameWithExceptionPtr(excvaluebox.getptr_base())
+ def raise_this_error(self):
+ etype = self.cpu.get_exception()
+ evalue = self.cpu.get_exc_value()
+ self.cpu.clear_exception()
+ return self.finishframe_exception(
+ self.staticdata.ts.get_exception_box(etype),
+ self.staticdata.ts.get_exc_value_box(evalue))
+
def create_empty_history(self):
self.history = history.History(self.cpu)
if self.staticdata.stats is not None:
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_basic.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_basic.py Wed Jun 17 18:43:30 2009
@@ -419,12 +419,17 @@
assert res == 0
def test_abs(self):
- def f(x):
- return abs(x)
- res = self.interp_operations(f, [-17])
- assert res == 17
- res = self.interp_operations(f, [4141])
- assert res == 4141
+ myjitdriver = JitDriver(greens = [], reds = ['i', 't'])
+ def f(i):
+ t = 0
+ while i < 10:
+ myjitdriver.can_enter_jit(i=i, t=t)
+ myjitdriver.jit_merge_point(i=i, t=t)
+ t += abs(i)
+ i += 1
+ return t
+ res = self.meta_interp(f, [-5])
+ assert res == 5+4+3+2+1+0+1+2+3+4+5+6+7+8+9
def test_print(self):
myjitdriver = JitDriver(greens = [], reds = ['n'])
@@ -597,7 +602,6 @@
assert res == -667
def test_div_overflow(self):
- py.test.skip("fails")
import sys
from pypy.rpython.lltypesystem.lloperation import llop
myjitdriver = JitDriver(greens = [], reds = ['x', 'y', 'res'])
More information about the Pypy-commit
mailing list