mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-01-22 18:11:02 +00:00
arm: Always enable access to coprocessors initially
Allows non-AArch64 environments to always access coprocessors initially. Removes the need to do avoidable register management when testing floating-point code.
This commit is contained in:
parent
5bcb1e13ab
commit
ddcf400955
|
@ -210,21 +210,23 @@ static void arm_cpu_reset(CPUState *s)
|
||||||
env->pc = cpu->rvbar;
|
env->pc = cpu->rvbar;
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
#if defined(CONFIG_USER_ONLY)
|
// Unicorn: commented out to always allow accesses to FP/Neon
|
||||||
|
//#if defined(CONFIG_USER_ONLY)
|
||||||
/* Userspace expects access to cp10 and cp11 for FP/Neon */
|
/* Userspace expects access to cp10 and cp11 for FP/Neon */
|
||||||
env->cp15.cpacr_el1 = deposit64(env->cp15.cpacr_el1, 20, 4, 0xf);
|
env->cp15.cpacr_el1 = deposit64(env->cp15.cpacr_el1, 20, 4, 0xf);
|
||||||
#endif
|
//#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_USER_ONLY)
|
// Unicorn: Always enable access to the coprocessors initially.
|
||||||
env->uncached_cpsr = ARM_CPU_MODE_USR;
|
|
||||||
/* For user mode we must enable access to coprocessors */
|
|
||||||
env->vfp.xregs[ARM_VFP_FPEXC] = 1 << 30;
|
env->vfp.xregs[ARM_VFP_FPEXC] = 1 << 30;
|
||||||
if (arm_feature(env, ARM_FEATURE_IWMMXT)) {
|
if (arm_feature(env, ARM_FEATURE_IWMMXT)) {
|
||||||
env->cp15.c15_cpar = 3;
|
env->cp15.c15_cpar = 3;
|
||||||
} else if (arm_feature(env, ARM_FEATURE_XSCALE)) {
|
} else if (arm_feature(env, ARM_FEATURE_XSCALE)) {
|
||||||
env->cp15.c15_cpar = 1;
|
env->cp15.c15_cpar = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_USER_ONLY)
|
||||||
|
env->uncached_cpsr = ARM_CPU_MODE_USR;
|
||||||
#else
|
#else
|
||||||
/*
|
/*
|
||||||
* If the highest available EL is EL2, AArch32 will start in Hyp
|
* If the highest available EL is EL2, AArch32 will start in Hyp
|
||||||
|
|
|
@ -13644,6 +13644,13 @@ static bool arm_pre_translate_insn(DisasContext *dc)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Unicorn: end address tells us to stop emulation
|
||||||
|
if (dc->pc == dc->uc->addr_end) {
|
||||||
|
// imitate WFI instruction to halt emulation
|
||||||
|
dc->base.is_jmp = DISAS_WFI;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (dc->ss_active && !dc->pstate_ss) {
|
if (dc->ss_active && !dc->pstate_ss) {
|
||||||
/* Singlestep state is Active-pending.
|
/* Singlestep state is Active-pending.
|
||||||
* If we're in this state at the start of a TB then either
|
* If we're in this state at the start of a TB then either
|
||||||
|
@ -13667,13 +13674,6 @@ static bool arm_pre_translate_insn(DisasContext *dc)
|
||||||
|
|
||||||
static void arm_post_translate_insn(DisasContext *dc)
|
static void arm_post_translate_insn(DisasContext *dc)
|
||||||
{
|
{
|
||||||
// Unicorn: end address tells us to stop emulation
|
|
||||||
if (dc->pc == dc->uc->addr_end) {
|
|
||||||
// imitate WFI instruction to halt emulation
|
|
||||||
dc->base.is_jmp = DISAS_WFI;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dc->condjmp && !dc->base.is_jmp) {
|
if (dc->condjmp && !dc->base.is_jmp) {
|
||||||
TCGContext *tcg_ctx = dc->uc->tcg_ctx;
|
TCGContext *tcg_ctx = dc->uc->tcg_ctx;
|
||||||
gen_set_label(tcg_ctx, dc->condlabel);
|
gen_set_label(tcg_ctx, dc->condlabel);
|
||||||
|
|
Loading…
Reference in a new issue