提交 64b91e3f 编写于 作者: P Peter Maydell

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.
Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
Reviewed-by: NRichard Henderson <richard.henderson@linaro.org>
Message-id: 20181012144235.19646-9-peter.maydell@linaro.org
上级 eadb2feb
...@@ -8336,7 +8336,7 @@ static void arm_cpu_do_interrupt_aarch32(CPUState *cs) ...@@ -8336,7 +8336,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;
...@@ -8676,7 +8676,7 @@ void arm_cpu_do_interrupt(CPUState *cs) ...@@ -8676,7 +8676,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);
} }
......
...@@ -278,6 +278,11 @@ enum arm_exception_class { ...@@ -278,6 +278,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
......
...@@ -933,7 +933,7 @@ int kvm_arch_remove_sw_breakpoint(CPUState *cs, struct kvm_sw_breakpoint *bp) ...@@ -933,7 +933,7 @@ int kvm_arch_remove_sw_breakpoint(CPUState *cs, struct kvm_sw_breakpoint *bp)
bool kvm_arm_handle_debug(CPUState *cs, struct kvm_debug_exit_arch *debug_exit) bool kvm_arm_handle_debug(CPUState *cs, struct kvm_debug_exit_arch *debug_exit)
{ {
int hsr_ec = debug_exit->hsr >> ARM_EL_EC_SHIFT; int hsr_ec = syn_get_ec(debug_exit->hsr);
ARMCPU *cpu = ARM_CPU(cs); ARMCPU *cpu = ARM_CPU(cs);
CPUClass *cc = CPU_GET_CLASS(cs); CPUClass *cc = CPU_GET_CLASS(cs);
CPUARMState *env = &cpu->env; CPUARMState *env = &cpu->env;
......
...@@ -42,7 +42,7 @@ void raise_exception(CPUARMState *env, uint32_t excp, ...@@ -42,7 +42,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();
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册