mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-17 21:26:13 -07:00
tcg: Merge INDEX_op_shr_{i32,i64}
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
edd6ba8a6b
commit
74dbd36f1f
7 changed files with 18 additions and 29 deletions
|
|
@ -452,10 +452,10 @@ static uint64_t do_constant_folding_2(TCGOpcode op, TCGType type,
|
|||
}
|
||||
return (uint64_t)x << (y & 63);
|
||||
|
||||
case INDEX_op_shr_i32:
|
||||
return (uint32_t)x >> (y & 31);
|
||||
|
||||
case INDEX_op_shr_i64:
|
||||
case INDEX_op_shr:
|
||||
if (type == TCG_TYPE_I32) {
|
||||
return (uint32_t)x >> (y & 31);
|
||||
}
|
||||
return (uint64_t)x >> (y & 63);
|
||||
|
||||
case INDEX_op_sar_i32:
|
||||
|
|
@ -2342,7 +2342,6 @@ static int fold_setcond_zmask(OptContext *ctx, TCGOp *op, bool neg)
|
|||
|
||||
static void fold_setcond_tst_pow2(OptContext *ctx, TCGOp *op, bool neg)
|
||||
{
|
||||
TCGOpcode shr_opc;
|
||||
TCGOpcode uext_opc = 0, sext_opc = 0;
|
||||
TCGCond cond = op->args[3];
|
||||
TCGArg ret, src1, src2;
|
||||
|
|
@ -2364,7 +2363,6 @@ static void fold_setcond_tst_pow2(OptContext *ctx, TCGOp *op, bool neg)
|
|||
|
||||
switch (ctx->type) {
|
||||
case TCG_TYPE_I32:
|
||||
shr_opc = INDEX_op_shr_i32;
|
||||
if (TCG_TARGET_extract_valid(TCG_TYPE_I32, sh, 1)) {
|
||||
uext_opc = INDEX_op_extract_i32;
|
||||
}
|
||||
|
|
@ -2373,7 +2371,6 @@ static void fold_setcond_tst_pow2(OptContext *ctx, TCGOp *op, bool neg)
|
|||
}
|
||||
break;
|
||||
case TCG_TYPE_I64:
|
||||
shr_opc = INDEX_op_shr_i64;
|
||||
if (TCG_TARGET_extract_valid(TCG_TYPE_I64, sh, 1)) {
|
||||
uext_opc = INDEX_op_extract_i64;
|
||||
}
|
||||
|
|
@ -2402,7 +2399,7 @@ static void fold_setcond_tst_pow2(OptContext *ctx, TCGOp *op, bool neg)
|
|||
op->args[3] = 1;
|
||||
} else {
|
||||
if (sh) {
|
||||
op2 = opt_insert_before(ctx, op, shr_opc, 3);
|
||||
op2 = opt_insert_before(ctx, op, INDEX_op_shr, 3);
|
||||
op2->args[0] = ret;
|
||||
op2->args[1] = src1;
|
||||
op2->args[2] = arg_new_constant(ctx, sh);
|
||||
|
|
@ -2609,7 +2606,7 @@ static bool fold_shift(OptContext *ctx, TCGOp *op)
|
|||
* input sign repetitions.
|
||||
*/
|
||||
return fold_masks_s(ctx, op, s_mask);
|
||||
CASE_OP_32_64(shr):
|
||||
case INDEX_op_shr:
|
||||
/*
|
||||
* If the sign bit is known zero, then logical right shift
|
||||
* will not reduce the number of input sign repetitions.
|
||||
|
|
@ -3032,7 +3029,7 @@ void tcg_optimize(TCGContext *s)
|
|||
CASE_OP_32_64(rotr):
|
||||
CASE_OP_32_64(sar):
|
||||
case INDEX_op_shl:
|
||||
CASE_OP_32_64(shr):
|
||||
case INDEX_op_shr:
|
||||
done = fold_shift(&ctx, op);
|
||||
break;
|
||||
CASE_OP_32_64(setcond):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue