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

Reply via email to