From patchwork Tue Oct 22 13:31:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 177182 Delivered-To: patch@linaro.org Received: by 2002:a92:409a:0:0:0:0:0 with SMTP id d26csp4896241ill; Tue, 22 Oct 2019 06:53:32 -0700 (PDT) X-Google-Smtp-Source: APXvYqxfKtUQBopE90Z1CN9etbxxHxpApqYAgZ3VaHu0TkXuaO4UGKBRaFjTDc2m7MaxqvR2PQmA X-Received: by 2002:a17:906:1342:: with SMTP id x2mr27308035ejb.304.1571752411927; Tue, 22 Oct 2019 06:53:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571752411; cv=none; d=google.com; s=arc-20160816; b=MfId4lcNv86FdHhFY6j/IKpcZldlRTeIg+8Zlr0QRiw4+DVcKgwFVxRNGQfMpXe81v qTqQhjGXnWzfzlJnM4mR2dWD692D1V/HaxzU4p2PPrPeTumTd/ZVaQaDUTnmyk8TNiaD 7fgPCZwDdhukokor3mraoS061s+phHwPWUQLHvzqfWqEOqYNVhQ8xFHgEs7lJJFe4Z+e WRiMcWiSxbDwNwrcoCtXoje75cQe2BfZdlth2S6I7/U8wUWle3vbPUcBDLxAqaIv/KUw wwnd/Lc2oCpFeG5dSjbnCsMFXT4u8fSm1tBQhmpgoxxRNy6EZAbToEuSpQVbgoRJEZN9 S0bg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=wEiv9jObGn3UqQMFxdsZgzb1ZhvxcdW3kYhCEsFF/+g=; b=wTjtbLkNe7VUaQfNTL49NQAojFBNamddKMa6ZFvYXKOv4fufyH7PrekSM9guU8TYeP UjD4Eqwh6nuU0WS9U4yA4sgI4Cir7TeoGzLvqMjSoJUhIBhwx9hbS689EM4RFPpYkBhT 9gw41b/KdD//oGAK64We8JYHUpTWu/FkPvqX7kDM2nskOqDn4nhlBNlQRkO+1qM4P6yA BZZXTHPx3WXO53xImnv9XwDVeQTwuqE6a0JsTT20Rc3A1sRSWvySnsAZWaSJtMaZXkxf BePhmvCwLE2aP7i3QKXSCy3SH5vOmcLWRv7sx0eRkOdlA7vLmXdHjKuP48RMrpfhILo4 F7GA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=zxyfLAh0; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id fx11si5097780ejb.302.2019.10.22.06.53.31 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 22 Oct 2019 06:53:31 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=zxyfLAh0; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:57778 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iMubK-0002Gp-3g for patch@linaro.org; Tue, 22 Oct 2019 09:53:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36908) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iMuH1-0002yo-GS for qemu-devel@nongnu.org; Tue, 22 Oct 2019 09:32:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iMuH0-0001Nh-9K for qemu-devel@nongnu.org; Tue, 22 Oct 2019 09:32:31 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:45122) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iMuH0-0001NM-3C for qemu-devel@nongnu.org; Tue, 22 Oct 2019 09:32:30 -0400 Received: by mail-wr1-x442.google.com with SMTP id q13so13116658wrs.12 for ; Tue, 22 Oct 2019 06:32:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=wEiv9jObGn3UqQMFxdsZgzb1ZhvxcdW3kYhCEsFF/+g=; b=zxyfLAh0F/vyKE4nJlgYlzrJ9bVkdFDaBwX9hlZny/E0aSN8EYhZVGYjLIohZs6FP5 bdSwdo3UlUomZG2ryF8nsJ0jaIIyAs6oR83rlCpmvd9/7boPz2GkigSZ9IHaQHXMWy9Z 8eOjQ7ts+/+YlwDnfD46LTzmLCyKbcPuWhYpXuWh8ScsNuioNCprm0yShlY97Jbhtjv2 ChDntAwsNeTigXEdLnssO+la/22NmKovaNSCXaPHLerJoZv450u2YX5MGs58Juc6Jk+h St0uzEwUq6vSa0RdXm4Qvm0r5QgahW3XDpxmbTS1IZadKimCsBxPAySj/d9l85YMGd2Z nvQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wEiv9jObGn3UqQMFxdsZgzb1ZhvxcdW3kYhCEsFF/+g=; b=snU8fIrt8QLJOiyAdjZXhSSzameCLr/qw3EekTMJ81DqxmbTAbWjwN1+ZNvPOqZZfo wskBGAy0VlBzgoyzYQ/jphxde2QeDXQ1MacwGAUZ2+wSVv+dfvOGvewyOL5W/sPUoZLa N/T3jd+0imIWuWhMv8V824528YwBTQgF5uF3uxKcBAHtXVBciWwFmKpQV473ERroBHwl QCmaATgISOB2etqPi/0rhu2mfbs2a/m2UJW/VGxxiOsB6/bq4THsM31gn3kzgJE91KfE IszvMDtIhUx9sWwTrhv8QVkmwmx2Jied7zhsMCJPKlp3h+LsI0wR6ioal7EoBi3lScfo MsmA== X-Gm-Message-State: APjAAAUlkNE2GR5Cg8GpVQYZtJf1e31mH3ZhKECCTPijkdiwyWUNN9zj Bkw4lInDLM/d70v9SdcDlln2NRZlUAI= X-Received: by 2002:adf:fdd0:: with SMTP id i16mr3743565wrs.227.1571751148684; Tue, 22 Oct 2019 06:32:28 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id r2sm20263856wma.1.2019.10.22.06.32.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Oct 2019 06:32:27 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 21/41] target/arm: Hoist computation of TBFLAG_A32.VFPEN Date: Tue, 22 Oct 2019 14:31:14 +0100 Message-Id: <20191022133134.14487-22-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191022133134.14487-1-peter.maydell@linaro.org> References: <20191022133134.14487-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::442 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson There are 3 conditions that each enable this flag. M-profile always enables; A-profile with EL1 as AA64 always enables. Both of these conditions can easily be cached. The final condition relies on the FPEXC register which we are not prepared to cache. Reviewed-by: Alex Bennée Signed-off-by: Richard Henderson Message-id: 20191018174431.1784-12-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/cpu.h | 2 +- target/arm/helper.c | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) -- 2.20.1 diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 4d961474ce7..9909ff89d4f 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -3192,7 +3192,7 @@ FIELD(TBFLAG_A32, XSCALE_CPAR, 4, 2) * the same thing as the current security state of the processor! */ FIELD(TBFLAG_A32, NS, 6, 1) -FIELD(TBFLAG_A32, VFPEN, 7, 1) /* Not cached. */ +FIELD(TBFLAG_A32, VFPEN, 7, 1) /* Partially cached, minus FPEXC. */ FIELD(TBFLAG_A32, CONDEXEC, 8, 8) /* Not cached. */ FIELD(TBFLAG_A32, SCTLR_B, 16, 1) /* For M profile only, set if FPCCR.LSPACT is set */ diff --git a/target/arm/helper.c b/target/arm/helper.c index 398e5f5d6df..89aa6fd9339 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -11088,6 +11088,9 @@ static uint32_t rebuild_hflags_m32(CPUARMState *env, int fp_el, { uint32_t flags = 0; + /* v8M always enables the fpu. */ + flags = FIELD_DP32(flags, TBFLAG_A32, VFPEN, 1); + if (arm_v7m_is_handler_mode(env)) { flags = FIELD_DP32(flags, TBFLAG_A32, HANDLER, 1); } @@ -11119,6 +11122,10 @@ static uint32_t rebuild_hflags_a32(CPUARMState *env, int fp_el, ARMMMUIdx mmu_idx) { uint32_t flags = rebuild_hflags_aprofile(env); + + if (arm_el_is_aa64(env, 1)) { + flags = FIELD_DP32(flags, TBFLAG_A32, VFPEN, 1); + } return rebuild_hflags_common_32(env, fp_el, mmu_idx, flags); } @@ -11250,14 +11257,13 @@ void cpu_get_tb_cpu_state(CPUARMState *env, target_ulong *pc, flags = FIELD_DP32(flags, TBFLAG_A32, VECSTRIDE, env->vfp.vec_stride); } + if (env->vfp.xregs[ARM_VFP_FPEXC] & (1 << 30)) { + flags = FIELD_DP32(flags, TBFLAG_A32, VFPEN, 1); + } } flags = FIELD_DP32(flags, TBFLAG_A32, THUMB, env->thumb); flags = FIELD_DP32(flags, TBFLAG_A32, CONDEXEC, env->condexec_bits); - if (env->vfp.xregs[ARM_VFP_FPEXC] & (1 << 30) - || arm_el_is_aa64(env, 1) || arm_feature(env, ARM_FEATURE_M)) { - flags = FIELD_DP32(flags, TBFLAG_A32, VFPEN, 1); - } pstate_for_ss = env->uncached_cpsr; }