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

Reply via email to