target/openrisc: Use exit_tb instead of CPU_INTERRUPT_EXITTB

No need to use the interrupt mechanisms when we can
simply exit the tb directly.

Reviewed-by: Stafford Horne <shorne@gmail.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Stafford Horne <shorne@gmail.com>
This commit is contained in:
Richard Henderson 2018-05-22 15:02:23 -07:00 committed by Stafford Horne
parent c86395c850
commit 64e46c9581
2 changed files with 4 additions and 5 deletions

View File

@ -26,7 +26,6 @@
void HELPER(rfe)(CPUOpenRISCState *env) void HELPER(rfe)(CPUOpenRISCState *env)
{ {
OpenRISCCPU *cpu = openrisc_env_get_cpu(env); OpenRISCCPU *cpu = openrisc_env_get_cpu(env);
CPUState *cs = CPU(cpu);
#ifndef CONFIG_USER_ONLY #ifndef CONFIG_USER_ONLY
int need_flush_tlb = (cpu->env.sr & (SR_SM | SR_IME | SR_DME)) ^ int need_flush_tlb = (cpu->env.sr & (SR_SM | SR_IME | SR_DME)) ^
(cpu->env.esr & (SR_SM | SR_IME | SR_DME)); (cpu->env.esr & (SR_SM | SR_IME | SR_DME));
@ -53,8 +52,8 @@ void HELPER(rfe)(CPUOpenRISCState *env)
} }
if (need_flush_tlb) { if (need_flush_tlb) {
CPUState *cs = CPU(cpu);
tlb_flush(cs); tlb_flush(cs);
} }
#endif #endif
cs->interrupt_request |= CPU_INTERRUPT_EXITTB;
} }

View File

@ -37,6 +37,7 @@
#include "exec/log.h" #include "exec/log.h"
/* is_jmp field values */ /* is_jmp field values */
#define DISAS_EXIT DISAS_TARGET_0 /* force exit to main loop */
#define DISAS_UPDATE DISAS_TARGET_1 /* cpu state was modified dynamically */ #define DISAS_UPDATE DISAS_TARGET_1 /* cpu state was modified dynamically */
typedef struct DisasContext { typedef struct DisasContext {
@ -1133,7 +1134,7 @@ static bool trans_l_rfe(DisasContext *dc, arg_l_rfe *a, uint32_t insn)
gen_illegal_exception(dc); gen_illegal_exception(dc);
} else { } else {
gen_helper_rfe(cpu_env); gen_helper_rfe(cpu_env);
dc->base.is_jmp = DISAS_UPDATE; dc->base.is_jmp = DISAS_EXIT;
} }
#endif #endif
return true; return true;
@ -1353,8 +1354,7 @@ static void openrisc_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs)
case DISAS_NORETURN: case DISAS_NORETURN:
break; break;
case DISAS_UPDATE: case DISAS_UPDATE:
/* indicate that the hash table must be used case DISAS_EXIT:
to find the next TB */
tcg_gen_exit_tb(NULL, 0); tcg_gen_exit_tb(NULL, 0);
break; break;
default: default: