Author: fijal
Branch: jit-leaner-frontend
Changeset: r82959:a0468c0d2dca
Date: 2016-03-11 12:19 +0200
http://bitbucket.org/pypy/pypy/changeset/a0468c0d2dca/
Log: encode positions in link in 2 shorts
diff --git a/rpython/jit/metainterp/opencoder.py
b/rpython/jit/metainterp/opencoder.py
--- a/rpython/jit/metainterp/opencoder.py
+++ b/rpython/jit/metainterp/opencoder.py
@@ -59,8 +59,8 @@
self.save_pos = -1
size = self._next()
if size < 0:
- self.save_pos = self.pos
- self.pos = -size - 1
+ self.save_pos = self.pos + 1
+ self.pos = ((-size - 1) << 15) | (self._next())
assert self.pos >= 0
size = self._next()
assert size >= 0
@@ -262,7 +262,10 @@
# self._ops[index] = -newtag - 1
def record_snapshot_link(self, pos):
- self.append(-pos - 1)
+ lower = pos & 0x7fff
+ upper = pos >> 15
+ self.append(-upper-1)
+ self.append(lower)
def record_op(self, opnum, argboxes, descr=None):
# return an ResOperation instance, ideally die in hell
diff --git a/rpython/jit/metainterp/test/test_opencoder.py
b/rpython/jit/metainterp/test/test_opencoder.py
--- a/rpython/jit/metainterp/test/test_opencoder.py
+++ b/rpython/jit/metainterp/test/test_opencoder.py
@@ -7,7 +7,7 @@
from rpython.jit.metainterp.test.strategies import lists_of_operations
from rpython.jit.metainterp.optimizeopt.test.test_util import BaseTest
from rpython.jit.metainterp.history import TreeLoop, AbstractDescr
-from hypothesis import given
+from hypothesis import given, strategies
class JitCode(object):
def __init__(self, index):
@@ -141,6 +141,13 @@
loop2.operations = l
BaseTest.assert_equal(loop1, loop2)
+ @given(strategies.integers(min_value=0, max_value=2**25))
+ def test_packing(self, i):
+ t = Trace([])
+ t.record_snapshot_link(i)
+ iter = t.get_iter()
+ assert (((-iter._next() - 1) << 15) | (iter._next())) == i
+
def test_cut_trace_from(self):
i0, i1, i2 = InputArgInt(), InputArgInt(), InputArgInt()
t = Trace([i0, i1, i2])
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit