Lines Matching +full:asi +full:- +full:format
4 * Copyright (c) 2003-2005 Fabrice Bellard
24 #include "qemu/qemu-print.h"
25 #include "exec/exec-all.h"
26 #include "exec/translation-block.h"
27 #include "hw/qdev-properties.h"
41 if (scc->parent_phases.hold) { in sparc_cpu_reset_hold()
42 scc->parent_phases.hold(obj, type); in sparc_cpu_reset_hold()
46 env->cwp = 0; in sparc_cpu_reset_hold()
48 env->wim = 1; in sparc_cpu_reset_hold()
50 env->regwptr = env->regbase + (env->cwp * 16); in sparc_cpu_reset_hold()
53 env->cleanwin = env->nwindows - 2; in sparc_cpu_reset_hold()
54 env->cansave = env->nwindows - 2; in sparc_cpu_reset_hold()
55 env->pstate = PS_RMO | PS_PEF | PS_IE; in sparc_cpu_reset_hold()
56 env->asi = 0x82; /* Primary no-fault */ in sparc_cpu_reset_hold()
60 env->psret = 0; in sparc_cpu_reset_hold()
61 env->psrs = 1; in sparc_cpu_reset_hold()
62 env->psrps = 1; in sparc_cpu_reset_hold()
65 env->pstate = PS_PRIV | PS_RED | PS_PEF; in sparc_cpu_reset_hold()
67 env->pstate |= PS_AG; in sparc_cpu_reset_hold()
69 env->hpstate = cpu_has_hypervisor(env) ? HS_PRIV : 0; in sparc_cpu_reset_hold()
70 env->tl = env->maxtl; in sparc_cpu_reset_hold()
71 env->gl = 2; in sparc_cpu_reset_hold()
72 cpu_tsptr(env)->tt = TT_POWER_ON_RESET; in sparc_cpu_reset_hold()
73 env->lsu = 0; in sparc_cpu_reset_hold()
75 env->mmuregs[0] &= ~(MMU_E | MMU_NF); in sparc_cpu_reset_hold()
76 env->mmuregs[0] |= env->def.mmu_bm; in sparc_cpu_reset_hold()
78 env->pc = 0; in sparc_cpu_reset_hold()
79 env->npc = env->pc + 4; in sparc_cpu_reset_hold()
81 env->cache_control = 0; in sparc_cpu_reset_hold()
91 if (cpu_interrupts_enabled(env) && env->interrupt_index > 0) { in sparc_cpu_exec_interrupt()
92 int pil = env->interrupt_index & 0xf; in sparc_cpu_exec_interrupt()
93 int type = env->interrupt_index & 0xf0; in sparc_cpu_exec_interrupt()
96 cs->exception_index = env->interrupt_index; in sparc_cpu_exec_interrupt()
108 info->print_insn = print_insn_sparc; in cpu_sparc_disas_set_info()
109 info->endian = BFD_ENDIAN_BIG; in cpu_sparc_disas_set_info()
111 info->mach = bfd_mach_sparc_v9b; in cpu_sparc_disas_set_info()
119 prop->driver = typename; in cpu_add_feat_as_prop()
120 prop->property = g_strdup(name); in cpu_add_feat_as_prop()
121 prop->value = g_strdup(val); in cpu_add_feat_as_prop()
125 /* Parse "+feature,-feature,feature=foo" CPU feature string */
154 } else if (featurestr[0] == '-') { in sparc_cpu_parse_features()
167 * Temporarily, only +feat/-feat will be supported in sparc_cpu_parse_features()
169 * minus-overrides-plus semantics and just follow in sparc_cpu_parse_features()
170 * the order options appear on the command-line. in sparc_cpu_parse_features()
172 * TODO: warn if user is relying on minus-override-plus semantics in sparc_cpu_parse_features()
173 * TODO: remove minus-override-plus semantics after in sparc_cpu_parse_features()
180 error_setg(errp, "Boolean properties in format %s=%s" in sparc_cpu_parse_features()
185 error_setg(errp, "Unsupported property format: %s", name); in sparc_cpu_parse_features()
191 for (l = plus_features; l; l = l->next) { in sparc_cpu_parse_features()
192 const char *name = l->data; in sparc_cpu_parse_features()
197 for (l = minus_features; l; l = l->next) { in sparc_cpu_parse_features()
198 const char *name = l->data; in sparc_cpu_parse_features()
207 env->mxccregs[7] = ((cpu + 8) & 0xf) << 24; in cpu_sparc_set_id()
214 .name = "Fujitsu-Sparc64",
223 .name = "Fujitsu-Sparc64-III",
232 .name = "Fujitsu-Sparc64-IV",
241 .name = "Fujitsu-Sparc64-V",
250 .name = "TI-UltraSparc-I",
259 .name = "TI-UltraSparc-II",
268 .name = "TI-UltraSparc-IIi",
277 .name = "TI-UltraSparc-IIe",
286 .name = "Sun-UltraSparc-III",
295 .name = "Sun-UltraSparc-III-Cu",
304 .name = "Sun-UltraSparc-IIIi",
313 .name = "Sun-UltraSparc-IV",
322 .name = "Sun-UltraSparc-IV-plus",
331 .name = "Sun-UltraSparc-IIIi-plus",
340 .name = "Sun-UltraSparc-T1",
351 .name = "Sun-UltraSparc-T2",
362 .name = "NEC-UltraSparc-I",
372 .name = "Fujitsu-MB86904",
385 .name = "Fujitsu-MB86907",
398 .name = "TI-MicroSparc-I",
411 .name = "TI-MicroSparc-II",
424 .name = "TI-MicroSparc-IIep",
437 .name = "TI-SuperSparc-40", /* STP1020NPGA */
450 .name = "TI-SuperSparc-50", /* STP1020PGA */
463 .name = "TI-SuperSparc-51",
477 .name = "TI-SuperSparc-60", /* STP1020APGA */
490 .name = "TI-SuperSparc-61",
504 .name = "TI-SuperSparc-II",
588 qemu_printf(" %-20s (IU " TARGET_FMT_lx in sparc_cpu_list()
595 print_features(CPU_DEFAULT_FEATURES & ~sparc_defs[i].features, "-"); in sparc_cpu_list()
599 qemu_printf("Default CPU feature flags (use '-' to remove): "); in sparc_cpu_list()
611 qemu_fprintf(f, "%c%c%c%c", cc & PSR_NEG ? 'N' : '-', in cpu_print_cc()
612 cc & PSR_ZERO ? 'Z' : '-', cc & PSR_OVF ? 'V' : '-', in cpu_print_cc()
613 cc & PSR_CARRY ? 'C' : '-'); in cpu_print_cc()
627 qemu_fprintf(f, "pc: " TARGET_FMT_lx " npc: " TARGET_FMT_lx "\n", env->pc, in sparc_cpu_dump_state()
628 env->npc); in sparc_cpu_dump_state()
632 qemu_fprintf(f, "%%g%d-%d:", i, i + REGS_PER_LINE - 1); in sparc_cpu_dump_state()
634 qemu_fprintf(f, " " TARGET_FMT_lx, env->gregs[i]); in sparc_cpu_dump_state()
635 if (i % REGS_PER_LINE == REGS_PER_LINE - 1) { in sparc_cpu_dump_state()
642 qemu_fprintf(f, "%%%c%d-%d: ", in sparc_cpu_dump_state()
644 i, i + REGS_PER_LINE - 1); in sparc_cpu_dump_state()
646 qemu_fprintf(f, TARGET_FMT_lx " ", env->regwptr[i + x * 8]); in sparc_cpu_dump_state()
647 if (i % REGS_PER_LINE == REGS_PER_LINE - 1) { in sparc_cpu_dump_state()
658 qemu_fprintf(f, " %016" PRIx64, env->fpr[i].ll); in sparc_cpu_dump_state()
666 qemu_fprintf(f, "pstate: %08x ccr: %02x (icc: ", env->pstate, in sparc_cpu_dump_state()
670 cpu_print_cc(f, cpu_get_ccr(env) << (PSR_CARRY_SHIFT - 4)); in sparc_cpu_dump_state()
671 qemu_fprintf(f, ") asi: %02x tl: %d pil: %x gl: %d\n", env->asi, env->tl, in sparc_cpu_dump_state()
672 env->psrpil, env->gl); in sparc_cpu_dump_state()
674 TARGET_FMT_lx "\n", env->tbr, env->hpstate, env->htba); in sparc_cpu_dump_state()
677 env->cansave, env->canrestore, env->otherwin, env->wstate, in sparc_cpu_dump_state()
678 env->cleanwin, env->nwindows - 1 - env->cwp); in sparc_cpu_dump_state()
680 cpu_get_fsr(env), env->y, env->fprs); in sparc_cpu_dump_state()
685 qemu_fprintf(f, " SPE: %c%c%c) wim: %08x\n", env->psrs ? 'S' : '-', in sparc_cpu_dump_state()
686 env->psrps ? 'P' : '-', env->psret ? 'E' : '-', in sparc_cpu_dump_state()
687 env->wim); in sparc_cpu_dump_state()
689 cpu_get_fsr(env), env->y); in sparc_cpu_dump_state()
698 cpu->env.pc = value; in sparc_cpu_set_pc()
699 cpu->env.npc = value + 4; in sparc_cpu_set_pc()
706 return cpu->env.pc; in sparc_cpu_get_pc()
715 cpu->env.pc = tb->pc; in sparc_cpu_synchronize_from_tb()
716 cpu->env.npc = tb->cs_base; in sparc_cpu_synchronize_from_tb()
723 *pc = env->pc; in cpu_get_tb_cpu_state()
724 *cs_base = env->npc; in cpu_get_tb_cpu_state()
737 if (env->pstate & PS_AM) { in cpu_get_tb_cpu_state()
740 if ((env->pstate & PS_PEF) && (env->fprs & FPRS_FEF)) { in cpu_get_tb_cpu_state()
743 flags |= env->asi << TB_FLAG_ASI_SHIFT; in cpu_get_tb_cpu_state()
745 if (env->psref) { in cpu_get_tb_cpu_state()
749 if (env->fsr_qne) { in cpu_get_tb_cpu_state()
765 env->pc = pc; in sparc_restore_state_to_opc()
770 if (env->cond) { in sparc_restore_state_to_opc()
771 env->npc = npc & ~3; in sparc_restore_state_to_opc()
773 env->npc = pc + 4; in sparc_restore_state_to_opc()
776 env->npc = npc; in sparc_restore_state_to_opc()
783 return (cs->interrupt_request & CPU_INTERRUPT_HARD) && in sparc_cpu_has_work()
793 if ((env->mmuregs[0] & MMU_E) == 0) { /* MMU disabled */ in sparc_cpu_mmu_index()
796 return env->psrs; in sparc_cpu_mmu_index()
801 ? (env->lsu & IMMU_E) == 0 || (env->pstate & PS_RED) != 0 in sparc_cpu_mmu_index()
802 : (env->lsu & DMMU_E) == 0) { in sparc_cpu_mmu_index()
806 } else if (env->tl > 0) { in sparc_cpu_mmu_index()
822 * as type names shouldn't have spaces replace them with '-' in sparc_cpu_type_name()
825 *s = '-'; in sparc_cpu_type_name()
839 if (g_str_equal(typename, SPARC_CPU_TYPE_NAME("Sun-UltraSparc-IV+"))) { in sparc_cpu_class_by_name()
841 typename = g_strdup(SPARC_CPU_TYPE_NAME("Sun-UltraSparc-IV-plus")); in sparc_cpu_class_by_name()
842 } else if (g_str_equal(typename, SPARC_CPU_TYPE_NAME("Sun-UltraSparc-IIIi+"))) { in sparc_cpu_class_by_name()
844 typename = g_strdup(SPARC_CPU_TYPE_NAME("Sun-UltraSparc-IIIi-plus")); in sparc_cpu_class_by_name()
861 env->def.features |= CPU_FEATURE_FLOAT128; in sparc_cpu_realizefn()
864 env->version = env->def.iu_version; in sparc_cpu_realizefn()
865 env->nwindows = env->def.nwindows; in sparc_cpu_realizefn()
867 env->mmuregs[0] |= env->def.mmu_version; in sparc_cpu_realizefn()
869 env->mxccregs[7] |= env->def.mxcc_version; in sparc_cpu_realizefn()
871 env->mmu_version = env->def.mmu_version; in sparc_cpu_realizefn()
872 env->maxtl = env->def.maxtl; in sparc_cpu_realizefn()
873 env->version |= env->def.maxtl << 8; in sparc_cpu_realizefn()
874 env->version |= env->def.nwindows - 1; in sparc_cpu_realizefn()
882 set_float_2nan_prop_rule(float_2nan_prop_s_ba, &env->fp_status); in sparc_cpu_realizefn()
883 /* For fused-multiply add, prefer SNaN over QNaN, then C->B->A */ in sparc_cpu_realizefn()
884 set_float_3nan_prop_rule(float_3nan_prop_s_cba, &env->fp_status); in sparc_cpu_realizefn()
886 set_float_infzeronan_rule(float_infzeronan_dnan_never, &env->fp_status); in sparc_cpu_realizefn()
888 set_float_default_nan_pattern(0b01111111, &env->fp_status); in sparc_cpu_realizefn()
898 scc->parent_realize(dev, errp); in sparc_cpu_realizefn()
905 CPUSPARCState *env = &cpu->env; in sparc_cpu_initfn()
907 if (scc->cpu_def) { in sparc_cpu_initfn()
908 env->def = *scc->cpu_def; in sparc_cpu_initfn()
916 int64_t value = cpu->env.def.nwindows; in sparc_get_nwindows()
940 cpu->env.def.nwindows = value; in sparc_set_nwindows()
981 DEFINE_PROP_UNSIGNED("iu-version", SPARCCPU, env.def.iu_version, 0,
983 DEFINE_PROP_UINT32("fpu-version", SPARCCPU, env.def.fpu_version, 0),
984 DEFINE_PROP_UINT32("mmu-version", SPARCCPU, env.def.mmu_version, 0),
990 #include "hw/core/sysemu-cpu-ops.h"
1000 #include "accel/tcg/cpu-ops.h"
1027 &scc->parent_realize); in sparc_cpu_class_init()
1031 &scc->parent_phases); in sparc_cpu_class_init()
1033 cc->class_by_name = sparc_cpu_class_by_name; in sparc_cpu_class_init()
1034 cc->parse_features = sparc_cpu_parse_features; in sparc_cpu_class_init()
1035 cc->mmu_index = sparc_cpu_mmu_index; in sparc_cpu_class_init()
1036 cc->dump_state = sparc_cpu_dump_state; in sparc_cpu_class_init()
1038 cc->memory_rw_debug = sparc_cpu_memory_rw_debug; in sparc_cpu_class_init()
1040 cc->set_pc = sparc_cpu_set_pc; in sparc_cpu_class_init()
1041 cc->get_pc = sparc_cpu_get_pc; in sparc_cpu_class_init()
1042 cc->gdb_read_register = sparc_cpu_gdb_read_register; in sparc_cpu_class_init()
1043 cc->gdb_write_register = sparc_cpu_gdb_write_register; in sparc_cpu_class_init()
1045 cc->sysemu_ops = &sparc_sysemu_ops; in sparc_cpu_class_init()
1047 cc->disas_set_info = cpu_sparc_disas_set_info; in sparc_cpu_class_init()
1050 cc->gdb_num_core_regs = 86; in sparc_cpu_class_init()
1052 cc->gdb_num_core_regs = 72; in sparc_cpu_class_init()
1054 cc->tcg_ops = &sparc_tcg_ops; in sparc_cpu_class_init()
1071 scc->cpu_def = data; in sparc_cpu_cpudef_class_init()
1076 char *typename = sparc_cpu_type_name(def->name); in sparc_register_cpudef_type()