From: Cerion Armour-Brown Date: Mon, 14 Mar 2005 16:30:09 +0000 (+0000) Subject: Fixed front-end slw for sh_amt of 32 to 64 X-Git-Tag: svn/VALGRIND_3_0_1^2~304 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0b4576207a554f91532f5475fd7ee324b0a58ff8;p=thirdparty%2Fvalgrind.git Fixed front-end slw for sh_amt of 32 to 64 git-svn-id: svn://svn.valgrind.org/vex/trunk@1030 --- diff --git a/VEX/priv/guest-ppc32/toIR.c b/VEX/priv/guest-ppc32/toIR.c index fc40848709..429371698f 100644 --- a/VEX/priv/guest-ppc32/toIR.c +++ b/VEX/priv/guest-ppc32/toIR.c @@ -2642,7 +2642,10 @@ static Bool dis_int_shift ( UInt theInstr ) Ra_addr, Rs_addr, Rb_addr); assign( sh_amt, binop(Iop_And8, mkU8(0x1F), unop(Iop_32to8, mkexpr(Rb))) ); - assign( Ra, binop(Iop_Shl32, mkexpr(Rs), mkexpr(sh_amt)) ); + assign( Rs_sh, binop(Iop_Shl32, mkexpr(Rs), mkexpr(sh_amt)) ); + assign( rb_b5, binop(Iop_And32, mkexpr(Rb), mkU32(1<<5)) ); + assign( Ra, IRExpr_Mux0X( unop(Iop_32to8, mkexpr(rb_b5)), + mkexpr(Rs_sh), mkU32(0) )); break; case 0x318: // sraw (Shift Right Algebraic Word, PPC32 p506) @@ -2700,7 +2703,7 @@ static Bool dis_int_shift ( UInt theInstr ) DIP("srw%s r%d,r%d,r%d\n", flag_Rc ? "." : "", Ra_addr, Rs_addr, Rb_addr); assign( sh_amt, binop(Iop_And8, mkU8(0x1F), - unop(Iop_32to8, getIReg(Rb_addr))) ); + unop(Iop_32to8, mkexpr(Rb))) ); assign( Rs_sh, binop(Iop_Shr32, mkexpr(Rs), mkexpr(sh_amt)) ); assign( rb_b5, binop(Iop_And32, mkexpr(Rb), mkU32(1<<5)) ); assign( Ra, IRExpr_Mux0X( unop(Iop_32to8, mkexpr(rb_b5)),