[pypy-commit] pypy store-sink-array: First, compactify a bit the rd_pendingfields list.
arigo
noreply at buildbot.pypy.org
Sun Jun 19 19:52:35 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch: store-sink-array
Changeset: r45010:c907c4dd8a46
Date: 2011-06-19 16:04 +0200
http://bitbucket.org/pypy/pypy/changeset/c907c4dd8a46/
Log: First, compactify a bit the rd_pendingfields list.
diff --git a/pypy/jit/metainterp/resume.py b/pypy/jit/metainterp/resume.py
--- a/pypy/jit/metainterp/resume.py
+++ b/pypy/jit/metainterp/resume.py
@@ -2,10 +2,12 @@
from pypy.jit.metainterp.history import Box, Const, ConstInt, getkind
from pypy.jit.metainterp.history import BoxInt, BoxPtr, BoxFloat
from pypy.jit.metainterp.history import INT, REF, FLOAT, HOLE
+from pypy.jit.metainterp.history import AbstractDescr
from pypy.jit.metainterp.resoperation import rop
from pypy.jit.metainterp import jitprof
from pypy.jit.codewriter.effectinfo import EffectInfo
from pypy.rpython.lltypesystem import lltype, llmemory, rffi, rstr
+from pypy.rpython import annlowlevel
from pypy.rlib import rarithmetic, rstack
from pypy.rlib.objectmodel import we_are_translated, specialize
from pypy.rlib.debug import have_debug_prints, ll_assert
@@ -82,6 +84,12 @@
('nums', lltype.Array(rffi.SHORT)))
NUMBERINGP.TO.become(NUMBERING)
+PENDINGFIELDSTRUCT = lltype.Struct('PendingField',
+ ('lldescr', annlowlevel.base_ptr_lltype()),
+ ('num', rffi.SHORT),
+ ('fieldnum', rffi.SHORT))
+PENDINGFIELDSP = lltype.Ptr(lltype.GcArray(PENDINGFIELDSTRUCT))
+
TAGMASK = 3
def tag(value, tagbits):
@@ -405,13 +413,18 @@
return False
def _add_pending_fields(self, pending_setfields):
- rd_pendingfields = None
+ rd_pendingfields = lltype.nullptr(PENDINGFIELDSP.TO)
if pending_setfields:
- rd_pendingfields = []
- for descr, box, fieldbox in pending_setfields:
+ n = len(pending_setfields)
+ rd_pendingfields = lltype.malloc(PENDINGFIELDSP.TO, n)
+ for i in range(n):
+ descr, box, fieldbox = pending_setfields[i]
+ lldescr = annlowlevel.cast_instance_to_base_ptr(descr)
num = self._gettagged(box)
fieldnum = self._gettagged(fieldbox)
- rd_pendingfields.append((descr, num, fieldnum))
+ rd_pendingfields[i].lldescr = lldescr
+ rd_pendingfields[i].num = num
+ rd_pendingfields[i].fieldnum = fieldnum
self.storage.rd_pendingfields = rd_pendingfields
def _gettagged(self, box):
@@ -727,8 +740,13 @@
self.virtuals_cache = [self.virtual_default] * len(virtuals)
def _prepare_pendingfields(self, pendingfields):
- if pendingfields is not None:
- for descr, num, fieldnum in pendingfields:
+ if pendingfields:
+ for i in range(len(pendingfields)):
+ lldescr = pendingfields[i].lldescr
+ num = pendingfields[i].num
+ fieldnum = pendingfields[i].fieldnum
+ descr = annlowlevel.cast_base_ptr_to_instance(AbstractDescr,
+ lldescr)
struct = self.decode_ref(num)
self.setfield(descr, struct, fieldnum)
More information about the pypy-commit
mailing list