static int cpu_sparc_register(CPUSPARCState *env, const char *cpu_model) { sparc_def_t def1, *def = &def1; if (cpu_sparc_find_by_name(def, cpu_model) < 0) { return -1; } env->def = g_new0(sparc_def_t, 1); memcpy(env->def, def, sizeof(*def)); #if defined(CONFIG_USER_ONLY) if ((env->def->features & CPU_FEATURE_FLOAT)) { env->def->features |= CPU_FEATURE_FLOAT128; } #endif env->cpu_model_str = cpu_model; env->version = def->iu_version; env->fsr = def->fpu_version; env->nwindows = def->nwindows; #if !defined(TARGET_SPARC64) env->mmuregs[0] |= def->mmu_version; cpu_sparc_set_id(env, 0); env->mxccregs[7] |= def->mxcc_version; #else env->mmu_version = def->mmu_version; env->maxtl = def->maxtl; env->version |= def->maxtl << 8; env->version |= def->nwindows - 1; #endif return 0; }
static int cpu_sparc_register(SPARCCPU *cpu, const char *cpu_model) { CPUClass *cc = CPU_GET_CLASS(cpu); CPUSPARCState *env = &cpu->env; char *s = g_strdup(cpu_model); char *featurestr, *name = strtok(s, ","); sparc_def_t def1, *def = &def1; Error *err = NULL; if (cpu_sparc_find_by_name(def, name) < 0) { g_free(s); return -1; } env->def = g_new0(sparc_def_t, 1); memcpy(env->def, def, sizeof(*def)); featurestr = strtok(NULL, ","); cc->parse_features(CPU(cpu), featurestr, &err); g_free(s); if (err) { error_report("%s", error_get_pretty(err)); error_free(err); return -1; } env->version = def->iu_version; env->fsr = def->fpu_version; env->nwindows = def->nwindows; #if !defined(TARGET_SPARC64) env->mmuregs[0] |= def->mmu_version; cpu_sparc_set_id(env, 0); env->mxccregs[7] |= def->mxcc_version; #else env->mmu_version = def->mmu_version; env->maxtl = def->maxtl; env->version |= def->maxtl << 8; env->version |= def->nwindows - 1; #endif return 0; }