target-ppc: Bug Fix: rlwimi
commit6ea7b35c0294b1cc462e3225c4672de31300ed79
authorTom Musta <tommusta@gmail.com>
Tue, 12 Aug 2014 13:45:05 +0000 (12 08:45 -0500)
committerAlexander Graf <agraf@suse.de>
Mon, 8 Sep 2014 10:50:50 +0000 (8 12:50 +0200)
treedfa56b6b7d1102bd50e518f718533af1aa91ddfe
parent1c0a150f4bb60ce9af7b4b10f0deabdea1b22f93
target-ppc: Bug Fix: rlwimi

The rlwimi specification includes the ROTL32 operation, which is defined
to be a left rotation of two copies of the least significant 32 bits of
the source GPR.

The current implementation is incorrect on 64-bit implementations in that
it rotates a single copy of the least significant 32 bits, padding with
zeroes in the most significant bits.

Fix the code to properly implement this ROTL32 operation.

Also fix the special case of MB=31 and ME=0 to copy the entire contents
of the source GPR.

Examples:

R3 FFFFFFFFFFFFFFF0
rlwimi 3,3,29,14,1
R3 expected : 1FFFFFFE3FFFFFFE
R3 actual   : 000000003FFFFFFE (without this patch)

R3 ED7EB4DD824F0853
rlwimi 3,3,10,31,0
R3 expected : 3C214E09024F0853
R3 actual   : 00000000024F0853 (without this patch)

Signed-off-by: Tom Musta <tommusta@gmail.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
target-ppc/translate.c