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