Author: Richard Plangger <planri...@gmail.com>
Branch: s390x-backend
Changeset: r82256:4d0391440a29
Date: 2016-02-15 11:48 +0100
http://bitbucket.org/pypy/pypy/changeset/4d0391440a29/

Log:    sync to remote did not work, fixed more calls to ensure_reg

diff --git a/rpython/jit/backend/zarch/helper/regalloc.py 
b/rpython/jit/backend/zarch/helper/regalloc.py
--- a/rpython/jit/backend/zarch/helper/regalloc.py
+++ b/rpython/jit/backend/zarch/helper/regalloc.py
@@ -29,7 +29,6 @@
     else:
         l1 = self.ensure_reg_or_pool(a1)
     self.force_result_in_reg(op, a0)
-    self.free_op_vars()
     return [l0, l1]
 
 def prepare_int_mul(self, op):
@@ -43,7 +42,6 @@
     else:
         l1 = self.ensure_reg_or_pool(a1)
     self.force_result_in_reg(op, a0)
-    self.free_op_vars()
     return [l0, l1]
 
 def prepare_int_mul_ovf(self, op):
@@ -56,7 +54,6 @@
     else:
         l1 = self.ensure_reg_or_pool(a1)
     lr,lq = self.rm.ensure_even_odd_pair(a0, op, bind_first=False)
-    self.free_op_vars()
     return [lr, lq, l1]
 
 def generate_div_mod(modulus):
@@ -70,7 +67,6 @@
             self.assembler.regalloc_mov(poolloc, lq)
         else:
             lr,lq = self.rm.ensure_even_odd_pair(a0, op, bind_first=modulus)
-        self.free_op_vars()
         return [lr, lq, l1]
     return f
 
@@ -81,15 +77,8 @@
     a0 = op.getarg(0)
     a1 = op.getarg(1)
     # sub is not commotative, thus cannot swap operands
-    l1 = self.ensure_reg(a1)
-    l0 = self.ensure_reg(a0)
-    if isinstance(a0, Const):
-        loc = self.force_allocate_reg(op)
-        self.assembler.mc.LG(loc, l0)
-        l0 = loc
-    else:
-        self.rm.force_result_in_reg(op, a0)
-    self.free_op_vars()
+    l1 = self.ensure_reg_or_pool(a1)
+    l0 = self.force_result_in_reg(op, a0)
     return [l0, l1]
 
 def prepare_int_logic(self, op):
@@ -97,10 +86,8 @@
     a1 = op.getarg(1)
     if a0.is_constant():
         a0, a1 = a1, a0
-    l0 = self.ensure_reg(a0)
-    l1 = self.ensure_reg(a1)
-    self.force_result_in_reg(op, a0)
-    self.free_op_vars()
+    l1 = self.ensure_reg_or_pool(a1)
+    l0 = self.force_result_in_reg(op, a0)
     return [l0, l1]
 
 def prepare_int_shift(self, op):
@@ -111,11 +98,10 @@
         # in the addr part of the instruction
         l1 = addr(a1.getint())
     else:
-        tmp = self.rm.ensure_reg(a1, force_in_reg=True)
+        tmp = self.rm.ensure_reg(a1)
         l1 = addr(0, tmp)
-    l0 = self.ensure_reg(a0, force_in_reg=True)
+    l0 = self.ensure_reg(a0)
     lr = self.force_allocate_reg(op)
-    self.free_op_vars()
     return [lr, l0, l1]
 
 def generate_cmp_op(signed=True):
@@ -128,21 +114,14 @@
             l1 = imm(a1.getint())
         else:
             l1 = self.ensure_reg(a1)
-        if l0.is_in_pool():
-            poolloc = l0
-            l0 = self.force_allocate_reg(op)
-            self.assembler.mc.LG(l0, poolloc)
         res = self.force_allocate_reg_or_cc(op)
-        #self.force_result_in_reg(op, a0)
-        self.free_op_vars()
         return [l0, l1, res, invert]
     return prepare_cmp_op
 
 def prepare_float_cmp_op(self, op):
-    l0 = self.ensure_reg(op.getarg(0), force_in_reg=True)
-    l1 = self.ensure_reg(op.getarg(1))
+    l0 = self.ensure_reg(op.getarg(0))
+    l1 = self.ensure_reg_or_pool(op.getarg(1))
     res = self.force_allocate_reg_or_cc(op)
-    self.free_op_vars()
     return [l0, l1, res]
 
 def prepare_binary_op(self, op):
@@ -151,7 +130,6 @@
     l0 = self.ensure_reg(a0)
     l1 = self.ensure_reg(a1)
     self.force_result_in_reg(op, a0)
-    self.free_op_vars()
     return [l0, l1]
 
 def generate_prepare_float_binary_op(allow_swap=False):
@@ -169,30 +147,24 @@
             l0 = newloc
         else:
             self.force_result_in_reg(op, a0)
-        self.free_op_vars()
         return [l0, l1]
     return prepare_float_binary_op
 
 def prepare_unary_cmp(self, op):
     a0 = op.getarg(0)
-    assert not isinstance(a0, ConstInt)
     l0 = self.ensure_reg(a0)
     self.force_result_in_reg(op, a0)
     res = self.force_allocate_reg_or_cc(op)
-    self.free_op_vars()
     return [l0, res]
 
 def prepare_unary_op(self, op):
     a0 = op.getarg(0)
-    assert not isinstance(a0, ConstInt)
-    l0 = self.ensure_reg(a0, force_in_reg=True)
+    l0 = self.ensure_reg(a0)
     res = self.force_result_in_reg(op, a0)
-    self.free_op_vars()
     return [l0,]
 
 def prepare_same_as(self, op):
     a0 = op.getarg(0)
     l0 = self.ensure_reg(a0)
     res = self.force_allocate_reg(op)
-    self.free_op_vars()
     return [l0, res]
diff --git a/rpython/jit/backend/zarch/regalloc.py 
b/rpython/jit/backend/zarch/regalloc.py
--- a/rpython/jit/backend/zarch/regalloc.py
+++ b/rpython/jit/backend/zarch/regalloc.py
@@ -147,8 +147,7 @@
         else:
             assert box in self.temp_boxes
             loc = self.make_sure_var_in_reg(box,
-                    forbidden_vars=self.temp_boxes,
-                    selected_reg=selected_reg)
+                    forbidden_vars=self.temp_boxes)
         return loc
 
     def ensure_reg(self, box):
@@ -163,8 +162,7 @@
         else:
             assert box in self.temp_boxes
             loc = self.make_sure_var_in_reg(box,
-                    forbidden_vars=self.temp_boxes,
-                    selected_reg=selected_reg)
+                    forbidden_vars=self.temp_boxes)
         return loc
 
     def get_scratch_reg(self, selected_reg=None):
@@ -601,7 +599,13 @@
         else:
             return self.rm.call_result_location(v)
 
-    def ensure_reg(self, box)a:
+    def ensure_reg_or_pool(self, box):
+        if box.type == FLOAT:
+            return self.fprm.ensure_reg_or_pool(box)
+        else:
+            return self.rm.ensure_reg_or_pool(box)
+
+    def ensure_reg(self, box):
         if box.type == FLOAT:
             return self.fprm.ensure_reg(box)
         else:
@@ -609,7 +613,7 @@
 
     def ensure_reg_or_16bit_imm(self, box):
         if box.type == FLOAT:
-            return self.fprm.ensure_reg(box, True)
+            return self.fprm.ensure_reg(box)
         else:
             if helper.check_imm(box):
                 return imm(box.getint())
@@ -625,7 +629,7 @@
 
     def ensure_reg_or_any_imm(self, box):
         if box.type == FLOAT:
-            return self.fprm.ensure_reg(box):
+            return self.fprm.ensure_reg(box)
         else:
             if isinstance(box, Const):
                 return imm(box.getint())
@@ -1107,7 +1111,7 @@
         return locs
 
     def prepare_guard_exception(self, op):
-        loc = self.ensure_reg(op.getarg(0), force_in_reg=True)
+        loc = self.ensure_reg(op.getarg(0))
         if op in self.longevity:
             resloc = self.force_allocate_reg(op)
         else:
@@ -1116,7 +1120,7 @@
         return arglocs
 
     def prepare_guard_is_object(self, op):
-        loc_object = self.ensure_reg(op.getarg(0), force_in_reg=True)
+        loc_object = self.ensure_reg(op.getarg(0))
         arglocs = self._prepare_guard(op, [loc_object])
         return arglocs
 
@@ -1126,8 +1130,8 @@
     prepare_save_exc_class = prepare_save_exception
 
     def prepare_restore_exception(self, op):
-        loc0 = self.ensure_reg(op.getarg(0), force_in_reg=True)
-        loc1 = self.ensure_reg(op.getarg(1), force_in_reg=True)
+        loc0 = self.ensure_reg(op.getarg(0))
+        loc1 = self.ensure_reg(op.getarg(1))
         return [loc0, loc1]
 
     def prepare_copystrcontent(self, op):
@@ -1145,7 +1149,7 @@
                              must_exist=False, load_loc_odd=False)
         src_ofs_loc = self.ensure_reg_or_any_imm(op.getarg(2))
         self.rm.temp_boxes.append(src_tmp)
-        dst_ptr_loc = self.ensure_reg(op.getarg(1), force_in_reg=True)
+        dst_ptr_loc = self.ensure_reg(op.getarg(1))
         dst_ofs_loc = self.ensure_reg_or_any_imm(op.getarg(3))
         length_loc  = self.ensure_reg_or_any_imm(op.getarg(4))
         # no need to spill, we do not call memcpy, but we use s390x's
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to