mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2024-12-23 05:05:36 +00:00
target/arm: Add support for missing Jazelle system registers
QEMU lacks the minimum Jazelle implementation that is required by the architecture (everything is RAZ or RAZ/WI). Add it together with the HCR_EL2.TID0 trapping that goes with it. Backports commit f96f3d5f09973ef40f164cf2d5fd98ce5498b82a from qemu
This commit is contained in:
parent
457934855b
commit
9c3e512479
|
@ -5832,6 +5832,30 @@ static CPAccessResult access_aa32_tid3(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
return CP_ACCESS_OK;
|
return CP_ACCESS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static CPAccessResult access_jazelle(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
|
bool isread)
|
||||||
|
{
|
||||||
|
if (arm_current_el(env) == 1 && (arm_hcr_el2_eff(env) & HCR_TID0)) {
|
||||||
|
return CP_ACCESS_TRAP_EL2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CP_ACCESS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const ARMCPRegInfo jazelle_regs[] = {
|
||||||
|
{ .name = "JIDR",
|
||||||
|
.cp = 14, .crn = 0, .crm = 0, .opc1 = 7, .opc2 = 0,
|
||||||
|
.access = PL1_R, .accessfn = access_jazelle,
|
||||||
|
.type = ARM_CP_CONST, .resetvalue = 0 },
|
||||||
|
{ .name = "JOSCR",
|
||||||
|
.cp = 14, .crn = 1, .crm = 0, .opc1 = 7, .opc2 = 0,
|
||||||
|
.access = PL1_RW, .type = ARM_CP_CONST, .resetvalue = 0 },
|
||||||
|
{ .name = "JMCR",
|
||||||
|
.cp = 14, .crn = 2, .crm = 0, .opc1 = 7, .opc2 = 0,
|
||||||
|
.access = PL1_RW, .type = ARM_CP_CONST, .resetvalue = 0 },
|
||||||
|
REGINFO_SENTINEL
|
||||||
|
};
|
||||||
|
|
||||||
void register_cp_regs_for_features(ARMCPU *cpu)
|
void register_cp_regs_for_features(ARMCPU *cpu)
|
||||||
{
|
{
|
||||||
/* Register all the coprocessor registers based on feature bits */
|
/* Register all the coprocessor registers based on feature bits */
|
||||||
|
@ -6490,6 +6514,9 @@ void register_cp_regs_for_features(ARMCPU *cpu)
|
||||||
if (arm_feature(env, ARM_FEATURE_LPAE)) {
|
if (arm_feature(env, ARM_FEATURE_LPAE)) {
|
||||||
define_arm_cp_regs(cpu, lpae_cp_reginfo);
|
define_arm_cp_regs(cpu, lpae_cp_reginfo);
|
||||||
}
|
}
|
||||||
|
if (cpu_isar_feature(jazelle, cpu)) {
|
||||||
|
define_arm_cp_regs(cpu, jazelle_regs);
|
||||||
|
}
|
||||||
/* Slightly awkwardly, the OMAP and StrongARM cores need all of
|
/* Slightly awkwardly, the OMAP and StrongARM cores need all of
|
||||||
* cp15 crn=0 to be writes-ignored, whereas for other cores they should
|
* cp15 crn=0 to be writes-ignored, whereas for other cores they should
|
||||||
* be read-only (ie write causes UNDEF exception).
|
* be read-only (ie write causes UNDEF exception).
|
||||||
|
|
Loading…
Reference in a new issue