Author: David Schneider <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit