mirror of https://github.com/xemu-project/xemu.git
target/hppa: Use TCG_COND_TST* in trans_ftest
Reviewed-by: Helge Deller <deller@gmx.de> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
f33a22c1a2
commit
3692ad21f5
|
@ -4311,6 +4311,8 @@ static bool trans_fcmp_d(DisasContext *ctx, arg_fclass2 *a)
|
||||||
|
|
||||||
static bool trans_ftest(DisasContext *ctx, arg_ftest *a)
|
static bool trans_ftest(DisasContext *ctx, arg_ftest *a)
|
||||||
{
|
{
|
||||||
|
TCGCond tc = TCG_COND_TSTNE;
|
||||||
|
uint32_t mask;
|
||||||
TCGv_i64 t;
|
TCGv_i64 t;
|
||||||
|
|
||||||
nullify_over(ctx);
|
nullify_over(ctx);
|
||||||
|
@ -4319,21 +4321,18 @@ static bool trans_ftest(DisasContext *ctx, arg_ftest *a)
|
||||||
tcg_gen_ld32u_i64(t, tcg_env, offsetof(CPUHPPAState, fr0_shadow));
|
tcg_gen_ld32u_i64(t, tcg_env, offsetof(CPUHPPAState, fr0_shadow));
|
||||||
|
|
||||||
if (a->y == 1) {
|
if (a->y == 1) {
|
||||||
int mask;
|
|
||||||
bool inv = false;
|
|
||||||
|
|
||||||
switch (a->c) {
|
switch (a->c) {
|
||||||
case 0: /* simple */
|
case 0: /* simple */
|
||||||
mask = R_FPSR_C_MASK;
|
mask = R_FPSR_C_MASK;
|
||||||
break;
|
break;
|
||||||
case 2: /* rej */
|
case 2: /* rej */
|
||||||
inv = true;
|
tc = TCG_COND_TSTEQ;
|
||||||
/* fallthru */
|
/* fallthru */
|
||||||
case 1: /* acc */
|
case 1: /* acc */
|
||||||
mask = R_FPSR_C_MASK | R_FPSR_CQ_MASK;
|
mask = R_FPSR_C_MASK | R_FPSR_CQ_MASK;
|
||||||
break;
|
break;
|
||||||
case 6: /* rej8 */
|
case 6: /* rej8 */
|
||||||
inv = true;
|
tc = TCG_COND_TSTEQ;
|
||||||
/* fallthru */
|
/* fallthru */
|
||||||
case 5: /* acc8 */
|
case 5: /* acc8 */
|
||||||
mask = R_FPSR_C_MASK | R_FPSR_CQ0_6_MASK;
|
mask = R_FPSR_C_MASK | R_FPSR_CQ0_6_MASK;
|
||||||
|
@ -4351,21 +4350,12 @@ static bool trans_ftest(DisasContext *ctx, arg_ftest *a)
|
||||||
gen_illegal(ctx);
|
gen_illegal(ctx);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (inv) {
|
|
||||||
TCGv_i64 c = tcg_constant_i64(mask);
|
|
||||||
tcg_gen_or_i64(t, t, c);
|
|
||||||
ctx->null_cond = cond_make_tt(TCG_COND_EQ, t, c);
|
|
||||||
} else {
|
|
||||||
tcg_gen_andi_i64(t, t, mask);
|
|
||||||
ctx->null_cond = cond_make_ti(TCG_COND_EQ, t, 0);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
unsigned cbit = (a->y ^ 1) - 1;
|
unsigned cbit = (a->y ^ 1) - 1;
|
||||||
|
mask = R_FPSR_CA0_MASK >> cbit;
|
||||||
tcg_gen_extract_i64(t, t, R_FPSR_CA0_SHIFT - cbit, 1);
|
|
||||||
ctx->null_cond = cond_make_ti(TCG_COND_NE, t, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx->null_cond = cond_make_ti(tc, t, mask);
|
||||||
return nullify_end(ctx);
|
return nullify_end(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue