qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2] target-cris: Use movcond and setcond


From: Edgar E. Iglesias
Subject: Re: [Qemu-devel] [PATCH v2] target-cris: Use movcond and setcond
Date: Tue, 8 Sep 2015 10:56:12 +0200
User-agent: Mutt/1.5.21 (2010-09-15)

On Wed, Sep 02, 2015 at 11:38:10AM -0700, Richard Henderson wrote:
> Signed-off-by: Richard Henderson <address@hidden>
> ---
> This was originally posted back in February.  I failed to keep
> any reply, if any, that may have been given.  There's no change
> to the code after updating to mainline.

Thanks, I've merged both the MicroBlaze and this CRISone.

Cheers,
Edgar


> 
> 
> r~
> ---
>  target-cris/translate.c     | 27 +++++++--------------------
>  target-cris/translate_v10.c | 12 ++----------
>  2 files changed, 9 insertions(+), 30 deletions(-)
> 
> diff --git a/target-cris/translate.c b/target-cris/translate.c
> index 5699826..f21373b 100644
> --- a/target-cris/translate.c
> +++ b/target-cris/translate.c
> @@ -311,7 +311,7 @@ static void t_gen_asr(TCGv d, TCGv a, TCGv b)
>  
>  static void t_gen_cris_dstep(TCGv d, TCGv a, TCGv b)
>  {
> -    TCGLabel *l1 = gen_new_label();
> +    TCGv t = tcg_temp_new();
>  
>      /*
>       * d <<= 1
> @@ -319,9 +319,9 @@ static void t_gen_cris_dstep(TCGv d, TCGv a, TCGv b)
>       *    d -= s;
>       */
>      tcg_gen_shli_tl(d, a, 1);
> -    tcg_gen_brcond_tl(TCG_COND_LTU, d, b, l1);
> -    tcg_gen_sub_tl(d, d, b);
> -    gen_set_label(l1);
> +    tcg_gen_sub_tl(t, d, b);
> +    tcg_gen_movcond_tl(TCG_COND_GEU, d, d, b, t, d);
> +    tcg_temp_free(t);
>  }
>  
>  static void t_gen_cris_mstep(TCGv d, TCGv a, TCGv b, TCGv ccs)
> @@ -769,13 +769,7 @@ static void cris_alu_op_exec(DisasContext *dc, int op,
>          t_gen_cris_mstep(dst, a, b, cpu_PR[PR_CCS]);
>          break;
>      case CC_OP_BOUND:
> -    {
> -        TCGLabel *l1 = gen_new_label();
> -        tcg_gen_mov_tl(dst, a);
> -        tcg_gen_brcond_tl(TCG_COND_LEU, a, b, l1);
> -        tcg_gen_mov_tl(dst, b);
> -        gen_set_label(l1);
> -    }
> +        tcg_gen_movcond_tl(TCG_COND_LEU, dst, a, b, a, b);
>          break;
>      case CC_OP_CMP:
>          tcg_gen_sub_tl(dst, a, b);
> @@ -1482,15 +1476,8 @@ static int dec_scc_r(CPUCRISState *env, DisasContext 
> *dc)
>      LOG_DIS("s%s $r%u\n",
>              cc_name(cond), dc->op1);
>  
> -    if (cond != CC_A) {
> -        TCGLabel *l1 = gen_new_label();
> -        gen_tst_cc(dc, cpu_R[dc->op1], cond);
> -        tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_R[dc->op1], 0, l1);
> -        tcg_gen_movi_tl(cpu_R[dc->op1], 1);
> -        gen_set_label(l1);
> -    } else {
> -        tcg_gen_movi_tl(cpu_R[dc->op1], 1);
> -    }
> +    gen_tst_cc(dc, cpu_R[dc->op1], cond);
> +    tcg_gen_setcondi_tl(TCG_COND_NE, cpu_R[dc->op1], cpu_R[dc->op1], 0);
>  
>      cris_cc_mask(dc, 0);
>      return 2;
> diff --git a/target-cris/translate_v10.c b/target-cris/translate_v10.c
> index b742c4c..618c234 100644
> --- a/target-cris/translate_v10.c
> +++ b/target-cris/translate_v10.c
> @@ -535,16 +535,8 @@ static void dec10_reg_scc(DisasContext *dc)
>  
>      LOG_DIS("s%s $r%u\n", cc_name(cond), dc->src);
>  
> -    if (cond != CC_A)
> -    {
> -        TCGLabel *l1 = gen_new_label();
> -        gen_tst_cc (dc, cpu_R[dc->src], cond);
> -        tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_R[dc->src], 0, l1);
> -        tcg_gen_movi_tl(cpu_R[dc->src], 1);
> -        gen_set_label(l1);
> -    } else {
> -        tcg_gen_movi_tl(cpu_R[dc->src], 1);
> -    }
> +    gen_tst_cc(dc, cpu_R[dc->src], cond);
> +    tcg_gen_setcondi_tl(TCG_COND_NE, cpu_R[dc->src], cpu_R[dc->src], 0);
>  
>      cris_cc_mask(dc, 0);
>  }
> -- 
> 2.4.3
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]