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>
{
CRISCPU *cpu = CRIS_CPU(obj);
CPUCRISState *env = &cpu->env;
{
CRISCPU *cpu = CRIS_CPU(obj);
CPUCRISState *env = &cpu->env;
+ static bool tcg_initialized;
+
+ 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)
int cpu_cris_signal_handler(int host_signum, void *pinfo,
void *puc);
int cpu_cris_signal_handler(int host_signum, void *pinfo,
void *puc);
+void cris_initialize_tcg(void);
+void cris_initialize_crisv10_tcg(void);
+
enum {
CC_OP_DYNAMIC, /* Use env->cc_op */
CC_OP_FLAGS,
enum {
CC_OP_DYNAMIC, /* Use env->cc_op */
CC_OP_FLAGS,
{
CRISCPU *cpu;
CPUCRISState *env;
{
CRISCPU *cpu;
CPUCRISState *env;
- static int tcg_initialized = 0;
- int i;
cpu = CRIS_CPU(object_new(TYPE_CRIS_CPU));
env = &cpu->env;
cpu = CRIS_CPU(object_new(TYPE_CRIS_CPU));
env = &cpu->env;
object_property_set_bool(OBJECT(cpu), true, "realized", NULL);
object_property_set_bool(OBJECT(cpu), true, "realized", NULL);
- if (tcg_initialized) {
- return cpu;
- }
+void cris_initialize_tcg(void)
+{
+ int i;
#define GEN_HELPER 2
#include "helper.h"
#define GEN_HELPER 2
#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");
cc_x = tcg_global_mem_new(TCG_AREG0,
offsetof(CPUCRISState, cc_x), "cc_x");
cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
cc_x = tcg_global_mem_new(TCG_AREG0,
offsetof(CPUCRISState, cc_x), "cc_x");
offsetof(CPUCRISState, pregs[i]),
pregnames[i]);
}
offsetof(CPUCRISState, pregs[i]),
pregnames[i]);
}
}
void restore_state_to_opc(CPUCRISState *env, TranslationBlock *tb, int pc_pos)
}
void restore_state_to_opc(CPUCRISState *env, TranslationBlock *tb, int pc_pos)
-static CPUCRISState *cpu_crisv10_init (CPUCRISState *env)
+void cris_initialize_crisv10_tcg(void)
offsetof(CPUCRISState, pregs[i]),
pregnames_v10[i]);
}
offsetof(CPUCRISState, pregs[i]),
pregnames_v10[i]);
}