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