mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 07:13:54 -06:00
target/sparc: Move TADD, TSUB, MULS to decodetree
Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
c26368532d
commit
a9aba13dae
3 changed files with 29 additions and 30 deletions
|
@ -730,6 +730,16 @@ static void gen_op_sdivcc(TCGv dst, TCGv src1, TCGv src2)
|
|||
gen_helper_sdiv_cc(dst, tcg_env, src1, src2);
|
||||
}
|
||||
|
||||
static void gen_op_taddcctv(TCGv dst, TCGv src1, TCGv src2)
|
||||
{
|
||||
gen_helper_taddcctv(dst, tcg_env, src1, src2);
|
||||
}
|
||||
|
||||
static void gen_op_tsubcctv(TCGv dst, TCGv src1, TCGv src2)
|
||||
{
|
||||
gen_helper_tsubcctv(dst, tcg_env, src1, src2);
|
||||
}
|
||||
|
||||
// 1
|
||||
static void gen_op_eval_ba(TCGv dst)
|
||||
{
|
||||
|
@ -4146,6 +4156,11 @@ TRANS(ADD, ALL, do_arith, a, CC_OP_ADD,
|
|||
TRANS(SUB, ALL, do_arith, a, CC_OP_SUB,
|
||||
tcg_gen_sub_tl, tcg_gen_subi_tl, gen_op_sub_cc)
|
||||
|
||||
TRANS(TADDcc, ALL, do_arith, a, CC_OP_TADD, NULL, NULL, gen_op_add_cc)
|
||||
TRANS(TSUBcc, ALL, do_arith, a, CC_OP_TSUB, NULL, NULL, gen_op_sub_cc)
|
||||
TRANS(TADDccTV, ALL, do_arith, a, CC_OP_TADDTV, NULL, NULL, gen_op_taddcctv)
|
||||
TRANS(TSUBccTV, ALL, do_arith, a, CC_OP_TSUBTV, NULL, NULL, gen_op_tsubcctv)
|
||||
|
||||
TRANS(AND, ALL, do_logic, a, tcg_gen_and_tl, tcg_gen_andi_tl)
|
||||
TRANS(XOR, ALL, do_logic, a, tcg_gen_xor_tl, tcg_gen_xori_tl)
|
||||
TRANS(ANDN, ALL, do_logic, a, tcg_gen_andc_tl, NULL)
|
||||
|
@ -4226,6 +4241,12 @@ static bool trans_SUBC(DisasContext *dc, arg_r_r_ri_cc *a)
|
|||
}
|
||||
}
|
||||
|
||||
static bool trans_MULScc(DisasContext *dc, arg_r_r_ri_cc *a)
|
||||
{
|
||||
update_psr(dc);
|
||||
return do_arith(dc, a, CC_OP_ADD, NULL, NULL, gen_op_mulscc);
|
||||
}
|
||||
|
||||
#define CHECK_IU_FEATURE(dc, FEATURE) \
|
||||
if (!((dc)->def->features & CPU_FEATURE_ ## FEATURE)) \
|
||||
goto illegal_insn;
|
||||
|
@ -4653,36 +4674,11 @@ static void disas_sparc_legacy(DisasContext *dc, unsigned int insn)
|
|||
cpu_src2 = get_src2(dc, insn);
|
||||
switch (xop) {
|
||||
case 0x20: /* taddcc */
|
||||
gen_op_add_cc(cpu_dst, cpu_src1, cpu_src2);
|
||||
gen_store_gpr(dc, rd, cpu_dst);
|
||||
tcg_gen_movi_i32(cpu_cc_op, CC_OP_TADD);
|
||||
dc->cc_op = CC_OP_TADD;
|
||||
break;
|
||||
case 0x21: /* tsubcc */
|
||||
gen_op_sub_cc(cpu_dst, cpu_src1, cpu_src2);
|
||||
gen_store_gpr(dc, rd, cpu_dst);
|
||||
tcg_gen_movi_i32(cpu_cc_op, CC_OP_TSUB);
|
||||
dc->cc_op = CC_OP_TSUB;
|
||||
break;
|
||||
case 0x22: /* taddcctv */
|
||||
gen_helper_taddcctv(cpu_dst, tcg_env,
|
||||
cpu_src1, cpu_src2);
|
||||
gen_store_gpr(dc, rd, cpu_dst);
|
||||
dc->cc_op = CC_OP_TADDTV;
|
||||
break;
|
||||
case 0x23: /* tsubcctv */
|
||||
gen_helper_tsubcctv(cpu_dst, tcg_env,
|
||||
cpu_src1, cpu_src2);
|
||||
gen_store_gpr(dc, rd, cpu_dst);
|
||||
dc->cc_op = CC_OP_TSUBTV;
|
||||
break;
|
||||
case 0x24: /* mulscc */
|
||||
update_psr(dc);
|
||||
gen_op_mulscc(cpu_dst, cpu_src1, cpu_src2);
|
||||
gen_store_gpr(dc, rd, cpu_dst);
|
||||
tcg_gen_movi_i32(cpu_cc_op, CC_OP_ADD);
|
||||
dc->cc_op = CC_OP_ADD;
|
||||
break;
|
||||
goto illegal_insn; /* in decodetree */
|
||||
#ifndef TARGET_SPARC64
|
||||
case 0x25: /* sll */
|
||||
if (IS_IMM) { /* immediate */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue