Author: Richard Plangger <[email protected]>
Branch: s390x-backend
Changeset: r82869:014ea5f68140
Date: 2016-03-07 19:47 +0100
http://bitbucket.org/pypy/pypy/changeset/014ea5f68140/
Log: correct shift for ppc zero array, ofs_loc can be a register
diff --git a/rpython/jit/backend/ppc/opassembler.py
b/rpython/jit/backend/ppc/opassembler.py
--- a/rpython/jit/backend/ppc/opassembler.py
+++ b/rpython/jit/backend/ppc/opassembler.py
@@ -887,8 +887,12 @@
self.mc.load_imm(r.SCRATCH, startindex_loc.value)
startindex_loc = r.SCRATCH
- self.mc.addi(r.SCRATCH2.value, startindex_loc.value, ofs_loc.getint())
+ if ofs_loc.is_imm():
+ self.mc.addi(r.SCRATCH2.value, startindex_loc.value, ofs_loc.value)
+ else:
+ self.mc.add(r.SCRATCH2.value, startindex_loc.value, ofs_loc.value)
ofs_loc = r.SCRATCH2
+ assert base_loc.is_core_reg()
self.mc.add(ofs_loc.value, ofs_loc.value, base_loc.value)
# ofs_loc is now the real address pointing to the first
# byte to be zeroed
@@ -901,7 +905,7 @@
jlt_location = self.mc.currpos()
self.mc.trap()
- self.mc.sradi(r.SCRATCH.value, length_loc.value, shift_by)
+ self.mc.sradi(r.SCRATCH.value, length_loc.value, shift_by, 0)
self.mc.mtctr(r.SCRATCH.value) # store the length in count register
self.mc.li(r.SCRATCH.value, 0)
@@ -929,7 +933,7 @@
if length_loc.is_imm():
self.mc.load_imm(r.SCRATCH, length_loc.value & (stepsize-1))
else:
- self.mc.andi(r.SCRATCH.value, length_loc.value, stepsize-1)
+ self.mc.andix(r.SCRATCH.value, length_loc.value, (stepsize-1) &
0xff)
self.mc.cmp_op(0, r.SCRATCH.value, 0, imm=True)
jle_location = self.mc.currpos()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit