[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