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
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to