On Fri, 21 Sep 2012, Richard Henderson wrote:

> On 09/21/2012 01:10 PM, malc wrote:
> > +        if (dest == v2) {
> > +            label_ptr = s->code_ptr;
> > +            tcg_out32 (s, tcg_to_bc[tcg_invert_cond (cond)]);
> > +            tcg_out_mov (s, TCG_TYPE_I32, dest, v1);
> > +            reloc_pc14 (label_ptr, (tcg_target_long) s->code_ptr);
> > +        }
> > +        else {
> > +            tcg_out_mov (s, TCG_TYPE_I32, dest, v1);
> > +            label_ptr = s->code_ptr;
> > +            tcg_out32 (s, tcg_to_bc[cond]);
> > +            tcg_out_mov (s, TCG_TYPE_I32, dest, v2);
> > +            reloc_pc14 (label_ptr, (tcg_target_long) s->code_ptr);
> > +        }
> 
> How about
> 
>     if (dest == v2) {
>         cond = tcg_invert_cond(cond);
>         v2 = v1;
>     } else if (dest != v1) {
>         tcg_out_mov(s, TCG_TYPE_I32, dest, v1);
>     }
>     /* Branch forward over one insn.  */
>     tcg_out32 (s, tcg_to_bc[cond] | 4);
>     tcg_out_mov(s, TCG_TYPE_I32, dest, v2);
> 
> which avoids an extra mov if dest == v1, and also minimizes the code.

Yes, thanks, that's better (save for | 4 part which is 4 too little)

-- 
mailto:av1...@comtv.ru

Reply via email to