mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-24 20:19:44 +00:00
target/ppc: Use tcg_gen_abs_tl
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
d577dbaac7
commit
fe21b785ff
@ -5075,40 +5075,26 @@ static void gen_ecowx(DisasContext *ctx)
|
||||
/* abs - abs. */
|
||||
static void gen_abs(DisasContext *ctx)
|
||||
{
|
||||
TCGLabel *l1 = gen_new_label();
|
||||
TCGLabel *l2 = gen_new_label();
|
||||
tcg_gen_brcondi_tl(TCG_COND_GE, cpu_gpr[rA(ctx->opcode)], 0, l1);
|
||||
tcg_gen_neg_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]);
|
||||
tcg_gen_br(l2);
|
||||
gen_set_label(l1);
|
||||
tcg_gen_mov_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]);
|
||||
gen_set_label(l2);
|
||||
TCGv d = cpu_gpr[rD(ctx->opcode)];
|
||||
TCGv a = cpu_gpr[rA(ctx->opcode)];
|
||||
|
||||
tcg_gen_abs_tl(d, a);
|
||||
if (unlikely(Rc(ctx->opcode) != 0)) {
|
||||
gen_set_Rc0(ctx, cpu_gpr[rD(ctx->opcode)]);
|
||||
gen_set_Rc0(ctx, d);
|
||||
}
|
||||
}
|
||||
|
||||
/* abso - abso. */
|
||||
static void gen_abso(DisasContext *ctx)
|
||||
{
|
||||
TCGLabel *l1 = gen_new_label();
|
||||
TCGLabel *l2 = gen_new_label();
|
||||
TCGLabel *l3 = gen_new_label();
|
||||
/* Start with XER OV disabled, the most likely case */
|
||||
tcg_gen_movi_tl(cpu_ov, 0);
|
||||
tcg_gen_brcondi_tl(TCG_COND_GE, cpu_gpr[rA(ctx->opcode)], 0, l2);
|
||||
tcg_gen_brcondi_tl(TCG_COND_NE, cpu_gpr[rA(ctx->opcode)], 0x80000000, l1);
|
||||
tcg_gen_movi_tl(cpu_ov, 1);
|
||||
tcg_gen_movi_tl(cpu_so, 1);
|
||||
tcg_gen_br(l2);
|
||||
gen_set_label(l1);
|
||||
tcg_gen_neg_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]);
|
||||
tcg_gen_br(l3);
|
||||
gen_set_label(l2);
|
||||
tcg_gen_mov_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]);
|
||||
gen_set_label(l3);
|
||||
TCGv d = cpu_gpr[rD(ctx->opcode)];
|
||||
TCGv a = cpu_gpr[rA(ctx->opcode)];
|
||||
|
||||
tcg_gen_setcondi_tl(TCG_COND_EQ, cpu_ov, a, 0x80000000);
|
||||
tcg_gen_abs_tl(d, a);
|
||||
tcg_gen_or_tl(cpu_so, cpu_so, cpu_ov);
|
||||
if (unlikely(Rc(ctx->opcode) != 0)) {
|
||||
gen_set_Rc0(ctx, cpu_gpr[rD(ctx->opcode)]);
|
||||
gen_set_Rc0(ctx, d);
|
||||
}
|
||||
}
|
||||
|
||||
@ -5344,34 +5330,28 @@ static void gen_mulo(DisasContext *ctx)
|
||||
/* nabs - nabs. */
|
||||
static void gen_nabs(DisasContext *ctx)
|
||||
{
|
||||
TCGLabel *l1 = gen_new_label();
|
||||
TCGLabel *l2 = gen_new_label();
|
||||
tcg_gen_brcondi_tl(TCG_COND_GT, cpu_gpr[rA(ctx->opcode)], 0, l1);
|
||||
tcg_gen_mov_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]);
|
||||
tcg_gen_br(l2);
|
||||
gen_set_label(l1);
|
||||
tcg_gen_neg_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]);
|
||||
gen_set_label(l2);
|
||||
TCGv d = cpu_gpr[rD(ctx->opcode)];
|
||||
TCGv a = cpu_gpr[rA(ctx->opcode)];
|
||||
|
||||
tcg_gen_abs_tl(d, a);
|
||||
tcg_gen_neg_tl(d, d);
|
||||
if (unlikely(Rc(ctx->opcode) != 0)) {
|
||||
gen_set_Rc0(ctx, cpu_gpr[rD(ctx->opcode)]);
|
||||
gen_set_Rc0(ctx, d);
|
||||
}
|
||||
}
|
||||
|
||||
/* nabso - nabso. */
|
||||
static void gen_nabso(DisasContext *ctx)
|
||||
{
|
||||
TCGLabel *l1 = gen_new_label();
|
||||
TCGLabel *l2 = gen_new_label();
|
||||
tcg_gen_brcondi_tl(TCG_COND_GT, cpu_gpr[rA(ctx->opcode)], 0, l1);
|
||||
tcg_gen_mov_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]);
|
||||
tcg_gen_br(l2);
|
||||
gen_set_label(l1);
|
||||
tcg_gen_neg_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]);
|
||||
gen_set_label(l2);
|
||||
TCGv d = cpu_gpr[rD(ctx->opcode)];
|
||||
TCGv a = cpu_gpr[rA(ctx->opcode)];
|
||||
|
||||
tcg_gen_abs_tl(d, a);
|
||||
tcg_gen_neg_tl(d, d);
|
||||
/* nabs never overflows */
|
||||
tcg_gen_movi_tl(cpu_ov, 0);
|
||||
if (unlikely(Rc(ctx->opcode) != 0)) {
|
||||
gen_set_Rc0(ctx, cpu_gpr[rD(ctx->opcode)]);
|
||||
gen_set_Rc0(ctx, d);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user