[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/5] ppc: spapr: cleanup cr get/store with helper routines.
From: |
Harsh Prateek Bora |
Subject: |
[PATCH 1/5] ppc: spapr: cleanup cr get/store with helper routines. |
Date: |
Fri, 31 Mar 2023 12:23:40 +0530 |
The bits in cr reg are grouped into eight 4-bit fields represented
by env->crf[8] and the related calculations should be abstracted to
keep the calling routines simpler to read. This is a step towards
cleaning up the [h_enter|spapr_exit]_nested calls for better readability.
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
---
hw/ppc/spapr_hcall.c | 18 ++----------------
target/ppc/cpu.c | 17 +++++++++++++++++
target/ppc/cpu.h | 2 ++
3 files changed, 21 insertions(+), 16 deletions(-)
diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
index ec4def62f8..124cee5e53 100644
--- a/hw/ppc/spapr_hcall.c
+++ b/hw/ppc/spapr_hcall.c
@@ -1566,8 +1566,6 @@ static target_ulong h_enter_nested(PowerPCCPU *cpu,
struct kvmppc_hv_guest_state hv_state;
struct kvmppc_pt_regs *regs;
hwaddr len;
- uint64_t cr;
- int i;
if (spapr->nested_ptcr == 0) {
return H_NOT_AVAILABLE;
@@ -1616,12 +1614,7 @@ static target_ulong h_enter_nested(PowerPCCPU *cpu,
env->lr = regs->link;
env->ctr = regs->ctr;
cpu_write_xer(env, regs->xer);
-
- cr = regs->ccr;
- for (i = 7; i >= 0; i--) {
- env->crf[i] = cr & 15;
- cr >>= 4;
- }
+ ppc_store_cr(env, regs->ccr);
env->msr = regs->msr;
env->nip = regs->nip;
@@ -1698,8 +1691,6 @@ void spapr_exit_nested(PowerPCCPU *cpu, int excp)
struct kvmppc_hv_guest_state *hvstate;
struct kvmppc_pt_regs *regs;
hwaddr len;
- uint64_t cr;
- int i;
assert(spapr_cpu->in_nested);
@@ -1757,12 +1748,7 @@ void spapr_exit_nested(PowerPCCPU *cpu, int excp)
regs->link = env->lr;
regs->ctr = env->ctr;
regs->xer = cpu_read_xer(env);
-
- cr = 0;
- for (i = 0; i < 8; i++) {
- cr |= (env->crf[i] & 15) << (4 * (7 - i));
- }
- regs->ccr = cr;
+ regs->ccr = ppc_get_cr(env);
if (excp == POWERPC_EXCP_MCHECK ||
excp == POWERPC_EXCP_RESET ||
diff --git a/target/ppc/cpu.c b/target/ppc/cpu.c
index 1a97b41c6b..3b444e58b5 100644
--- a/target/ppc/cpu.c
+++ b/target/ppc/cpu.c
@@ -67,6 +67,23 @@ uint32_t ppc_get_vscr(CPUPPCState *env)
return env->vscr | (sat << VSCR_SAT);
}
+void ppc_store_cr(CPUPPCState *env, uint64_t cr)
+{
+ for (int i = 7; i >= 0; i--) {
+ env->crf[i] = cr & 15;
+ cr >>= 4;
+ }
+}
+
+uint64_t ppc_get_cr(CPUPPCState *env)
+{
+ uint64_t cr = 0;
+ for (int i = 0; i < 8; i++) {
+ cr |= (env->crf[i] & 15) << (4 * (7 - i));
+ }
+ return cr;
+}
+
/* GDBstub can read and write MSR... */
void ppc_store_msr(CPUPPCState *env, target_ulong value)
{
diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h
index 557d736dab..b4c21459f1 100644
--- a/target/ppc/cpu.h
+++ b/target/ppc/cpu.h
@@ -2773,6 +2773,8 @@ void dump_mmu(CPUPPCState *env);
void ppc_maybe_bswap_register(CPUPPCState *env, uint8_t *mem_buf, int len);
void ppc_store_vscr(CPUPPCState *env, uint32_t vscr);
uint32_t ppc_get_vscr(CPUPPCState *env);
+void ppc_store_cr(CPUPPCState *env, uint64_t cr);
+uint64_t ppc_get_cr(CPUPPCState *env);
/*****************************************************************************/
/* Power management enable checks */
--
2.31.1
- [PATCH 0/5] Cleanup [h_enter|spapr_exit]_nested routines, Harsh Prateek Bora, 2023/03/31
- [PATCH 1/5] ppc: spapr: cleanup cr get/store with helper routines.,
Harsh Prateek Bora <=
- [PATCH 2/5] ppc: spapr: cleanup h_enter_nested() with helper routines., Harsh Prateek Bora, 2023/03/31
- [PATCH 3/5] ppc: spapr: assert early rather late in h_enter_nested(), Harsh Prateek Bora, 2023/03/31
- [PATCH 5/5] MAINTAINERS: Adding myself in the list for ppc/spapr, Harsh Prateek Bora, 2023/03/31
- [PATCH 4/5] ppc: spapr: cleanup spapr_exit_nested() with helper routines., Harsh Prateek Bora, 2023/03/31
- Re: [PATCH 0/5] Cleanup [h_enter|spapr_exit]_nested routines, Cédric Le Goater, 2023/03/31