qemu-devel
[Top][All Lists]
Advanced

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

[PATCH 43/43] target/nios2: Do semihosting call as a normal helper


From: Richard Henderson
Subject: [PATCH 43/43] target/nios2: Do semihosting call as a normal helper
Date: Sat, 30 Apr 2022 06:29:32 -0700

There's no need to raise an exception; just call
the helper function directly.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/nios2/cpu.h        | 3 ---
 target/nios2/helper.h     | 1 +
 target/nios2/helper.c     | 7 -------
 target/nios2/nios2-semi.c | 3 ++-
 target/nios2/translate.c  | 2 +-
 5 files changed, 4 insertions(+), 12 deletions(-)

diff --git a/target/nios2/cpu.h b/target/nios2/cpu.h
index f85581ee56..75a111a25e 100644
--- a/target/nios2/cpu.h
+++ b/target/nios2/cpu.h
@@ -164,7 +164,6 @@ FIELD(CR_TLBMISC, EE, 24, 1)
 
 /* Exceptions */
 #define EXCP_BREAK    0x1000
-#define EXCP_SEMIHOST 0x1001
 #define EXCP_RESET    0
 #define EXCP_PRESET   1
 #define EXCP_IRQ      2
@@ -269,8 +268,6 @@ G_NORETURN void nios2_cpu_do_unaligned_access(CPUState 
*cpu, vaddr addr,
 G_NORETURN void nios2_cpu_loop_exit_advance(CPUNios2State *env,
                                             uintptr_t retaddr);
 
-void do_nios2_semihosting(CPUNios2State *env);
-
 #define CPU_RESOLVING_TYPE TYPE_NIOS2_CPU
 
 #define cpu_gen_code cpu_nios2_gen_code
diff --git a/target/nios2/helper.h b/target/nios2/helper.h
index 1648d76ade..51ec2b35a0 100644
--- a/target/nios2/helper.h
+++ b/target/nios2/helper.h
@@ -29,4 +29,5 @@ DEF_HELPER_3(wrprs, void, env, i32, i32)
 DEF_HELPER_2(mmu_write_tlbacc, void, env, i32)
 DEF_HELPER_2(mmu_write_tlbmisc, void, env, i32)
 DEF_HELPER_2(mmu_write_pteaddr, void, env, i32)
+DEF_HELPER_1(semihosting, void, env)
 #endif
diff --git a/target/nios2/helper.c b/target/nios2/helper.c
index bb3b09e5a7..491cbd486f 100644
--- a/target/nios2/helper.c
+++ b/target/nios2/helper.c
@@ -173,9 +173,6 @@ void nios2_cpu_do_interrupt(CPUState *cs)
         case EXCP_BREAK:
             name = "BREAK insn";
             break;
-        case EXCP_SEMIHOST:
-            name = "SEMIHOST insn";
-            break;
         }
         if (name) {
             qemu_log("%s at pc=0x%08x\n", name, env->pc);
@@ -250,10 +247,6 @@ void nios2_cpu_do_interrupt(CPUState *cs)
         do_exception(cpu, cpu->exception_addr, 0, true);
         break;
 
-    case EXCP_SEMIHOST:
-        do_nios2_semihosting(env);
-        break;
-
     default:
         cpu_abort(cs, "unhandled exception type=%d\n", cs->exception_index);
     }
diff --git a/target/nios2/nios2-semi.c b/target/nios2/nios2-semi.c
index 3dad72d1f6..9648030d37 100644
--- a/target/nios2/nios2-semi.c
+++ b/target/nios2/nios2-semi.c
@@ -32,6 +32,7 @@
 #include "semihosting/softmmu-uaccess.h"
 #endif
 #include "qemu/log.h"
+#include "exec/helper-proto.h"
 
 #define HOSTED_EXIT  0
 #define HOSTED_INIT_SIM 1
@@ -91,7 +92,7 @@ static void nios2_semi_u64_cb(CPUState *cs, uint64_t ret, int 
err)
     }                                                   \
 } while (0)
 
-void do_nios2_semihosting(CPUNios2State *env)
+void HELPER(semihosting)(CPUNios2State *env)
 {
     CPUState *cs = env_cpu(env);
     int nr;
diff --git a/target/nios2/translate.c b/target/nios2/translate.c
index 3a037a68cc..f245fd7d0a 100644
--- a/target/nios2/translate.c
+++ b/target/nios2/translate.c
@@ -819,7 +819,7 @@ static void gen_break(DisasContext *dc, uint32_t code, 
uint32_t flags)
     /* The semihosting instruction is "break 1".  */
     R_TYPE(instr, code);
     if (semihosting_enabled() && instr.imm5 == 1) {
-        t_gen_helper_raise_exception(dc, EXCP_SEMIHOST);
+        gen_helper_semihosting(cpu_env);
         return;
     }
 #endif
-- 
2.34.1




reply via email to

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