[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 6/8] tcg/optimize: Simply some logical ops to NOT
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH 6/8] tcg/optimize: Simply some logical ops to NOT |
Date: |
Fri, 31 Jan 2014 08:47:01 -0600 |
Given, of course, an appropriate constant. These could be generated
from the "canonical" operation for inversion on the guest, or via
other optimizations.
Signed-off-by: Richard Henderson <address@hidden>
---
tcg/optimize.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 57 insertions(+)
diff --git a/tcg/optimize.c b/tcg/optimize.c
index 3291a08..cdfc746 100644
--- a/tcg/optimize.c
+++ b/tcg/optimize.c
@@ -655,6 +655,63 @@ static TCGArg *tcg_constant_folding(TCGContext *s,
uint16_t *tcg_opc_ptr,
}
}
break;
+ CASE_OP_32_64(xor):
+ CASE_OP_32_64(nand):
+ if (temps[args[1]].state != TCG_TEMP_CONST
+ && temps[args[2]].state == TCG_TEMP_CONST
+ && temps[args[2]].val == -1) {
+ i = 1;
+ goto try_not;
+ }
+ break;
+ CASE_OP_32_64(nor):
+ if (temps[args[1]].state != TCG_TEMP_CONST
+ && temps[args[2]].state == TCG_TEMP_CONST
+ && temps[args[2]].val == 0) {
+ i = 1;
+ goto try_not;
+ }
+ break;
+ CASE_OP_32_64(andc):
+ if (temps[args[2]].state != TCG_TEMP_CONST
+ && temps[args[1]].state == TCG_TEMP_CONST
+ && temps[args[1]].val == -1) {
+ i = 2;
+ goto try_not;
+ }
+ break;
+ CASE_OP_32_64(orc):
+ CASE_OP_32_64(eqv):
+ if (temps[args[2]].state != TCG_TEMP_CONST
+ && temps[args[1]].state == TCG_TEMP_CONST
+ && temps[args[1]].val == 0) {
+ i = 2;
+ goto try_not;
+ }
+ break;
+ try_not:
+ {
+ TCGOpcode not_op;
+ bool have_not;
+
+ if (def->flags & TCG_OPF_64BIT) {
+ not_op = INDEX_op_not_i64;
+ have_not = TCG_TARGET_HAS_not_i64;
+ } else {
+ not_op = INDEX_op_not_i32;
+ have_not = TCG_TARGET_HAS_not_i32;
+ }
+ if (!have_not) {
+ break;
+ }
+ s->gen_opc_buf[op_index] = not_op;
+ reset_temp(args[0]);
+ gen_args[0] = args[0];
+ gen_args[1] = args[i];
+ args += 3;
+ gen_args += 2;
+ continue;
+ }
default:
break;
}
--
1.8.5.3
- [Qemu-devel] [PATCH 0/8] tcg optimization improvements, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 1/8] tcg/optimize: fix known-zero bits for right shift ops, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 2/8] tcg/optimize: fix known-zero bits optimization, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 3/8] tcg/optimize: improve known-zero bits for 32-bit ops, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 4/8] tcg/optimize: add known-zero bits compute for load ops, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 5/8] tcg/optimize: Handle known-zeros masks for ANDC, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 6/8] tcg/optimize: Simply some logical ops to NOT,
Richard Henderson <=
- [Qemu-devel] [PATCH 7/8] tcg/optimize: Optmize ANDC X, Y, Y to MOV X, 0, Richard Henderson, 2014/01/31
- [Qemu-devel] [PATCH 8/8] tcg/optimize: Add more identity simplifications, Richard Henderson, 2014/01/31