Hi Richard,
On 08/04/2017 02:44 AM, Richard Henderson wrote:
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> ---
> tcg/ppc/tcg-target.inc.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/tcg/ppc/tcg-target.inc.c b/tcg/ppc/tcg-target.inc.c
> index bc14d2c9c6..4b32809217 100644
> --- a/tcg/ppc/tcg-target.inc.c
> +++ b/tcg/ppc/tcg-target.inc.c
> @@ -598,6 +598,7 @@ static void tcg_out_movi_int(TCGContext *s, TCGType type, TCGReg ret,
> {
> intptr_t tb_diff;
> int32_t high;
> + int lsb;
>
> tcg_debug_assert(TCG_TARGET_REG_BITS == 64 || type == TCG_TYPE_I32);
>
> @@ -638,6 +639,14 @@ static void tcg_out_movi_int(TCGContext *s, TCGType type, TCGReg ret,
> return;
> }
>
> + lsb = ctz64(arg);
> + high = arg >> lsb;
> + if (arg == (int16_t)arg) {
Can you move these here?
+ lsb = ctz64(arg);
+ high = arg >> lsb;
> + tcg_out32(s, ADDI | TAI(ret, 0, high));
> + tcg_out_shli64(s, ret, ret, lsb);
> + return;
> + }
> +
> high = arg >> 31 >> 1;
> tcg_out_movi(s, TCG_TYPE_I32, ret, high);
> if (high) {
>
Regards,
Phil.