target-alpha: Convert gen_fcmov to source/sink
Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
76bff4f82f
commit
6580935246
|
@ -547,34 +547,18 @@ static ExitStatus gen_fbcond(DisasContext *ctx, TCGCond cond, int ra,
|
||||||
return gen_bcond_internal(ctx, cond, cmp_tmp, disp);
|
return gen_bcond_internal(ctx, cond, cmp_tmp, disp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gen_fcmov(TCGCond cond, int ra, int rb, int rc)
|
static void gen_fcmov(DisasContext *ctx, TCGCond cond, int ra, int rb, int rc)
|
||||||
{
|
{
|
||||||
TCGv_i64 c1, z, v1;
|
TCGv_i64 va, vb, z;
|
||||||
|
|
||||||
if (unlikely(rc == 31)) {
|
z = load_zero(ctx);
|
||||||
return;
|
vb = load_fpr(ctx, rb);
|
||||||
}
|
va = tcg_temp_new();
|
||||||
|
gen_fold_mzero(cond, va, load_fpr(ctx, ra));
|
||||||
|
|
||||||
c1 = tcg_temp_new_i64();
|
tcg_gen_movcond_i64(cond, dest_fpr(ctx, rc), va, z, vb, load_fpr(ctx, rc));
|
||||||
if (unlikely(ra == 31)) {
|
|
||||||
tcg_gen_movi_i64(c1, 0);
|
|
||||||
} else {
|
|
||||||
gen_fold_mzero(cond, c1, cpu_fir[ra]);
|
|
||||||
}
|
|
||||||
if (rb == 31) {
|
|
||||||
v1 = tcg_const_i64(0);
|
|
||||||
} else {
|
|
||||||
v1 = cpu_fir[rb];
|
|
||||||
}
|
|
||||||
z = tcg_const_i64(0);
|
|
||||||
|
|
||||||
tcg_gen_movcond_i64(cond, cpu_fir[rc], c1, z, v1, cpu_fir[rc]);
|
tcg_temp_free(va);
|
||||||
|
|
||||||
tcg_temp_free_i64(z);
|
|
||||||
tcg_temp_free_i64(c1);
|
|
||||||
if (rb == 31) {
|
|
||||||
tcg_temp_free_i64(v1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define QUAL_RM_N 0x080 /* Round mode nearest even */
|
#define QUAL_RM_N 0x080 /* Round mode nearest even */
|
||||||
|
@ -2314,27 +2298,27 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn)
|
||||||
break;
|
break;
|
||||||
case 0x02A:
|
case 0x02A:
|
||||||
/* FCMOVEQ */
|
/* FCMOVEQ */
|
||||||
gen_fcmov(TCG_COND_EQ, ra, rb, rc);
|
gen_fcmov(ctx, TCG_COND_EQ, ra, rb, rc);
|
||||||
break;
|
break;
|
||||||
case 0x02B:
|
case 0x02B:
|
||||||
/* FCMOVNE */
|
/* FCMOVNE */
|
||||||
gen_fcmov(TCG_COND_NE, ra, rb, rc);
|
gen_fcmov(ctx, TCG_COND_NE, ra, rb, rc);
|
||||||
break;
|
break;
|
||||||
case 0x02C:
|
case 0x02C:
|
||||||
/* FCMOVLT */
|
/* FCMOVLT */
|
||||||
gen_fcmov(TCG_COND_LT, ra, rb, rc);
|
gen_fcmov(ctx, TCG_COND_LT, ra, rb, rc);
|
||||||
break;
|
break;
|
||||||
case 0x02D:
|
case 0x02D:
|
||||||
/* FCMOVGE */
|
/* FCMOVGE */
|
||||||
gen_fcmov(TCG_COND_GE, ra, rb, rc);
|
gen_fcmov(ctx, TCG_COND_GE, ra, rb, rc);
|
||||||
break;
|
break;
|
||||||
case 0x02E:
|
case 0x02E:
|
||||||
/* FCMOVLE */
|
/* FCMOVLE */
|
||||||
gen_fcmov(TCG_COND_LE, ra, rb, rc);
|
gen_fcmov(ctx, TCG_COND_LE, ra, rb, rc);
|
||||||
break;
|
break;
|
||||||
case 0x02F:
|
case 0x02F:
|
||||||
/* FCMOVGT */
|
/* FCMOVGT */
|
||||||
gen_fcmov(TCG_COND_GT, ra, rb, rc);
|
gen_fcmov(ctx, TCG_COND_GT, ra, rb, rc);
|
||||||
break;
|
break;
|
||||||
case 0x030:
|
case 0x030:
|
||||||
/* CVTQL */
|
/* CVTQL */
|
||||||
|
|
Loading…
Reference in New Issue