qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v2 01/15] target/m68k: Raise the TRAPn exception with the cor


From: Laurent Vivier
Subject: Re: [PATCH v2 01/15] target/m68k: Raise the TRAPn exception with the correct pc
Date: Fri, 3 Dec 2021 10:04:09 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.3.0

Le 02/12/2021 à 21:48, Richard Henderson a écrit :
Rather than adjust the PC in all of the consumers, raise
the exception with the correct PC in the first place.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
  linux-user/m68k/cpu_loop.c | 1 -
  target/m68k/op_helper.c    | 9 ---------
  target/m68k/translate.c    | 2 +-
  3 files changed, 1 insertion(+), 11 deletions(-)

diff --git a/linux-user/m68k/cpu_loop.c b/linux-user/m68k/cpu_loop.c
index 790bd558c3..287f24cc60 100644
--- a/linux-user/m68k/cpu_loop.c
+++ b/linux-user/m68k/cpu_loop.c
@@ -70,7 +70,6 @@ void cpu_loop(CPUM68KState *env)
              {
                  abi_long ret;
                  n = env->dregs[0];
-                env->pc += 2;
                  ret = do_syscall(env,
                                   n,
                                   env->dregs[1],
diff --git a/target/m68k/op_helper.c b/target/m68k/op_helper.c
index cfbc987ba6..36662de149 100644
--- a/target/m68k/op_helper.c
+++ b/target/m68k/op_helper.c
@@ -216,11 +216,6 @@ static void cf_interrupt_all(CPUM68KState *env, int is_hw)
              cpu_loop_exit(cs);
              return;
          }
-        if (cs->exception_index >= EXCP_TRAP0
-            && cs->exception_index <= EXCP_TRAP15) {
-            /* Move the PC after the trap instruction.  */
-            retaddr += 2;
-        }
      }
vector = cs->exception_index << 2;
@@ -303,10 +298,6 @@ static void m68k_interrupt_all(CPUM68KState *env, int 
is_hw)
              /* Return from an exception.  */
              m68k_rte(env);
              return;
-        case EXCP_TRAP0 ...  EXCP_TRAP15:
-            /* Move the PC after the trap instruction.  */
-            retaddr += 2;
-            break;
          }
      }
diff --git a/target/m68k/translate.c b/target/m68k/translate.c
index af43c8eab8..af3febdd48 100644
--- a/target/m68k/translate.c
+++ b/target/m68k/translate.c
@@ -4860,7 +4860,7 @@ DISAS_INSN(wdebug)
DISAS_INSN(trap)
  {
-    gen_exception(s, s->base.pc_next, EXCP_TRAP0 + (insn & 0xf));
+    gen_exception(s, s->pc, EXCP_TRAP0 + (insn & 0xf));
  }
static void gen_load_fcr(DisasContext *s, TCGv res, int reg)


Reviewed-by: Laurent Vivier <laurent@vivier.eu>



reply via email to

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