On 2017/06/15 09:46AM, Anton Blanchard wrote: > From: Anton Blanchard <an...@samba.org> > > From POWER4 onwards, mfocrf() only places the specified CR field into > the destination GPR, and the rest of it is set to 0. The PowerPC AS > from version 3.0 now requires this behaviour. > > The emulation code currently puts the entire CR into the destination GPR. > Fix it. > > Cc: sta...@vger.kernel.org > Signed-off-by: Anton Blanchard <an...@samba.org>
Acked-by: Naveen N. Rao <naveen.n....@linux.vnet.ibm.com> > --- > arch/powerpc/lib/sstep.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c > index fb84f51b1f0b..ee33327686ae 100644 > --- a/arch/powerpc/lib/sstep.c > +++ b/arch/powerpc/lib/sstep.c > @@ -966,6 +966,19 @@ int analyse_instr(struct instruction_op *op, struct > pt_regs *regs, > #endif > > case 19: /* mfcr */ > + if ((instr >> 20) & 1) { > + imm = 0xf0000000UL; > + for (sh = 0; sh < 8; ++sh) { > + if (instr & (0x80000 >> sh)) { > + regs->gpr[rd] = regs->ccr & imm; > + break; > + } > + imm >>= 4; > + } > + > + goto instr_done; > + } > + > regs->gpr[rd] = regs->ccr; > regs->gpr[rd] &= 0xffffffffUL; > goto instr_done; > -- > 2.11.0 >