qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 09/12] target-arm: optimize thumb push/pop ops


From: Juha.Riihimaki
Subject: [Qemu-devel] [PATCH 09/12] target-arm: optimize thumb push/pop ops
Date: Wed, 21 Oct 2009 12:18:05 +0200

Thumb push/pop instructions can be slightly optimized by loading the  
register offset constant into a variable outside the register loop and  
using the preloaded variable inside the loop instead of reloading the  
offset value to a temporary variable on each loop iteration. This  
causes less TCG ops to be generated for a Thumb push/pop instruction.

Signed-off-by: Juha Riihimäki <address@hidden>
---
diff --git a/target-arm/translate.c b/target-arm/translate.c
index abb3105..99a9ffd 100644
--- a/target-arm/translate.c
+++ b/target-arm/translate.c
@@ -8589,6 +8589,7 @@ static void disas_thumb_insn(CPUState *env,  
DisasContext *s)
              if ((insn & (1 << 11)) == 0) {
                  tcg_gen_addi_i32(addr, addr, -offset);
              }
+            tmp2 = tcg_const_i32(4);
              for (i = 0; i < 8; i++) {
                  if (insn & (1 << i)) {
                      if (insn & (1 << 11)) {
@@ -8601,7 +8602,7 @@ static void disas_thumb_insn(CPUState *env,  
DisasContext *s)
                          gen_st32(tmp, addr, IS_USER(s));
                      }
                      /* advance to the next address.  */
-                    tcg_gen_addi_i32(addr, addr, 4);
+                    tcg_gen_add_i32(addr, addr, tmp2);
                  }
              }
              TCGV_UNUSED(tmp);
@@ -8616,8 +8617,9 @@ static void disas_thumb_insn(CPUState *env,  
DisasContext *s)
                      tmp = load_reg(s, 14);
                      gen_st32(tmp, addr, IS_USER(s));
                  }
-                tcg_gen_addi_i32(addr, addr, 4);
+                tcg_gen_add_i32(addr, addr, tmp2);
              }
+            tcg_temp_free_i32(tmp2);
              if ((insn & (1 << 11)) == 0) {
                  tcg_gen_addi_i32(addr, addr, -offset);
              }

Attachment: translate.c.tpushpop.diff
Description: translate.c.tpushpop.diff


reply via email to

[Prev in Thread] Current Thread [Next in Thread]