diff mbox

[38/57] target-i386: Update cc_op before TCG branches

Message ID 1359000221-19834-39-git-send-email-rth@twiddle.net
State New
Headers show

Commit Message

Richard Henderson Jan. 24, 2013, 4:03 a.m. UTC
Placing the CC_OP_DYNAMIC at the join is less effective than
before the branch, as the branch will have forced global registers
to their home locations.  This way we have a chance to discard
CC_SRC2 before it gets stored.

Signed-off-by: Richard Henderson <rth@twiddle.net>
---
 target-i386/translate.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
diff mbox

Patch

diff --git a/target-i386/translate.c b/target-i386/translate.c
index 9f031a8..b3ba93e 100644
--- a/target-i386/translate.c
+++ b/target-i386/translate.c
@@ -1552,8 +1552,9 @@  static void gen_shift_rm_T1(DisasContext *s, int ot, int op1,
         gen_op_mov_reg_T0(ot, op1);
     }
 
-    /* update eflags */
+    /* Update eflags data because we cannot predict flags afterward.  */
     gen_update_cc_op(s);
+    set_cc_op(s, CC_OP_DYNAMIC);
 
     tcg_gen_mov_tl(t1, cpu_T[0]);
 
@@ -1580,7 +1581,6 @@  static void gen_shift_rm_T1(DisasContext *s, int ot, int op1,
     }
 
     gen_set_label(shift_label);
-    set_cc_op(s, CC_OP_DYNAMIC); /* cannot predict flags after */
 
     tcg_temp_free(t0);
     tcg_temp_free(t1);
@@ -1965,8 +1965,9 @@  static void gen_shiftd_rm_T1(DisasContext *s, int ot, int op1,
         gen_op_mov_reg_v(ot, op1, t0);
     }
     
-    /* update eflags */
+    /* Update eflags data because we cannot predict flags afterward.  */
     gen_update_cc_op(s);
+    set_cc_op(s, CC_OP_DYNAMIC);
 
     label2 = gen_new_label();
     tcg_gen_brcondi_tl(TCG_COND_EQ, t2, 0, label2);
@@ -1979,7 +1980,6 @@  static void gen_shiftd_rm_T1(DisasContext *s, int ot, int op1,
         tcg_gen_movi_i32(cpu_cc_op, CC_OP_SHLB + ot);
     }
     gen_set_label(label2);
-    set_cc_op(s, CC_OP_DYNAMIC); /* cannot predict flags after */
 
     tcg_temp_free(t0);
     tcg_temp_free(t1);