mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 10:34:58 -06:00
ppc: spapr: cleanup cr get/set with helpers.
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 related/calling code for better readability. Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com> Reviewed-by: Fabiano Rosas <farosas@suse.de> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20230503093619.2530487-2-harshpb@linux.ibm.com> [danielhb: add 'const' modifier to fix linux-user build] Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
This commit is contained in:
parent
1b336bb63e
commit
2060436aab
8 changed files with 31 additions and 60 deletions
|
@ -67,6 +67,23 @@ uint32_t ppc_get_vscr(CPUPPCState *env)
|
|||
return env->vscr | (sat << VSCR_SAT);
|
||||
}
|
||||
|
||||
void ppc_set_cr(CPUPPCState *env, uint64_t cr)
|
||||
{
|
||||
for (int i = 7; i >= 0; i--) {
|
||||
env->crf[i] = cr & 0xf;
|
||||
cr >>= 4;
|
||||
}
|
||||
}
|
||||
|
||||
uint64_t ppc_get_cr(const CPUPPCState *env)
|
||||
{
|
||||
uint64_t cr = 0;
|
||||
for (int i = 0; i < 8; i++) {
|
||||
cr |= (env->crf[i] & 0xf) << (4 * (7 - i));
|
||||
}
|
||||
return cr;
|
||||
}
|
||||
|
||||
/* GDBstub can read and write MSR... */
|
||||
void ppc_store_msr(CPUPPCState *env, target_ulong value)
|
||||
{
|
||||
|
|
|
@ -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_set_cr(CPUPPCState *env, uint64_t cr);
|
||||
uint64_t ppc_get_cr(const CPUPPCState *env);
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Power management enable checks */
|
||||
|
|
|
@ -145,11 +145,7 @@ int ppc_cpu_gdb_read_register(CPUState *cs, GByteArray *buf, int n)
|
|||
break;
|
||||
case 66:
|
||||
{
|
||||
uint32_t cr = 0;
|
||||
int i;
|
||||
for (i = 0; i < 8; i++) {
|
||||
cr |= env->crf[i] << (32 - ((i + 1) * 4));
|
||||
}
|
||||
uint32_t cr = ppc_get_cr(env);
|
||||
gdb_get_reg32(buf, cr);
|
||||
break;
|
||||
}
|
||||
|
@ -203,11 +199,7 @@ int ppc_cpu_gdb_read_register_apple(CPUState *cs, GByteArray *buf, int n)
|
|||
break;
|
||||
case 66 + 32:
|
||||
{
|
||||
uint32_t cr = 0;
|
||||
int i;
|
||||
for (i = 0; i < 8; i++) {
|
||||
cr |= env->crf[i] << (32 - ((i + 1) * 4));
|
||||
}
|
||||
uint32_t cr = ppc_get_cr(env);
|
||||
gdb_get_reg32(buf, cr);
|
||||
break;
|
||||
}
|
||||
|
@ -257,10 +249,7 @@ int ppc_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
|
|||
case 66:
|
||||
{
|
||||
uint32_t cr = ldl_p(mem_buf);
|
||||
int i;
|
||||
for (i = 0; i < 8; i++) {
|
||||
env->crf[i] = (cr >> (32 - ((i + 1) * 4))) & 0xF;
|
||||
}
|
||||
ppc_set_cr(env, cr);
|
||||
break;
|
||||
}
|
||||
case 67:
|
||||
|
@ -307,10 +296,7 @@ int ppc_cpu_gdb_write_register_apple(CPUState *cs, uint8_t *mem_buf, int n)
|
|||
case 66 + 32:
|
||||
{
|
||||
uint32_t cr = ldl_p(mem_buf);
|
||||
int i;
|
||||
for (i = 0; i < 8; i++) {
|
||||
env->crf[i] = (cr >> (32 - ((i + 1) * 4))) & 0xF;
|
||||
}
|
||||
ppc_set_cr(env, cr);
|
||||
break;
|
||||
}
|
||||
case 67 + 32:
|
||||
|
|
|
@ -927,10 +927,7 @@ int kvm_arch_put_registers(CPUState *cs, int level)
|
|||
regs.gpr[i] = env->gpr[i];
|
||||
}
|
||||
|
||||
regs.cr = 0;
|
||||
for (i = 0; i < 8; i++) {
|
||||
regs.cr |= (env->crf[i] & 15) << (4 * (7 - i));
|
||||
}
|
||||
regs.cr = ppc_get_cr(env);
|
||||
|
||||
ret = kvm_vcpu_ioctl(cs, KVM_SET_REGS, ®s);
|
||||
if (ret < 0) {
|
||||
|
@ -1205,7 +1202,6 @@ int kvm_arch_get_registers(CPUState *cs)
|
|||
PowerPCCPU *cpu = POWERPC_CPU(cs);
|
||||
CPUPPCState *env = &cpu->env;
|
||||
struct kvm_regs regs;
|
||||
uint32_t cr;
|
||||
int i, ret;
|
||||
|
||||
ret = kvm_vcpu_ioctl(cs, KVM_GET_REGS, ®s);
|
||||
|
@ -1213,12 +1209,7 @@ int kvm_arch_get_registers(CPUState *cs)
|
|||
return ret;
|
||||
}
|
||||
|
||||
cr = regs.cr;
|
||||
for (i = 7; i >= 0; i--) {
|
||||
env->crf[i] = cr & 15;
|
||||
cr >>= 4;
|
||||
}
|
||||
|
||||
ppc_set_cr(env, regs.cr);
|
||||
env->ctr = regs.ctr;
|
||||
env->lr = regs.lr;
|
||||
cpu_write_xer(env, regs.xer);
|
||||
|
|
|
@ -37,12 +37,8 @@ static target_long monitor_get_ccr(Monitor *mon, const struct MonitorDef *md,
|
|||
{
|
||||
CPUArchState *env = mon_get_cpu_env(mon);
|
||||
unsigned int u;
|
||||
int i;
|
||||
|
||||
u = 0;
|
||||
for (i = 0; i < 8; i++) {
|
||||
u |= env->crf[i] << (32 - (4 * (i + 1)));
|
||||
}
|
||||
u = ppc_get_cr(env);
|
||||
|
||||
return u;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue