[pypy-commit] pypy int-tag-untag-as-operations: fix test_random for tag operations

timfel noreply at buildbot.pypy.org
Wed Apr 24 14:29:00 CEST 2013


Author: Tim Felgentreff <timfelgentreff at gmail.com>
Branch: int-tag-untag-as-operations
Changeset: r63589:9a46a1846653
Date: 2013-04-24 13:35 +0200
http://bitbucket.org/pypy/pypy/changeset/9a46a1846653/

Log:	fix test_random for tag operations

diff --git a/rpython/jit/backend/test/test_random.py b/rpython/jit/backend/test/test_random.py
--- a/rpython/jit/backend/test/test_random.py
+++ b/rpython/jit/backend/test/test_random.py
@@ -303,6 +303,17 @@
     def produce_into(self, builder, r):
         self.put(builder, [r.choice(builder.intvars)])
 
+class UnaryTagOperation(UnaryOperation):
+    untag_mask = 1
+    tag_mask = sys.maxint
+    def produce_into(self, builder, r):
+        v = r.choice(builder.intvars)
+        if (v.value & self.tag_mask) != v.value:
+            v = builder.do(rop.INT_AND, [v, ConstInt(self.tag_mask)])
+        if (v.value | self.untag_mask) != v.value:
+            v = builder.do(rop.INT_OR, [v, ConstInt(self.untag_mask)])
+        self.put(builder, [v])
+
 class BooleanUnaryOperation(UnaryOperation):
     def produce_into(self, builder, r):
         v = builder.get_bool_var(r)
@@ -502,11 +513,13 @@
 
 for _op in [rop.INT_NEG,
             rop.INT_INVERT,
-            rop.INT_TAG,
-            rop.INT_UNTAG,
             ]:
     OPERATIONS.append(UnaryOperation(_op))
 
+for _op in [rop.INT_TAG,
+            rop.INT_UNTAG]:
+    OPERATIONS.append(UnaryTagOperation(_op))
+
 OPERATIONS.append(UnaryOperation(rop.INT_IS_TRUE, boolres=True))
 OPERATIONS.append(UnaryOperation(rop.INT_IS_ZERO, boolres=True))
 OPERATIONS.append(ConstUnaryOperation(rop.SAME_AS, boolres='sometimes'))


More information about the pypy-commit mailing list