[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
>