tcg: Remove movi and dupi opcodes

These are now completely covered by mov from a
TYPE_CONST temporary.

Backports c58f4c97b2ad9247c5ee85d625a934370862fba1
This commit is contained in:
Richard Henderson 2021-03-04 13:11:36 -05:00 committed by Lioncash
parent 6e38e5004f
commit 471fc98c49
12 changed files with 2 additions and 41 deletions

View file

@ -2254,8 +2254,6 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc,
case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */
case INDEX_op_mov_i64: case INDEX_op_mov_i64:
case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */
case INDEX_op_movi_i64:
case INDEX_op_call: /* Always emitted via tcg_out_call. */ case INDEX_op_call: /* Always emitted via tcg_out_call. */
default: default:
g_assert_not_reached(); g_assert_not_reached();
@ -2460,7 +2458,6 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc,
break; break;
case INDEX_op_mov_vec: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_vec: /* Always emitted via tcg_out_mov. */
case INDEX_op_dupi_vec: /* Always emitted via tcg_out_movi. */
case INDEX_op_dup_vec: /* Always emitted via tcg_out_dup_vec. */ case INDEX_op_dup_vec: /* Always emitted via tcg_out_dup_vec. */
default: default:
g_assert_not_reached(); g_assert_not_reached();

View file

@ -2084,7 +2084,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode opc,
break; break;
case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */
case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */
case INDEX_op_call: /* Always emitted via tcg_out_call. */ case INDEX_op_call: /* Always emitted via tcg_out_call. */
default: default:
tcg_abort(); tcg_abort();

View file

@ -2672,8 +2672,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode opc,
break; break;
case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */
case INDEX_op_mov_i64: case INDEX_op_mov_i64:
case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */
case INDEX_op_movi_i64:
case INDEX_op_call: /* Always emitted via tcg_out_call. */ case INDEX_op_call: /* Always emitted via tcg_out_call. */
default: default:
tcg_abort(); tcg_abort();
@ -2959,7 +2957,6 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc,
break; break;
case INDEX_op_mov_vec: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_vec: /* Always emitted via tcg_out_mov. */
case INDEX_op_dupi_vec: /* Always emitted via tcg_out_movi. */
case INDEX_op_dup_vec: /* Always emitted via tcg_out_dup_vec. */ case INDEX_op_dup_vec: /* Always emitted via tcg_out_dup_vec. */
default: default:
g_assert_not_reached(); g_assert_not_reached();

View file

@ -2163,8 +2163,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode opc,
break; break;
case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */
case INDEX_op_mov_i64: case INDEX_op_mov_i64:
case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */
case INDEX_op_movi_i64:
case INDEX_op_call: /* Always emitted via tcg_out_call. */ case INDEX_op_call: /* Always emitted via tcg_out_call. */
default: default:
tcg_abort(); tcg_abort();

View file

@ -1106,10 +1106,6 @@ void tcg_optimize(TCGContext *s)
CASE_OP_32_64_VEC(mov): CASE_OP_32_64_VEC(mov):
tcg_opt_gen_mov(s, op, op->args[0], op->args[1]); tcg_opt_gen_mov(s, op, op->args[0], op->args[1]);
break; break;
CASE_OP_32_64(movi):
case INDEX_op_dupi_vec:
tcg_opt_gen_movi(s, temps_used, op, op->args[0], op->args[1]);
break;
case INDEX_op_dup_vec: case INDEX_op_dup_vec:
if (arg_is_const(op->args[1])) { if (arg_is_const(op->args[1])) {

View file

@ -2586,8 +2586,6 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, const TCGArg *args,
case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */
case INDEX_op_mov_i64: case INDEX_op_mov_i64:
case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */
case INDEX_op_movi_i64:
case INDEX_op_call: /* Always emitted via tcg_out_call. */ case INDEX_op_call: /* Always emitted via tcg_out_call. */
default: default:
tcg_abort(); tcg_abort();

View file

@ -2321,8 +2321,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcode opc,
case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */
case INDEX_op_mov_i64: case INDEX_op_mov_i64:
case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */
case INDEX_op_movi_i64:
case INDEX_op_call: /* Always emitted via tcg_out_call. */ case INDEX_op_call: /* Always emitted via tcg_out_call. */
default: default:
tcg_abort(); tcg_abort();

View file

@ -1591,8 +1591,6 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc,
case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */
case INDEX_op_mov_i64: case INDEX_op_mov_i64:
case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */
case INDEX_op_movi_i64:
case INDEX_op_call: /* Always emitted via tcg_out_call. */ case INDEX_op_call: /* Always emitted via tcg_out_call. */
default: default:
tcg_abort(); tcg_abort();

View file

@ -85,7 +85,6 @@ bool tcg_can_emit_vecop_list(const TCGOpcode *list,
case INDEX_op_xor_vec: case INDEX_op_xor_vec:
case INDEX_op_mov_vec: case INDEX_op_mov_vec:
case INDEX_op_dup_vec: case INDEX_op_dup_vec:
case INDEX_op_dupi_vec:
case INDEX_op_dup2_vec: case INDEX_op_dup2_vec:
case INDEX_op_ld_vec: case INDEX_op_ld_vec:
case INDEX_op_st_vec: case INDEX_op_st_vec:

View file

@ -45,7 +45,6 @@ DEF(br, 0, 0, 1, TCG_OPF_BB_END)
DEF(mb, 0, 0, 1, 0) DEF(mb, 0, 0, 1, 0)
DEF(mov_i32, 1, 1, 0, TCG_OPF_NOT_PRESENT) DEF(mov_i32, 1, 1, 0, TCG_OPF_NOT_PRESENT)
DEF(movi_i32, 1, 0, 1, TCG_OPF_NOT_PRESENT)
DEF(setcond_i32, 1, 2, 1, 0) DEF(setcond_i32, 1, 2, 1, 0)
DEF(movcond_i32, 1, 4, 1, IMPL(TCG_TARGET_HAS_movcond_i32)) DEF(movcond_i32, 1, 4, 1, IMPL(TCG_TARGET_HAS_movcond_i32))
/* load/store */ /* load/store */
@ -110,7 +109,6 @@ DEF(ctz_i32, 1, 2, 0, IMPL(TCG_TARGET_HAS_ctz_i32))
DEF(ctpop_i32, 1, 1, 0, IMPL(TCG_TARGET_HAS_ctpop_i32)) DEF(ctpop_i32, 1, 1, 0, IMPL(TCG_TARGET_HAS_ctpop_i32))
DEF(mov_i64, 1, 1, 0, TCG_OPF_64BIT | TCG_OPF_NOT_PRESENT) DEF(mov_i64, 1, 1, 0, TCG_OPF_64BIT | TCG_OPF_NOT_PRESENT)
DEF(movi_i64, 1, 0, 1, TCG_OPF_64BIT | TCG_OPF_NOT_PRESENT)
DEF(setcond_i64, 1, 2, 1, IMPL64) DEF(setcond_i64, 1, 2, 1, IMPL64)
DEF(movcond_i64, 1, 4, 1, IMPL64 | IMPL(TCG_TARGET_HAS_movcond_i64)) DEF(movcond_i64, 1, 4, 1, IMPL64 | IMPL(TCG_TARGET_HAS_movcond_i64))
/* load/store */ /* load/store */
@ -217,7 +215,6 @@ DEF(qemu_st8_i32, 0, TLADDR_ARGS + 1, 1,
#define IMPLVEC TCG_OPF_VECTOR | IMPL(TCG_TARGET_MAYBE_vec) #define IMPLVEC TCG_OPF_VECTOR | IMPL(TCG_TARGET_MAYBE_vec)
DEF(mov_vec, 1, 1, 0, TCG_OPF_VECTOR | TCG_OPF_NOT_PRESENT) DEF(mov_vec, 1, 1, 0, TCG_OPF_VECTOR | TCG_OPF_NOT_PRESENT)
DEF(dupi_vec, 1, 0, 1, TCG_OPF_VECTOR | TCG_OPF_NOT_PRESENT)
DEF(dup_vec, 1, 1, 0, IMPLVEC) DEF(dup_vec, 1, 1, 0, IMPLVEC)
DEF(dup2_vec, 1, 2, 0, IMPLVEC | IMPL(TCG_TARGET_REG_BITS == 32)) DEF(dup2_vec, 1, 2, 0, IMPLVEC | IMPL(TCG_TARGET_REG_BITS == 32))

View file

@ -920,7 +920,6 @@ bool tcg_op_supported(TCGOpcode op)
return TCG_TARGET_HAS_goto_ptr; return TCG_TARGET_HAS_goto_ptr;
case INDEX_op_mov_i32: case INDEX_op_mov_i32:
case INDEX_op_movi_i32:
case INDEX_op_setcond_i32: case INDEX_op_setcond_i32:
case INDEX_op_brcond_i32: case INDEX_op_brcond_i32:
case INDEX_op_ld8u_i32: case INDEX_op_ld8u_i32:
@ -1014,7 +1013,6 @@ bool tcg_op_supported(TCGOpcode op)
return TCG_TARGET_REG_BITS == 32; return TCG_TARGET_REG_BITS == 32;
case INDEX_op_mov_i64: case INDEX_op_mov_i64:
case INDEX_op_movi_i64:
case INDEX_op_setcond_i64: case INDEX_op_setcond_i64:
case INDEX_op_brcond_i64: case INDEX_op_brcond_i64:
case INDEX_op_ld8u_i64: case INDEX_op_ld8u_i64:
@ -1120,7 +1118,6 @@ bool tcg_op_supported(TCGOpcode op)
case INDEX_op_mov_vec: case INDEX_op_mov_vec:
case INDEX_op_dup_vec: case INDEX_op_dup_vec:
case INDEX_op_dupi_vec:
case INDEX_op_dupm_vec: case INDEX_op_dupm_vec:
case INDEX_op_ld_vec: case INDEX_op_ld_vec:
case INDEX_op_st_vec: case INDEX_op_st_vec:
@ -2981,7 +2978,7 @@ static void tcg_reg_alloc_bb_end(TCGContext *s, TCGRegSet allocated_regs)
} }
/* /*
* Specialized code generation for INDEX_op_movi_*. * Specialized code generation for INDEX_op_mov_* with a constant.
*/ */
static void tcg_reg_alloc_do_movi(TCGContext *s, TCGTemp *ots, static void tcg_reg_alloc_do_movi(TCGContext *s, TCGTemp *ots,
tcg_target_ulong val, TCGLifeData arg_life, tcg_target_ulong val, TCGLifeData arg_life,
@ -3004,14 +3001,6 @@ static void tcg_reg_alloc_do_movi(TCGContext *s, TCGTemp *ots,
} }
} }
static void tcg_reg_alloc_movi(TCGContext *s, const TCGOp *op)
{
TCGTemp *ots = arg_temp(op->args[0]);
tcg_target_ulong val = op->args[1];
tcg_reg_alloc_do_movi(s, ots, val, op->life, op->output_pref[0]);
}
/* /*
* Specialized code generation for INDEX_op_mov_*. * Specialized code generation for INDEX_op_mov_*.
*/ */
@ -3682,11 +3671,6 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb)
case INDEX_op_mov_vec: case INDEX_op_mov_vec:
tcg_reg_alloc_mov(s, op); tcg_reg_alloc_mov(s, op);
break; break;
case INDEX_op_movi_i32:
case INDEX_op_movi_i64:
case INDEX_op_dupi_vec:
tcg_reg_alloc_movi(s, op);
break;
case INDEX_op_dup_vec: case INDEX_op_dup_vec:
tcg_reg_alloc_dup(s, op); tcg_reg_alloc_dup(s, op);
break; break;

View file

@ -1100,7 +1100,7 @@ static inline TCGv_ptr tcg_temp_local_new_ptr(TCGContext *s)
} }
// UNICORN: Added // UNICORN: Added
#define TCG_OP_DEFS_TABLE_SIZE 190 #define TCG_OP_DEFS_TABLE_SIZE 187
extern const TCGOpDef tcg_op_defs_org[TCG_OP_DEFS_TABLE_SIZE]; extern const TCGOpDef tcg_op_defs_org[TCG_OP_DEFS_TABLE_SIZE];
typedef struct TCGTargetOpDef { typedef struct TCGTargetOpDef {