[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