mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
tcg: Convert neg to TCGOutOpUnary
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
60f34f55f1
commit
e126a91c38
11 changed files with 125 additions and 67 deletions
21
tcg/tcg.c
21
tcg/tcg.c
|
@ -986,6 +986,11 @@ typedef struct TCGOutOpBinary {
|
|||
TCGReg a0, TCGReg a1, tcg_target_long a2);
|
||||
} TCGOutOpBinary;
|
||||
|
||||
typedef struct TCGOutOpUnary {
|
||||
TCGOutOp base;
|
||||
void (*out_rr)(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1);
|
||||
} TCGOutOpUnary;
|
||||
|
||||
typedef struct TCGOutOpSubtract {
|
||||
TCGOutOp base;
|
||||
void (*out_rrr)(TCGContext *s, TCGType type,
|
||||
|
@ -1017,6 +1022,8 @@ static const TCGOutOp * const all_outop[NB_OPS] = {
|
|||
OUTOP(INDEX_op_andc, TCGOutOpBinary, outop_andc),
|
||||
OUTOP(INDEX_op_eqv, TCGOutOpBinary, outop_eqv),
|
||||
OUTOP(INDEX_op_nand, TCGOutOpBinary, outop_nand),
|
||||
OUTOP(INDEX_op_neg_i32, TCGOutOpUnary, outop_neg),
|
||||
OUTOP(INDEX_op_neg_i64, TCGOutOpUnary, outop_neg),
|
||||
OUTOP(INDEX_op_nor, TCGOutOpBinary, outop_nor),
|
||||
OUTOP(INDEX_op_or, TCGOutOpBinary, outop_or),
|
||||
OUTOP(INDEX_op_orc, TCGOutOpBinary, outop_orc),
|
||||
|
@ -2240,7 +2247,6 @@ bool tcg_op_supported(TCGOpcode op, TCGType type, unsigned flags)
|
|||
case INDEX_op_st8_i32:
|
||||
case INDEX_op_st16_i32:
|
||||
case INDEX_op_st_i32:
|
||||
case INDEX_op_neg_i32:
|
||||
case INDEX_op_mul_i32:
|
||||
case INDEX_op_shl_i32:
|
||||
case INDEX_op_shr_i32:
|
||||
|
@ -2309,7 +2315,6 @@ bool tcg_op_supported(TCGOpcode op, TCGType type, unsigned flags)
|
|||
case INDEX_op_st16_i64:
|
||||
case INDEX_op_st32_i64:
|
||||
case INDEX_op_st_i64:
|
||||
case INDEX_op_neg_i64:
|
||||
case INDEX_op_mul_i64:
|
||||
case INDEX_op_shl_i64:
|
||||
case INDEX_op_shr_i64:
|
||||
|
@ -5471,6 +5476,18 @@ static void tcg_reg_alloc_op(TCGContext *s, const TCGOp *op)
|
|||
}
|
||||
break;
|
||||
|
||||
case INDEX_op_neg_i32:
|
||||
case INDEX_op_neg_i64:
|
||||
{
|
||||
const TCGOutOpUnary *out =
|
||||
container_of(all_outop[op->opc], TCGOutOpUnary, base);
|
||||
|
||||
/* Constants should have been folded. */
|
||||
tcg_debug_assert(!const_args[1]);
|
||||
out->out_rr(s, type, new_args[0], new_args[1]);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
if (def->flags & TCG_OPF_VECTOR) {
|
||||
tcg_out_vec_op(s, op->opc, type - TCG_TYPE_V64,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue