From nobody Sat May 11 11:09:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1627072545; cv=none; d=zohomail.com; s=zohoarc; b=EBXIEj6jNRCykAwoDXmfrCVcAFkbc6/MQ83JZQQQtO+xAZLOyYD91udbM0tBA0F/f17kGDPQFgOxQ1TnWfkWf9qB6Ic4HgRiQuF7IWxMpPMOZsGD0rrg0GRsfXyiMPlW+o4P0qxiZdyytInhqNanucFPYpg0jMJYnrYNup+S7p4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1627072545; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=GpJUCaic20diw7TGpsJ1YjJDDOjkpwMa5Bhf6kyWxKY=; b=KtVfVVdSVwjfzLTuLS5RVwJVrG/sZlstNhQwLVMK4HWuqNw5cn41xrbnrmSzgOv2Guc63qssYdyzxlQjlFAKQPCUKfUavEdCmLQJbns8nZwYOjtRjxsRl08uRY0Wo+BlE+oClmJCLvAAA1ZEednJ0HcwJBUDyDguMOqjoeHQQpo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1627072545003522.6775199074057; Fri, 23 Jul 2021 13:35:45 -0700 (PDT) Received: from localhost ([::1]:53536 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m71tW-0002Iy-Vo for importer@patchew.org; Fri, 23 Jul 2021 16:35:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48620) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m71rj-00005L-W7 for qemu-devel@nongnu.org; Fri, 23 Jul 2021 16:33:52 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:52047) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m71rh-0008B7-RG for qemu-devel@nongnu.org; Fri, 23 Jul 2021 16:33:51 -0400 Received: by mail-pj1-x1033.google.com with SMTP id mt6so3902569pjb.1 for ; Fri, 23 Jul 2021 13:33:49 -0700 (PDT) Received: from localhost.localdomain (204-210-126-223.res.spectrum.com. [204.210.126.223]) by smtp.gmail.com with ESMTPSA id v23sm6904754pje.33.2021.07.23.13.33.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jul 2021 13:33:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GpJUCaic20diw7TGpsJ1YjJDDOjkpwMa5Bhf6kyWxKY=; b=oOqj8eRD1N3a8xjK7sYpF0jLDrg42jdWzZBxRXqh1OuGhIUn5ue3lvXmOpWmgp+KXQ yPpeSr+JcVR/11W+KZhv7u1o+p3MdPv5SCJdkFxPUdZM8hStVwwjlQuD2HyN8By7Ud/a E7fFImyi9Zg2hWTYCUOecTCNDdRa9kkOV7gIDkrgA8j5hPAEbRKWD/z/HUkNe+9ySU3V NpvvfW9gkZ8AcqriP+vTjjEcGpFsgoaOf2meP2reS8fq4ENaPfTH6UmZFLm8j7sgXkLV ustrzEHpZs+EtTA7C2g7rn6Y0MFRi+XFUhrzqlxAca20LmSdyaFF5XBivEwDNkKQInXv /pKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GpJUCaic20diw7TGpsJ1YjJDDOjkpwMa5Bhf6kyWxKY=; b=taXiBGaL2CzHpjnbp9tuzV1W8q3b4xxjv3StIpp3Q5xX+aKEtH5jTbe2xdYZKZMX43 okK/gEHgv88ETKkaD5+T59sd8+tFuTeMnOPK2W4ShgZwYzj/eR9FA/APHfemmrZrEOhA 7b8S904LAP05/zgw4lJ06Cb/lJZvG1FuqK42ZsplZWJBzyNX3PuiaKkoUtOGY2soQhq4 c9gQp/P22HuYk36nMCapGI/bBfUjDToO0AQRvJRQ9c93PHCRzvx+OehGkPR/0PXS/v3e m20uaEc64jMCvL+jA+GvCRrw3eP+hhA/IqJFYbaLiearkMEGhUX5Mvs8HLwplL1ehD1s SQsQ== X-Gm-Message-State: AOAM530rCk7GeJTnjLvg3Z3kmB1j0wQFrPOxo3mVnHXNx3xOFbOUEaO9 m8kc86513CVo3GrnXOQooKHvBXfU6ZVqIA== X-Google-Smtp-Source: ABdhPJw7BKAm88jBsDRgiS8ruoMO5hkbinZEvNrIyZ1TGjiYILJlLMXmud5lyvViUTtrqe8EPKJV9A== X-Received: by 2002:a17:90a:f293:: with SMTP id fs19mr5483966pjb.212.1627072428681; Fri, 23 Jul 2021 13:33:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 1/3] target/arm: Correctly bound length in sve_zcr_get_valid_len Date: Fri, 23 Jul 2021 10:33:42 -1000 Message-Id: <20210723203344.968563-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210723203344.968563-1-richard.henderson@linaro.org> References: <20210723203344.968563-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1033; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1033.google.com X-Spam_score_int: -1 X-Spam_score: -0.2 X-Spam_bar: / X-Spam_report: (-0.2 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: , Cc: qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1627072545844100001 Content-Type: text/plain; charset="utf-8" Currently, our only caller is sve_zcr_len_for_el, which has already masked the length extracted from ZCR_ELx, so the masking done here is a nop. But we will shortly have uses from other locations, where the length will be unmasked. Saturate the length to ARM_MAX_VQ instead of truncating to the low 4 bits. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- target/arm/helper.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/target/arm/helper.c b/target/arm/helper.c index 0c07ca9837..8c1d8dbce3 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -6461,7 +6461,9 @@ static uint32_t sve_zcr_get_valid_len(ARMCPU *cpu, ui= nt32_t start_len) { uint32_t end_len; =20 - end_len =3D start_len &=3D 0xf; + start_len =3D MIN(start_len, ARM_MAX_VQ - 1); + end_len =3D start_len; + if (!test_bit(start_len, cpu->sve_vq_map)) { end_len =3D find_last_bit(cpu->sve_vq_map, start_len); assert(end_len < start_len); --=20 2.25.1 From nobody Sat May 11 11:09:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1627072546; cv=none; d=zohomail.com; s=zohoarc; b=nItZO81juUVE1XjIO2f8kT9qrtwHlldje+CytD8gHaa8/LQd7YSgB5l3JsruxI00Busqm2GLiGQb7XjdKUPTvn7KDCPcJ0W/mbgYdvd7C5ZZUqNiHSMkEKgM+lA1M+go/g6H6csey4+eTIknKyV3U35Du1DQvoyxQ6PwLQrQEQo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1627072546; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=n9uTWLvP9aAyzR+j1L+0x/gEwZ6THJXYrmtdZc8mvi8=; b=gnEc0l9/mULg5LWTHB30YtzE32rZqRsNmWWP9oumaomRW9tqu7yB0x6Iz0YpyBIcdAejYEO63nKfd1bu6xjxu2SnKO2cBPpWAyN0Lp50XN04K1TVfevtW4TyzQ3cgPMhIRdEPG64H/ZR6REBns5EGqcSU7gcBcT2KtfQ1oooyZ8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 162707254656450.719505345052994; Fri, 23 Jul 2021 13:35:46 -0700 (PDT) Received: from localhost ([::1]:53768 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m71tZ-0002Rq-D8 for importer@patchew.org; Fri, 23 Jul 2021 16:35:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48644) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m71rk-00007E-Vu for qemu-devel@nongnu.org; Fri, 23 Jul 2021 16:33:53 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:42959) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m71rj-0008CE-D0 for qemu-devel@nongnu.org; Fri, 23 Jul 2021 16:33:52 -0400 Received: by mail-pj1-x102d.google.com with SMTP id hg12-20020a17090b300cb02901736d9d2218so5359655pjb.1 for ; Fri, 23 Jul 2021 13:33:51 -0700 (PDT) Received: from localhost.localdomain (204-210-126-223.res.spectrum.com. [204.210.126.223]) by smtp.gmail.com with ESMTPSA id v23sm6904754pje.33.2021.07.23.13.33.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jul 2021 13:33:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n9uTWLvP9aAyzR+j1L+0x/gEwZ6THJXYrmtdZc8mvi8=; b=MoP1hGqPh8WiU+2HE5krsdbV73zUWJVZH4F2BL3WoM1MWP48isAHhjrN2Pfza+sTX0 rOYKN9e8MwPyM3g6JajIxO/aMHpUCQB/ih+mWa8+NcRqbgtPRZS23j9n6fuTSyx0q2dE tp90UI3kPSXEscnOcGe/a4tx+qabgPiewOYqm+nn0/6wyTtPqo2sY8V9GAn4TEZlBw6c /wBPldMMK1C/wcb+FqKsibcDCdSVOhuPI5dY9QlcfsBlTi7Nx1pEZXORR90gHmTfHbWl M00lisyRkpsD25gO6FGLsve904zboEXI1WRRfz9HiAjDcx7Rga/7cGKoy7kJx8Dc7IYT +PlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=n9uTWLvP9aAyzR+j1L+0x/gEwZ6THJXYrmtdZc8mvi8=; b=rNJpZDogVUTf0PLWIcFmndXEOJxVvaRjMx4DwWFoFcVWmJA8/vXfE+iUv93DPTPZ0H +Ja2I9aQpJjXdjSRKc2w103kUW+f78UHhl/3JqBPu5sgjkYTdwcI+MuTNGbTuRWaWg64 MkfOlyN3ZNoNUGnJKbmDJGzmG5w/NGtO5Hlx5M6dJhMCYpQKC5lA+U9tpbWRDrWpkIUV pj3J0i7/VGgynlRnCJo42a+37eIlpW929JeEvwVEFkrqaHTogQI+6ZcN5Yf5WLhsGN+R XhrCElQ2RNBbjgsLanlGfzaXmwKH5i9Ig09B4MUynaZ8Jt7gNpNvhyKZuxcOQQov3doq wR5g== X-Gm-Message-State: AOAM533/4LM5K0sEEPtpHujsN45xmjoUh40H4336JO+3XNqh8PWpPoen 4wAPNqwJCZ0cY41jLC2qwE03ovmaVBYn9w== X-Google-Smtp-Source: ABdhPJwQdqv9eZo1TISN91mwD+o8HaoBwPYLBanSQhrZ0S3/l18l3BRfHNqEUTJICKhJqwka2OxtCg== X-Received: by 2002:a17:90a:f3d2:: with SMTP id ha18mr15442537pjb.92.1627072430025; Fri, 23 Jul 2021 13:33:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 2/3] target/arm: Export aarch64_sve_zcr_get_valid_len Date: Fri, 23 Jul 2021 10:33:43 -1000 Message-Id: <20210723203344.968563-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210723203344.968563-1-richard.henderson@linaro.org> References: <20210723203344.968563-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102d; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: , Cc: qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1627072547640100005 Content-Type: text/plain; charset="utf-8" Rename from sve_zcr_get_valid_len and make accessible from outside of helper.c. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- target/arm/internals.h | 10 ++++++++++ target/arm/helper.c | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/target/arm/internals.h b/target/arm/internals.h index 11a72013f5..cd2ea8a388 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -177,6 +177,16 @@ void arm_translate_init(void); void arm_cpu_synchronize_from_tb(CPUState *cs, const TranslationBlock *tb); #endif /* CONFIG_TCG */ =20 +/** + * aarch64_sve_zcr_get_valid_len: + * @cpu: cpu context + * @start_len: maximum len to consider + * + * Return the maximum supported sve vector length <=3D @start_len. + * Note that both @start_len and the return value are in units + * of ZCR_ELx.LEN, so the vector bit length is (x + 1) * 128. + */ +uint32_t aarch64_sve_zcr_get_valid_len(ARMCPU *cpu, uint32_t start_len); =20 enum arm_fprounding { FPROUNDING_TIEEVEN, diff --git a/target/arm/helper.c b/target/arm/helper.c index 8c1d8dbce3..155d8bf239 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -6457,7 +6457,7 @@ int sve_exception_el(CPUARMState *env, int el) return 0; } =20 -static uint32_t sve_zcr_get_valid_len(ARMCPU *cpu, uint32_t start_len) +uint32_t aarch64_sve_zcr_get_valid_len(ARMCPU *cpu, uint32_t start_len) { uint32_t end_len; =20 @@ -6489,7 +6489,7 @@ uint32_t sve_zcr_len_for_el(CPUARMState *env, int el) zcr_len =3D MIN(zcr_len, 0xf & (uint32_t)env->vfp.zcr_el[3]); } =20 - return sve_zcr_get_valid_len(cpu, zcr_len); + return aarch64_sve_zcr_get_valid_len(cpu, zcr_len); } =20 static void zcr_write(CPUARMState *env, const ARMCPRegInfo *ri, --=20 2.25.1 From nobody Sat May 11 11:09:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1627072630; cv=none; d=zohomail.com; s=zohoarc; b=l6fEUkKoaN4Z2GhV7nzw3U5yTe/Ar/vh0R1e0KwatLaaqZFLX0f29ZMAGXL2KdQKzbSSCn/Z/4hCiJ2cEGDuXVqmo8F0Q1sx9/L4iB804p0hO1rZVsQJbrszBYMaZNJaurLU53sWpG/X7ghot3ylZmCZuJ6oXDJHBPP+hf1t0F0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1627072630; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=0quSyCi9kfxfY1A8lHcxgbeKm6SRDXR67Drrk/c6Yu4=; b=XH0uVPQBX00TrjM4hCTlktcqM6pBjwKZYhC0bcIxSMEqBRGCaeLeU+Zlw8k5l1MakcWXjw91MI4AJm5BhBv6mTcu9s0D+WdOmcLGHdwFQPgCciUDVZ6F+gj8SEJSrNDsdFvRzAy6GGgA+953f+reAm1h8uWz6lYriSHFxpHsSiQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1627072630466286.51906802068925; Fri, 23 Jul 2021 13:37:10 -0700 (PDT) Received: from localhost ([::1]:59358 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m71uv-0006FH-C3 for importer@patchew.org; Fri, 23 Jul 2021 16:37:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48674) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m71rm-0000Bg-Ir for qemu-devel@nongnu.org; Fri, 23 Jul 2021 16:33:54 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]:35825) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m71rk-0008DS-Jd for qemu-devel@nongnu.org; Fri, 23 Jul 2021 16:33:54 -0400 Received: by mail-pj1-x102c.google.com with SMTP id pf12-20020a17090b1d8cb0290175c085e7a5so10648443pjb.0 for ; Fri, 23 Jul 2021 13:33:52 -0700 (PDT) Received: from localhost.localdomain (204-210-126-223.res.spectrum.com. [204.210.126.223]) by smtp.gmail.com with ESMTPSA id v23sm6904754pje.33.2021.07.23.13.33.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jul 2021 13:33:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0quSyCi9kfxfY1A8lHcxgbeKm6SRDXR67Drrk/c6Yu4=; b=OSBpaMGhhw746qwKkwIKUkAMur1lohlJaZND/Y3xNGl44Pt8+895w4JiI49WzIElO3 rHZNxaR26h2dIjY9RmkoiJobIwUH7EJRRcEBZMedr2dyhMeKRMYPCAvQowBWdTbvbauJ o8YdebP8hT9iIKEHdv7RPhbjCPdMHvcAY8B+Cgnbh2lzb1aTgSdCOoO/I9N6x3tF6kTC opQdLvwFNjzmcPIo/FILP0nCwByPwZYXRKW5EMEZbDkm+AMPNwCib1IAGfE+fSncfk1C +PFkksP+N5zrp3jAcG5ZB7mjXkJiNS97GanzulD8s4oWPhvDv2+TnqIfT60a0xicq+F4 7QsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0quSyCi9kfxfY1A8lHcxgbeKm6SRDXR67Drrk/c6Yu4=; b=bBxYmKWA82EoYEe3gk9JBT+blUN0xhka+ZCMxzZm2zPaureHYx8N1Wr+kwCatWPOYL cA0Es1Kqiv6iaonimqH+alAyeihGUcaFf9UQjrwOA4DPRYsvc93gdWEYqkWS3OSszpzX wnXf/zz7BB/Z43tAwtzrv5EIV2H75fRBN9ojpqpxUb9sfItyk6qkB75UqmSvyTkpHY0P ZYccSsqYGPNhmyBw9eX5J9vJIfr538mW32V17CIoRCJLq+6WVv4fyXiLdYwXgwhsRjuz dYzlC/CMzfbPdQROh5yMmRP+99/tMo2L2TFN5A8yrFQ/tVnfO4blEX4BHux9HkihDwOh hOfg== X-Gm-Message-State: AOAM530Z4Ax57bZu24TfqxJK195Ns6k9yf3rTfU01OwvU2IrDQl7s6WP QdI+BdN5fXBQ0/Sm0s5krmJmP+mvahkWmQ== X-Google-Smtp-Source: ABdhPJyDLxOdipI/kHzlbg2aSUmOcENeqnGiddN4p8LLAmF2Y/siaUvVQwzed8UyfSJw0vyRNxg4WA== X-Received: by 2002:a17:90a:e453:: with SMTP id jp19mr15421410pjb.19.1627072431283; Fri, 23 Jul 2021 13:33:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 3/3] target/arm: Add sve-default-vector-length cpu property Date: Fri, 23 Jul 2021 10:33:44 -1000 Message-Id: <20210723203344.968563-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210723203344.968563-1-richard.henderson@linaro.org> References: <20210723203344.968563-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102c; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: , Cc: qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1627072632188100001 Content-Type: text/plain; charset="utf-8" Mirror the behavour of /proc/sys/abi/sve_default_vector_length under the real linux kernel. We have no way of passing along a real default across exec like the kernel can, but this is a decent way of adjusting the startup vector length of a process. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/482 Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- docs/system/arm/cpu-features.rst | 11 ++++++ target/arm/cpu.h | 5 +++ target/arm/cpu.c | 14 ++++++-- target/arm/cpu64.c | 60 ++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 2 deletions(-) diff --git a/docs/system/arm/cpu-features.rst b/docs/system/arm/cpu-feature= s.rst index c455442eaf..4ff36cc83f 100644 --- a/docs/system/arm/cpu-features.rst +++ b/docs/system/arm/cpu-features.rst @@ -376,3 +376,14 @@ verbose command lines. However, the recommended way t= o select vector lengths is to explicitly enable each desired length. Therefore only example's (1), (4), and (6) exhibit recommended uses of the properties. =20 +SVE User-mode Default Vector Length Property +-------------------------------------------- + +For qemu-aarch64, the cpu property `sve-default-vector-length=3DN` is +defined to mirror the Linux kernel parameter file +`/proc/sys/abi/sve_default_vector_length`. The default length, `N`, +is in units of bytes and must be between 16 and 8192. =20 +If not specified, the default vector length is 64. + +If the default length is larger than the maximum vector length enabled +with `sve` properties, the actual vector length will be reduced. diff --git a/target/arm/cpu.h b/target/arm/cpu.h index be9a4dceae..9f0a5f84d5 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1006,6 +1006,11 @@ struct ARMCPU { /* Used to set the maximum vector length the cpu will support. */ uint32_t sve_max_vq; =20 +#ifdef CONFIG_USER_ONLY + /* Used to set the default vector length at process start. */ + uint32_t sve_default_vq; +#endif + /* * In sve_vq_map each set bit is a supported vector length of * (bit-number + 1) * 16 bytes, i.e. each bit number + 1 is the vector diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 752b15bb79..2866dd7658 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -201,7 +201,8 @@ static void arm_cpu_reset(DeviceState *dev) env->cp15.cpacr_el1 =3D deposit64(env->cp15.cpacr_el1, 16, 2, 3); /* with reasonable vector length */ if (cpu_isar_feature(aa64_sve, cpu)) { - env->vfp.zcr_el[1] =3D MIN(cpu->sve_max_vq - 1, 3); + env->vfp.zcr_el[1] =3D + aarch64_sve_zcr_get_valid_len(cpu, cpu->sve_default_vq - 1= ); } /* * Enable TBI0 but not TBI1. @@ -1051,7 +1052,16 @@ static void arm_cpu_initfn(Object *obj) QLIST_INIT(&cpu->pre_el_change_hooks); QLIST_INIT(&cpu->el_change_hooks); =20 -#ifndef CONFIG_USER_ONLY +#ifdef CONFIG_USER_ONLY +# ifdef TARGET_AARCH64 + /* + * The linux kernel defaults to 512-bit vectors, when sve is supported. + * See documentation for /proc/sys/abi/sve_default_vector_length, and + * our corresponding sve-default-vector-length cpu property. + */ + cpu->sve_default_vq =3D 4; +# endif +#else /* Our inbound IRQ and FIQ lines */ if (kvm_enabled()) { /* VIRQ and VFIQ are unused with KVM but we add them to maintain diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index c7a1626bec..c690318a9b 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -559,6 +559,59 @@ static void cpu_arm_set_sve(Object *obj, bool value, E= rror **errp) cpu->isar.id_aa64pfr0 =3D t; } =20 +#ifdef CONFIG_USER_ONLY +/* Mirror linux /proc/sys/abi/sve_default_vector_length. */ +static void cpu_arm_set_sve_default_vec_len(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + ARMCPU *cpu =3D ARM_CPU(obj); + int32_t default_len, default_vq, remainder; + + if (!visit_type_int32(v, name, &default_len, errp)) { + return; + } + + /* Undocumented, but the kernel allows -1 to indicate "maximum". */ + if (default_len =3D=3D -1) { + cpu->sve_default_vq =3D ARM_MAX_VQ; + return; + } + + default_vq =3D default_len / 16; + remainder =3D default_len % 16; + + /* + * Note that the 512 max comes from include/uapi/asm/sve_context.h + * and is the maximum architectural width of ZCR_ELx.LEN. + */ + if (remainder || default_vq < 1 || default_vq > 512) { + error_setg(errp, "cannot set sve-default-vector-length"); + if (remainder) { + error_append_hint(errp, "Vector length not a multiple of 16\n"= ); + } else if (default_vq < 1) { + error_append_hint(errp, "Vector length smaller than 16\n"); + } else { + error_append_hint(errp, "Vector length larger than %d\n", + 512 * 16); + } + return; + } + + cpu->sve_default_vq =3D default_vq; +} + +static void cpu_arm_get_sve_default_vec_len(Object *obj, Visitor *v, + const char *name, void *opaque, + Error **errp) +{ + ARMCPU *cpu =3D ARM_CPU(obj); + int32_t value =3D cpu->sve_default_vq * 16; + + visit_type_int32(v, name, &value, errp); +} +#endif + void aarch64_add_sve_properties(Object *obj) { uint32_t vq; @@ -571,6 +624,13 @@ void aarch64_add_sve_properties(Object *obj) object_property_add(obj, name, "bool", cpu_arm_get_sve_vq, cpu_arm_set_sve_vq, NULL, NULL); } + +#ifdef CONFIG_USER_ONLY + /* Mirror linux /proc/sys/abi/sve_default_vector_length. */ + object_property_add(obj, "sve-default-vector-length", "int32", + cpu_arm_get_sve_default_vec_len, + cpu_arm_set_sve_default_vec_len, NULL, NULL); +#endif } =20 void arm_cpu_pauth_finalize(ARMCPU *cpu, Error **errp) --=20 2.25.1