Author: Maciej Fijalkowski <[email protected]>
Branch: fast-slowpath
Changeset: r65480:8dd3aec517e0
Date: 2013-07-19 15:43 +0200
http://bitbucket.org/pypy/pypy/changeset/8dd3aec517e0/
Log: fixes
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
@@ -78,7 +78,7 @@
def _candidate(self, node):
return (node.val & 1 == 0) and (node.val + 1 == node.next.val)
-
+
def _pop_two(self, tp):
node = self.master_node
if node is None or node.next is None:
@@ -281,6 +281,7 @@
def __init__(self, longevity, frame_manager=None, assembler=None):
self.free_regs = self.all_regs[:]
+ self.free_regs.reverse()
self.longevity = longevity
self.temp_boxes = []
if not we_are_translated():
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
@@ -248,7 +248,7 @@
descr=arraydescr)
op2 = ResOperation(rop.INT_LT, [arrlenbox, newsizebox], cond_box)
op3 = ResOperation(rop.COND_CALL, [cond_box, resize_ptr, lst,
- newsizebox],
+ newsizebox, ConstInt(1)],
None, descr=calldescr)
op4 = ResOperation(rop.SETFIELD_GC, [lst, newsizebox], None,
descr=lendescr)
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
@@ -802,6 +802,6 @@
p1 = getfield_gc(p0, descr=itemsdescr)
i1 = arraylen_gc(p1, descr=arraydescr)
i2 = int_lt(i1, i0)
- cond_call(i2, 123, p0, i0, descr=list_resize_descr)
+ cond_call(i2, 123, p0, i0, 1, descr=list_resize_descr)
setfield_gc(p0, i0, descr=lendescr)
""")
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
@@ -159,9 +159,12 @@
if gcrootmap and gcrootmap.is_shadow_stack:
self._call_header_shadowstack(mc, gcrootmap)
mc.SUB(esp, imm(WORD))
+ self.set_extra_stack_depth(mc, 2 * WORD)
# args are in their respective positions
mc.CALL(eax)
mc.ADD(esp, imm(WORD))
+ self.set_extra_stack_depth(mc, 0)
+ self._reload_frame_if_necessary(mc, align_stack=True)
if gcrootmap and gcrootmap.is_shadow_stack:
self._call_footer_shadowstack(mc, gcrootmap)
self._pop_all_regs_from_frame(mc, [], self.cpu.supports_floats,
@@ -2144,7 +2147,7 @@
def label(self):
self._check_frame_depth_debug(self.mc)
- def cond_call(self, op, gcmap, cond_loc, call_loc, arglocs):
+ def cond_call(self, op, gcmap, cond_loc, call_loc):
self.mc.TEST(cond_loc, cond_loc)
self.mc.J_il8(rx86.Conditions['Z'], 0) # patched later
jmp_adr = self.mc.get_relative_pos()
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
@@ -802,15 +802,20 @@
assert op.result is None
args = op.getarglist()
assert 2 <= len(args) <= 4 + 2
- loc_call = self.make_sure_var_in_reg(args[1], [], selected_reg=eax)
- args_so_far = [args[1]]
+ tmpbox = TempBox()
+ self.rm.force_allocate_reg(tmpbox, selected_reg=eax)
+ v = args[1]
+ assert isinstance(v, Const)
+ imm = self.rm.convert_to_imm(v)
+ self.assembler.regalloc_mov(imm, eax)
+ args_so_far = [tmpbox]
for i in range(2, len(args)):
reg = self.rm.register_arguments[i - 2]
self.make_sure_var_in_reg(args[i], args_so_far, selected_reg=reg)
args_so_far.append(args[i])
loc_cond = self.make_sure_var_in_reg(args[0], args)
- self.assembler.cond_call(op, self.get_gcmap(), loc_cond, loc_call,
- [edi])
+ self.assembler.cond_call(op, self.get_gcmap([eax]), loc_cond, eax)
+ self.rm.possibly_free_var(tmpbox)
def consider_call_malloc_nursery(self, op):
size_box = op.getarg(0)
diff --git a/rpython/jit/codewriter/jtransform.py
b/rpython/jit/codewriter/jtransform.py
--- a/rpython/jit/codewriter/jtransform.py
+++ b/rpython/jit/codewriter/jtransform.py
@@ -1635,8 +1635,11 @@
arraydescr = self.cpu.arraydescrof(LIST.items.TO)
oopspec = "list.resize_hint_really"
c_func, TP = support.builtin_func_for_spec(self.cpu.rtyper,
- oopspec, [lltype.Ptr(LIST), lltype.Signed], lltype.Void)
- op1 = SpaceOperation('direct_call', [c_func] + args, op.result)
+ oopspec, [lltype.Ptr(LIST), lltype.Signed, lltype.Bool],
+ lltype.Void)
+ op1 = SpaceOperation('direct_call', [c_func] + args +
+ [Constant(1, concretetype=lltype.Bool)],
+ op.result)
calldescr = self.callcontrol.getcalldescr(op1)
addr = llmemory.cast_ptr_to_adr(c_func.value)
extradescrs = [lendescr, itemsdescr, arraydescr,
diff --git a/rpython/jit/codewriter/support.py
b/rpython/jit/codewriter/support.py
--- a/rpython/jit/codewriter/support.py
+++ b/rpython/jit/codewriter/support.py
@@ -213,8 +213,7 @@
_ll_5_list_ll_arraycopy = rgc.ll_arraycopy
-def _ll_2_list_resize_hint_really(l, newsize):
- rlist_ll._ll_list_resize_hint_really(l, newsize, True)
+_ll_3_list_resize_hint_really = rlist_ll._ll_list_resize_hint_really
@elidable
def _ll_1_gc_identityhash(x):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit