[pypy-svn] r75286 - in pypy/branch/int-between/pypy/jit: codewriter codewriter/test metainterp/test
arigo at codespeak.net
arigo at codespeak.net
Fri Jun 11 21:19:36 CEST 2010
Author: arigo
Date: Fri Jun 11 21:19:12 2010
New Revision: 75286
Modified:
pypy/branch/int-between/pypy/jit/codewriter/jtransform.py
pypy/branch/int-between/pypy/jit/codewriter/test/test_flatten.py
pypy/branch/int-between/pypy/jit/codewriter/test/test_jtransform.py
pypy/branch/int-between/pypy/jit/metainterp/test/test_basic.py
Log:
Tests and fixes.
Modified: pypy/branch/int-between/pypy/jit/codewriter/jtransform.py
==============================================================================
--- pypy/branch/int-between/pypy/jit/codewriter/jtransform.py (original)
+++ pypy/branch/int-between/pypy/jit/codewriter/jtransform.py Fri Jun 11 21:19:12 2010
@@ -140,6 +140,7 @@
if op.opname not in ('int_lt', 'int_le', 'int_eq', 'int_ne',
'int_gt', 'int_ge',
'int_is_zero', 'int_is_true',
+ 'uint_lt','uint_le','uint_gt','uint_ge',
'ptr_eq', 'ptr_ne',
'ptr_iszero', 'ptr_nonzero'):
return False # not a supported operation
@@ -190,6 +191,10 @@
'int_le': 'int_ge',
'int_gt': 'int_lt',
'int_ge': 'int_le',
+ 'uint_lt': 'uint_gt',
+ 'uint_le': 'uint_ge',
+ 'uint_gt': 'uint_lt',
+ 'uint_ge': 'uint_le',
'float_lt': 'float_gt',
'float_le': 'float_ge',
'float_gt': 'float_lt',
@@ -210,6 +215,10 @@
rewrite_op_int_le = _rewrite_symmetric
rewrite_op_int_gt = _rewrite_symmetric
rewrite_op_int_ge = _rewrite_symmetric
+ rewrite_op_uint_lt = _rewrite_symmetric
+ rewrite_op_uint_le = _rewrite_symmetric
+ rewrite_op_uint_gt = _rewrite_symmetric
+ rewrite_op_uint_ge = _rewrite_symmetric
rewrite_op_float_add = _rewrite_symmetric
rewrite_op_float_mul = _rewrite_symmetric
@@ -707,16 +716,11 @@
('uint_floordiv_zer', 'int_floordiv_zer'),
('uint_mod', 'int_mod'),
('uint_mod_zer', 'int_mod_zer'),
- ('uint_lt', 'int_lt'),
- ('uint_le', 'int_le'),
('uint_eq', 'int_eq'),
('uint_ne', 'int_ne'),
- ('uint_gt', 'int_gt'),
- ('uint_ge', 'int_ge'),
('uint_and', 'int_and'),
('uint_or', 'int_or'),
('uint_lshift', 'int_lshift'),
- ('uint_rshift', 'int_rshift'),
('uint_xor', 'int_xor'),
]:
assert _old not in locals()
Modified: pypy/branch/int-between/pypy/jit/codewriter/test/test_flatten.py
==============================================================================
--- pypy/branch/int-between/pypy/jit/codewriter/test/test_flatten.py (original)
+++ pypy/branch/int-between/pypy/jit/codewriter/test/test_flatten.py Fri Jun 11 21:19:12 2010
@@ -7,7 +7,7 @@
from pypy.rpython.lltypesystem import lltype, rclass, rstr
from pypy.objspace.flow.model import SpaceOperation, Variable, Constant
from pypy.translator.unsimplify import varoftype
-from pypy.rlib.rarithmetic import ovfcheck
+from pypy.rlib.rarithmetic import ovfcheck, r_uint
from pypy.rlib.jit import dont_look_inside, _we_are_jitted, JitDriver
from pypy.rlib.objectmodel import keepalive_until_here
from pypy.rlib import jit
@@ -705,3 +705,13 @@
int_add %i1, %i2 -> %i3
int_return %i3
""", transform=True)
+
+ def test_uint_operations(self):
+ def f(n):
+ return ((r_uint(n) - 123) >> 1) <= r_uint(456)
+ self.encoding_test(f, [200], """
+ int_sub %i0, $123L -> %i1
+ uint_rshift %i1, $1L -> %i2
+ uint_le %i2, $456L -> %i3
+ int_return %i3
+ """, transform=True)
Modified: pypy/branch/int-between/pypy/jit/codewriter/test/test_jtransform.py
==============================================================================
--- pypy/branch/int-between/pypy/jit/codewriter/test/test_jtransform.py (original)
+++ pypy/branch/int-between/pypy/jit/codewriter/test/test_jtransform.py Fri Jun 11 21:19:12 2010
@@ -150,7 +150,8 @@
ops = {'int_add': 'int_add',
'int_or': 'int_or',
'int_gt': ('int_gt', 'int_lt'),
- 'uint_le': ('int_le', 'int_ge'),
+ 'uint_eq': 'int_eq',
+ 'uint_le': ('uint_le', 'uint_ge'),
'char_ne': 'int_ne',
'char_lt': ('int_lt', 'int_gt'),
'uint_xor': 'int_xor',
Modified: pypy/branch/int-between/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/int-between/pypy/jit/metainterp/test/test_basic.py (original)
+++ pypy/branch/int-between/pypy/jit/metainterp/test/test_basic.py Fri Jun 11 21:19:12 2010
@@ -538,6 +538,16 @@
res = self.meta_interp(f, [10])
assert res == 0
+ def test_uint_operations(self):
+ from pypy.rlib.rarithmetic import r_uint
+ def f(n):
+ return ((r_uint(n) - 123) >> 1) <= r_uint(456)
+ res = self.interp_operations(f, [50])
+ assert res == False
+ self.check_operations_history(int_rshift=0, uint_rshift=1,
+ int_le=0, uint_le=1,
+ int_sub=1)
+
def test_getfield(self):
class A:
pass
More information about the Pypy-commit
mailing list