diff -r b7440ef162a5 pypy/jit/backend/ppc/ppcgen/ppc_assembler.py --- a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py Thu Aug 11 11:18:01 2011 +0200 +++ b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py Thu Aug 11 15:28:16 2011 -0400 @@ -445,14 +445,14 @@ rldcr = MDS(30, XO5=9, Rc=0) rldcrx = MDS(30, XO5=9, Rc=1) - rldic = MDI(30, XO5=2, Rc=0) - rldicx = MDI(30, XO5=2, Rc=1) - rldicl = MDI(30, XO5=0, Rc=0) - rldiclx = MDI(30, XO5=0, Rc=1) - rldicr = MDI(30, XO5=1, Rc=0) - rldicrx = MDI(30, XO5=1, Rc=1) - rldimi = MDI(30, XO5=3, Rc=0) - rldimix = MDI(30, XO5=3, Rc=1) + _rldic = MDI(30, XO5=2, Rc=0) + _rldicx = MDI(30, XO5=2, Rc=1) + _rldicl = MDI(30, XO5=0, Rc=0) + _rldiclx = MDI(30, XO5=0, Rc=1) + _rldicr = MDI(30, XO5=1, Rc=0) + _rldicrx = MDI(30, XO5=1, Rc=1) + _rldimi = MDI(30, XO5=3, Rc=0) + _rldimix = MDI(30, XO5=3, Rc=1) rlwimi = MI(20, Rc=0) rlwimix = MI(20, Rc=1) @@ -857,6 +857,30 @@ mtcr = BA.mtcrf(CRM=0xFF) + def rldic(rA, rS, shift, MB): + self._rldic(rA, rS, shift & 31, MB, (shift & 32) >> 5) + + def rldixc(rA, rS, shift, MB): + self._rldicx(rA, rS, shift & 31, MB, (shift & 32) >> 5) + + def rldicl(rA, rS, shift, MB): + self._rldicl(rA, rS, shift & 31, MB, (shift & 32) >> 5) + + def rldiclx(rA, rS, shift, MB): + self._rldiclx(rA, rS, shift & 31, MB, (shift & 32) >> 5) + + def rldicr(rA, rS, shift, ME): + self._rldicr(rA, rS, shift & 31, ME, (shift & 32) >> 5) + + def rldicrx(rA, rS, shift, ME): + self._rldicrx(rA, rS, shift & 31, ME, (shift & 32) >> 5) + + def rldimi(rA, rS, shift, MB): + self._rldicr(rA, rS, shift & 31, MB, (shift & 32) >> 5) + + def rldimix(rA, rS, shift, MB): + self._rldicrx(rA, rS, shift & 31, MB, (shift & 32) >> 5) + def emit(self, insn): bytes = struct.pack("i", insn) for byte in bytes: diff -r b7440ef162a5 pypy/jit/backend/ppc/ppcgen/ppc_field.py --- a/pypy/jit/backend/ppc/ppcgen/ppc_field.py Thu Aug 11 11:18:01 2011 +0200 +++ b/pypy/jit/backend/ppc/ppcgen/ppc_field.py Thu Aug 11 15:28:16 2011 -0400 @@ -77,17 +77,27 @@ class spr(Field): def encode(self, value): - value = (value&31) << 5 | (value >> 5 & 31) + value = (value & 31) << 5 | (value >> 5 & 31) return super(spr, self).encode(value) def decode(self, inst): value = super(spr, self).decode(inst) - return (value&31) << 5 | (value >> 5 & 31) + return (value & 31) << 5 | (value >> 5 & 31) + +class mbe(Field): + def encode(self, value): + value = (value & 31) << 1 | (value & 32) >> 5 + return super(spr, self).encode(value) + def decode(self, inst): + value = super(mbe, self).decode(inst) + return (value & 1) << 5 | (value >> 1 & 31) # other special fields? ppc_fields = { "LI": IField("LI", *fields["LI"]), "BD": IField("BD", *fields["BD"]), + "ds": IField("ds", *fields["ds"]), + "mbe": mbe("mbe", *fields["mbe"]), "spr": spr("spr", *fields["spr"]), }