diff options
author | Richard Henderson <richard.henderson@linaro.org> | 2019-04-20 00:27:24 +0000 |
---|---|---|
committer | Richard Henderson <richard.henderson@linaro.org> | 2019-05-13 14:26:28 -0700 |
commit | ac383dde33405106469d04a78de1d76f1a730cb1 (patch) | |
tree | cd5fe5a476b8d9a0e67a977acbdc98ebcde4e59d /tcg | |
parent | e1227bb6e59173117f094a6a13b998587b45c928 (diff) | |
download | qemu-ac383dde33405106469d04a78de1d76f1a730cb1.zip qemu-ac383dde33405106469d04a78de1d76f1a730cb1.tar.gz qemu-ac383dde33405106469d04a78de1d76f1a730cb1.tar.bz2 |
tcg: Do not recreate INDEX_op_neg_vec unless supported
Use tcg_can_emit_vec_op instead of just TCG_TARGET_HAS_neg_vec,
so that we check the type and vece for the actual operation.
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'tcg')
-rw-r--r-- | tcg/optimize.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/tcg/optimize.c b/tcg/optimize.c index 5150c38..24faa06 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -734,9 +734,13 @@ void tcg_optimize(TCGContext *s) } else if (opc == INDEX_op_sub_i64) { neg_op = INDEX_op_neg_i64; have_neg = TCG_TARGET_HAS_neg_i64; - } else { + } else if (TCG_TARGET_HAS_neg_vec) { + TCGType type = TCGOP_VECL(op) + TCG_TYPE_V64; + unsigned vece = TCGOP_VECE(op); neg_op = INDEX_op_neg_vec; - have_neg = TCG_TARGET_HAS_neg_vec; + have_neg = tcg_can_emit_vec_op(neg_op, type, vece) > 0; + } else { + break; } if (!have_neg) { break; |