[pypy-commit] pypy ppc-vsx-support: fix ppc accum issue
plan_rich
pypy.commits at gmail.com
Fri Sep 23 04:05:48 EDT 2016
Author: Richard Plangger <planrichi at gmail.com>
Branch: ppc-vsx-support
Changeset: r87341:dfdd69e68380
Date: 2016-09-23 10:05 +0200
http://bitbucket.org/pypy/pypy/changeset/dfdd69e68380/
Log: fix ppc accum issue
diff --git a/rpython/jit/backend/ppc/vector_ext.py b/rpython/jit/backend/ppc/vector_ext.py
--- a/rpython/jit/backend/ppc/vector_ext.py
+++ b/rpython/jit/backend/ppc/vector_ext.py
@@ -261,11 +261,18 @@
vector_loc = accum_info.location
# the upper elements will be lost if saved to the stack!
scalar_arg = accum_info.getoriginal()
+ orig_scalar_loc = scalar_loc
if not scalar_loc.is_reg():
- scalar_loc = regalloc.force_allocate_reg(scalar_arg)
+ if scalar_arg.type == FLOAT:
+ scalar_loc = r.FP_SCRATCH
+ else:
+ scalar_loc = r.SCRATCH
+ self.regalloc_mov(orig_scalar_loc, scalar_loc)
assert scalar_arg is not None
op = accum_info.accum_operation
self._accum_reduce(op, scalar_arg, vector_loc, scalar_loc)
+ if orig_scalar_loc is not scalar_loc:
+ self.regalloc_mov(scalar_loc, orig_scalar_loc)
accum_info = accum_info.next()
def _accum_reduce(self, op, arg, accumloc, targetloc):
@@ -291,11 +298,11 @@
self.mc.load_imm(r.SCRATCH2, PARAM_SAVE_AREA_OFFSET)
self.mc.stvx(acc, r.SCRATCH2.value, r.SP.value)
self.mc.load(tgt, r.SP.value, PARAM_SAVE_AREA_OFFSET)
- self.mc.load(r.SCRATCH.value, r.SP.value, PARAM_SAVE_AREA_OFFSET+8)
+ self.mc.load(r.SCRATCH2.value, r.SP.value, PARAM_SAVE_AREA_OFFSET+8)
if op == '+':
- self.mc.add(tgt, tgt, acc)
+ self.mc.add(tgt, tgt, r.SCRATCH2.value)
elif op == '*':
- self.mc.mulld(tgt, tgt, acc)
+ self.mc.mulld(tgt, tgt, r.SCRATCH2.value)
else:
not_implemented("sum not implemented")
return
More information about the pypy-commit
mailing list