Author: David Schneider <david.schnei...@picle.org> Branch: jitframe-on-heap Changeset: r60933:6605eefbe6fb Date: 2013-02-07 14:08 +0100 http://bitbucket.org/pypy/pypy/changeset/6605eefbe6fb/
Log: getarraydescr_for_frame now only returns a descr and not a tuple of index and descr. (fixes translation too) diff --git a/rpython/jit/backend/llsupport/gc.py b/rpython/jit/backend/llsupport/gc.py --- a/rpython/jit/backend/llsupport/gc.py +++ b/rpython/jit/backend/llsupport/gc.py @@ -128,12 +128,9 @@ 'jfi_frame_depth') return descrs - def getarraydescr_for_frame(self, type, index): - """ This function returns a tuple (descr, index) for storing - index inside a frame array. It's a little bit delicate, because on - say x86 32bit, we can't express all indexes of floats. - """ - raise NotImplementedError # cpu specific + def getarraydescr_for_frame(self, type): + """ This functions retuns an arraydescr of type for the JITFRAME""" + raise NotImplementedError def malloc_jitframe(self, frame_info): """ Allocate a new frame, overwritten by tests diff --git a/rpython/jit/backend/llsupport/llmodel.py b/rpython/jit/backend/llsupport/llmodel.py --- a/rpython/jit/backend/llsupport/llmodel.py +++ b/rpython/jit/backend/llsupport/llmodel.py @@ -56,15 +56,14 @@ FLAG_FLOAT) self.setup() - def getarraydescr_for_frame(self, type, index): + def getarraydescr_for_frame(self, type): if type == history.FLOAT: descr = self.floatarraydescr elif type == history.REF: descr = self.refarraydescr else: descr = self.signedarraydescr - return JITFRAME_FIXED_SIZE + index, descr - + return descr def setup(self): pass diff --git a/rpython/jit/backend/llsupport/regalloc.py b/rpython/jit/backend/llsupport/regalloc.py --- a/rpython/jit/backend/llsupport/regalloc.py +++ b/rpython/jit/backend/llsupport/regalloc.py @@ -2,6 +2,7 @@ from rpython.jit.metainterp.history import Const, Box, REF, INT from rpython.rlib.objectmodel import we_are_translated, specialize from rpython.jit.metainterp.resoperation import rop + try: from collections import OrderedDict except ImportError: diff --git a/rpython/jit/backend/llsupport/rewrite.py b/rpython/jit/backend/llsupport/rewrite.py --- a/rpython/jit/backend/llsupport/rewrite.py +++ b/rpython/jit/backend/llsupport/rewrite.py @@ -175,11 +175,16 @@ None, descr=descrs.jf_frame_info) self.newops.append(op2) arglist = op.getarglist() + index = self.cpu.getarryoffset_for_frame() for i, arg in enumerate(arglist): - index, descr = self.cpu.getarraydescr_for_frame(arg.type, i) + descr = self.cpu.getarraydescr_for_frame(arg.type) self.newops.append(ResOperation(rop.SETARRAYITEM_GC, [frame, ConstInt(index), arg], None, descr)) + if WORD == 4 and type == history.FLOAT: + index += 2 + else: + index += 1 descr = op.getdescr() assert isinstance(descr, JitCellToken) jd = descr.outermost_jitdriver_sd diff --git a/rpython/jit/backend/llsupport/test/test_rewrite.py b/rpython/jit/backend/llsupport/test/test_rewrite.py --- a/rpython/jit/backend/llsupport/test/test_rewrite.py +++ b/rpython/jit/backend/llsupport/test/test_rewrite.py @@ -111,10 +111,13 @@ self.signedframedescr = ArrayDescr(3, 8, FieldDescr('len', 0, 0, 0), 0) self.floatframedescr = ArrayDescr(5, 8, FieldDescr('len', 0, 0, 0), 0) - def getarraydescr_for_frame(self, tp, index): + def getarraydescr_for_frame(self, tp): if tp == FLOAT: - return index, self.floatframedescr - return index, self.signedframedescr + return self.floatframedescr + return self.signedframedescr + + def getarryoffset_for_frame(self): + return 0 def arraydescrof(self, ARRAY): try: diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py --- a/rpython/jit/backend/x86/assembler.py +++ b/rpython/jit/backend/x86/assembler.py @@ -2310,14 +2310,14 @@ # load the return value from the dead frame's value index 0 kind = op.result.type if kind == FLOAT: - _, descr = self.cpu.getarraydescr_for_frame(kind, 0) + descr = self.cpu.getarraydescr_for_frame(kind) ofs = self.cpu.unpack_arraydescr(descr) self.mc.MOVSD_xm(xmm0.value, (eax.value, ofs)) if result_loc is not xmm0: self.mc.MOVSD(result_loc, xmm0) else: assert result_loc is eax - _, descr = self.cpu.getarraydescr_for_frame(kind, 0) + descr = self.cpu.getarraydescr_for_frame(kind) ofs = self.cpu.unpack_arraydescr(descr) self.mc.MOV_rm(eax.value, (eax.value, ofs)) # diff --git a/rpython/jit/backend/x86/regalloc.py b/rpython/jit/backend/x86/regalloc.py --- a/rpython/jit/backend/x86/regalloc.py +++ b/rpython/jit/backend/x86/regalloc.py @@ -22,6 +22,7 @@ from rpython.jit.backend.llsupport.descr import unpack_arraydescr from rpython.jit.backend.llsupport.descr import unpack_fielddescr from rpython.jit.backend.llsupport.descr import unpack_interiorfielddescr +from rpython.jit.backend.llsupport.gcmap import allocate_gcmap from rpython.jit.backend.llsupport.regalloc import FrameManager,\ RegisterManager, TempBox, compute_vars_longevity, is_comparison_or_ovf_op from rpython.jit.backend.x86.arch import WORD, JITFRAME_FIXED_SIZE @@ -897,7 +898,7 @@ def get_gcmap(self, forbidden_regs=[], noregs=False): frame_depth = self.fm.get_frame_depth() - gcmap = self.assembler.allocate_gcmap(frame_depth) + gcmap = allocate_gcmap(self.assembler, frame_depth, JITFRAME_FIXED_SIZE) debug_start("jit-backend-gcmap") for box, loc in self.rm.reg_bindings.iteritems(): if loc in forbidden_regs: diff --git a/rpython/jit/backend/x86/runner.py b/rpython/jit/backend/x86/runner.py --- a/rpython/jit/backend/x86/runner.py +++ b/rpython/jit/backend/x86/runner.py @@ -55,6 +55,9 @@ else: return 1000 + def getarryoffset_for_frame(self): + return JITFRAME_FIXED_SIZE + def setup(self): self.assembler = Assembler386(self, self.translate_support_code) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit