On 8/10/20 11:07 PM, LIU Zhiwei wrote: > if (el <= 2 && !arm_is_secure_below_el3(env)) { > - if (env->cp15.cptr_el[2] & CPTR_TZ) { > - return 2; > - } > - if (env->cp15.cptr_el[2] & CPTR_TFP) { > - return 0; > + if ((arm_hcr_el2_eff(env) & HCR_E2H) == HCR_E2H) { > + int zen = extract32(env->cp15.cptr_el[2], 16, 2); > + switch (zen) { > + case 0: > + case 2: > + return 2; > + case 1: > + if ((arm_hcr_el2_eff(env) & HCR_TGE) == HCR_TGE) {
Since the outer if checks that we're in non-secure state, and (by nature of sve) we know we're in aarch64 mode, then we don't need to use arm_hcr_el2_eff and can just use env->cp15.hcr_el2. Add a comment > /* Since we exclude secure first, we may read HCR_EL2 directly. */ like we do in vae1_tlbmask. You do not need to write if ((x & bit) == bit) just use if (x & bit) here. With those changes, Reviewed-by: Richard Henderson <richard.hender...@linaro.org> r~