Author: Richard Plangger <planri...@gmail.com> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit