Author: fijal
Branch: compress-numbering
Changeset: r80019:b37bf50befec
Date: 2015-10-07 14:07 +0200
http://bitbucket.org/pypy/pypy/changeset/b37bf50befec/

Log:    store also packed on numbering;

diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -33,7 +33,7 @@
     # we need only 32bit, but 64 is ok for now
 
 def unpack_uint(packed):
-    return packed >> 16, packed & 0xffff
+    return (packed >> 16) & 0xffff, packed & 0xffff
 
 class FrameInfo(object):
     __slots__ = ('prev', 'packed_jitcode_pc')
@@ -94,6 +94,7 @@
 NUMBERINGP = lltype.Ptr(lltype.GcForwardReference())
 NUMBERING = lltype.GcStruct('Numbering',
                             ('prev', NUMBERINGP),
+                            ('packed_jitcode_pc', lltype.Signed),
                             ('nums', lltype.Array(rffi.SHORT)))
 NUMBERINGP.TO.become(NUMBERING)
 
@@ -195,18 +196,25 @@
 
     # env numbering
 
-    def number(self, optimizer, snapshot):
+    def number(self, optimizer, snapshot, frameinfo, first_iteration=False):
         if snapshot is None:
             return lltype.nullptr(NUMBERING), {}, 0
         if snapshot in self.numberings:
             numb, liveboxes, v = self.numberings[snapshot]
             return numb, liveboxes.copy(), v
 
-        numb1, liveboxes, v = self.number(optimizer, snapshot.prev)
+        if first_iteration:
+            numb1, liveboxes, v = self.number(optimizer, snapshot.prev, 
frameinfo)
+        else:
+            numb1, liveboxes, v = self.number(optimizer, snapshot.prev, 
frameinfo.prev)
         n = len(liveboxes) - v
         boxes = snapshot.boxes
         length = len(boxes)
         numb = lltype.malloc(NUMBERING, length)
+        if first_iteration:
+            numb.packed_jitcode_pc = -1
+        else:
+            numb.packed_jitcode_pc = frameinfo.packed_jitcode_pc
         for i in range(length):
             box = boxes[i]
             box = optimizer.get_box_replacement(box)
@@ -377,7 +385,8 @@
         assert not storage.rd_numb
         snapshot = self.snapshot_storage.rd_snapshot
         assert snapshot is not None # is that true?
-        numb, liveboxes_from_env, v = self.memo.number(optimizer, snapshot)
+        numb, liveboxes_from_env, v = self.memo.number(optimizer, snapshot,
+            self.snapshot_storage.rd_frame_info_list, first_iteration=True)
         self.liveboxes_from_env = liveboxes_from_env
         self.liveboxes = {}
         storage.rd_numb = numb
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to