Author: Tim Felgentreff <[email protected]>
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'))
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit