mirror of https://github.com/proxmox/mirror_qemu
target-cris: Move TCG initialization to CRISCPU initfn
Split out TCG initialization from cpu_cris_init(). Avoid CPUCRISState dependency for v10-specific initialization and for non-v10 by inlining the decision into the initfn as well. Signed-off-by: Andreas Färber <afaerber@suse.de>master
parent
79614b781d
commit
d1a94fec3d
|
@ -70,8 +70,18 @@ static void cris_cpu_initfn(Object *obj)
|
||||||
{
|
{
|
||||||
CRISCPU *cpu = CRIS_CPU(obj);
|
CRISCPU *cpu = CRIS_CPU(obj);
|
||||||
CPUCRISState *env = &cpu->env;
|
CPUCRISState *env = &cpu->env;
|
||||||
|
static bool tcg_initialized;
|
||||||
|
|
||||||
cpu_exec_init(env);
|
cpu_exec_init(env);
|
||||||
|
|
||||||
|
if (tcg_enabled() && !tcg_initialized) {
|
||||||
|
tcg_initialized = true;
|
||||||
|
if (env->pregs[PR_VR] < 32) {
|
||||||
|
cris_initialize_crisv10_tcg();
|
||||||
|
} else {
|
||||||
|
cris_initialize_tcg();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cris_cpu_class_init(ObjectClass *oc, void *data)
|
static void cris_cpu_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -182,6 +182,9 @@ void do_interrupt(CPUCRISState *env);
|
||||||
int cpu_cris_signal_handler(int host_signum, void *pinfo,
|
int cpu_cris_signal_handler(int host_signum, void *pinfo,
|
||||||
void *puc);
|
void *puc);
|
||||||
|
|
||||||
|
void cris_initialize_tcg(void);
|
||||||
|
void cris_initialize_crisv10_tcg(void);
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
CC_OP_DYNAMIC, /* Use env->cc_op */
|
CC_OP_DYNAMIC, /* Use env->cc_op */
|
||||||
CC_OP_FLAGS,
|
CC_OP_FLAGS,
|
||||||
|
|
|
@ -3550,8 +3550,6 @@ CRISCPU *cpu_cris_init(const char *cpu_model)
|
||||||
{
|
{
|
||||||
CRISCPU *cpu;
|
CRISCPU *cpu;
|
||||||
CPUCRISState *env;
|
CPUCRISState *env;
|
||||||
static int tcg_initialized = 0;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
cpu = CRIS_CPU(object_new(TYPE_CRIS_CPU));
|
cpu = CRIS_CPU(object_new(TYPE_CRIS_CPU));
|
||||||
env = &cpu->env;
|
env = &cpu->env;
|
||||||
|
@ -3560,21 +3558,16 @@ CRISCPU *cpu_cris_init(const char *cpu_model)
|
||||||
|
|
||||||
object_property_set_bool(OBJECT(cpu), true, "realized", NULL);
|
object_property_set_bool(OBJECT(cpu), true, "realized", NULL);
|
||||||
|
|
||||||
if (tcg_initialized) {
|
return cpu;
|
||||||
return cpu;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
tcg_initialized = 1;
|
void cris_initialize_tcg(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
#define GEN_HELPER 2
|
#define GEN_HELPER 2
|
||||||
#include "helper.h"
|
#include "helper.h"
|
||||||
|
|
||||||
if (env->pregs[PR_VR] < 32) {
|
|
||||||
cpu_crisv10_init(env);
|
|
||||||
return cpu;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
|
cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
|
||||||
cc_x = tcg_global_mem_new(TCG_AREG0,
|
cc_x = tcg_global_mem_new(TCG_AREG0,
|
||||||
offsetof(CPUCRISState, cc_x), "cc_x");
|
offsetof(CPUCRISState, cc_x), "cc_x");
|
||||||
|
@ -3614,8 +3607,6 @@ CRISCPU *cpu_cris_init(const char *cpu_model)
|
||||||
offsetof(CPUCRISState, pregs[i]),
|
offsetof(CPUCRISState, pregs[i]),
|
||||||
pregnames[i]);
|
pregnames[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return cpu;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void restore_state_to_opc(CPUCRISState *env, TranslationBlock *tb, int pc_pos)
|
void restore_state_to_opc(CPUCRISState *env, TranslationBlock *tb, int pc_pos)
|
||||||
|
|
|
@ -1257,7 +1257,7 @@ static unsigned int crisv10_decoder(CPUCRISState *env, DisasContext *dc)
|
||||||
return insn_len;
|
return insn_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CPUCRISState *cpu_crisv10_init (CPUCRISState *env)
|
void cris_initialize_crisv10_tcg(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -1300,7 +1300,4 @@ static CPUCRISState *cpu_crisv10_init (CPUCRISState *env)
|
||||||
offsetof(CPUCRISState, pregs[i]),
|
offsetof(CPUCRISState, pregs[i]),
|
||||||
pregnames_v10[i]);
|
pregnames_v10[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return env;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue