mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-10 02:54:58 -06:00
accel/tcg: Move cpu_get_tb_cpu_state to TCGCPUOps
Move the global function name to a hook on TCGCPUOps. Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
4759aae432
commit
c37f8978d9
27 changed files with 56 additions and 26 deletions
|
@ -395,7 +395,7 @@ const void *HELPER(lookup_tb_ptr)(CPUArchState *env)
|
||||||
*/
|
*/
|
||||||
cpu->neg.can_do_io = true;
|
cpu->neg.can_do_io = true;
|
||||||
|
|
||||||
TCGTBCPUState s = cpu_get_tb_cpu_state(cpu);
|
TCGTBCPUState s = cpu->cc->tcg_ops->get_tb_cpu_state(cpu);
|
||||||
s.cflags = curr_cflags(cpu);
|
s.cflags = curr_cflags(cpu);
|
||||||
|
|
||||||
if (check_for_breakpoints(cpu, s.pc, &s.cflags)) {
|
if (check_for_breakpoints(cpu, s.pc, &s.cflags)) {
|
||||||
|
@ -567,7 +567,7 @@ void cpu_exec_step_atomic(CPUState *cpu)
|
||||||
g_assert(!cpu->running);
|
g_assert(!cpu->running);
|
||||||
cpu->running = true;
|
cpu->running = true;
|
||||||
|
|
||||||
TCGTBCPUState s = cpu_get_tb_cpu_state(cpu);
|
TCGTBCPUState s = cpu->cc->tcg_ops->get_tb_cpu_state(cpu);
|
||||||
s.cflags = curr_cflags(cpu);
|
s.cflags = curr_cflags(cpu);
|
||||||
|
|
||||||
/* Execute in a serial context. */
|
/* Execute in a serial context. */
|
||||||
|
@ -935,7 +935,7 @@ cpu_exec_loop(CPUState *cpu, SyncClocks *sc)
|
||||||
|
|
||||||
while (!cpu_handle_interrupt(cpu, &last_tb)) {
|
while (!cpu_handle_interrupt(cpu, &last_tb)) {
|
||||||
TranslationBlock *tb;
|
TranslationBlock *tb;
|
||||||
TCGTBCPUState s = cpu_get_tb_cpu_state(cpu);
|
TCGTBCPUState s = cpu->cc->tcg_ops->get_tb_cpu_state(cpu);
|
||||||
s.cflags = cpu->cflags_next_tb;
|
s.cflags = cpu->cflags_next_tb;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1052,6 +1052,7 @@ bool tcg_exec_realizefn(CPUState *cpu, Error **errp)
|
||||||
assert(tcg_ops->cpu_exec_reset);
|
assert(tcg_ops->cpu_exec_reset);
|
||||||
#endif /* !CONFIG_USER_ONLY */
|
#endif /* !CONFIG_USER_ONLY */
|
||||||
assert(tcg_ops->translate_code);
|
assert(tcg_ops->translate_code);
|
||||||
|
assert(tcg_ops->get_tb_cpu_state);
|
||||||
assert(tcg_ops->mmu_index);
|
assert(tcg_ops->mmu_index);
|
||||||
tcg_ops->initialize();
|
tcg_ops->initialize();
|
||||||
tcg_target_initialized = true;
|
tcg_target_initialized = true;
|
||||||
|
|
|
@ -590,7 +590,7 @@ void tb_check_watchpoint(CPUState *cpu, uintptr_t retaddr)
|
||||||
/* The exception probably happened in a helper. The CPU state should
|
/* The exception probably happened in a helper. The CPU state should
|
||||||
have been saved before calling it. Fetch the PC from there. */
|
have been saved before calling it. Fetch the PC from there. */
|
||||||
CPUArchState *env = cpu_env(cpu);
|
CPUArchState *env = cpu_env(cpu);
|
||||||
TCGTBCPUState s = cpu_get_tb_cpu_state(cpu);
|
TCGTBCPUState s = cpu->cc->tcg_ops->get_tb_cpu_state(cpu);
|
||||||
tb_page_addr_t addr = get_page_addr_code(env, s.pc);
|
tb_page_addr_t addr = get_page_addr_code(env, s.pc);
|
||||||
|
|
||||||
if (addr != -1) {
|
if (addr != -1) {
|
||||||
|
|
|
@ -19,8 +19,6 @@
|
||||||
#include "accel/tcg/tb-cpu-state.h"
|
#include "accel/tcg/tb-cpu-state.h"
|
||||||
#include "tcg/tcg-mo.h"
|
#include "tcg/tcg-mo.h"
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs);
|
|
||||||
|
|
||||||
struct TCGCPUOps {
|
struct TCGCPUOps {
|
||||||
/**
|
/**
|
||||||
* mttcg_supported: multi-threaded TCG is supported
|
* mttcg_supported: multi-threaded TCG is supported
|
||||||
|
@ -63,6 +61,12 @@ struct TCGCPUOps {
|
||||||
*/
|
*/
|
||||||
void (*translate_code)(CPUState *cpu, TranslationBlock *tb,
|
void (*translate_code)(CPUState *cpu, TranslationBlock *tb,
|
||||||
int *max_insns, vaddr pc, void *host_pc);
|
int *max_insns, vaddr pc, void *host_pc);
|
||||||
|
/**
|
||||||
|
* @get_tb_cpu_state: Extract CPU state for a TCG #TranslationBlock
|
||||||
|
*
|
||||||
|
* Fill in all data required to select or compile a TranslationBlock.
|
||||||
|
*/
|
||||||
|
TCGTBCPUState (*get_tb_cpu_state)(CPUState *cs);
|
||||||
/**
|
/**
|
||||||
* @synchronize_from_tb: Synchronize state from a TCG #TranslationBlock
|
* @synchronize_from_tb: Synchronize state from a TCG #TranslationBlock
|
||||||
*
|
*
|
||||||
|
|
|
@ -41,7 +41,7 @@ static vaddr alpha_cpu_get_pc(CPUState *cs)
|
||||||
return env->pc;
|
return env->pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState alpha_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUAlphaState *env = cpu_env(cs);
|
CPUAlphaState *env = cpu_env(cs);
|
||||||
uint32_t flags = env->flags & ENV_FLAG_TB_MASK;
|
uint32_t flags = env->flags & ENV_FLAG_TB_MASK;
|
||||||
|
@ -251,6 +251,7 @@ static const TCGCPUOps alpha_tcg_ops = {
|
||||||
|
|
||||||
.initialize = alpha_translate_init,
|
.initialize = alpha_translate_init,
|
||||||
.translate_code = alpha_translate_code,
|
.translate_code = alpha_translate_code,
|
||||||
|
.get_tb_cpu_state = alpha_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = alpha_cpu_synchronize_from_tb,
|
.synchronize_from_tb = alpha_cpu_synchronize_from_tb,
|
||||||
.restore_state_to_opc = alpha_restore_state_to_opc,
|
.restore_state_to_opc = alpha_restore_state_to_opc,
|
||||||
.mmu_index = alpha_cpu_mmu_index,
|
.mmu_index = alpha_cpu_mmu_index,
|
||||||
|
|
|
@ -2693,6 +2693,7 @@ static const TCGCPUOps arm_tcg_ops = {
|
||||||
|
|
||||||
.initialize = arm_translate_init,
|
.initialize = arm_translate_init,
|
||||||
.translate_code = arm_translate_code,
|
.translate_code = arm_translate_code,
|
||||||
|
.get_tb_cpu_state = arm_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = arm_cpu_synchronize_from_tb,
|
.synchronize_from_tb = arm_cpu_synchronize_from_tb,
|
||||||
.debug_excp_handler = arm_debug_excp_handler,
|
.debug_excp_handler = arm_debug_excp_handler,
|
||||||
.restore_state_to_opc = arm_restore_state_to_opc,
|
.restore_state_to_opc = arm_restore_state_to_opc,
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "exec/hwaddr.h"
|
#include "exec/hwaddr.h"
|
||||||
#include "exec/vaddr.h"
|
#include "exec/vaddr.h"
|
||||||
#include "exec/breakpoint.h"
|
#include "exec/breakpoint.h"
|
||||||
|
#include "accel/tcg/tb-cpu-state.h"
|
||||||
#include "hw/registerfields.h"
|
#include "hw/registerfields.h"
|
||||||
#include "tcg/tcg-gvec-desc.h"
|
#include "tcg/tcg-gvec-desc.h"
|
||||||
#include "system/memory.h"
|
#include "system/memory.h"
|
||||||
|
@ -372,6 +373,7 @@ void arm_restore_state_to_opc(CPUState *cs,
|
||||||
const uint64_t *data);
|
const uint64_t *data);
|
||||||
|
|
||||||
#ifdef CONFIG_TCG
|
#ifdef CONFIG_TCG
|
||||||
|
TCGTBCPUState arm_get_tb_cpu_state(CPUState *cs);
|
||||||
void arm_cpu_synchronize_from_tb(CPUState *cs, const TranslationBlock *tb);
|
void arm_cpu_synchronize_from_tb(CPUState *cs, const TranslationBlock *tb);
|
||||||
|
|
||||||
/* Our implementation of TCGCPUOps::cpu_exec_halt */
|
/* Our implementation of TCGCPUOps::cpu_exec_halt */
|
||||||
|
|
|
@ -238,6 +238,7 @@ static const TCGCPUOps arm_v7m_tcg_ops = {
|
||||||
|
|
||||||
.initialize = arm_translate_init,
|
.initialize = arm_translate_init,
|
||||||
.translate_code = arm_translate_code,
|
.translate_code = arm_translate_code,
|
||||||
|
.get_tb_cpu_state = arm_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = arm_cpu_synchronize_from_tb,
|
.synchronize_from_tb = arm_cpu_synchronize_from_tb,
|
||||||
.debug_excp_handler = arm_debug_excp_handler,
|
.debug_excp_handler = arm_debug_excp_handler,
|
||||||
.restore_state_to_opc = arm_restore_state_to_opc,
|
.restore_state_to_opc = arm_restore_state_to_opc,
|
||||||
|
|
|
@ -545,7 +545,7 @@ static bool mve_no_pred(CPUARMState *env)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
TCGTBCPUState arm_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUARMState *env = cpu_env(cs);
|
CPUARMState *env = cpu_env(cs);
|
||||||
CPUARMTBFlags flags;
|
CPUARMTBFlags flags;
|
||||||
|
|
|
@ -54,7 +54,7 @@ static int avr_cpu_mmu_index(CPUState *cs, bool ifetch)
|
||||||
return ifetch ? MMU_CODE_IDX : MMU_DATA_IDX;
|
return ifetch ? MMU_CODE_IDX : MMU_DATA_IDX;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState avr_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUAVRState *env = cpu_env(cs);
|
CPUAVRState *env = cpu_env(cs);
|
||||||
uint32_t flags = 0;
|
uint32_t flags = 0;
|
||||||
|
@ -241,6 +241,7 @@ static const TCGCPUOps avr_tcg_ops = {
|
||||||
.mttcg_supported = false,
|
.mttcg_supported = false,
|
||||||
.initialize = avr_cpu_tcg_init,
|
.initialize = avr_cpu_tcg_init,
|
||||||
.translate_code = avr_cpu_translate_code,
|
.translate_code = avr_cpu_translate_code,
|
||||||
|
.get_tb_cpu_state = avr_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = avr_cpu_synchronize_from_tb,
|
.synchronize_from_tb = avr_cpu_synchronize_from_tb,
|
||||||
.restore_state_to_opc = avr_restore_state_to_opc,
|
.restore_state_to_opc = avr_restore_state_to_opc,
|
||||||
.mmu_index = avr_cpu_mmu_index,
|
.mmu_index = avr_cpu_mmu_index,
|
||||||
|
|
|
@ -255,7 +255,7 @@ static vaddr hexagon_cpu_get_pc(CPUState *cs)
|
||||||
return cpu_env(cs)->gpr[HEX_REG_PC];
|
return cpu_env(cs)->gpr[HEX_REG_PC];
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState hexagon_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUHexagonState *env = cpu_env(cs);
|
CPUHexagonState *env = cpu_env(cs);
|
||||||
vaddr pc = env->gpr[HEX_REG_PC];
|
vaddr pc = env->gpr[HEX_REG_PC];
|
||||||
|
@ -344,6 +344,7 @@ static const TCGCPUOps hexagon_tcg_ops = {
|
||||||
.mttcg_supported = false,
|
.mttcg_supported = false,
|
||||||
.initialize = hexagon_translate_init,
|
.initialize = hexagon_translate_init,
|
||||||
.translate_code = hexagon_translate_code,
|
.translate_code = hexagon_translate_code,
|
||||||
|
.get_tb_cpu_state = hexagon_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = hexagon_cpu_synchronize_from_tb,
|
.synchronize_from_tb = hexagon_cpu_synchronize_from_tb,
|
||||||
.restore_state_to_opc = hexagon_restore_state_to_opc,
|
.restore_state_to_opc = hexagon_restore_state_to_opc,
|
||||||
.mmu_index = hexagon_cpu_mmu_index,
|
.mmu_index = hexagon_cpu_mmu_index,
|
||||||
|
|
|
@ -51,7 +51,7 @@ static vaddr hppa_cpu_get_pc(CPUState *cs)
|
||||||
env->iaoq_f & -4);
|
env->iaoq_f & -4);
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState hppa_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUHPPAState *env = cpu_env(cs);
|
CPUHPPAState *env = cpu_env(cs);
|
||||||
uint32_t flags = 0;
|
uint32_t flags = 0;
|
||||||
|
@ -262,6 +262,7 @@ static const TCGCPUOps hppa_tcg_ops = {
|
||||||
|
|
||||||
.initialize = hppa_translate_init,
|
.initialize = hppa_translate_init,
|
||||||
.translate_code = hppa_translate_code,
|
.translate_code = hppa_translate_code,
|
||||||
|
.get_tb_cpu_state = hppa_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = hppa_cpu_synchronize_from_tb,
|
.synchronize_from_tb = hppa_cpu_synchronize_from_tb,
|
||||||
.restore_state_to_opc = hppa_restore_state_to_opc,
|
.restore_state_to_opc = hppa_restore_state_to_opc,
|
||||||
.mmu_index = hppa_cpu_mmu_index,
|
.mmu_index = hppa_cpu_mmu_index,
|
||||||
|
|
|
@ -48,7 +48,7 @@ static void x86_cpu_exec_exit(CPUState *cs)
|
||||||
env->eflags = cpu_compute_eflags(env);
|
env->eflags = cpu_compute_eflags(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState x86_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUX86State *env = cpu_env(cs);
|
CPUX86State *env = cpu_env(cs);
|
||||||
uint32_t flags, cs_base;
|
uint32_t flags, cs_base;
|
||||||
|
@ -160,6 +160,7 @@ const TCGCPUOps x86_tcg_ops = {
|
||||||
.guest_default_memory_order = TCG_MO_ALL & ~TCG_MO_ST_LD,
|
.guest_default_memory_order = TCG_MO_ALL & ~TCG_MO_ST_LD,
|
||||||
.initialize = tcg_x86_init,
|
.initialize = tcg_x86_init,
|
||||||
.translate_code = x86_translate_code,
|
.translate_code = x86_translate_code,
|
||||||
|
.get_tb_cpu_state = x86_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = x86_cpu_synchronize_from_tb,
|
.synchronize_from_tb = x86_cpu_synchronize_from_tb,
|
||||||
.restore_state_to_opc = x86_restore_state_to_opc,
|
.restore_state_to_opc = x86_restore_state_to_opc,
|
||||||
.mmu_index = x86_cpu_mmu_index,
|
.mmu_index = x86_cpu_mmu_index,
|
||||||
|
|
|
@ -336,7 +336,7 @@ static bool loongarch_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState loongarch_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPULoongArchState *env = cpu_env(cs);
|
CPULoongArchState *env = cpu_env(cs);
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
@ -882,6 +882,7 @@ static const TCGCPUOps loongarch_tcg_ops = {
|
||||||
|
|
||||||
.initialize = loongarch_translate_init,
|
.initialize = loongarch_translate_init,
|
||||||
.translate_code = loongarch_translate_code,
|
.translate_code = loongarch_translate_code,
|
||||||
|
.get_tb_cpu_state = loongarch_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = loongarch_cpu_synchronize_from_tb,
|
.synchronize_from_tb = loongarch_cpu_synchronize_from_tb,
|
||||||
.restore_state_to_opc = loongarch_restore_state_to_opc,
|
.restore_state_to_opc = loongarch_restore_state_to_opc,
|
||||||
.mmu_index = loongarch_cpu_mmu_index,
|
.mmu_index = loongarch_cpu_mmu_index,
|
||||||
|
|
|
@ -40,7 +40,7 @@ static vaddr m68k_cpu_get_pc(CPUState *cs)
|
||||||
return cpu->env.pc;
|
return cpu->env.pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState m68k_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUM68KState *env = cpu_env(cs);
|
CPUM68KState *env = cpu_env(cs);
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
@ -613,6 +613,7 @@ static const TCGCPUOps m68k_tcg_ops = {
|
||||||
|
|
||||||
.initialize = m68k_tcg_init,
|
.initialize = m68k_tcg_init,
|
||||||
.translate_code = m68k_translate_code,
|
.translate_code = m68k_translate_code,
|
||||||
|
.get_tb_cpu_state = m68k_get_tb_cpu_state,
|
||||||
.restore_state_to_opc = m68k_restore_state_to_opc,
|
.restore_state_to_opc = m68k_restore_state_to_opc,
|
||||||
.mmu_index = m68k_cpu_mmu_index,
|
.mmu_index = m68k_cpu_mmu_index,
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ static vaddr mb_cpu_get_pc(CPUState *cs)
|
||||||
return cpu->env.pc;
|
return cpu->env.pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState mb_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUMBState *env = cpu_env(cs);
|
CPUMBState *env = cpu_env(cs);
|
||||||
|
|
||||||
|
@ -442,6 +442,7 @@ static const TCGCPUOps mb_tcg_ops = {
|
||||||
|
|
||||||
.initialize = mb_tcg_init,
|
.initialize = mb_tcg_init,
|
||||||
.translate_code = mb_translate_code,
|
.translate_code = mb_translate_code,
|
||||||
|
.get_tb_cpu_state = mb_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = mb_cpu_synchronize_from_tb,
|
.synchronize_from_tb = mb_cpu_synchronize_from_tb,
|
||||||
.restore_state_to_opc = mb_restore_state_to_opc,
|
.restore_state_to_opc = mb_restore_state_to_opc,
|
||||||
.mmu_index = mb_cpu_mmu_index,
|
.mmu_index = mb_cpu_mmu_index,
|
||||||
|
|
|
@ -549,7 +549,7 @@ static int mips_cpu_mmu_index(CPUState *cs, bool ifunc)
|
||||||
return mips_env_mmu_index(cpu_env(cs));
|
return mips_env_mmu_index(cpu_env(cs));
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState mips_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUMIPSState *env = cpu_env(cs);
|
CPUMIPSState *env = cpu_env(cs);
|
||||||
|
|
||||||
|
@ -566,6 +566,7 @@ static const TCGCPUOps mips_tcg_ops = {
|
||||||
|
|
||||||
.initialize = mips_tcg_init,
|
.initialize = mips_tcg_init,
|
||||||
.translate_code = mips_translate_code,
|
.translate_code = mips_translate_code,
|
||||||
|
.get_tb_cpu_state = mips_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = mips_cpu_synchronize_from_tb,
|
.synchronize_from_tb = mips_cpu_synchronize_from_tb,
|
||||||
.restore_state_to_opc = mips_restore_state_to_opc,
|
.restore_state_to_opc = mips_restore_state_to_opc,
|
||||||
.mmu_index = mips_cpu_mmu_index,
|
.mmu_index = mips_cpu_mmu_index,
|
||||||
|
|
|
@ -41,7 +41,7 @@ static vaddr openrisc_cpu_get_pc(CPUState *cs)
|
||||||
return cpu->env.pc;
|
return cpu->env.pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState openrisc_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUOpenRISCState *env = cpu_env(cs);
|
CPUOpenRISCState *env = cpu_env(cs);
|
||||||
|
|
||||||
|
@ -258,6 +258,7 @@ static const TCGCPUOps openrisc_tcg_ops = {
|
||||||
|
|
||||||
.initialize = openrisc_translate_init,
|
.initialize = openrisc_translate_init,
|
||||||
.translate_code = openrisc_translate_code,
|
.translate_code = openrisc_translate_code,
|
||||||
|
.get_tb_cpu_state = openrisc_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = openrisc_cpu_synchronize_from_tb,
|
.synchronize_from_tb = openrisc_cpu_synchronize_from_tb,
|
||||||
.restore_state_to_opc = openrisc_restore_state_to_opc,
|
.restore_state_to_opc = openrisc_restore_state_to_opc,
|
||||||
.mmu_index = openrisc_cpu_mmu_index,
|
.mmu_index = openrisc_cpu_mmu_index,
|
||||||
|
|
|
@ -45,7 +45,6 @@
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
#include "spr_common.h"
|
#include "spr_common.h"
|
||||||
#include "power8-pmu.h"
|
#include "power8-pmu.h"
|
||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
#include "hw/boards.h"
|
#include "hw/boards.h"
|
||||||
#include "hw/intc/intc.h"
|
#include "hw/intc/intc.h"
|
||||||
|
@ -7483,6 +7482,7 @@ static const TCGCPUOps ppc_tcg_ops = {
|
||||||
.guest_default_memory_order = 0,
|
.guest_default_memory_order = 0,
|
||||||
.initialize = ppc_translate_init,
|
.initialize = ppc_translate_init,
|
||||||
.translate_code = ppc_translate_code,
|
.translate_code = ppc_translate_code,
|
||||||
|
.get_tb_cpu_state = ppc_get_tb_cpu_state,
|
||||||
.restore_state_to_opc = ppc_restore_state_to_opc,
|
.restore_state_to_opc = ppc_restore_state_to_opc,
|
||||||
.mmu_index = ppc_cpu_mmu_index,
|
.mmu_index = ppc_cpu_mmu_index,
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "cpu-models.h"
|
#include "cpu-models.h"
|
||||||
#include "spr_common.h"
|
#include "spr_common.h"
|
||||||
#include "accel/tcg/cpu-ops.h"
|
#include "accel/tcg/cpu-ops.h"
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
/* Swap temporary saved registers with GPRs */
|
/* Swap temporary saved registers with GPRs */
|
||||||
void hreg_swap_gpr_tgpr(CPUPPCState *env)
|
void hreg_swap_gpr_tgpr(CPUPPCState *env)
|
||||||
|
@ -256,7 +257,7 @@ void hreg_update_pmu_hflags(CPUPPCState *env)
|
||||||
env->hflags |= hreg_compute_pmu_hflags_value(env);
|
env->hflags |= hreg_compute_pmu_hflags_value(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
TCGTBCPUState ppc_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUPPCState *env = cpu_env(cs);
|
CPUPPCState *env = cpu_env(cs);
|
||||||
uint32_t hflags_current = env->hflags;
|
uint32_t hflags_current = env->hflags;
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "exec/breakpoint.h"
|
#include "exec/breakpoint.h"
|
||||||
#include "hw/registerfields.h"
|
#include "hw/registerfields.h"
|
||||||
#include "exec/page-protection.h"
|
#include "exec/page-protection.h"
|
||||||
|
#include "accel/tcg/tb-cpu-state.h"
|
||||||
|
|
||||||
/* PM instructions */
|
/* PM instructions */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -308,4 +309,6 @@ static inline int ger_pack_masks(int pmsk, int ymsk, int xmsk)
|
||||||
return msk;
|
return msk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TCGTBCPUState ppc_get_tb_cpu_state(CPUState *cs);
|
||||||
|
|
||||||
#endif /* PPC_INTERNAL_H */
|
#endif /* PPC_INTERNAL_H */
|
||||||
|
|
|
@ -98,7 +98,7 @@ static int riscv_cpu_mmu_index(CPUState *cs, bool ifetch)
|
||||||
return riscv_env_mmu_index(cpu_env(cs), ifetch);
|
return riscv_env_mmu_index(cpu_env(cs), ifetch);
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState riscv_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPURISCVState *env = cpu_env(cs);
|
CPURISCVState *env = cpu_env(cs);
|
||||||
RISCVCPU *cpu = env_archcpu(env);
|
RISCVCPU *cpu = env_archcpu(env);
|
||||||
|
@ -243,6 +243,7 @@ const TCGCPUOps riscv_tcg_ops = {
|
||||||
|
|
||||||
.initialize = riscv_translate_init,
|
.initialize = riscv_translate_init,
|
||||||
.translate_code = riscv_translate_code,
|
.translate_code = riscv_translate_code,
|
||||||
|
.get_tb_cpu_state = riscv_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = riscv_cpu_synchronize_from_tb,
|
.synchronize_from_tb = riscv_cpu_synchronize_from_tb,
|
||||||
.restore_state_to_opc = riscv_restore_state_to_opc,
|
.restore_state_to_opc = riscv_restore_state_to_opc,
|
||||||
.mmu_index = riscv_cpu_mmu_index,
|
.mmu_index = riscv_cpu_mmu_index,
|
||||||
|
|
|
@ -44,7 +44,7 @@ static vaddr rx_cpu_get_pc(CPUState *cs)
|
||||||
return cpu->env.pc;
|
return cpu->env.pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState rx_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPURXState *env = cpu_env(cs);
|
CPURXState *env = cpu_env(cs);
|
||||||
uint32_t flags = 0;
|
uint32_t flags = 0;
|
||||||
|
@ -220,6 +220,7 @@ static const TCGCPUOps rx_tcg_ops = {
|
||||||
|
|
||||||
.initialize = rx_translate_init,
|
.initialize = rx_translate_init,
|
||||||
.translate_code = rx_translate_code,
|
.translate_code = rx_translate_code,
|
||||||
|
.get_tb_cpu_state = rx_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = rx_cpu_synchronize_from_tb,
|
.synchronize_from_tb = rx_cpu_synchronize_from_tb,
|
||||||
.restore_state_to_opc = rx_restore_state_to_opc,
|
.restore_state_to_opc = rx_restore_state_to_opc,
|
||||||
.mmu_index = rx_cpu_mmu_index,
|
.mmu_index = rx_cpu_mmu_index,
|
||||||
|
|
|
@ -309,7 +309,7 @@ static int s390x_cpu_mmu_index(CPUState *cs, bool ifetch)
|
||||||
return s390x_env_mmu_index(cpu_env(cs), ifetch);
|
return s390x_env_mmu_index(cpu_env(cs), ifetch);
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState s390x_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUS390XState *env = cpu_env(cs);
|
CPUS390XState *env = cpu_env(cs);
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
@ -358,6 +358,7 @@ static const TCGCPUOps s390_tcg_ops = {
|
||||||
|
|
||||||
.initialize = s390x_translate_init,
|
.initialize = s390x_translate_init,
|
||||||
.translate_code = s390x_translate_code,
|
.translate_code = s390x_translate_code,
|
||||||
|
.get_tb_cpu_state = s390x_get_tb_cpu_state,
|
||||||
.restore_state_to_opc = s390x_restore_state_to_opc,
|
.restore_state_to_opc = s390x_restore_state_to_opc,
|
||||||
.mmu_index = s390x_cpu_mmu_index,
|
.mmu_index = s390x_cpu_mmu_index,
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ static vaddr superh_cpu_get_pc(CPUState *cs)
|
||||||
return cpu->env.pc;
|
return cpu->env.pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState superh_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUSH4State *env = cpu_env(cs);
|
CPUSH4State *env = cpu_env(cs);
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
@ -289,6 +289,7 @@ static const TCGCPUOps superh_tcg_ops = {
|
||||||
|
|
||||||
.initialize = sh4_translate_init,
|
.initialize = sh4_translate_init,
|
||||||
.translate_code = sh4_translate_code,
|
.translate_code = sh4_translate_code,
|
||||||
|
.get_tb_cpu_state = superh_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = superh_cpu_synchronize_from_tb,
|
.synchronize_from_tb = superh_cpu_synchronize_from_tb,
|
||||||
.restore_state_to_opc = superh_restore_state_to_opc,
|
.restore_state_to_opc = superh_restore_state_to_opc,
|
||||||
.mmu_index = sh4_cpu_mmu_index,
|
.mmu_index = sh4_cpu_mmu_index,
|
||||||
|
|
|
@ -716,7 +716,7 @@ static void sparc_cpu_synchronize_from_tb(CPUState *cs,
|
||||||
cpu->env.npc = tb->cs_base;
|
cpu->env.npc = tb->cs_base;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState sparc_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUSPARCState *env = cpu_env(cs);
|
CPUSPARCState *env = cpu_env(cs);
|
||||||
uint32_t flags = cpu_mmu_index(cs, false);
|
uint32_t flags = cpu_mmu_index(cs, false);
|
||||||
|
@ -1029,6 +1029,7 @@ static const TCGCPUOps sparc_tcg_ops = {
|
||||||
|
|
||||||
.initialize = sparc_tcg_init,
|
.initialize = sparc_tcg_init,
|
||||||
.translate_code = sparc_translate_code,
|
.translate_code = sparc_translate_code,
|
||||||
|
.get_tb_cpu_state = sparc_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = sparc_cpu_synchronize_from_tb,
|
.synchronize_from_tb = sparc_cpu_synchronize_from_tb,
|
||||||
.restore_state_to_opc = sparc_restore_state_to_opc,
|
.restore_state_to_opc = sparc_restore_state_to_opc,
|
||||||
.mmu_index = sparc_cpu_mmu_index,
|
.mmu_index = sparc_cpu_mmu_index,
|
||||||
|
|
|
@ -45,7 +45,7 @@ static vaddr tricore_cpu_get_pc(CPUState *cs)
|
||||||
return cpu_env(cs)->PC;
|
return cpu_env(cs)->PC;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState tricore_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUTriCoreState *env = cpu_env(cs);
|
CPUTriCoreState *env = cpu_env(cs);
|
||||||
|
|
||||||
|
@ -185,6 +185,7 @@ static const TCGCPUOps tricore_tcg_ops = {
|
||||||
.mttcg_supported = false,
|
.mttcg_supported = false,
|
||||||
.initialize = tricore_tcg_init,
|
.initialize = tricore_tcg_init,
|
||||||
.translate_code = tricore_translate_code,
|
.translate_code = tricore_translate_code,
|
||||||
|
.get_tb_cpu_state = tricore_get_tb_cpu_state,
|
||||||
.synchronize_from_tb = tricore_cpu_synchronize_from_tb,
|
.synchronize_from_tb = tricore_cpu_synchronize_from_tb,
|
||||||
.restore_state_to_opc = tricore_restore_state_to_opc,
|
.restore_state_to_opc = tricore_restore_state_to_opc,
|
||||||
.mmu_index = tricore_cpu_mmu_index,
|
.mmu_index = tricore_cpu_mmu_index,
|
||||||
|
|
|
@ -55,7 +55,7 @@ static vaddr xtensa_cpu_get_pc(CPUState *cs)
|
||||||
return cpu->env.pc;
|
return cpu->env.pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCGTBCPUState cpu_get_tb_cpu_state(CPUState *cs)
|
static TCGTBCPUState xtensa_get_tb_cpu_state(CPUState *cs)
|
||||||
{
|
{
|
||||||
CPUXtensaState *env = cpu_env(cs);
|
CPUXtensaState *env = cpu_env(cs);
|
||||||
uint32_t flags = 0;
|
uint32_t flags = 0;
|
||||||
|
@ -312,6 +312,7 @@ static const TCGCPUOps xtensa_tcg_ops = {
|
||||||
.initialize = xtensa_translate_init,
|
.initialize = xtensa_translate_init,
|
||||||
.translate_code = xtensa_translate_code,
|
.translate_code = xtensa_translate_code,
|
||||||
.debug_excp_handler = xtensa_breakpoint_handler,
|
.debug_excp_handler = xtensa_breakpoint_handler,
|
||||||
|
.get_tb_cpu_state = xtensa_get_tb_cpu_state,
|
||||||
.restore_state_to_opc = xtensa_restore_state_to_opc,
|
.restore_state_to_opc = xtensa_restore_state_to_opc,
|
||||||
.mmu_index = xtensa_cpu_mmu_index,
|
.mmu_index = xtensa_cpu_mmu_index,
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue