On 07/25/2018 08:38 AM, Aleksandar Markovic wrote:
> Hi, Richard.
> 
>>> +    case NM_SOV:
>>> +    {
>>> +        TCGv t0 = tcg_temp_local_new();
>>> +        TCGv t1 = tcg_temp_new();
>>> +        TCGv t2 = tcg_temp_new();
>>> +        TCGLabel *l1 = gen_new_label();
>>> +
>>> +        gen_load_gpr(t1, rs);
>>> +        gen_load_gpr(t2, rt);
>>> +        tcg_gen_add_tl(t0, t1, t2);
>>> +        tcg_gen_ext32s_tl(t0, t0);
>>> +        tcg_gen_xor_tl(t1, t1, t2);
>>> +        tcg_gen_xor_tl(t2, t0, t2);
>>> +        tcg_gen_andc_tl(t1, t2, t1);
>>> +
>>> +        tcg_gen_movi_tl(t0, 0);
>>> +        tcg_gen_brcondi_tl(TCG_COND_GE, t1, 0, l1);
>>
>> tcg_gen_setcondi_tl.
>>
> 
> Would here the correct simplification be:
> 
> Replace code segment
> 
> tcg_gen_movi_tl(t0, 0);
> tcg_gen_brcondi_tl(TCG_COND_GE, t1, 0, l1);
> tcg_gen_movi_tl(t0, 1);
> gen_set_label(l1);
> 
> with
> 
> tcg_gen_setcondi_tl(TCG_COND_GE, t0, t1, 0);
> (plus deleting the declaration of l1 of course)

Nearly.  You're branching over a move of 1, and so computing the inverse of the
condition.  So the correct replacement is

  tcg_gen_setcondi_tl(TCG_COND_LT, t0, t1, 0);


r~

Reply via email to