Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: jitframe-on-heap
Changeset: r61123:009a38d24d36
Date: 2013-02-12 12:47 +0200
http://bitbucket.org/pypy/pypy/changeset/009a38d24d36/

Log:    Kill another copy of the same (broken) logic

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,21 +175,15 @@
                            None, descr=descrs.jf_frame_info)
         self.newops.append(op2)
         arglist = op.getarglist()
-        index = self.cpu.getarryoffset_for_frame()
+        index_list = loop_token.compiled_loop_token._ll_initial_locs
         for i, arg in enumerate(arglist):
             descr = self.cpu.getarraydescr_for_frame(arg.type)
-            if WORD == 4 and arg.type == history.FLOAT:
-                self.newops.append(ResOperation(rop.SETARRAYITEM_GC,
-                                                [frame, ConstInt(index // 2),
-                                                 arg],
-                                                None, descr))
-                index += 2 
-            else:
-                self.newops.append(ResOperation(rop.SETARRAYITEM_GC,
-                                                [frame, ConstInt(index),
-                                                 arg],
-                                                None, descr))
-                index += 1
+            _, itemsize, _ = self.cpu.unpack_arraydescr_size(descr)
+            index = index_list[i] // itemsize # index is in bytes
+            self.newops.append(ResOperation(rop.SETARRAYITEM_GC,
+                                            [frame, ConstInt(index),
+                                             arg],
+                                            None, descr))
         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
@@ -72,6 +72,7 @@
 
         casmdescr = JitCellToken()
         clt = FakeLoopToken()
+        clt._ll_initial_locs = [0, WORD]
         frame_info = lltype.malloc(jitframe.JITFRAMEINFO, flavor='raw')
         clt.frame_info = frame_info
         frame_info.jfi_frame_depth = 13
@@ -116,8 +117,8 @@
             return self.floatframedescr
         return self.signedframedescr
 
-    def getarryoffset_for_frame(self):
-        return 0
+    def unpack_arraydescr_size(self, d):
+        return 0, d.itemsize, 0
     
     def arraydescrof(self, ARRAY):
         try:
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
@@ -190,13 +190,14 @@
 
     def _set_initial_bindings(self, inputargs, looptoken):
         locs = []
+        base_ofs = self.assembler.cpu.get_baseofs_of_frame_field()
         for box in inputargs:
             assert isinstance(box, Box)
             loc = self.fm.get_new_loc(box)
-            locs.append(loc.value)
+            locs.append(loc.value - base_ofs)
         if looptoken.compiled_loop_token is not None:
             # for tests
-            looptoken.compiled_loop_token._x86_initial_locs = locs
+            looptoken.compiled_loop_token._ll_initial_locs = locs
 
     def possibly_free_var(self, var):
         if var.type == FLOAT:
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,9 +55,6 @@
         else:
             return 1000
 
-    def getarryoffset_for_frame(self):
-        return JITFRAME_FIXED_SIZE
-
     def setup(self):
         self.assembler = Assembler386(self, self.translate_support_code)
 
@@ -119,9 +116,8 @@
             #llop.debug_print(lltype.Void, ">>>> Entering", addr)
             frame_info = clt.frame_info
             frame = self.gc_ll_descr.malloc_jitframe(frame_info)
-            base_ofs = self.get_baseofs_of_frame_field()
             ll_frame = lltype.cast_opaque_ptr(llmemory.GCREF, frame)
-            locs = executable_token.compiled_loop_token._x86_initial_locs
+            locs = executable_token.compiled_loop_token._ll_initial_locs
             prev_interpreter = None   # help flow space
             if not self.translate_support_code:
                 prev_interpreter = LLInterpreter.current_interpreter
@@ -129,7 +125,7 @@
             try:
                 for i, kind in kinds:
                     arg = args[i]
-                    num = locs[i] - base_ofs
+                    num = locs[i]
                     if kind == history.INT:
                         self.set_int_value(ll_frame, num, arg)
                     elif kind == history.FLOAT:
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to