tcg/ppc64: Fix zero extension code generation bug for ppc64 host
authorThomas Huth <thuth@de.ibm.com>
Fri, 9 Sep 2011 05:58:37 +0000 (15:58 +1000)
committermalc <av1474@comtv.ru>
Fri, 9 Sep 2011 15:07:06 +0000 (19:07 +0400)
commitddde14148a26e95adb22cf16681173e218d04488
tree27a8992aebbd9c51cdfc6c9ab0e924c636913dd5
parent6c0eb26678d53bc2f3883d7168916fbaabfee08c
tcg/ppc64: Fix zero extension code generation bug for ppc64 host

The ppc64 code generation backend uses an rldicr (Rotate Left Double
Immediate and Clear Right) instruction to implement zero extension of
a 32 bit quantity to a 64 bit quantity (INDEX_op_ext32u_i64).  However
this is wrong - this instruction clears specified low bits of the
value, instead of high bits as we require for a zero extension.  It
should instead use an rldicl (Rotate Left Double Immediate and Clear
Left) instruction.

Presumably amongst other things, this causes the SLOF firmware image
used with -M pseries to not boot on a ppc64 host.

It appears this bug was exposed by commit
0bf1dbdcc935dfc220a93cd990e947e90706aec6 (tcg/ppc64: fix 16/32 mixup)
which enabled the use of the op_ext32u_i64 operation on the ppc64
backend.

Signed-off-by: Thomas Huth <thuth@de.ibm.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: malc <av1474@comtv.ru>
tcg/ppc64/tcg-target.c