[pypy-commit] pypy s390x-backend: fixed same_as in regalloc and several other places in regalloc_mov

plan_rich noreply at buildbot.pypy.org
Thu Nov 19 12:34:01 EST 2015


Author: Richard Plangger <planrichi at gmail.com>
Branch: s390x-backend
Changeset: r80782:206b872ed188
Date: 2015-11-19 18:34 +0100
http://bitbucket.org/pypy/pypy/changeset/206b872ed188/

Log:	fixed same_as in regalloc and several other places in regalloc_mov

diff --git a/rpython/jit/backend/zarch/assembler.py b/rpython/jit/backend/zarch/assembler.py
--- a/rpython/jit/backend/zarch/assembler.py
+++ b/rpython/jit/backend/zarch/assembler.py
@@ -411,8 +411,11 @@
         elif prev_loc.is_in_pool():
             if loc.is_reg():
                 self.mc.LG(loc, prev_loc)
+            elif loc.is_fp_reg():
+                self.mc.LD(loc, prev_loc)
             else:
                 xxx
+            return
         elif prev_loc.is_stack():
             offset = prev_loc.value
             # move from memory to register
@@ -447,12 +450,14 @@
             value = prev_loc.getint()
             # move immediate value to fp register
             if loc.is_fp_reg():
+                xxx
                 with scratch_reg(self.mc):
                     self.mc.load_imm(r.SCRATCH, value)
                     self.mc.lfdx(loc.value, 0, r.SCRATCH.value)
                 return
             # move immediate value to memory
             elif loc.is_stack():
+                xxx
                 with scratch_reg(self.mc):
                     offset = loc.value
                     self.mc.load_imm(r.SCRATCH, value)
@@ -461,17 +466,15 @@
                 return
             assert 0, "not supported location"
         elif prev_loc.is_fp_reg():
-            reg = prev_loc.value
             # move to another fp register
             if loc.is_fp_reg():
-                other_reg = loc.value
-                self.mc.fmr(other_reg, reg)
+                self.mc.LDR(loc, prev_loc)
                 return
             # move from fp register to memory
             elif loc.is_stack():
                 assert loc.type == FLOAT, "target not float location"
                 offset = loc.value
-                self.mc.stfd(reg, r.SPP.value, offset)
+                self.mc.STD(prev_loc, l.addr(offset, r.SPP))
                 return
             assert 0, "not supported location"
         assert 0, "not supported location"
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
@@ -171,7 +171,6 @@
 
 def prepare_same_as(self, op):
     a0 = op.getarg(0)
-    assert not isinstance(a0, ConstInt)
     l0 = self.ensure_reg(a0)
     res = self.force_allocate_reg(op)
     self.free_op_vars()
diff --git a/rpython/jit/backend/zarch/pool.py b/rpython/jit/backend/zarch/pool.py
--- a/rpython/jit/backend/zarch/pool.py
+++ b/rpython/jit/backend/zarch/pool.py
@@ -145,7 +145,9 @@
                 elif val.type == INT:
                     self.overwrite_64(mc, offset, val.value)
                 else:
-                    raise NotImplementedError
+                    assert val.type == REF
+                    i64 = rffi.cast(lltype.Signed, val.value)
+                    self.overwrite_64(mc, offset, i64)
             else:
                 pass
 
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
@@ -676,6 +676,10 @@
     prepare_cast_ptr_to_int = helper.prepare_same_as
     prepare_cast_int_to_ptr = helper.prepare_same_as
 
+    prepare_same_as_i = helper.prepare_same_as
+    prepare_same_as_r = helper.prepare_same_as
+    prepare_same_as_f = helper.prepare_same_as
+
     def prepare_cast_int_to_float(self, op):
         loc1 = self.ensure_reg(op.getarg(0))
         res = self.fprm.force_allocate_reg(op)


More information about the pypy-commit mailing list