Add UC_PPC_REG_CR
This commit is contained in:
parent
c10639fd46
commit
27ef63cc8d
@ -417,7 +417,8 @@ typedef enum uc_ppc_reg {
|
|||||||
UC_PPC_REG_XER,
|
UC_PPC_REG_XER,
|
||||||
UC_PPC_REG_CTR,
|
UC_PPC_REG_CTR,
|
||||||
UC_PPC_REG_MSR,
|
UC_PPC_REG_MSR,
|
||||||
UC_PPC_REG_FPSCR
|
UC_PPC_REG_FPSCR,
|
||||||
|
UC_PPC_REG_CR
|
||||||
} uc_ppc_reg;
|
} uc_ppc_reg;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -196,6 +196,13 @@ static void reg_read(CPUPPCState *env, unsigned int regid, void *value)
|
|||||||
case UC_PPC_REG_CR7:
|
case UC_PPC_REG_CR7:
|
||||||
*(uint32_t *)value = env->crf[regid - UC_PPC_REG_CR0];
|
*(uint32_t *)value = env->crf[regid - UC_PPC_REG_CR0];
|
||||||
break;
|
break;
|
||||||
|
case UC_PPC_REG_CR: {
|
||||||
|
uint32_t cr = 0;
|
||||||
|
for (int i = 0; i < 8; i++) {
|
||||||
|
cr <<= 4;
|
||||||
|
cr |= env->crf[i];
|
||||||
|
}
|
||||||
|
} break;
|
||||||
case UC_PPC_REG_LR:
|
case UC_PPC_REG_LR:
|
||||||
*(ppcreg_t *)value = env->lr;
|
*(ppcreg_t *)value = env->lr;
|
||||||
break;
|
break;
|
||||||
@ -270,8 +277,15 @@ static void reg_write(CPUPPCState *env, unsigned int regid, const void *value)
|
|||||||
case UC_PPC_REG_CR5:
|
case UC_PPC_REG_CR5:
|
||||||
case UC_PPC_REG_CR6:
|
case UC_PPC_REG_CR6:
|
||||||
case UC_PPC_REG_CR7:
|
case UC_PPC_REG_CR7:
|
||||||
env->crf[regid - UC_PPC_REG_CR0] = *(uint32_t *)value;
|
env->crf[regid - UC_PPC_REG_CR0] = (*(uint32_t *)value) & 0b1111;
|
||||||
break;
|
break;
|
||||||
|
case UC_PPC_REG_CR: {
|
||||||
|
uint32_t cr = *(uint32_t *)value;
|
||||||
|
for (int i = 0; i < 8; i++) {
|
||||||
|
env->crf[i] = cr & 0b1111;
|
||||||
|
cr >>= 4;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
case UC_PPC_REG_LR:
|
case UC_PPC_REG_LR:
|
||||||
env->lr = *(ppcreg_t *)value;
|
env->lr = *(ppcreg_t *)value;
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user