mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-03-24 22:15:07 +00:00
target/arm: New utility function to extract EC from syndrome
Create and use a utility function to extract the EC field from a syndrome, rather than open-coding the shift. Backports commit 64b91e3f890a8c221b65c6820a5ee39107ee40f5 from qemu
This commit is contained in:
parent
ebe442b1d4
commit
99516b43a3
|
@ -7531,7 +7531,7 @@ static void arm_cpu_do_interrupt_aarch32_(CPUState *cs)
|
||||||
uint32_t moe;
|
uint32_t moe;
|
||||||
|
|
||||||
/* If this is a debug exception we must update the DBGDSCR.MOE bits */
|
/* If this is a debug exception we must update the DBGDSCR.MOE bits */
|
||||||
switch (env->exception.syndrome >> ARM_EL_EC_SHIFT) {
|
switch (syn_get_ec(env->exception.syndrome)) {
|
||||||
case EC_BREAKPOINT:
|
case EC_BREAKPOINT:
|
||||||
case EC_BREAKPOINT_SAME_EL:
|
case EC_BREAKPOINT_SAME_EL:
|
||||||
moe = 1;
|
moe = 1;
|
||||||
|
@ -7877,7 +7877,7 @@ void arm_cpu_do_interrupt(CPUState *cs)
|
||||||
if (qemu_loglevel_mask(CPU_LOG_INT)
|
if (qemu_loglevel_mask(CPU_LOG_INT)
|
||||||
&& !excp_is_internal(cs->exception_index)) {
|
&& !excp_is_internal(cs->exception_index)) {
|
||||||
qemu_log_mask(CPU_LOG_INT, "...with ESR 0x%x/0x%" PRIx32 "\n",
|
qemu_log_mask(CPU_LOG_INT, "...with ESR 0x%x/0x%" PRIx32 "\n",
|
||||||
env->exception.syndrome >> ARM_EL_EC_SHIFT,
|
syn_get_ec(env->exception.syndrome),
|
||||||
env->exception.syndrome);
|
env->exception.syndrome);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -280,6 +280,11 @@ enum arm_exception_class {
|
||||||
#define ARM_EL_IL (1 << ARM_EL_IL_SHIFT)
|
#define ARM_EL_IL (1 << ARM_EL_IL_SHIFT)
|
||||||
#define ARM_EL_ISV (1 << ARM_EL_ISV_SHIFT)
|
#define ARM_EL_ISV (1 << ARM_EL_ISV_SHIFT)
|
||||||
|
|
||||||
|
static inline uint32_t syn_get_ec(uint32_t syn)
|
||||||
|
{
|
||||||
|
return syn >> ARM_EL_EC_SHIFT;
|
||||||
|
}
|
||||||
|
|
||||||
/* Utility functions for constructing various kinds of syndrome value.
|
/* Utility functions for constructing various kinds of syndrome value.
|
||||||
* Note that in general we follow the AArch64 syndrome values; in a
|
* Note that in general we follow the AArch64 syndrome values; in a
|
||||||
* few cases the value in HSR for exceptions taken to AArch32 Hyp
|
* few cases the value in HSR for exceptions taken to AArch32 Hyp
|
||||||
|
|
|
@ -41,7 +41,7 @@ void raise_exception(CPUARMState *env, uint32_t excp,
|
||||||
* (see DDI0478C.a D1.10.4)
|
* (see DDI0478C.a D1.10.4)
|
||||||
*/
|
*/
|
||||||
target_el = 2;
|
target_el = 2;
|
||||||
if (syndrome >> ARM_EL_EC_SHIFT == EC_ADVSIMDFPACCESSTRAP) {
|
if (syn_get_ec(syndrome) == EC_ADVSIMDFPACCESSTRAP) {
|
||||||
syndrome = syn_uncategorized();
|
syndrome = syn_uncategorized();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue