Message ID | 20200828141929.77854-8-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | target/microblaze improvements | expand |
Le ven. 28 août 2020 16:23, Richard Henderson <richard.henderson@linaro.org> a écrit : > Continue eliminating the sregs array in favor of individual members. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- > target/microblaze/cpu.h | 1 + > target/microblaze/gdbstub.c | 4 ++-- > target/microblaze/helper.c | 6 +++--- > target/microblaze/op_helper.c | 8 ++++---- > target/microblaze/translate.c | 6 ++++-- > 5 files changed, 14 insertions(+), 11 deletions(-) > > diff --git a/target/microblaze/cpu.h b/target/microblaze/cpu.h > index 36de61d9f9..c9035b410e 100644 > --- a/target/microblaze/cpu.h > +++ b/target/microblaze/cpu.h > @@ -238,6 +238,7 @@ struct CPUMBState { > uint32_t regs[32]; > uint64_t pc; > uint64_t msr; > + uint64_t ear; > uint64_t sregs[14]; > float_status fp_status; > /* Stack protectors. Yes, it's a hw feature. */ > diff --git a/target/microblaze/gdbstub.c b/target/microblaze/gdbstub.c > index e4c4936a7a..e33a613efe 100644 > --- a/target/microblaze/gdbstub.c > +++ b/target/microblaze/gdbstub.c > @@ -65,7 +65,7 @@ int mb_cpu_gdb_read_register(CPUState *cs, GByteArray > *mem_buf, int n) > val = env->msr; > break; > case GDB_EAR: > - val = env->sregs[SR_EAR]; > + val = env->ear; > break; > case GDB_ESR: > val = env->sregs[SR_ESR]; > @@ -121,7 +121,7 @@ int mb_cpu_gdb_write_register(CPUState *cs, uint8_t > *mem_buf, int n) > env->msr = tmp; > break; > case GDB_EAR: > - env->sregs[SR_EAR] = tmp; > + env->ear = tmp; > break; > case GDB_ESR: > env->sregs[SR_ESR] = tmp; > diff --git a/target/microblaze/helper.c b/target/microblaze/helper.c > index a18314540f..afe9634781 100644 > --- a/target/microblaze/helper.c > +++ b/target/microblaze/helper.c > @@ -85,7 +85,7 @@ bool mb_cpu_tlb_fill(CPUState *cs, vaddr address, int > size, > qemu_log_mask(CPU_LOG_MMU, "mmu=%d miss v=%" VADDR_PRIx "\n", > mmu_idx, address); > > - env->sregs[SR_EAR] = address; > + env->ear = address; > switch (lu.err) { > case ERR_PROT: > env->sregs[SR_ESR] = access_type == MMU_INST_FETCH ? 17 : 16; > @@ -145,7 +145,7 @@ void mb_cpu_do_interrupt(CPUState *cs) > qemu_log_mask(CPU_LOG_INT, > "hw exception at pc=%" PRIx64 " ear=%" PRIx64 " > " > "esr=%" PRIx64 " iflags=%x\n", > - env->pc, env->sregs[SR_EAR], > + env->pc, env->ear, > env->sregs[SR_ESR], env->iflags); > log_cpu_state_mask(CPU_LOG_INT, cs, 0); > env->iflags &= ~(IMM_FLAG | D_FLAG); > @@ -188,7 +188,7 @@ void mb_cpu_do_interrupt(CPUState *cs) > qemu_log_mask(CPU_LOG_INT, > "exception at pc=%" PRIx64 " ear=%" PRIx64 " " > "iflags=%x\n", > - env->pc, env->sregs[SR_EAR], env->iflags); > + env->pc, env->ear, env->iflags); > log_cpu_state_mask(CPU_LOG_INT, cs, 0); > env->iflags &= ~(IMM_FLAG | D_FLAG); > env->pc = cpu->cfg.base_vectors + 0x20; > diff --git a/target/microblaze/op_helper.c b/target/microblaze/op_helper.c > index 3668382d36..5bacd29663 100644 > --- a/target/microblaze/op_helper.c > +++ b/target/microblaze/op_helper.c > @@ -78,7 +78,7 @@ void helper_debug(CPUMBState *env) > qemu_log("PC=%" PRIx64 "\n", env->pc); > qemu_log("rmsr=%" PRIx64 " resr=%" PRIx64 " rear=%" PRIx64 " " > "debug[%x] imm=%x iflags=%x\n", > - env->msr, env->sregs[SR_ESR], env->sregs[SR_EAR], > + env->msr, env->sregs[SR_ESR], env->ear, > env->debug, env->imm, env->iflags); > qemu_log("btaken=%d btarget=%" PRIx64 " mode=%s(saved=%s) eip=%d > ie=%d\n", > env->btaken, env->btarget, > @@ -431,7 +431,7 @@ void helper_memalign(CPUMBState *env, target_ulong > addr, > "unaligned access addr=" TARGET_FMT_lx > " mask=%x, wr=%d dr=r%d\n", > addr, mask, wr, dr); > - env->sregs[SR_EAR] = addr; > + env->ear = addr; > env->sregs[SR_ESR] = ESR_EC_UNALIGNED_DATA | (wr << 10) \ > | (dr & 31) << 5; > if (mask == 3) { > @@ -450,7 +450,7 @@ void helper_stackprot(CPUMBState *env, target_ulong > addr) > qemu_log_mask(CPU_LOG_INT, "Stack protector violation at " > TARGET_FMT_lx " %x %x\n", > addr, env->slr, env->shr); > - env->sregs[SR_EAR] = addr; > + env->ear = addr; > env->sregs[SR_ESR] = ESR_EC_STACKPROT; > helper_raise_exception(env, EXCP_HW_EXCP); > } > @@ -488,7 +488,7 @@ void mb_cpu_transaction_failed(CPUState *cs, hwaddr > physaddr, vaddr addr, > return; > } > > - env->sregs[SR_EAR] = addr; > + env->ear = addr; > if (access_type == MMU_INST_FETCH) { > if ((env->pvr.regs[2] & PVR2_IOPB_BUS_EXC_MASK)) { > env->sregs[SR_ESR] = ESR_EC_INSN_BUS; > diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c > index 9f2dcd82cd..62747b02f3 100644 > --- a/target/microblaze/translate.c > +++ b/target/microblaze/translate.c > @@ -1809,7 +1809,7 @@ void mb_cpu_dump_state(CPUState *cs, FILE *f, int > flags) > qemu_fprintf(f, "rmsr=%" PRIx64 " resr=%" PRIx64 " rear=%" PRIx64 " " > "debug=%x imm=%x iflags=%x fsr=%" PRIx64 " " > "rbtr=%" PRIx64 "\n", > - env->msr, env->sregs[SR_ESR], env->sregs[SR_EAR], > + env->msr, env->sregs[SR_ESR], env->ear, > env->debug, env->imm, env->iflags, env->sregs[SR_FSR], > env->sregs[SR_BTR]); > qemu_fprintf(f, "btaken=%d btarget=%" PRIx64 " mode=%s(saved=%s) " > @@ -1873,8 +1873,10 @@ void mb_tcg_init(void) > tcg_global_mem_new_i64(cpu_env, offsetof(CPUMBState, pc), "rpc"); > cpu_SR[SR_MSR] = > tcg_global_mem_new_i64(cpu_env, offsetof(CPUMBState, msr), > "rmsr"); > + cpu_SR[SR_EAR] = > + tcg_global_mem_new_i64(cpu_env, offsetof(CPUMBState, ear), > "rear"); > > - for (i = SR_MSR + 1; i < ARRAY_SIZE(cpu_SR); i++) { > + for (i = SR_EAR + 1; i < ARRAY_SIZE(cpu_SR); i++) { > cpu_SR[i] = tcg_global_mem_new_i64(cpu_env, > offsetof(CPUMBState, sregs[i]), > special_regnames[i]); > -- > 2.25.1 > > > <div dir="auto"><div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le ven. 28 août 2020 16:23, Richard Henderson <<a href="mailto:richard.henderson@linaro.org">richard.henderson@linaro.org</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Continue eliminating the sregs array in favor of individual members.<br> <br> Signed-off-by: Richard Henderson <<a href="mailto:richard.henderson@linaro.org" target="_blank" rel="noreferrer">richard.henderson@linaro.org</a>><br></blockquote></div></div><div dir="auto"><br></div><div dir="auto"><span style="font-family:sans-serif;font-size:13.696px">Reviewed-by: Philippe Mathieu-Daudé <</span><a href="mailto:f4bug@amsat.org" style="text-decoration:none;color:rgb(66,133,244);font-family:sans-serif;font-size:13.696px">f4bug@amsat.org</a><span style="font-family:sans-serif;font-size:13.696px">></span><br></div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> ---<br> target/microblaze/cpu.h | 1 +<br> target/microblaze/gdbstub.c | 4 ++--<br> target/microblaze/helper.c | 6 +++---<br> target/microblaze/op_helper.c | 8 ++++----<br> target/microblaze/translate.c | 6 ++++--<br> 5 files changed, 14 insertions(+), 11 deletions(-)<br> <br> diff --git a/target/microblaze/cpu.h b/target/microblaze/cpu.h<br> index 36de61d9f9..c9035b410e 100644<br> --- a/target/microblaze/cpu.h<br> +++ b/target/microblaze/cpu.h<br> @@ -238,6 +238,7 @@ struct CPUMBState {<br> uint32_t regs[32];<br> uint64_t pc;<br> uint64_t msr;<br> + uint64_t ear;<br> uint64_t sregs[14];<br> float_status fp_status;<br> /* Stack protectors. Yes, it's a hw feature. */<br> diff --git a/target/microblaze/gdbstub.c b/target/microblaze/gdbstub.c<br> index e4c4936a7a..e33a613efe 100644<br> --- a/target/microblaze/gdbstub.c<br> +++ b/target/microblaze/gdbstub.c<br> @@ -65,7 +65,7 @@ int mb_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)<br> val = env->msr;<br> break;<br> case GDB_EAR:<br> - val = env->sregs[SR_EAR];<br> + val = env->ear;<br> break;<br> case GDB_ESR:<br> val = env->sregs[SR_ESR];<br> @@ -121,7 +121,7 @@ int mb_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)<br> env->msr = tmp;<br> break;<br> case GDB_EAR:<br> - env->sregs[SR_EAR] = tmp;<br> + env->ear = tmp;<br> break;<br> case GDB_ESR:<br> env->sregs[SR_ESR] = tmp;<br> diff --git a/target/microblaze/helper.c b/target/microblaze/helper.c<br> index a18314540f..afe9634781 100644<br> --- a/target/microblaze/helper.c<br> +++ b/target/microblaze/helper.c<br> @@ -85,7 +85,7 @@ bool mb_cpu_tlb_fill(CPUState *cs, vaddr address, int size,<br> qemu_log_mask(CPU_LOG_MMU, "mmu=%d miss v=%" VADDR_PRIx "\n",<br> mmu_idx, address);<br> <br> - env->sregs[SR_EAR] = address;<br> + env->ear = address;<br> switch (lu.err) {<br> case ERR_PROT:<br> env->sregs[SR_ESR] = access_type == MMU_INST_FETCH ? 17 : 16;<br> @@ -145,7 +145,7 @@ void mb_cpu_do_interrupt(CPUState *cs)<br> qemu_log_mask(CPU_LOG_INT,<br> "hw exception at pc=%" PRIx64 " ear=%" PRIx64 " "<br> "esr=%" PRIx64 " iflags=%x\n",<br> - env->pc, env->sregs[SR_EAR],<br> + env->pc, env->ear,<br> env->sregs[SR_ESR], env->iflags);<br> log_cpu_state_mask(CPU_LOG_INT, cs, 0);<br> env->iflags &= ~(IMM_FLAG | D_FLAG);<br> @@ -188,7 +188,7 @@ void mb_cpu_do_interrupt(CPUState *cs)<br> qemu_log_mask(CPU_LOG_INT,<br> "exception at pc=%" PRIx64 " ear=%" PRIx64 " "<br> "iflags=%x\n",<br> - env->pc, env->sregs[SR_EAR], env->iflags);<br> + env->pc, env->ear, env->iflags);<br> log_cpu_state_mask(CPU_LOG_INT, cs, 0);<br> env->iflags &= ~(IMM_FLAG | D_FLAG);<br> env->pc = cpu->cfg.base_vectors + 0x20;<br> diff --git a/target/microblaze/op_helper.c b/target/microblaze/op_helper.c<br> index 3668382d36..5bacd29663 100644<br> --- a/target/microblaze/op_helper.c<br> +++ b/target/microblaze/op_helper.c<br> @@ -78,7 +78,7 @@ void helper_debug(CPUMBState *env)<br> qemu_log("PC=%" PRIx64 "\n", env->pc);<br> qemu_log("rmsr=%" PRIx64 " resr=%" PRIx64 " rear=%" PRIx64 " "<br> "debug[%x] imm=%x iflags=%x\n",<br> - env->msr, env->sregs[SR_ESR], env->sregs[SR_EAR],<br> + env->msr, env->sregs[SR_ESR], env->ear,<br> env->debug, env->imm, env->iflags);<br> qemu_log("btaken=%d btarget=%" PRIx64 " mode=%s(saved=%s) eip=%d ie=%d\n",<br> env->btaken, env->btarget,<br> @@ -431,7 +431,7 @@ void helper_memalign(CPUMBState *env, target_ulong addr,<br> "unaligned access addr=" TARGET_FMT_lx<br> " mask=%x, wr=%d dr=r%d\n",<br> addr, mask, wr, dr);<br> - env->sregs[SR_EAR] = addr;<br> + env->ear = addr;<br> env->sregs[SR_ESR] = ESR_EC_UNALIGNED_DATA | (wr << 10) \<br> | (dr & 31) << 5;<br> if (mask == 3) {<br> @@ -450,7 +450,7 @@ void helper_stackprot(CPUMBState *env, target_ulong addr)<br> qemu_log_mask(CPU_LOG_INT, "Stack protector violation at "<br> TARGET_FMT_lx " %x %x\n",<br> addr, env->slr, env->shr);<br> - env->sregs[SR_EAR] = addr;<br> + env->ear = addr;<br> env->sregs[SR_ESR] = ESR_EC_STACKPROT;<br> helper_raise_exception(env, EXCP_HW_EXCP);<br> }<br> @@ -488,7 +488,7 @@ void mb_cpu_transaction_failed(CPUState *cs, hwaddr physaddr, vaddr addr,<br> return;<br> }<br> <br> - env->sregs[SR_EAR] = addr;<br> + env->ear = addr;<br> if (access_type == MMU_INST_FETCH) {<br> if ((env->pvr.regs[2] & PVR2_IOPB_BUS_EXC_MASK)) {<br> env->sregs[SR_ESR] = ESR_EC_INSN_BUS;<br> diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c<br> index 9f2dcd82cd..62747b02f3 100644<br> --- a/target/microblaze/translate.c<br> +++ b/target/microblaze/translate.c<br> @@ -1809,7 +1809,7 @@ void mb_cpu_dump_state(CPUState *cs, FILE *f, int flags)<br> qemu_fprintf(f, "rmsr=%" PRIx64 " resr=%" PRIx64 " rear=%" PRIx64 " "<br> "debug=%x imm=%x iflags=%x fsr=%" PRIx64 " "<br> "rbtr=%" PRIx64 "\n",<br> - env->msr, env->sregs[SR_ESR], env->sregs[SR_EAR],<br> + env->msr, env->sregs[SR_ESR], env->ear,<br> env->debug, env->imm, env->iflags, env->sregs[SR_FSR],<br> env->sregs[SR_BTR]);<br> qemu_fprintf(f, "btaken=%d btarget=%" PRIx64 " mode=%s(saved=%s) "<br> @@ -1873,8 +1873,10 @@ void mb_tcg_init(void)<br> tcg_global_mem_new_i64(cpu_env, offsetof(CPUMBState, pc), "rpc");<br> cpu_SR[SR_MSR] =<br> tcg_global_mem_new_i64(cpu_env, offsetof(CPUMBState, msr), "rmsr");<br> + cpu_SR[SR_EAR] =<br> + tcg_global_mem_new_i64(cpu_env, offsetof(CPUMBState, ear), "rear");<br> <br> - for (i = SR_MSR + 1; i < ARRAY_SIZE(cpu_SR); i++) {<br> + for (i = SR_EAR + 1; i < ARRAY_SIZE(cpu_SR); i++) {<br> cpu_SR[i] = tcg_global_mem_new_i64(cpu_env,<br> offsetof(CPUMBState, sregs[i]),<br> special_regnames[i]);<br> -- <br> 2.25.1<br> <br> <br> </blockquote></div></div></div>
diff --git a/target/microblaze/cpu.h b/target/microblaze/cpu.h index 36de61d9f9..c9035b410e 100644 --- a/target/microblaze/cpu.h +++ b/target/microblaze/cpu.h @@ -238,6 +238,7 @@ struct CPUMBState { uint32_t regs[32]; uint64_t pc; uint64_t msr; + uint64_t ear; uint64_t sregs[14]; float_status fp_status; /* Stack protectors. Yes, it's a hw feature. */ diff --git a/target/microblaze/gdbstub.c b/target/microblaze/gdbstub.c index e4c4936a7a..e33a613efe 100644 --- a/target/microblaze/gdbstub.c +++ b/target/microblaze/gdbstub.c @@ -65,7 +65,7 @@ int mb_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n) val = env->msr; break; case GDB_EAR: - val = env->sregs[SR_EAR]; + val = env->ear; break; case GDB_ESR: val = env->sregs[SR_ESR]; @@ -121,7 +121,7 @@ int mb_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n) env->msr = tmp; break; case GDB_EAR: - env->sregs[SR_EAR] = tmp; + env->ear = tmp; break; case GDB_ESR: env->sregs[SR_ESR] = tmp; diff --git a/target/microblaze/helper.c b/target/microblaze/helper.c index a18314540f..afe9634781 100644 --- a/target/microblaze/helper.c +++ b/target/microblaze/helper.c @@ -85,7 +85,7 @@ bool mb_cpu_tlb_fill(CPUState *cs, vaddr address, int size, qemu_log_mask(CPU_LOG_MMU, "mmu=%d miss v=%" VADDR_PRIx "\n", mmu_idx, address); - env->sregs[SR_EAR] = address; + env->ear = address; switch (lu.err) { case ERR_PROT: env->sregs[SR_ESR] = access_type == MMU_INST_FETCH ? 17 : 16; @@ -145,7 +145,7 @@ void mb_cpu_do_interrupt(CPUState *cs) qemu_log_mask(CPU_LOG_INT, "hw exception at pc=%" PRIx64 " ear=%" PRIx64 " " "esr=%" PRIx64 " iflags=%x\n", - env->pc, env->sregs[SR_EAR], + env->pc, env->ear, env->sregs[SR_ESR], env->iflags); log_cpu_state_mask(CPU_LOG_INT, cs, 0); env->iflags &= ~(IMM_FLAG | D_FLAG); @@ -188,7 +188,7 @@ void mb_cpu_do_interrupt(CPUState *cs) qemu_log_mask(CPU_LOG_INT, "exception at pc=%" PRIx64 " ear=%" PRIx64 " " "iflags=%x\n", - env->pc, env->sregs[SR_EAR], env->iflags); + env->pc, env->ear, env->iflags); log_cpu_state_mask(CPU_LOG_INT, cs, 0); env->iflags &= ~(IMM_FLAG | D_FLAG); env->pc = cpu->cfg.base_vectors + 0x20; diff --git a/target/microblaze/op_helper.c b/target/microblaze/op_helper.c index 3668382d36..5bacd29663 100644 --- a/target/microblaze/op_helper.c +++ b/target/microblaze/op_helper.c @@ -78,7 +78,7 @@ void helper_debug(CPUMBState *env) qemu_log("PC=%" PRIx64 "\n", env->pc); qemu_log("rmsr=%" PRIx64 " resr=%" PRIx64 " rear=%" PRIx64 " " "debug[%x] imm=%x iflags=%x\n", - env->msr, env->sregs[SR_ESR], env->sregs[SR_EAR], + env->msr, env->sregs[SR_ESR], env->ear, env->debug, env->imm, env->iflags); qemu_log("btaken=%d btarget=%" PRIx64 " mode=%s(saved=%s) eip=%d ie=%d\n", env->btaken, env->btarget, @@ -431,7 +431,7 @@ void helper_memalign(CPUMBState *env, target_ulong addr, "unaligned access addr=" TARGET_FMT_lx " mask=%x, wr=%d dr=r%d\n", addr, mask, wr, dr); - env->sregs[SR_EAR] = addr; + env->ear = addr; env->sregs[SR_ESR] = ESR_EC_UNALIGNED_DATA | (wr << 10) \ | (dr & 31) << 5; if (mask == 3) { @@ -450,7 +450,7 @@ void helper_stackprot(CPUMBState *env, target_ulong addr) qemu_log_mask(CPU_LOG_INT, "Stack protector violation at " TARGET_FMT_lx " %x %x\n", addr, env->slr, env->shr); - env->sregs[SR_EAR] = addr; + env->ear = addr; env->sregs[SR_ESR] = ESR_EC_STACKPROT; helper_raise_exception(env, EXCP_HW_EXCP); } @@ -488,7 +488,7 @@ void mb_cpu_transaction_failed(CPUState *cs, hwaddr physaddr, vaddr addr, return; } - env->sregs[SR_EAR] = addr; + env->ear = addr; if (access_type == MMU_INST_FETCH) { if ((env->pvr.regs[2] & PVR2_IOPB_BUS_EXC_MASK)) { env->sregs[SR_ESR] = ESR_EC_INSN_BUS; diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c index 9f2dcd82cd..62747b02f3 100644 --- a/target/microblaze/translate.c +++ b/target/microblaze/translate.c @@ -1809,7 +1809,7 @@ void mb_cpu_dump_state(CPUState *cs, FILE *f, int flags) qemu_fprintf(f, "rmsr=%" PRIx64 " resr=%" PRIx64 " rear=%" PRIx64 " " "debug=%x imm=%x iflags=%x fsr=%" PRIx64 " " "rbtr=%" PRIx64 "\n", - env->msr, env->sregs[SR_ESR], env->sregs[SR_EAR], + env->msr, env->sregs[SR_ESR], env->ear, env->debug, env->imm, env->iflags, env->sregs[SR_FSR], env->sregs[SR_BTR]); qemu_fprintf(f, "btaken=%d btarget=%" PRIx64 " mode=%s(saved=%s) " @@ -1873,8 +1873,10 @@ void mb_tcg_init(void) tcg_global_mem_new_i64(cpu_env, offsetof(CPUMBState, pc), "rpc"); cpu_SR[SR_MSR] = tcg_global_mem_new_i64(cpu_env, offsetof(CPUMBState, msr), "rmsr"); + cpu_SR[SR_EAR] = + tcg_global_mem_new_i64(cpu_env, offsetof(CPUMBState, ear), "rear"); - for (i = SR_MSR + 1; i < ARRAY_SIZE(cpu_SR); i++) { + for (i = SR_EAR + 1; i < ARRAY_SIZE(cpu_SR); i++) { cpu_SR[i] = tcg_global_mem_new_i64(cpu_env, offsetof(CPUMBState, sregs[i]), special_regnames[i]);
Continue eliminating the sregs array in favor of individual members. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/microblaze/cpu.h | 1 + target/microblaze/gdbstub.c | 4 ++-- target/microblaze/helper.c | 6 +++--- target/microblaze/op_helper.c | 8 ++++---- target/microblaze/translate.c | 6 ++++-- 5 files changed, 14 insertions(+), 11 deletions(-) -- 2.25.1