mirror of https://github.com/xemu-project/xemu.git
target/riscv: Use gen_arith for mulh and mulhu
Split out gen_mulh and gen_mulhu and use the common helper. Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20210823195529.560295-9-richard.henderson@linaro.org Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
afbbec8201
commit
8a1b4917c5
|
@ -25,20 +25,18 @@ static bool trans_mul(DisasContext *ctx, arg_mul *a)
|
|||
return gen_arith(ctx, a, EXT_NONE, tcg_gen_mul_tl);
|
||||
}
|
||||
|
||||
static void gen_mulh(TCGv ret, TCGv s1, TCGv s2)
|
||||
{
|
||||
TCGv discard = tcg_temp_new();
|
||||
|
||||
tcg_gen_muls2_tl(discard, ret, s1, s2);
|
||||
tcg_temp_free(discard);
|
||||
}
|
||||
|
||||
static bool trans_mulh(DisasContext *ctx, arg_mulh *a)
|
||||
{
|
||||
REQUIRE_EXT(ctx, RVM);
|
||||
TCGv source1 = tcg_temp_new();
|
||||
TCGv source2 = tcg_temp_new();
|
||||
gen_get_gpr(ctx, source1, a->rs1);
|
||||
gen_get_gpr(ctx, source2, a->rs2);
|
||||
|
||||
tcg_gen_muls2_tl(source2, source1, source1, source2);
|
||||
|
||||
gen_set_gpr(ctx, a->rd, source1);
|
||||
tcg_temp_free(source1);
|
||||
tcg_temp_free(source2);
|
||||
return true;
|
||||
return gen_arith(ctx, a, EXT_NONE, gen_mulh);
|
||||
}
|
||||
|
||||
static bool trans_mulhsu(DisasContext *ctx, arg_mulhsu *a)
|
||||
|
@ -47,20 +45,18 @@ static bool trans_mulhsu(DisasContext *ctx, arg_mulhsu *a)
|
|||
return gen_arith(ctx, a, EXT_NONE, gen_mulhsu);
|
||||
}
|
||||
|
||||
static void gen_mulhu(TCGv ret, TCGv s1, TCGv s2)
|
||||
{
|
||||
TCGv discard = tcg_temp_new();
|
||||
|
||||
tcg_gen_mulu2_tl(discard, ret, s1, s2);
|
||||
tcg_temp_free(discard);
|
||||
}
|
||||
|
||||
static bool trans_mulhu(DisasContext *ctx, arg_mulhu *a)
|
||||
{
|
||||
REQUIRE_EXT(ctx, RVM);
|
||||
TCGv source1 = tcg_temp_new();
|
||||
TCGv source2 = tcg_temp_new();
|
||||
gen_get_gpr(ctx, source1, a->rs1);
|
||||
gen_get_gpr(ctx, source2, a->rs2);
|
||||
|
||||
tcg_gen_mulu2_tl(source2, source1, source1, source2);
|
||||
|
||||
gen_set_gpr(ctx, a->rd, source1);
|
||||
tcg_temp_free(source1);
|
||||
tcg_temp_free(source2);
|
||||
return true;
|
||||
return gen_arith(ctx, a, EXT_NONE, gen_mulhu);
|
||||
}
|
||||
|
||||
static bool trans_div(DisasContext *ctx, arg_div *a)
|
||||
|
|
Loading…
Reference in New Issue