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