Two instructions are necessary but the high value should be written first, shifted 16 bit left, and then or'ed the lower value. This commit fixes the problem.
Signed-off-by: Jose Ricardo Ziviani <jos...@linux.vnet.ibm.com> --- risugen_ppc64.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/risugen_ppc64.pm b/risugen_ppc64.pm index ca052de..40f3d4f 100644 --- a/risugen_ppc64.pm +++ b/risugen_ppc64.pm @@ -61,8 +61,8 @@ sub write_mov_ri32($$) { my ($rd, $imm) = @_; - # li rd,immediate@h - write_mov_ri16($rd, ($imm >> 16) & 0xffff); + # lis rd,immediate@h + insn32(0xf << 26 | $rd << 21 | ($imm >> 16)); # ori rd,rd,immediate@l insn32((0x18 << 26) | ($rd << 21) | ($rd << 16) | ($imm & 0xffff)); } -- 2.7.4