Author: fijal Branch: compress-numbering Changeset: r80931:184e3ab9ec43 Date: 2015-11-25 11:48 +0200 http://bitbucket.org/pypy/pypy/changeset/184e3ab9ec43/
Log: push push push 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 @@ -1115,22 +1115,17 @@ def rebuild_from_resumedata(metainterp, storage, deadframe, virtualizable_info, greenfield_info): - xxx resumereader = ResumeDataBoxReader(storage, deadframe, metainterp) boxes = resumereader.consume_vref_and_vable_boxes(virtualizable_info, greenfield_info) virtualizable_boxes, virtualref_boxes = boxes - frameinfo = storage.rd_numb.prev - while True: - jitcode_pos, pc = unpack_uint(frameinfo.packed_jitcode_pc) + while not resumereader.done_reading(): + jitcode_pos, pc = resumereader.read_jitcode_pos_pc() jitcode = metainterp.staticdata.jitcodes[jitcode_pos] f = metainterp.newframe(jitcode) f.setup_resume_at_op(pc) resumereader.consume_boxes(f.get_current_position_info(), f.registers_i, f.registers_r, f.registers_f) - frameinfo = frameinfo.prev - if not frameinfo: - break metainterp.framestack.reverse() return resumereader.liveboxes, virtualizable_boxes, virtualref_boxes @@ -1162,27 +1157,28 @@ virtualizable = vinfo.unwrap_virtualizable_box(virtualizablebox) return vinfo.load_list_of_boxes(virtualizable, self, numb) - def consume_virtualref_boxes(self, numb, end): + def consume_virtualref_boxes(self, end): # Returns a list of boxes, assumed to be all BoxPtrs. # We leave up to the caller to call vrefinfo.continue_tracing(). assert (end & 1) == 0 return [self.decode_ref(numb.nums[i]) for i in range(end)] def consume_vref_and_vable_boxes(self, vinfo, ginfo): - xxxx - numb = self.cur_numb - self.cur_numb = numb.prev + first_snapshot_size = rffi.cast(lltype.Signed, + self.numb.first_snapshot_size) if vinfo is not None: - virtualizable_boxes = self.consume_virtualizable_boxes(vinfo, numb) + virtualizable_boxes = self.consume_virtualizable_boxes(vinfo) + xxxx end = len(numb.nums) - len(virtualizable_boxes) elif ginfo is not None: + xxx index = len(numb.nums) - 1 virtualizable_boxes = [self.decode_ref(numb.nums[index])] end = len(numb.nums) - 1 else: virtualizable_boxes = None - end = len(numb.nums) - virtualref_boxes = self.consume_virtualref_boxes(numb, end) + end = first_snapshot_size + virtualref_boxes = self.consume_virtualref_boxes(end) return virtualizable_boxes, virtualref_boxes def allocate_with_vtable(self, descr=None): @@ -1403,7 +1399,7 @@ prevbh = None firstbh = None curbh = None - while True: + while not resumereader.done_reading(): curbh = blackholeinterpbuilder.acquire_interp() if prevbh is not None: prevbh.nextblackholeinterp = curbh @@ -1414,8 +1410,6 @@ jitcode = jitcodes[jitcode_pos] curbh.setposition(jitcode, pc) resumereader.consume_one_section(curbh) - if resumereader.done_reading(): - break curbh.nextblackholeinterp = None return firstbh @@ -1467,8 +1461,12 @@ return assert (end & 1) == 0 for i in range(0, end, 2): - virtual = self.decode_ref(numb.nums[i]) - vref = self.decode_ref(numb.nums[i + 1]) + virtual_item, self.cur_index = resumecode.numb_next_item( + self.numb, self.cur_index) + vref_item, self.cur_index = resumecode.numb_next_item( + self.numb, self.cur_index) + virtual = self.decode_ref(virtual_item) + vref = self.decode_ref(vref_item) # For each pair, we store the virtual inside the vref. vrefinfo.continue_tracing(vref, virtual) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit