All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Henderson <rth@twiddle.net>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 06/25] target-openrisc: Put SR[OVE] in TB flags
Date: Mon, 13 Jun 2016 16:58:06 -0700	[thread overview]
Message-ID: <1465862305-14090-7-git-send-email-rth@twiddle.net> (raw)
In-Reply-To: <1465862305-14090-1-git-send-email-rth@twiddle.net>

Removes a call at execution time for overflow exceptions.

Signed-off-by: Richard Henderson <rth@twiddle.net>
---
 target-openrisc/cpu.h              |  4 ++--
 target-openrisc/exception_helper.c |  2 +-
 target-openrisc/translate.c        | 24 +++++++++++++++---------
 3 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/target-openrisc/cpu.h b/target-openrisc/cpu.h
index 1ea7607..af63f58 100644
--- a/target-openrisc/cpu.h
+++ b/target-openrisc/cpu.h
@@ -396,8 +396,8 @@ static inline void cpu_get_tb_cpu_state(CPUOpenRISCState *env,
 {
     *pc = env->pc;
     *cs_base = 0;
-    /* D_FLAG -- branch instruction exception */
-    *flags = (env->flags & D_FLAG);
+    /* D_FLAG -- branch instruction exception, OVE overflow trap enable.  */
+    *flags = (env->flags & D_FLAG) | (env->sr & SR_OVE);
 }
 
 static inline int cpu_mmu_index(CPUOpenRISCState *env, bool ifetch)
diff --git a/target-openrisc/exception_helper.c b/target-openrisc/exception_helper.c
index 561384a..6ae795f 100644
--- a/target-openrisc/exception_helper.c
+++ b/target-openrisc/exception_helper.c
@@ -31,7 +31,7 @@ void HELPER(exception)(CPUOpenRISCState *env, uint32_t excp)
 
 void HELPER(ove)(CPUOpenRISCState *env, target_ulong test)
 {
-    if (unlikely(test) && (env->sr & SR_OVE)) {
+    if (unlikely(test)) {
         OpenRISCCPU *cpu = openrisc_env_get_cpu(env);
         CPUState *cs = CPU(cpu);
 
diff --git a/target-openrisc/translate.c b/target-openrisc/translate.c
index 48bd5f7..1cb726a 100644
--- a/target-openrisc/translate.c
+++ b/target-openrisc/translate.c
@@ -130,8 +130,8 @@ static inline int sign_extend(unsigned int val, int width)
 static inline void gen_sync_flags(DisasContext *dc)
 {
     /* Sync the tb dependent flag between translate and runtime.  */
-    if (dc->tb_flags != dc->synced_flags) {
-        tcg_gen_movi_tl(env_flags, dc->tb_flags);
+    if ((dc->tb_flags ^ dc->synced_flags) & D_FLAG) {
+        tcg_gen_movi_tl(env_flags, dc->tb_flags & D_FLAG);
         dc->synced_flags = dc->tb_flags;
     }
 }
@@ -250,20 +250,26 @@ static void gen_jump(DisasContext *dc, uint32_t imm, uint32_t reg, uint32_t op0)
 
 static void gen_ove_cy(DisasContext *dc, TCGv cy)
 {
-    gen_helper_ove(cpu_env, cy);
+    if (dc->tb_flags & SR_OVE) {
+        gen_helper_ove(cpu_env, cy);
+    }
 }
 
 static void gen_ove_ov(DisasContext *dc, TCGv ov)
 {
-    gen_helper_ove(cpu_env, ov);
+    if (dc->tb_flags & SR_OVE) {
+        gen_helper_ove(cpu_env, ov);
+    }
 }
 
 static void gen_ove_cyov(DisasContext *dc, TCGv cy, TCGv ov)
 {
-    TCGv t0 = tcg_temp_new();
-    tcg_gen_or_tl(t0, cy, ov);
-    gen_helper_ove(cpu_env, t0);
-    tcg_temp_free(t0);
+    if (dc->tb_flags & SR_OVE) {
+        TCGv t0 = tcg_temp_new();
+        tcg_gen_or_tl(t0, cy, ov);
+        gen_helper_ove(cpu_env, t0);
+        tcg_temp_free(t0);
+    }
 }
 
 static void gen_add(DisasContext *dc, TCGv dest, TCGv srca, TCGv srcb)
@@ -1430,7 +1436,7 @@ void gen_intermediate_code(CPUOpenRISCState *env, struct TranslationBlock *tb)
     dc->flags = cpu->env.cpucfgr;
     dc->mem_idx = cpu_mmu_index(&cpu->env, false);
     dc->synced_flags = dc->tb_flags = tb->flags;
-    dc->delayed_branch = !!(dc->tb_flags & D_FLAG);
+    dc->delayed_branch = (dc->tb_flags & D_FLAG) != 0;
     dc->singlestep_enabled = cs->singlestep_enabled;
     if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM)) {
         qemu_log("-----------------------------------------\n");
-- 
2.5.5

  parent reply	other threads:[~2016-06-13 23:59 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-13 23:58 [Qemu-devel] [PATCH 00/25] target-openrisc improvements Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 01/25] target-openrisc: Always enable OPENRISC_DISAS Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 02/25] target-openrisc: Streamline arithmetic and OVE Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 03/25] target-openrisc: Invert the decoding in dec_calc Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 04/25] target-openrisc: Keep SR_F in a separate variable Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 05/25] target-openrisc: Use movcond where appropriate Richard Henderson
2016-06-13 23:58 ` Richard Henderson [this message]
2016-06-13 23:58 ` [Qemu-devel] [PATCH 07/25] target-openrisc: Keep SR_CY and SR_OV in a separate variables Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 08/25] target-openrisc: Set flags on helpers Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 09/25] target-openrisc: Implement ff1 and fl1 for 64-bit Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 10/25] target-openrisc: Represent MACHI:MACLO as a single unit Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 11/25] target-openrisc: Rationalize immediate extraction Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 12/25] target-openrisc: Enable m[tf]spr from user mode Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 13/25] target-openrisc: Enable trap, csync, msync, psync for " Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 14/25] target-openrisc: Implement muld, muldu, macu, msbu Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 15/25] target-openrisc: Fix madd Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 16/25] target-openrisc: Write back result before FPE exception Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 17/25] target-openrisc: Implement lwa, swa Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 18/25] target-openrisc: Implement l.adrp Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 19/25] target-openrisc: Tidy ppc/npc implementation Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 20/25] target-openrisc: Optimize l.jal to next Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 21/25] target-openrisc: Tidy insn dumping Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 22/25] target-openrisc: Tidy handling of delayed branches Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 23/25] target-openrisc: Optimize for r0 being zero Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 24/25] target-openrisc: Generate goto_tb for direct branches Richard Henderson
2016-06-13 23:58 ` [Qemu-devel] [PATCH 25/25] target-openrisc: Generate goto_tb for conditional branches Richard Henderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1465862305-14090-7-git-send-email-rth@twiddle.net \
    --to=rth@twiddle.net \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.