[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-trivial] [Qemu-devel] fix evsrwu and others for powerpcspe
From: |
Richard Henderson |
Subject: |
Re: [Qemu-trivial] [Qemu-devel] fix evsrwu and others for powerpcspe |
Date: |
Sat, 10 Feb 2018 09:19:55 -0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 |
On 02/09/2018 11:25 PM, Michael Tokarev wrote:
> 26.12.2017 14:29, address@hidden wrote:
>> GEN_SPEOP_ARITH2 declares non-local temporaries then calls
>> gen_op_evsrwu/evsrws/evslw which generates branch insn.
>
> I'm Cc'ing qemu-devel@ for review, since I don't know much about how ppc
> works.
>
> Thanks,
>
> /mjt
>
>> --- target/ppc/translate/spe-impl.inc.c.orig
>> +++ target/ppc/translate/spe-impl.inc.c
>> @@ -158,8 +158,8 @@
>> gen_exception(ctx, POWERPC_EXCP_SPEU);
>> \
>> return;
>> \
>> }
>> \
>> - t0 = tcg_temp_new_i32();
>> \
>> - t1 = tcg_temp_new_i32();
>> \
>> + t0 = tcg_temp_local_new_i32();
>> \
>> + t1 = tcg_temp_local_new_i32();
>> \
While that's one possible solution, it would be better to rewrite the helpers
not to use branches. E.g.
tcg_gen_andi_i32(t0, arg2, 0x1f);
tcg_gen_andi_i32(t1, arg2, 0x20);
tcg_gen_shr_i32(ret, arg1, t0);
tcg_gen_movi_i32(t0, 0);
tcg_gen_movcond_i32(TCG_COND_NE, ret, t1, t0, t0, ret);
r~