[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