From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 18AC1CA9EAF for ; Thu, 24 Oct 2019 17:07:49 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DB50D20650 for ; Thu, 24 Oct 2019 17:07:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="HBbVFcm7" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DB50D20650 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linaro.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:48320 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iNgaR-00039b-73 for qemu-devel@archiver.kernel.org; Thu, 24 Oct 2019 13:07:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57823) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iNfxi-0007Fb-CD for qemu-devel@nongnu.org; Thu, 24 Oct 2019 12:27:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iNfxh-0000kZ-35 for qemu-devel@nongnu.org; Thu, 24 Oct 2019 12:27:46 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:35411) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1iNfxg-0000kA-T7 for qemu-devel@nongnu.org; Thu, 24 Oct 2019 12:27:45 -0400 Received: by mail-wm1-x343.google.com with SMTP id v6so3230674wmj.0 for ; Thu, 24 Oct 2019 09:27:44 -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=VqhS9bMZKhIe/srTN0k3CkMWuCJ4HNLLhZjZXP6/VrQ=; b=HBbVFcm7p7x2mBLFqEsIWQsnAJhuO7aZ8DsgXOnz8TWYdIJcKDdxJoWwpINtXsjfCe +LrO4OEJpu/mhTekZ5THbIUbKcFU8ZpZLn48YKgK5g4gaRPlOEyv1x4R33SDsLaJhktP oyJtYl2ehjDHwKVDFwQaIFV9WXMCimyXHMbSgRlWfZEBaDT+/eYTTAdQuiZ/U8c16Z5k jUncw9YP4tdOf/AWPu8rNkqn+nizuL5lQSZ+tSXiDk35Ng3nXIUoFxCqBi0swBVhSvec fmIJORAadOoz3x34IvpTwN/ilR5iPvgCBTKi4tivX/Yefgswb0BwL5JUNpMSXl2O72mi znSw== 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=VqhS9bMZKhIe/srTN0k3CkMWuCJ4HNLLhZjZXP6/VrQ=; b=sUcNWQtkXBhHMmWZ+3zaFSqXfu+7RRjsBTPvlAmTaESPRrOZK+F0I7+i9kByEyqiOM og6JcHFZuStGe9ss+hs92pO4J+TD3hh39uxr7wXA4qisrCYIcg30qozkZ0lfVu0vznoy MuMLg31EyE7YDkrXVR0PzpAbNbr6iPHMIG32fH2pONwR9FLfoX5P5znEJjlEET2cZWSQ WgzXorB0JxDtikj3SAOLANLGUaiQ0pVrkA703TMPEjTXHWcgKzv804IdS4hibNBpzwil oen7vt2f17nwd/EZwI7q1+g0epgyaXt77bc8V68ZAbBi6N7L5A4c+a4dmQ1FS7ovhi9V ZqHg== X-Gm-Message-State: APjAAAWB7ykQ/qcmDZq2EG9wnD65D9gew2yyT6mULyHHO/9sjoXSaZMG /N+qyYNroDEDzSpN1jzz/2J1BaZK0eo= X-Google-Smtp-Source: APXvYqyRwkny1H5iMi+lElCRfVAYRqxActyTNCns9v3EC0IvlcqIhX+6Z4p/yKjizIXzUHxhVjd98A== X-Received: by 2002:a1c:7719:: with SMTP id t25mr5530940wmi.56.1571934463680; Thu, 24 Oct 2019 09:27:43 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id r27sm42606124wrc.55.2019.10.24.09.27.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Oct 2019 09:27:42 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 13/51] target/arm: Hoist computation of TBFLAG_A32.VFPEN Date: Thu, 24 Oct 2019 17:26:46 +0100 Message-Id: <20191024162724.31675-14-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191024162724.31675-1-peter.maydell@linaro.org> References: <20191024162724.31675-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::343 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+qemu-devel=archiver.kernel.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: 20191023150057.25731-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(-) 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; } -- 2.20.1