Message ID | 20220607024734.541321-26-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | target/arm: tidy exception routing | expand |
On Tue, 7 Jun 2022 at 04:02, Richard Henderson <richard.henderson@linaro.org> wrote: > > We were using arm_is_secure and is_a64, which are > tests against the current EL, as opposed to > arm_el_is_aa64 and arm_is_secure_below_el3, which > can be applied to a different EL than current. > Consolidate the two tests. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM
diff --git a/target/arm/helper.c b/target/arm/helper.c index eeca1a5dc8..1d81a01c94 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -13400,27 +13400,22 @@ int fp_exception_el(CPUARMState *env, int cur_el) int fpen = FIELD_EX64(env->cp15.cpacr_el1, CPACR_EL1, FPEN); switch (fpen) { + case 1: + if (cur_el != 0) { + break; + } + /* fall through */ case 0: case 2: - if (cur_el == 0 || cur_el == 1) { - /* Trap to PL1, which might be EL1 or EL3 */ - if (arm_is_secure(env) && !arm_el_is_aa64(env, 3)) { - return 3; - } - return 1; - } - if (cur_el == 3 && !is_a64(env)) { - /* Secure PL1 running at EL3 */ + /* Trap from Secure PL0 or PL1 to Secure PL1. */ + if (!arm_el_is_aa64(env, 3) + && (cur_el == 3 || arm_is_secure_below_el3(env))) { return 3; } - break; - case 1: - if (cur_el == 0) { + if (cur_el <= 1) { return 1; } break; - case 3: - break; } }
We were using arm_is_secure and is_a64, which are tests against the current EL, as opposed to arm_el_is_aa64 and arm_is_secure_below_el3, which can be applied to a different EL than current. Consolidate the two tests. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/arm/helper.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-)