qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 2/2] target-openrisc: Remove unnecessary code generated by jump instructions
@ 2013-10-18 19:32 Sebastian Macke
  0 siblings, 0 replies; only message in thread
From: Sebastian Macke @ 2013-10-18 19:32 UTC (permalink / raw)
  To: qemu-devel, Jia Liu; +Cc: openrisc, openrisc@lists.opencores.org

The sr_f variable is only used for the l.bf and l.bnf instructions.
For clarity the code is also rewritten using a switch statement instead
of if/else chaining.

Signed-off-by: Sebastian Macke <sebastian@macke.de>
---
  target-openrisc/translate.c |   46 
++++++++++++++++++++++++-------------------
  1 file changed, 26 insertions(+), 20 deletions(-)

diff --git a/target-openrisc/translate.c b/target-openrisc/translate.c
index 8276ce7..56e8388 100644
--- a/target-openrisc/translate.c
+++ b/target-openrisc/translate.c
@@ -209,42 +209,48 @@ static void gen_goto_tb(DisasContext *dc, int n, 
target_ulong dest)
  static void gen_jump(DisasContext *dc, uint32_t imm, uint32_t reg, 
uint32_t op0)
  {
      target_ulong tmp_pc;
-    int lab = gen_new_label();
-    TCGv sr_f = tcg_temp_new();
      /* N26, 26bits imm */
      tmp_pc = sign_extend((imm<<2), 26) + dc->pc;
-    tcg_gen_andi_tl(sr_f, cpu_sr, SR_F);
  -    if (op0 == 0x00) {    /* l.j */
+    switch(op0) {
+    case 0x00:     /* l.j */
          tcg_gen_movi_tl(jmp_pc, tmp_pc);
-    } else if (op0 == 0x01) {    /* l.jal */
+	break;
+    case 0x01:     /* l.jal */
          tcg_gen_movi_tl(cpu_R[9], (dc->pc + 8));
          tcg_gen_movi_tl(jmp_pc, tmp_pc);
-    } else if (op0 == 0x03) {    /* l.bnf */
-        tcg_gen_movi_tl(jmp_pc, dc->pc+8);
-        tcg_gen_brcondi_i32(TCG_COND_EQ, sr_f, SR_F, lab);
-        tcg_gen_movi_tl(jmp_pc, tmp_pc);
-        gen_set_label(lab);
-    } else if (op0 == 0x04) {    /* l.bf */
-        tcg_gen_movi_tl(jmp_pc, dc->pc+8);
-        tcg_gen_brcondi_i32(TCG_COND_NE, sr_f, SR_F, lab);
-        tcg_gen_movi_tl(jmp_pc, tmp_pc);
-        gen_set_label(lab);
-    } else if (op0 == 0x11) {    /* l.jr */
+	break;
+    case 0x03:     /* l.bnf */
+    case 0x04:     /* l.bf  */
+        {
+            int lab = gen_new_label();
+            TCGv sr_f = tcg_temp_new();
+            tcg_gen_movi_tl(jmp_pc, dc->pc+8);
+            tcg_gen_andi_tl(sr_f, cpu_sr, SR_F);
+            tcg_gen_brcondi_i32(op0==0x03?TCG_COND_EQ:TCG_COND_NE, 
sr_f, SR_F, lab);
+            tcg_gen_movi_tl(jmp_pc, tmp_pc);
+            gen_set_label(lab);
+            tcg_temp_free(sr_f);
+        }
+	break;
+    case 0x11:     /* l.jr */
          tcg_gen_mov_tl(jmp_pc, cpu_R[reg]);
-    } else if (op0 == 0x12) {    /* l.jalr */
+	break;
+    case 0x12:     /* l.jalr */
          tcg_gen_movi_tl(cpu_R[9], (dc->pc + 8));
          tcg_gen_mov_tl(jmp_pc, cpu_R[reg]);
-    } else {
+	break;
+    default:
          gen_illegal_exception(dc);
+	break;
      }
-
-    tcg_temp_free(sr_f);
+         dc->delayed_branch = 2;
      dc->tb_flags |= D_FLAG;
      gen_sync_flags(dc);
  }
  +
  static void dec_calc(DisasContext *dc, uint32_t insn)
  {
      uint32_t op0, op1, op2;
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2013-10-18 19:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-18 19:32 [Qemu-devel] [PATCH 2/2] target-openrisc: Remove unnecessary code generated by jump instructions Sebastian Macke

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).