[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 142/147] target-s390: Optmize emitting discards
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH 142/147] target-s390: Optmize emitting discards |
Date: |
Thu, 27 Sep 2012 18:19:26 -0700 |
While they aren't expensive, they aren't free to process. When we
know that the three cc helper variables are dead, don't kill them.
Signed-off-by: Richard Henderson <address@hidden>
---
target-s390x/translate.c | 30 ++++++++++++++++++++++++------
1 file changed, 24 insertions(+), 6 deletions(-)
diff --git a/target-s390x/translate.c b/target-s390x/translate.c
index 5b88efb..a68e4a3 100644
--- a/target-s390x/translate.c
+++ b/target-s390x/translate.c
@@ -367,25 +367,41 @@ static TCGv_i64 get_address(DisasContext *s, int x2, int
b2, int d2)
return tmp;
}
+static inline bool live_cc_data(DisasContext *s)
+{
+ return (s->cc_op != CC_OP_DYNAMIC
+ && s->cc_op != CC_OP_STATIC
+ && s->cc_op > 3);
+}
+
static inline void gen_op_movi_cc(DisasContext *s, uint32_t val)
{
+ if (live_cc_data(s)) {
+ tcg_gen_discard_i64(cc_src);
+ tcg_gen_discard_i64(cc_dst);
+ tcg_gen_discard_i64(cc_vr);
+ }
s->cc_op = CC_OP_CONST0 + val;
}
static void gen_op_update1_cc_i64(DisasContext *s, enum cc_op op, TCGv_i64 dst)
{
- tcg_gen_discard_i64(cc_src);
+ if (live_cc_data(s)) {
+ tcg_gen_discard_i64(cc_src);
+ tcg_gen_discard_i64(cc_vr);
+ }
tcg_gen_mov_i64(cc_dst, dst);
- tcg_gen_discard_i64(cc_vr);
s->cc_op = op;
}
static void gen_op_update2_cc_i64(DisasContext *s, enum cc_op op, TCGv_i64 src,
TCGv_i64 dst)
{
+ if (live_cc_data(s)) {
+ tcg_gen_discard_i64(cc_vr);
+ }
tcg_gen_mov_i64(cc_src, src);
tcg_gen_mov_i64(cc_dst, dst);
- tcg_gen_discard_i64(cc_vr);
s->cc_op = op;
}
@@ -421,9 +437,11 @@ static void gen_set_cc_nz_f128(DisasContext *s, TCGv_i64
vh, TCGv_i64 vl)
/* CC value is in env->cc_op */
static void set_cc_static(DisasContext *s)
{
- tcg_gen_discard_i64(cc_src);
- tcg_gen_discard_i64(cc_dst);
- tcg_gen_discard_i64(cc_vr);
+ if (live_cc_data(s)) {
+ tcg_gen_discard_i64(cc_src);
+ tcg_gen_discard_i64(cc_dst);
+ tcg_gen_discard_i64(cc_vr);
+ }
s->cc_op = CC_OP_STATIC;
}
--
1.7.11.4
- [Qemu-devel] [PATCH 132/147] target-s390: Implement CPSDR, (continued)
- [Qemu-devel] [PATCH 132/147] target-s390: Implement CPSDR, Richard Henderson, 2012/09/27
- [Qemu-devel] [PATCH 133/147] target-s390: Check insn operand specifications, Richard Henderson, 2012/09/27
- [Qemu-devel] [PATCH 134/147] target-s390: Implement LCDFR, Richard Henderson, 2012/09/27
- [Qemu-devel] [PATCH 135/147] softfloat: Fix uint64_to_float64, Richard Henderson, 2012/09/27
- [Qemu-devel] [PATCH 136/147] softfloat: Implement uint64_to_float128, Richard Henderson, 2012/09/27
- [Qemu-devel] [PATCH 137/147] target-s390: Use uint64_to_float128, Richard Henderson, 2012/09/27
- [Qemu-devel] [PATCH 138/147] target-s390: Implement SET ROUNDING MODE, Richard Henderson, 2012/09/27
- [Qemu-devel] [PATCH 139/147] target-s390: Implement LOAD/SET FP AND SIGNAL, Richard Henderson, 2012/09/27
- [Qemu-devel] [PATCH 140/147] target-s390: Fix cpu_clone_regs, Richard Henderson, 2012/09/27
- [Qemu-devel] [PATCH 141/147] target-s390: Optimize XC, Richard Henderson, 2012/09/27
- [Qemu-devel] [PATCH 142/147] target-s390: Optmize emitting discards,
Richard Henderson <=
- [Qemu-devel] [PATCH 143/147] target-s390: Tidy comparisons, Richard Henderson, 2012/09/27
- [Qemu-devel] [PATCH 144/147] target-s390: Optimize ADDU/SUBU CC testing, Richard Henderson, 2012/09/27
- [Qemu-devel] [PATCH 145/147] target-s390: Optimize ADDC/SUBB, Richard Henderson, 2012/09/27
- [Qemu-devel] [PATCH 146/147] target-s390: Optimize get_address, Richard Henderson, 2012/09/27
- [Qemu-devel] [PATCH 147/147] target-s390: Perform COMPARE AND SWAP inline, Richard Henderson, 2012/09/27