Author: fijal
Branch: jit-leaner-frontend
Changeset: r82634:ae45cb0da255
Date: 2016-03-01 14:02 +0100
http://bitbucket.org/pypy/pypy/changeset/ae45cb0da255/

Log:    progress, pass the first own test of opencoder

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
@@ -4,6 +4,7 @@
 from rpython.jit.metainterp.resoperation import AbstractResOp, 
AbstractInputArg,\
     ResOperation, oparity, opname, rop, ResOperation, opwithdescr
 from rpython.rlib.rarithmetic import intmask
+from rpython.jit.metainterp import resume
 
 TAGINT, TAGCONST, TAGBOX = range(3)
 TAGMASK = 0x3
@@ -46,8 +47,20 @@
         else:
             yyyy
 
+    def read_resume(self, op):
+        jc_index = self._next()
+        pc = self._next()
+        f = resume.FrameInfo(None, jc_index, pc)
+        op.rd_frame_info_list = f
+        lgt = self._next()
+        box_list = []
+        for i in range(lgt):
+            box = self._get(self._next())
+            assert box
+            box_list.append(box)
+        op.rd_snapshot = resume.Snapshot(None, box_list)
+
     def next(self):
-        pos = self.pos
         opnum = self._next()
         if oparity[opnum] == -1:
             argnum = self._next()
@@ -65,6 +78,8 @@
         else:
             descr = None
         res = ResOperation(opnum, args, -1, descr=descr)
+        if rop.is_guard(opnum):
+            self.read_resume(res)
         self._cache[self._count] = res
         self._count += 1
         return res
@@ -138,6 +153,14 @@
     def record_op_tag(self, opnum, tagged_args, descr=None):
         return tag(TAGBOX, self._record_raw(opnum, tagged_args, descr))
 
+    def record_snapshot(self, jitcode, pc, active_boxes):
+        self._ops.append(jitcode.index)
+        self._ops.append(pc)
+        self._ops.append(len(active_boxes)) # unnecessary, can be read from
+        # jitcode
+        for box in active_boxes:
+            self._ops.append(box.position) # not tagged, as it must be boxes
+
     def get_iter(self):
         return TraceIterator(self, len(self._ops))
 
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
@@ -39,9 +39,9 @@
 class FrameInfo(object):
     __slots__ = ('prev', 'packed_jitcode_pc')
 
-    def __init__(self, prev, jitcode, pc):
+    def __init__(self, prev, jitcode_index, pc):
         self.prev = prev
-        self.packed_jitcode_pc = combine_uint(jitcode.index, pc)
+        self.packed_jitcode_pc = combine_uint(jitcode_index, pc)
 
 class VectorInfo(object):
     """
@@ -123,8 +123,7 @@
                                          back.parent_resumedata_snapshot,
                                          back.get_list_of_active_boxes(True))
 
-def capture_resumedata(framestack, virtualizable_boxes, virtualref_boxes,
-                       snapshot_storage):
+def capture_resumedata(framestack, virtualizable_boxes, virtualref_boxes, t):
     n = len(framestack) - 1
     if virtualizable_boxes is not None:
         boxes = virtualref_boxes + virtualizable_boxes
@@ -132,15 +131,19 @@
         boxes = virtualref_boxes[:]
     if n >= 0:
         top = framestack[n]
-        _ensure_parent_resumedata(framestack, n)
-        frame_info_list = FrameInfo(top.parent_resumedata_frame_info_list,
-                                    top.jitcode, top.pc)
-        snapshot_storage.rd_frame_info_list = frame_info_list
-        snapshot = Snapshot(top.parent_resumedata_snapshot,
-                            top.get_list_of_active_boxes(False))
-        snapshot = Snapshot(snapshot, boxes)
-        snapshot_storage.rd_snapshot = snapshot
+        #_ensure_parent_resumedata(framestack, n)
+        t.record_snapshot(top.jitcode, top.pc,
+                          top.get_list_of_active_boxes(False))
+        #XXX
+        #frame_info_list = FrameInfo(top.parent_resumedata_frame_info_list,
+        #                            top.jitcode, top.pc)
+        #snapshot_storage.rd_frame_info_list = frame_info_list
+        #snapshot = Snapshot(top.parent_resumedata_snapshot,
+        #                    top.get_list_of_active_boxes(False))
+        #snapshot = Snapshot(snapshot, boxes)
+        #snapshot_storage.rd_snapshot = snapshot
     else:
+        yyy
         snapshot_storage.rd_frame_info_list = None
         snapshot_storage.rd_snapshot = Snapshot(None, boxes)
 
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
@@ -56,4 +56,4 @@
                                   virutalref_boxes, t)
         (i0, i1), l = self.unpack(t)
         assert l[1].opnum == rop.GUARD_FALSE
-        assert l[1].rd_snapshot == [i0, i1]
+        assert l[1].rd_snapshot.boxes == [i0, i1]
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to