From nobody Sat May 18 16:18:06 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=1598639890; cv=none; d=zohomail.com; s=zohoarc; b=UtxboO69sduZKswbyiXQ1GBrcFxoqsdh63a5Ac1a4kU40XCEtaSOV4cA48DTTekZQxGUAOvRUty8eZpG6s3Lr55CtUTtR6X5J8mEpg5ilzPq3eWiKinOTHYjh3naL1oE0C/76i+nrE4NM6aTeKSe2JM+O5/BBAmPep9KOSYFvjQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598639890; h=Content-Transfer-Encoding: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=+SArinhnBNgui3GNs7u+aKBEwW+643mTjOuIFolyhT4=; b=gZoEUGk2iqkGAt6O+g5NIS+d36NSjr9gmFyPkw0Rcd7ZTH2or2oXkmRXprqMSn7Wu/HoCFBC8Avc/kBWp9TPxdcRwSAsk9Rmbtug9LJP06pAOfPmwqdefwaC5Wn4y6rlwxwS4n1h2IqNdoNOXcrEYopjEH5jCgqo4eNDqZWkweU= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159863989038695.06506172704599; Fri, 28 Aug 2020 11:38:10 -0700 (PDT) Received: from localhost ([::1]:44796 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjGL-0007hx-Fu for importer@patchew.org; Fri, 28 Aug 2020 14:38:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58376) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCO-00027r-Qm for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:06 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:51270) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCJ-0005vI-Fb for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:02 -0400 Received: by mail-wm1-x341.google.com with SMTP id w2so132119wmi.1 for ; Fri, 28 Aug 2020 11:33:59 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.33.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:33:56 -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=+SArinhnBNgui3GNs7u+aKBEwW+643mTjOuIFolyhT4=; b=Rwdg2jqBQUKrOFgG4Da1Ln1wHNl7br4p9tmcc8/1oqPz6zyFbTroZGVlDJsxUe2+k6 auTkS4F6doocWS3zmmEd7eoGAa4XLC2IDVm+eWTBt9NNYA9JqmSo/g8dMpxzs4uMQCHk QNw9ibA7tXqF308MAyvJwSU18i1O34APggSwBOwodR413boXyPFWC6LaD7M/OPcbFsUk QPLvMCNsucajCL+Y3YbtP5q+/DfgZC/R1hloBe4HdTYiMCMSbYZUvRuw+F8OOXPW1xrg fUpEwtiU6wB5DUGdOOTAvzpchW9oUJdJzRk4uL/SAFnJ/16wWnel0Pj6rS0LukIwP2So vVjA== 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=+SArinhnBNgui3GNs7u+aKBEwW+643mTjOuIFolyhT4=; b=XOZOIUSRkzc0jd8llKnP4nxLjd7ow52QqZPzMEiZEg08NV89jT0vxWbNKEFGhZyJ3+ n/2JnBCV4R/j6oOCd96SJKB05UXF9MyaxiurL5jzReTecaMh9RC6X793q4odgF+zkiM1 J0RKwaJdI3ZoZB1zUx9V+CtEAVflc0VtAT+TRkqOtHps+QxX1eEMRb7MTa1/LOZv77QD 5n02d8ES5HvWGJmDXR06HP55JK8D74FMVCpL3OqRW1uQUhO2Kbxqfudk223UmjChQ5FG FGjsm85K6yzPbUGTxLks2qjm1J3T2QQwO8dbF+Za+ncujrxL6hBYo65npX1Hd9BLf7Se UmXg== X-Gm-Message-State: AOAM532gDZU6WIdE6w1Wb6rsEzO4O9YtD3kltX6Y9DxLbTu6Gl2Fs3ec SXQfGfWFN9sbH/bwLy+JhrD+SJWWIeRl2qOK X-Google-Smtp-Source: ABdhPJwccbFyJq5gru1mf1q5B16F9XpNw23ti26tyidoRHO3Cvwj+wqZ7kcdFuUps8IvpGS1Dfa0Vw== X-Received: by 2002:a7b:cb17:: with SMTP id u23mr13430wmj.79.1598639637959; Fri, 28 Aug 2020 11:33:57 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 01/45] target/arm: Remove local definitions of float constants Date: Fri, 28 Aug 2020 19:33:10 +0100 Message-Id: <20200828183354.27913-2-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::341; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x341.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" In several places the target/arm code defines local float constants for 2, 3 and 1.5, which are also provided by include/fpu/softfloat.h. Remove the unnecessary local duplicate versions. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper-a64.c | 11 ----------- target/arm/translate-sve.c | 4 ---- target/arm/vfp_helper.c | 4 ---- 3 files changed, 19 deletions(-) diff --git a/target/arm/helper-a64.c b/target/arm/helper-a64.c index 8682630ff6c..030821489b3 100644 --- a/target/arm/helper-a64.c +++ b/target/arm/helper-a64.c @@ -234,17 +234,6 @@ uint64_t HELPER(neon_cgt_f64)(float64 a, float64 b, vo= id *fpstp) * versions, these do a fully fused multiply-add or * multiply-add-and-halve. */ -#define float16_two make_float16(0x4000) -#define float16_three make_float16(0x4200) -#define float16_one_point_five make_float16(0x3e00) - -#define float32_two make_float32(0x40000000) -#define float32_three make_float32(0x40400000) -#define float32_one_point_five make_float32(0x3fc00000) - -#define float64_two make_float64(0x4000000000000000ULL) -#define float64_three make_float64(0x4008000000000000ULL) -#define float64_one_point_five make_float64(0x3FF8000000000000ULL) =20 uint32_t HELPER(recpsf_f16)(uint32_t a, uint32_t b, void *fpstp) { diff --git a/target/arm/translate-sve.c b/target/arm/translate-sve.c index 15ad6c7d323..e4cd6b62517 100644 --- a/target/arm/translate-sve.c +++ b/target/arm/translate-sve.c @@ -3803,10 +3803,6 @@ static bool trans_##NAME##_zpzi(DisasContext *s, arg= _rpri_esz *a) \ return true; \ } =20 -#define float16_two make_float16(0x4000) -#define float32_two make_float32(0x40000000) -#define float64_two make_float64(0x4000000000000000ULL) - DO_FP_IMM(FADD, fadds, half, one) DO_FP_IMM(FSUB, fsubs, half, one) DO_FP_IMM(FMUL, fmuls, half, two) diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index 64266ece620..02ab8d7f2d8 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -582,10 +582,6 @@ uint32_t HELPER(vfp_fcvt_f64_to_f16)(float64 a, void *= fpstp, uint32_t ahp_mode) return r; } =20 -#define float32_two make_float32(0x40000000) -#define float32_three make_float32(0x40400000) -#define float32_one_point_five make_float32(0x3fc00000) - float32 HELPER(recps_f32)(CPUARMState *env, float32 a, float32 b) { float_status *s =3D &env->vfp.standard_fp_status; --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598639745; cv=none; d=zohomail.com; s=zohoarc; b=HfyNYopv9ZRQiIC3A2JhXYgoA/Y5/1a5QLkc5CP98n8FWdItI8WU4SekhHL0ZQYViH1gm/FiFY+OxiHS8Ilu8GzV5hpioRS148jxQ20jyyNoLh6s5LzPLIau52/ib68FBdotIjiWMuIIjY/Ecnc8lheV5kKvzQAaDBPCkX7+Z40= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598639745; h=Content-Transfer-Encoding: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=k0ud5uE8Pk3z964JEoUoy6xdQiGva9otrDBqT+HZWCM=; b=hfLqhGwd2nl+Pv6ZzG8FvZZEMK7tbxSDWC38sQREtTFyHPKo37tl6EZFK9fbeB1na/UWHoonJMdlrwlX58RlSfTQ+y0ZVsqkqO0DABMl0tFAbDXHGu+lTH1R9y0993bhdSEviEKDe3cqybPul9pZFU1LrXppGtjVT+54j+cFAEA= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598639745017592.2891992298102; Fri, 28 Aug 2020 11:35:45 -0700 (PDT) Received: from localhost ([::1]:36288 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjDy-0004D6-UQ for importer@patchew.org; Fri, 28 Aug 2020 14:35:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58460) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCT-00028l-6v for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:11 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:55516) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCK-0005vS-VO for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:07 -0400 Received: by mail-wm1-x341.google.com with SMTP id a65so114446wme.5 for ; Fri, 28 Aug 2020 11:34:00 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.33.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:33:58 -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=k0ud5uE8Pk3z964JEoUoy6xdQiGva9otrDBqT+HZWCM=; b=uOuO0aRQgUOghGStr3dx6DhjthsfDJpBqPWg2dQNNKuOhq4vesNuPT+qvvojDq02Ai 7PxaBOOo49bDWotwWF8597MI0oRJCkhmYFyt5sahVSur4mwF5j0lp6Y4Ef7ciVTadGhd bJhpwe0wzt7I6A1HvX4/yrRAB0lGdK2PkcUr1H6KXR12VzIZ+Re9XwrGwxXvZrbDnI9P YXTBdpTjeLpx4DT5Lh/Uml2Gz1BpDe530/wUkaDk5FGOptwx9C07/bdYj91l6G62XMY6 g3wPr4G7Z3s+zew20S3vFL8f7tglYEmEhOqVSMhdVf7UgA5nzn7/j2qVO56PcKfkXCrx gZUQ== 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=k0ud5uE8Pk3z964JEoUoy6xdQiGva9otrDBqT+HZWCM=; b=Wy8Ci7tZnYcj8TbTmZ1tumd5jjP5T4vvQMTHg3vb48114xkTDiGJTcO1wNP8PQJQgC xMvn5sy5p8UNgdJrSl+DpXMK4QgH4+gInTIRy1ipVxz/6JTqVbVW37ytI48uazOjZTuW 53kXal6+o1QpIYFrLXU3PngtZvXaoEftzv5exjCZe+a9VxUPyO8TIYE4VNaOqFOtdf9Y eMl1ztgPrZLgxTXnsYq2h2Bh6Dmil7npihBDvTfd8VnwdvsamRArGEWf4lwuqE8coGhj 11fct7UXG8CNHSYOaOq3ZyJoEs7AHxX8BNNSKko0YvCE52mgvq0BmPZCxQ+ZCpm9i9nK CJAQ== X-Gm-Message-State: AOAM530S4woPmQSoppaLWeaVp4UC4fHvXkR7sXWfSBoxcIqfSPVE00wb vjlrahVkiMtxZXRFCXa8wOy8PA== X-Google-Smtp-Source: ABdhPJxAz/BTzFCDTps+xumf7/3azfVPt5E48QmCS0Uu9MSCwi7lmQ2uwX8UrISerZHk3C5oimEA8A== X-Received: by 2002:a1c:9a47:: with SMTP id c68mr20953wme.33.1598639639287; Fri, 28 Aug 2020 11:33:59 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 02/45] target/arm: Use correct ID register check for aa32_fp16_arith Date: Fri, 28 Aug 2020 19:33:11 +0100 Message-Id: <20200828183354.27913-3-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::341; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x341.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" The aa32_fp16_arith feature check function currently looks at the AArch64 ID_AA64PFR0 register. This is (as the comment notes) not correct. The bogus check was put in mostly to allow testing of the fp16 variants of the VCMLA instructions and it was something of a mistake that we allowed them to exist in master. Switch the feature check function to testing VMFR1.FPHP, which is what it ought to be. This will remove emulation of the VCMLA and VCADD insns from AArch32 code running on an AArch64 '-cpu max' using system emulation. (They were never enabled for aarch32 linux-user and system-emulation.) Since we weren't advertising their existence via the AArch32 ID register, well-behaved guests wouldn't have been using them anyway. Once we have implemented all the AArch32 support for the FP16 extension we will advertise it in the MVFR1 ID register field, which will reenable these insns along with all the others. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/cpu.h | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index ac857bdc2c1..a1c7d8ebae5 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -3519,12 +3519,7 @@ static inline bool isar_feature_aa32_predinv(const A= RMISARegisters *id) =20 static inline bool isar_feature_aa32_fp16_arith(const ARMISARegisters *id) { - /* - * This is a placeholder for use by VCMA until the rest of - * the ARMv8.2-FP16 extension is implemented for aa32 mode. - * At which point we can properly set and check MVFR1.FPHP. - */ - return FIELD_EX64(id->id_aa64pfr0, ID_AA64PFR0, FP) =3D=3D 1; + return FIELD_EX32(id->mvfr1, MVFR1, FPHP) >=3D 3; } =20 static inline bool isar_feature_aa32_vfp_simd(const ARMISARegisters *id) --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598639890; cv=none; d=zohomail.com; s=zohoarc; b=CmfNF2x/+DimfUCkiB4fIWWQWowgbwB32veKmNOsPikay8O5FATjhpnptJhuksBFnELDovmhXN+jb41ybYN2zS2WDlkZb6Xy8IO4yCA4YTiTi+RJaCY91jBn5OtYbFWkU4ZzRVqold/cC50Bgt+7UGDYhEIsiRHtFXdfPQlD+Yk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598639890; h=Content-Transfer-Encoding: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=P4s9oZdr3MItAR+7GTZ+E61G0Uww+8i5fEzDSEJq2dA=; b=T9MNjB6SxxXQ34cSy/6Pc2VaDp8xFI1KvD3Oxp5vfcIQWAxJjRygoFigi2xDD5poCxryCwH4H41qgVTDSNgI74gKjbebJCsyzVQNz4DFVn6DA1eGq+IBUCGFiQ4zrZ7ueN+9aHVQaZmYUy54P9FymqFpnqHmCAj/S6nujmBCqo8= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598639890500544.1005392308215; Fri, 28 Aug 2020 11:38:10 -0700 (PDT) Received: from localhost ([::1]:44878 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjGL-0007jp-Jx for importer@patchew.org; Fri, 28 Aug 2020 14:38:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58466) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCT-00028n-AG for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:11 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:39063) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCM-0005vi-SY for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:08 -0400 Received: by mail-wr1-x444.google.com with SMTP id a5so55124wrm.6 for ; Fri, 28 Aug 2020 11:34:01 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.33.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:33:59 -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=P4s9oZdr3MItAR+7GTZ+E61G0Uww+8i5fEzDSEJq2dA=; b=JXnnzZ8bHfd/j5/yRT/GAsAP2CgbF6dDFn1ikvwMaQANQxDC/5DQ8pl2Hzyry1WILr gE/V3rdZF+g1y0VKamcFAZCsbCL0EvGKGNLftJ2iN1eg4OLdUQoC4mQT5eOFsJAlirgg X6xdRj1YLEUXJ+SsHEQgOZnuOwXfrIVs9C6uEm6KE6qpY3FA/j6jfcbz5Z2TrsMlnlF6 ZNbq4vIZBM/v103Tv9Y1OFaT6mpt+cGYDn9s6HbLyr8oGGCEoE/xRDTRzbn9sp0NnXFC X7GjdAoccXyhqK1d6kZsovuZ/1NJhc2VpvB7yB+ecfK0NGZtMtMaQq/roc4G6/O5C0WZ MbWw== 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=P4s9oZdr3MItAR+7GTZ+E61G0Uww+8i5fEzDSEJq2dA=; b=EK0HrpG6anUsDOzWLS/5hbEdUCGe2qHCiRqsGOjMx5CI9rvLri7KN4+2yWtHheoH0y oKfSJ1oLh00QGq+ds1izDKStGfJaRyzY4Uw7lUzdbB1K2wUnT8JthY6MOVnNN1rpxZVl uuT1ylQe45zS9kKvknDR3+03UTLAb7iotStZInAp+PhCJAnMDQ9rkY0i7IBmZwgEgshu 0lcfVhTF5o3L+ieUbRIWglmqK6F1apoy2oqSQFW7Wen/0jcu9FHFpf3mZHWzRF3NszsZ 870m+gWHoJNeKfURvIrcwL9Teg+GG4d1DSiysAMylMv71adulf2IcjJ4yLR0xDAoP4i+ 0PXQ== X-Gm-Message-State: AOAM533wJ/tpueJSTpUJd0W4vLWq1BfWpuf49cExdAmzOWhHszemcgF0 iv5i2Z+27sv2t4knJ4Osji2urQ== X-Google-Smtp-Source: ABdhPJweSpCkSZ94SLSee8ZlnfY2mET10U7Y2rylbXpCN+FYhmothyAdAjnlkQ4txs5f80/HuTjLog== X-Received: by 2002:a5d:68d1:: with SMTP id p17mr256783wrw.378.1598639640339; Fri, 28 Aug 2020 11:34:00 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 03/45] target/arm: Implement VFP fp16 for VFP_BINOP operations Date: Fri, 28 Aug 2020 19:33:12 +0100 Message-Id: <20200828183354.27913-4-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::444; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x444.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implmeent VFP fp16 support for simple binary-operator VFP insns VADD, VSUB, VMUL, VDIV, VMINNM and VMAXNM: * make the VFP_BINOP() macro generate float16 helpers as well as float32 and float64 * implement a do_vfp_3op_hp() function similar to the existing do_vfp_3op_sp() * add decode for the half-precision insn patterns Note that the VFP_BINOP macro use creates a couple of unused helper functions vfp_maxh and vfp_minh, but they're small so it's not worth splitting the BINOP operations into "needs halfprec" and "no halfprec" groups. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 8 ++++ target/arm/vfp-uncond.decode | 3 ++ target/arm/vfp.decode | 4 ++ target/arm/vfp_helper.c | 5 ++ target/arm/translate-vfp.c.inc | 86 ++++++++++++++++++++++++++++++++++ 5 files changed, 106 insertions(+) diff --git a/target/arm/helper.h b/target/arm/helper.h index 3ca73a1764a..61e4e938861 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -101,20 +101,28 @@ DEF_HELPER_FLAGS_5(probe_access, TCG_CALL_NO_WG, void= , env, tl, i32, i32, i32) DEF_HELPER_1(vfp_get_fpscr, i32, env) DEF_HELPER_2(vfp_set_fpscr, void, env, i32) =20 +DEF_HELPER_3(vfp_addh, f16, f16, f16, ptr) DEF_HELPER_3(vfp_adds, f32, f32, f32, ptr) DEF_HELPER_3(vfp_addd, f64, f64, f64, ptr) +DEF_HELPER_3(vfp_subh, f16, f16, f16, ptr) DEF_HELPER_3(vfp_subs, f32, f32, f32, ptr) DEF_HELPER_3(vfp_subd, f64, f64, f64, ptr) +DEF_HELPER_3(vfp_mulh, f16, f16, f16, ptr) DEF_HELPER_3(vfp_muls, f32, f32, f32, ptr) DEF_HELPER_3(vfp_muld, f64, f64, f64, ptr) +DEF_HELPER_3(vfp_divh, f16, f16, f16, ptr) DEF_HELPER_3(vfp_divs, f32, f32, f32, ptr) DEF_HELPER_3(vfp_divd, f64, f64, f64, ptr) +DEF_HELPER_3(vfp_maxh, f16, f16, f16, ptr) DEF_HELPER_3(vfp_maxs, f32, f32, f32, ptr) DEF_HELPER_3(vfp_maxd, f64, f64, f64, ptr) +DEF_HELPER_3(vfp_minh, f16, f16, f16, ptr) DEF_HELPER_3(vfp_mins, f32, f32, f32, ptr) DEF_HELPER_3(vfp_mind, f64, f64, f64, ptr) +DEF_HELPER_3(vfp_maxnumh, f16, f16, f16, ptr) DEF_HELPER_3(vfp_maxnums, f32, f32, f32, ptr) DEF_HELPER_3(vfp_maxnumd, f64, f64, f64, ptr) +DEF_HELPER_3(vfp_minnumh, f16, f16, f16, ptr) DEF_HELPER_3(vfp_minnums, f32, f32, f32, ptr) DEF_HELPER_3(vfp_minnumd, f64, f64, f64, ptr) DEF_HELPER_1(vfp_negs, f32, f32) diff --git a/target/arm/vfp-uncond.decode b/target/arm/vfp-uncond.decode index 34ca164266f..ee700e51972 100644 --- a/target/arm/vfp-uncond.decode +++ b/target/arm/vfp-uncond.decode @@ -49,6 +49,9 @@ VSEL 1111 1110 0. cc:2 .... .... 1010 .0.0 .... \ VSEL 1111 1110 0. cc:2 .... .... 1011 .0.0 .... \ vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp dp=3D1 =20 +VMAXNM_hp 1111 1110 1.00 .... .... 1001 .0.0 .... @vfp_dnm_s +VMINNM_hp 1111 1110 1.00 .... .... 1001 .1.0 .... @vfp_dnm_s + VMAXNM_sp 1111 1110 1.00 .... .... 1010 .0.0 .... @vfp_dnm_s VMINNM_sp 1111 1110 1.00 .... .... 1010 .1.0 .... @vfp_dnm_s =20 diff --git a/target/arm/vfp.decode b/target/arm/vfp.decode index 2c793e3e87f..1ecd5e28ca0 100644 --- a/target/arm/vfp.decode +++ b/target/arm/vfp.decode @@ -115,18 +115,22 @@ VNMLS_dp ---- 1110 0.01 .... .... 1011 .0.0 .... = @vfp_dnm_d VNMLA_sp ---- 1110 0.01 .... .... 1010 .1.0 .... @vfp_dnm_s VNMLA_dp ---- 1110 0.01 .... .... 1011 .1.0 .... @vfp_dnm_d =20 +VMUL_hp ---- 1110 0.10 .... .... 1001 .0.0 .... @vfp_dnm_s VMUL_sp ---- 1110 0.10 .... .... 1010 .0.0 .... @vfp_dnm_s VMUL_dp ---- 1110 0.10 .... .... 1011 .0.0 .... @vfp_dnm_d =20 VNMUL_sp ---- 1110 0.10 .... .... 1010 .1.0 .... @vfp_dnm_s VNMUL_dp ---- 1110 0.10 .... .... 1011 .1.0 .... @vfp_dnm_d =20 +VADD_hp ---- 1110 0.11 .... .... 1001 .0.0 .... @vfp_dnm_s VADD_sp ---- 1110 0.11 .... .... 1010 .0.0 .... @vfp_dnm_s VADD_dp ---- 1110 0.11 .... .... 1011 .0.0 .... @vfp_dnm_d =20 +VSUB_hp ---- 1110 0.11 .... .... 1001 .1.0 .... @vfp_dnm_s VSUB_sp ---- 1110 0.11 .... .... 1010 .1.0 .... @vfp_dnm_s VSUB_dp ---- 1110 0.11 .... .... 1011 .1.0 .... @vfp_dnm_d =20 +VDIV_hp ---- 1110 1.00 .... .... 1001 .0.0 .... @vfp_dnm_s VDIV_sp ---- 1110 1.00 .... .... 1010 .0.0 .... @vfp_dnm_s VDIV_dp ---- 1110 1.00 .... .... 1011 .0.0 .... @vfp_dnm_d =20 diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index 02ab8d7f2d8..b8ca744bccc 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -236,6 +236,11 @@ void vfp_set_fpscr(CPUARMState *env, uint32_t val) #define VFP_HELPER(name, p) HELPER(glue(glue(vfp_,name),p)) =20 #define VFP_BINOP(name) \ +dh_ctype_f16 VFP_HELPER(name, h)(dh_ctype_f16 a, dh_ctype_f16 b, void *fps= tp) \ +{ \ + float_status *fpst =3D fpstp; \ + return float16_ ## name(a, b, fpst); \ +} \ float32 VFP_HELPER(name, s)(float32 a, float32 b, void *fpstp) \ { \ float_status *fpst =3D fpstp; \ diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index 4eeafb494ad..01a5fd65115 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -1266,6 +1266,54 @@ static bool do_vfp_3op_sp(DisasContext *s, VFPGen3Op= SPFn *fn, return true; } =20 +static bool do_vfp_3op_hp(DisasContext *s, VFPGen3OpSPFn *fn, + int vd, int vn, int vm, bool reads_vd) +{ + /* + * Do a half-precision operation. Functionally this is + * the same as do_vfp_3op_sp(), except: + * - it uses the FPST_FPCR_F16 + * - it doesn't need the VFP vector handling (fp16 is a + * v8 feature, and in v8 VFP vectors don't exist) + * - it does the aa32_fp16_arith feature test + */ + TCGv_i32 f0, f1, fd; + TCGv_ptr fpst; + + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + if (s->vec_len !=3D 0 || s->vec_stride !=3D 0) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + f0 =3D tcg_temp_new_i32(); + f1 =3D tcg_temp_new_i32(); + fd =3D tcg_temp_new_i32(); + fpst =3D fpstatus_ptr(FPST_FPCR_F16); + + neon_load_reg32(f0, vn); + neon_load_reg32(f1, vm); + + if (reads_vd) { + neon_load_reg32(fd, vd); + } + fn(fd, f0, f1, fpst); + neon_store_reg32(fd, vd); + + tcg_temp_free_i32(f0); + tcg_temp_free_i32(f1); + tcg_temp_free_i32(fd); + tcg_temp_free_ptr(fpst); + + return true; +} + static bool do_vfp_3op_dp(DisasContext *s, VFPGen3OpDPFn *fn, int vd, int vn, int vm, bool reads_vd) { @@ -1643,6 +1691,11 @@ static bool trans_VNMLA_dp(DisasContext *s, arg_VNML= A_dp *a) return do_vfp_3op_dp(s, gen_VNMLA_dp, a->vd, a->vn, a->vm, true); } =20 +static bool trans_VMUL_hp(DisasContext *s, arg_VMUL_sp *a) +{ + return do_vfp_3op_hp(s, gen_helper_vfp_mulh, a->vd, a->vn, a->vm, fals= e); +} + static bool trans_VMUL_sp(DisasContext *s, arg_VMUL_sp *a) { return do_vfp_3op_sp(s, gen_helper_vfp_muls, a->vd, a->vn, a->vm, fals= e); @@ -1677,6 +1730,11 @@ static bool trans_VNMUL_dp(DisasContext *s, arg_VNMU= L_dp *a) return do_vfp_3op_dp(s, gen_VNMUL_dp, a->vd, a->vn, a->vm, false); } =20 +static bool trans_VADD_hp(DisasContext *s, arg_VADD_sp *a) +{ + return do_vfp_3op_hp(s, gen_helper_vfp_addh, a->vd, a->vn, a->vm, fals= e); +} + static bool trans_VADD_sp(DisasContext *s, arg_VADD_sp *a) { return do_vfp_3op_sp(s, gen_helper_vfp_adds, a->vd, a->vn, a->vm, fals= e); @@ -1687,6 +1745,11 @@ static bool trans_VADD_dp(DisasContext *s, arg_VADD_= dp *a) return do_vfp_3op_dp(s, gen_helper_vfp_addd, a->vd, a->vn, a->vm, fals= e); } =20 +static bool trans_VSUB_hp(DisasContext *s, arg_VSUB_sp *a) +{ + return do_vfp_3op_hp(s, gen_helper_vfp_subh, a->vd, a->vn, a->vm, fals= e); +} + static bool trans_VSUB_sp(DisasContext *s, arg_VSUB_sp *a) { return do_vfp_3op_sp(s, gen_helper_vfp_subs, a->vd, a->vn, a->vm, fals= e); @@ -1697,6 +1760,11 @@ static bool trans_VSUB_dp(DisasContext *s, arg_VSUB_= dp *a) return do_vfp_3op_dp(s, gen_helper_vfp_subd, a->vd, a->vn, a->vm, fals= e); } =20 +static bool trans_VDIV_hp(DisasContext *s, arg_VDIV_sp *a) +{ + return do_vfp_3op_hp(s, gen_helper_vfp_divh, a->vd, a->vn, a->vm, fals= e); +} + static bool trans_VDIV_sp(DisasContext *s, arg_VDIV_sp *a) { return do_vfp_3op_sp(s, gen_helper_vfp_divs, a->vd, a->vn, a->vm, fals= e); @@ -1707,6 +1775,24 @@ static bool trans_VDIV_dp(DisasContext *s, arg_VDIV_= dp *a) return do_vfp_3op_dp(s, gen_helper_vfp_divd, a->vd, a->vn, a->vm, fals= e); } =20 +static bool trans_VMINNM_hp(DisasContext *s, arg_VMINNM_sp *a) +{ + if (!dc_isar_feature(aa32_vminmaxnm, s)) { + return false; + } + return do_vfp_3op_hp(s, gen_helper_vfp_minnumh, + a->vd, a->vn, a->vm, false); +} + +static bool trans_VMAXNM_hp(DisasContext *s, arg_VMAXNM_sp *a) +{ + if (!dc_isar_feature(aa32_vminmaxnm, s)) { + return false; + } + return do_vfp_3op_hp(s, gen_helper_vfp_maxnumh, + a->vd, a->vn, a->vm, false); +} + static bool trans_VMINNM_sp(DisasContext *s, arg_VMINNM_sp *a) { if (!dc_isar_feature(aa32_vminmaxnm, s)) { --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640191; cv=none; d=zohomail.com; s=zohoarc; b=ETuIOYcmKWIMKawbeggyhYCuWCsCTZrfp1iK6McOy28xMnvaVvnfZ++rHE5QMkDpxevD2vh6XA/lEGVLjsnffn9U4vkHDc3/TDHt4OOYLnKxt0Rg8UADP7jj8qax8GpDjuZueFN48iIvojAj9wZp3rxBzp33SccJ5fgQO0acjOQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640191; h=Content-Transfer-Encoding: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=6nNyus9jKbQ4YkB+NOZJt4muEZyHicfYGFub6gPtb28=; b=C6qPZ5puim0/aC6i//6EQkGMOgvM9+fWHcYHWQ1iqsP53v+SavjCjYmZeJc75sGrw0NXGc9KjQMwo9KWwYfOADeU0soX1lyJlezQYOWFXzbMD3KpZ3biTa2aAfukNrz3olygR3YMjlEzNWzs2dNqV07gyGzlUwvnt4jnVBL7Z6o= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640191584100.41556154592479; Fri, 28 Aug 2020 11:43:11 -0700 (PDT) Received: from localhost ([::1]:35770 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjLC-00079n-Qn for importer@patchew.org; Fri, 28 Aug 2020 14:43:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58580) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCa-0002Ak-9n for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:16 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:46379) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCQ-0005vv-AB for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:15 -0400 Received: by mail-wr1-x442.google.com with SMTP id i7so23327wre.13 for ; Fri, 28 Aug 2020 11:34:02 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:00 -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=6nNyus9jKbQ4YkB+NOZJt4muEZyHicfYGFub6gPtb28=; b=WrI4oCcxKsGUvQrDp+ny/1jodmCrCcLr8vbHO0UxtryeB+W4jk8m3aXYNzSEnSyiCJ gXmtYmOfJWgQLNxLUS5Fz3113W+pwd7s9kNcxqER87nkebEpoSf5mfKBv3CiOckHAi/q UzchvqIXOmiJE785+cwE5Bo2i02KB1chCV/9ivuEbnR0AkZzdeoJF4l+Ld1vw9gs1Wvf QymAbD6yRzvvspObq+Obfv/4RH7bOiq85QAv8wJxI/Vd+EHQyar3eothRSC5v1p/1sNr STH32Mymjilf7ilUmRNBZ3e+hWTa97WpS4wCQOPitmFUgrtLdgYXKcYl7gj7iJGKf37w dRyw== 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=6nNyus9jKbQ4YkB+NOZJt4muEZyHicfYGFub6gPtb28=; b=nbpRUEs7gafeL9iiW6zoCHmVQeS6mnsyEFsqhcn40C5tvoXP8XZ5PwZpHhtdslr0KK DPl5MKTTnTNJ3gtn9qy8yABnOdUAAkCXPtul2uWkBxp6cKsdCn1a/SXekmh4dxj0rslT A3erLJP0OoN14/VWrxis45PxUe9aogbaYGlGKa1nFEFNttR15GiF177HwzAq0WzX4tqX KE2vFV0jRk1nn5cZQEmI7Id7mTqfgi9wkve4ZFzf6oV44XD9Ru0vXfvz6xZWGjuepJ69 XPCI4vjoxYyCTrOvV6U33sWv+UQ3JRbhbwFzVxTPINEdDmQsbWjngmpLjuB2X7IGF67z OMYw== X-Gm-Message-State: AOAM532/ohAvssaUQt/N9fqHHT1G/fGUpW633jnHmlWDiXoJDF5WWoJ0 VsLuzJZbxBpyVnvi3H02AMS3ZA== X-Google-Smtp-Source: ABdhPJwJcPI0crOf6LvHu/zpdmSBWRNi7hd+mmNAiQOYDg9kWICH1MmBpADQYQTUo15X5WOEzcG9EQ== X-Received: by 2002:a5d:6946:: with SMTP id r6mr280159wrw.308.1598639641772; Fri, 28 Aug 2020 11:34:01 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 04/45] target/arm: Implement VFP fp16 VMLA, VMLS, VNMLS, VNMLA, VNMUL Date: Fri, 28 Aug 2020 19:33:13 +0100 Message-Id: <20200828183354.27913-5-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::442; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x442.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=unavailable 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implement fp16 versions of the VFP VMLA, VMLS, VNMLS, VNMLA, VNMUL instructions. (These are all the remaining ones which we implement via do_vfp_3op_[hsd]p().) Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 1 + target/arm/vfp.decode | 5 ++ target/arm/vfp_helper.c | 5 ++ target/arm/translate-vfp.c.inc | 84 ++++++++++++++++++++++++++++++++++ 4 files changed, 95 insertions(+) diff --git a/target/arm/helper.h b/target/arm/helper.h index 61e4e938861..58f9c4e933e 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -125,6 +125,7 @@ DEF_HELPER_3(vfp_maxnumd, f64, f64, f64, ptr) DEF_HELPER_3(vfp_minnumh, f16, f16, f16, ptr) DEF_HELPER_3(vfp_minnums, f32, f32, f32, ptr) DEF_HELPER_3(vfp_minnumd, f64, f64, f64, ptr) +DEF_HELPER_1(vfp_negh, f16, f16) DEF_HELPER_1(vfp_negs, f32, f32) DEF_HELPER_1(vfp_negd, f64, f64) DEF_HELPER_1(vfp_abss, f32, f32) diff --git a/target/arm/vfp.decode b/target/arm/vfp.decode index 1ecd5e28ca0..e5545076a51 100644 --- a/target/arm/vfp.decode +++ b/target/arm/vfp.decode @@ -103,15 +103,19 @@ VLDM_VSTM_dp ---- 1101 0.1 l:1 rn:4 .... 1011 imm:8 \ vd=3D%vd_dp p=3D1 u=3D0 w=3D1 =20 # 3-register VFP data-processing; bits [23,21:20,6] identify the operation. +VMLA_hp ---- 1110 0.00 .... .... 1001 .0.0 .... @vfp_dnm_s VMLA_sp ---- 1110 0.00 .... .... 1010 .0.0 .... @vfp_dnm_s VMLA_dp ---- 1110 0.00 .... .... 1011 .0.0 .... @vfp_dnm_d =20 +VMLS_hp ---- 1110 0.00 .... .... 1001 .1.0 .... @vfp_dnm_s VMLS_sp ---- 1110 0.00 .... .... 1010 .1.0 .... @vfp_dnm_s VMLS_dp ---- 1110 0.00 .... .... 1011 .1.0 .... @vfp_dnm_d =20 +VNMLS_hp ---- 1110 0.01 .... .... 1001 .0.0 .... @vfp_dnm_s VNMLS_sp ---- 1110 0.01 .... .... 1010 .0.0 .... @vfp_dnm_s VNMLS_dp ---- 1110 0.01 .... .... 1011 .0.0 .... @vfp_dnm_d =20 +VNMLA_hp ---- 1110 0.01 .... .... 1001 .1.0 .... @vfp_dnm_s VNMLA_sp ---- 1110 0.01 .... .... 1010 .1.0 .... @vfp_dnm_s VNMLA_dp ---- 1110 0.01 .... .... 1011 .1.0 .... @vfp_dnm_d =20 @@ -119,6 +123,7 @@ VMUL_hp ---- 1110 0.10 .... .... 1001 .0.0 .... = @vfp_dnm_s VMUL_sp ---- 1110 0.10 .... .... 1010 .0.0 .... @vfp_dnm_s VMUL_dp ---- 1110 0.10 .... .... 1011 .0.0 .... @vfp_dnm_d =20 +VNMUL_hp ---- 1110 0.10 .... .... 1001 .1.0 .... @vfp_dnm_s VNMUL_sp ---- 1110 0.10 .... .... 1010 .1.0 .... @vfp_dnm_s VNMUL_dp ---- 1110 0.10 .... .... 1011 .1.0 .... @vfp_dnm_d =20 diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index b8ca744bccc..f93ddf0b208 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -261,6 +261,11 @@ VFP_BINOP(minnum) VFP_BINOP(maxnum) #undef VFP_BINOP =20 +dh_ctype_f16 VFP_HELPER(neg, h)(dh_ctype_f16 a) +{ + return float16_chs(a); +} + float32 VFP_HELPER(neg, s)(float32 a) { return float32_chs(a); diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index 01a5fd65115..15bb23688bd 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -1547,6 +1547,21 @@ static bool do_vfp_2op_dp(DisasContext *s, VFPGen2Op= DPFn *fn, int vd, int vm) return true; } =20 +static void gen_VMLA_hp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fp= st) +{ + /* Note that order of inputs to the add matters for NaNs */ + TCGv_i32 tmp =3D tcg_temp_new_i32(); + + gen_helper_vfp_mulh(tmp, vn, vm, fpst); + gen_helper_vfp_addh(vd, vd, tmp, fpst); + tcg_temp_free_i32(tmp); +} + +static bool trans_VMLA_hp(DisasContext *s, arg_VMLA_sp *a) +{ + return do_vfp_3op_hp(s, gen_VMLA_hp, a->vd, a->vn, a->vm, true); +} + static void gen_VMLA_sp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fp= st) { /* Note that order of inputs to the add matters for NaNs */ @@ -1577,6 +1592,25 @@ static bool trans_VMLA_dp(DisasContext *s, arg_VMLA_= dp *a) return do_vfp_3op_dp(s, gen_VMLA_dp, a->vd, a->vn, a->vm, true); } =20 +static void gen_VMLS_hp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fp= st) +{ + /* + * VMLS: vd =3D vd + -(vn * vm) + * Note that order of inputs to the add matters for NaNs. + */ + TCGv_i32 tmp =3D tcg_temp_new_i32(); + + gen_helper_vfp_mulh(tmp, vn, vm, fpst); + gen_helper_vfp_negh(tmp, tmp); + gen_helper_vfp_addh(vd, vd, tmp, fpst); + tcg_temp_free_i32(tmp); +} + +static bool trans_VMLS_hp(DisasContext *s, arg_VMLS_sp *a) +{ + return do_vfp_3op_hp(s, gen_VMLS_hp, a->vd, a->vn, a->vm, true); +} + static void gen_VMLS_sp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fp= st) { /* @@ -1615,6 +1649,27 @@ static bool trans_VMLS_dp(DisasContext *s, arg_VMLS_= dp *a) return do_vfp_3op_dp(s, gen_VMLS_dp, a->vd, a->vn, a->vm, true); } =20 +static void gen_VNMLS_hp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr f= pst) +{ + /* + * VNMLS: -fd + (fn * fm) + * Note that it isn't valid to replace (-A + B) with (B - A) or similar + * plausible looking simplifications because this will give wrong resu= lts + * for NaNs. + */ + TCGv_i32 tmp =3D tcg_temp_new_i32(); + + gen_helper_vfp_mulh(tmp, vn, vm, fpst); + gen_helper_vfp_negh(vd, vd); + gen_helper_vfp_addh(vd, vd, tmp, fpst); + tcg_temp_free_i32(tmp); +} + +static bool trans_VNMLS_hp(DisasContext *s, arg_VNMLS_sp *a) +{ + return do_vfp_3op_hp(s, gen_VNMLS_hp, a->vd, a->vn, a->vm, true); +} + static void gen_VNMLS_sp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr f= pst) { /* @@ -1657,6 +1712,23 @@ static bool trans_VNMLS_dp(DisasContext *s, arg_VNML= S_dp *a) return do_vfp_3op_dp(s, gen_VNMLS_dp, a->vd, a->vn, a->vm, true); } =20 +static void gen_VNMLA_hp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr f= pst) +{ + /* VNMLA: -fd + -(fn * fm) */ + TCGv_i32 tmp =3D tcg_temp_new_i32(); + + gen_helper_vfp_mulh(tmp, vn, vm, fpst); + gen_helper_vfp_negh(tmp, tmp); + gen_helper_vfp_negh(vd, vd); + gen_helper_vfp_addh(vd, vd, tmp, fpst); + tcg_temp_free_i32(tmp); +} + +static bool trans_VNMLA_hp(DisasContext *s, arg_VNMLA_sp *a) +{ + return do_vfp_3op_hp(s, gen_VNMLA_hp, a->vd, a->vn, a->vm, true); +} + static void gen_VNMLA_sp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr f= pst) { /* VNMLA: -fd + -(fn * fm) */ @@ -1706,6 +1778,18 @@ static bool trans_VMUL_dp(DisasContext *s, arg_VMUL_= dp *a) return do_vfp_3op_dp(s, gen_helper_vfp_muld, a->vd, a->vn, a->vm, fals= e); } =20 +static void gen_VNMUL_hp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr f= pst) +{ + /* VNMUL: -(fn * fm) */ + gen_helper_vfp_mulh(vd, vn, vm, fpst); + gen_helper_vfp_negh(vd, vd); +} + +static bool trans_VNMUL_hp(DisasContext *s, arg_VNMUL_sp *a) +{ + return do_vfp_3op_hp(s, gen_VNMUL_hp, a->vd, a->vn, a->vm, false); +} + static void gen_VNMUL_sp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr f= pst) { /* VNMUL: -(fn * fm) */ --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640039; cv=none; d=zohomail.com; s=zohoarc; b=NtemuC5OFu4BXpBqnUTlk0S6x2AiMdbrHHmHpiQta8HBV5XB1H+SQqJEnWhabjel/gI4hQavKAPNIOZyP6TIckC3LCIgvDA+uOf5V2CLKhC/SuUHqjEzZxhfXCH9C35UeZ/v6InZGFOI4924uWN+jmRysDr9mVa8DSFU+fS4pek= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640039; h=Content-Transfer-Encoding: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=lqdF8B5zR97t5g0010GIU4n/HI2zsZ2s/f6t9ofxj/o=; b=ijW86/mrttNeFl6aIvx2eTvmGew7f0w1tvOutYHE8EmKgwYv+4nLyqLpe++b7XYI0d8z+zDTEDQ7JbwHHqs+iF1PjjxwtYMIFDt0Rk+yZbRRA9tE4xlDyA9Bpu9CH+GCWakgzIyqppvSTOERqLhjc5LcKbA8kooMglOgil9vHCI= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640039371484.2314057164608; Fri, 28 Aug 2020 11:40:39 -0700 (PDT) Received: from localhost ([::1]:54542 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjIk-0003HW-JO for importer@patchew.org; Fri, 28 Aug 2020 14:40:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58620) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCb-0002As-09 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:17 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:37743) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCS-0005w4-VG for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:16 -0400 Received: by mail-wr1-x444.google.com with SMTP id y3so65468wrl.4 for ; Fri, 28 Aug 2020 11:34:03 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:02 -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=lqdF8B5zR97t5g0010GIU4n/HI2zsZ2s/f6t9ofxj/o=; b=jtoUJuTmdzW1O2siNF3Ks231BvUfS+1u7KvMQDyKHRJWscAKlOpEhzxoLLrue3xKnP ORiy96vAVJ1xYkxZYRCOA+uFmJZewUc7uIdSCRSF+mUZuunaidjGgD5o2jOWnQIl9p7r UVDsCGKPmLd+WQ9u96OMmZ5LxM71oegQtgKHQkgYOQqi45Gvo5K1kkdCvq4CfSojsO+R frYMccrFugLC/DPpolHLCraK1FsSad189B7SCG0GPgRb7sz+kdmc1JxvehraYhgBCMyx X3w2QoaDaDe59mLkkco9u0hC+Qr6mov0DvccfCaciR884B+5utJwz4wC9YMetGK2ZWvx RLCA== 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=lqdF8B5zR97t5g0010GIU4n/HI2zsZ2s/f6t9ofxj/o=; b=e1et24dBNY9zDAjvrd1dD2o3TMqpDhL6FX8m8RC4JLUmN6hO0igtf16mW4ClxBWeLg zr7CmcIhZ8X75ePD0VNSuqUHm24iYe4ciSPy2KgJWh2lDVjErTo1vKWMhpWNyLg0l3WH s5EdIJOkK1SCiO+TCHy9okwqeYnWLw1mwT0VPtGkhktHkDN0SQT5LDXJJJA3o2YYYoNj 1xTSkRfccnor52/ljPGspNH3dJod4pTOypNUPda5IJUrzWtBO1kelhSYsGDk6Cjx91wk YNhDLUfP0/Onu27dFESYc4ND4VN1p9gB6LBYdcwiM+io6yz5eb3Qf3DYDiPVGMWTYQ4R O9GA== X-Gm-Message-State: AOAM533iOdAMah2bWH8mURapUvnl9BreJauv6SSOrtHMLv0NkLQC+9p5 1mMMmD2GOuQQaP4wFop8/IOb4g== X-Google-Smtp-Source: ABdhPJzoqcQZUSAab2EvD8snj3LiWeK43vIIT9Rpih4fID2Z09gsF20XTv7zgFIwYXk749+0KTDgzg== X-Received: by 2002:adf:c453:: with SMTP id a19mr269163wrg.179.1598639642979; Fri, 28 Aug 2020 11:34:02 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 05/45] target/arm: Macroify trans functions for VFMA, VFMS, VFNMA, VFNMS Date: Fri, 28 Aug 2020 19:33:14 +0100 Message-Id: <20200828183354.27913-6-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::444; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x444.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=unavailable 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Macroify creation of the trans functions for single and double precision VFMA, VFMS, VFNMA, VFNMS. The repetition was OK for two sizes, but we're about to add halfprec and it will get a bit more than seems reasonable. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-vfp.c.inc | 50 +++++++++------------------------- 1 file changed, 13 insertions(+), 37 deletions(-) diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index 15bb23688bd..9937fa569e4 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -1978,26 +1978,6 @@ static bool do_vfm_sp(DisasContext *s, arg_VFMA_sp *= a, bool neg_n, bool neg_d) return true; } =20 -static bool trans_VFMA_sp(DisasContext *s, arg_VFMA_sp *a) -{ - return do_vfm_sp(s, a, false, false); -} - -static bool trans_VFMS_sp(DisasContext *s, arg_VFMS_sp *a) -{ - return do_vfm_sp(s, a, true, false); -} - -static bool trans_VFNMA_sp(DisasContext *s, arg_VFNMA_sp *a) -{ - return do_vfm_sp(s, a, false, true); -} - -static bool trans_VFNMS_sp(DisasContext *s, arg_VFNMS_sp *a) -{ - return do_vfm_sp(s, a, true, true); -} - static bool do_vfm_dp(DisasContext *s, arg_VFMA_dp *a, bool neg_n, bool ne= g_d) { /* @@ -2069,25 +2049,21 @@ static bool do_vfm_dp(DisasContext *s, arg_VFMA_dp = *a, bool neg_n, bool neg_d) return true; } =20 -static bool trans_VFMA_dp(DisasContext *s, arg_VFMA_dp *a) -{ - return do_vfm_dp(s, a, false, false); -} +#define MAKE_ONE_VFM_TRANS_FN(INSN, PREC, NEGN, NEGD) \ + static bool trans_##INSN##_##PREC(DisasContext *s, \ + arg_##INSN##_##PREC *a) \ + { \ + return do_vfm_##PREC(s, a, NEGN, NEGD); \ + } =20 -static bool trans_VFMS_dp(DisasContext *s, arg_VFMS_dp *a) -{ - return do_vfm_dp(s, a, true, false); -} +#define MAKE_VFM_TRANS_FNS(PREC) \ + MAKE_ONE_VFM_TRANS_FN(VFMA, PREC, false, false) \ + MAKE_ONE_VFM_TRANS_FN(VFMS, PREC, true, false) \ + MAKE_ONE_VFM_TRANS_FN(VFNMA, PREC, false, true) \ + MAKE_ONE_VFM_TRANS_FN(VFNMS, PREC, true, true) =20 -static bool trans_VFNMA_dp(DisasContext *s, arg_VFNMA_dp *a) -{ - return do_vfm_dp(s, a, false, true); -} - -static bool trans_VFNMS_dp(DisasContext *s, arg_VFNMS_dp *a) -{ - return do_vfm_dp(s, a, true, true); -} +MAKE_VFM_TRANS_FNS(sp) +MAKE_VFM_TRANS_FNS(dp) =20 static bool trans_VMOV_imm_sp(DisasContext *s, arg_VMOV_imm_sp *a) { --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640065; cv=none; d=zohomail.com; s=zohoarc; b=Yz/6WSotpSVyjfDvzVudKHOmyLI1Ac72a2WBTfZ6WeDjeCfT85WZ6nE/Mf5vreYM8E6Le6e4AMoV+iT1krsVdO4CklaZIxZvkg64LMr/PdWMtCcsoPffRNaYG1DkXhxy38vKEml0R8AryvCLOaVq6ACDwN8ARs55ZaGeRvBl8yI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640065; h=Content-Transfer-Encoding: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=ZNfIzpYHPYkuYyuUz9Bf5EVKIeivQK7uERB0+nxxeLo=; b=K+ENW5OtVw2MBXnRKgaCmM5RGwdWb720cscAX1QfnTEH6gsnbIGU24ffEP61R8D7D5C6uZot4YB//2ouw4T8gd8Tdbgo+XThiZJmfcEfc4+MLJPxr3bqOz0I0oBIG5rZoSam2DayMEQUIpPQu14DZOpO2W5n0GNqvnLGwN3I4J8= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640065839527.139892381028; Fri, 28 Aug 2020 11:41:05 -0700 (PDT) Received: from localhost ([::1]:55586 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjJA-0003hT-I0 for importer@patchew.org; Fri, 28 Aug 2020 14:41:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58584) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCa-0002Am-9w for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:16 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:53240) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCS-0005wC-Ue for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:15 -0400 Received: by mail-wm1-x343.google.com with SMTP id q9so126617wmj.2 for ; Fri, 28 Aug 2020 11:34:04 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:03 -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=ZNfIzpYHPYkuYyuUz9Bf5EVKIeivQK7uERB0+nxxeLo=; b=KZZ1hAw9F9ktklPvXbdSziLnsXxePC2atOuyKbKxJ1MYgHVVm50t9FzGqcGYGYAMYe FiAdwCVq6evJ5TCUwv2QZ5U3o+gpI6OpjgJYKXRBILrt8v9OIiC6gJ1sYQwXJTSYPQwX cb6M1ZLQ5lwz84C0CVJfSInsRLIp65gxGOoKrDFh82zh/m+xIhVLrP0XhrOL8Lrt4cyY BYngtIkpfSgd7evggqvnaKZsi8Xi5bSuboKZ7RLvtHqFFGGUpZVoPT38xA5/7z7N+0YN KyNz5JuwSOydu4maHPh7zqobiNaNgRWsadGFVx1Kb3nLDrXFHFNqGgd4zLetcXXfNP7m JIQA== 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=ZNfIzpYHPYkuYyuUz9Bf5EVKIeivQK7uERB0+nxxeLo=; b=LkOpZxgeYsz54iDnSlvfafJpMJeQ2djKEtRCX5rXPuu/SSmQPQUbPaT92oF+Jz4phO vtSH3FVK0igL21z8dwL+DGMq8JMNnHVWfMBGBRmHlt9EERQNg70iiJNM9OH6382PvdPi ribkQt5F3XFBDPA97oVUW3gO0w4pCuvmEZhQ523vfHoJIkotclFs1Ib9kvCEi3LggQNJ Ux89X9z0cOQoZ0jdYbcGxHO/8M8ozOUdNgTefznDPkAJCHA0/B13ngky4+jfoRytY9uj RVDzjhN4uZK6eCLcPlJJTuB8Khi9D2Ujg46B4FOPAEumEhqxlf/zfEePEH3pLNd9LFKn X9gA== X-Gm-Message-State: AOAM531Do9nXx8fDLfbfl1UCthrO194UYPFQ2sCEpSUnWVyTDLv3w9X5 WpGGHFgqMz9SPnObqV6XnbPIeA== X-Google-Smtp-Source: ABdhPJxDy0rtol3iajGkabXKohhjywHjU593a4Erp/YyvqAue8hoNTyfZ4zVtlmVuZCI5QwSSF74qQ== X-Received: by 2002:a1c:a746:: with SMTP id q67mr36461wme.128.1598639644051; Fri, 28 Aug 2020 11:34:04 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 06/45] target/arm: Implement VFP fp16 for fused-multiply-add Date: Fri, 28 Aug 2020 19:33:15 +0100 Message-Id: <20200828183354.27913-7-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::343; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x343.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=unavailable 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implement VFP fp16 support for fused multiply-add insns VFNMA, VFNMS, VFMA, VFMS. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 1 + target/arm/vfp.decode | 5 +++ target/arm/vfp_helper.c | 7 ++++ target/arm/translate-vfp.c.inc | 64 ++++++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+) diff --git a/target/arm/helper.h b/target/arm/helper.h index 58f9c4e933e..538b1a20ce5 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -213,6 +213,7 @@ DEF_HELPER_FLAGS_3(vfp_fcvt_f64_to_f16, TCG_CALL_NO_RWG= , f16, f64, ptr, i32) =20 DEF_HELPER_4(vfp_muladdd, f64, f64, f64, f64, ptr) DEF_HELPER_4(vfp_muladds, f32, f32, f32, f32, ptr) +DEF_HELPER_4(vfp_muladdh, f16, f16, f16, f16, ptr) =20 DEF_HELPER_3(recps_f32, f32, env, f32, f32) DEF_HELPER_3(rsqrts_f32, f32, env, f32, f32) diff --git a/target/arm/vfp.decode b/target/arm/vfp.decode index e5545076a51..af4829e201b 100644 --- a/target/arm/vfp.decode +++ b/target/arm/vfp.decode @@ -139,6 +139,11 @@ VDIV_hp ---- 1110 1.00 .... .... 1001 .0.0 .... = @vfp_dnm_s VDIV_sp ---- 1110 1.00 .... .... 1010 .0.0 .... @vfp_dnm_s VDIV_dp ---- 1110 1.00 .... .... 1011 .0.0 .... @vfp_dnm_d =20 +VFMA_hp ---- 1110 1.10 .... .... 1001 .0. 0 .... @vfp_dnm_s +VFMS_hp ---- 1110 1.10 .... .... 1001 .1. 0 .... @vfp_dnm_s +VFNMA_hp ---- 1110 1.01 .... .... 1001 .0. 0 .... @vfp_dnm_s +VFNMS_hp ---- 1110 1.01 .... .... 1001 .1. 0 .... @vfp_dnm_s + VFMA_sp ---- 1110 1.10 .... .... 1010 .0. 0 .... @vfp_dnm_s VFMS_sp ---- 1110 1.10 .... .... 1010 .1. 0 .... @vfp_dnm_s VFNMA_sp ---- 1110 1.01 .... .... 1010 .0. 0 .... @vfp_dnm_s diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index f93ddf0b208..579ca3832d1 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -1062,6 +1062,13 @@ uint32_t HELPER(rsqrte_u32)(uint32_t a) } =20 /* VFPv4 fused multiply-accumulate */ +dh_ctype_f16 VFP_HELPER(muladd, h)(dh_ctype_f16 a, dh_ctype_f16 b, + dh_ctype_f16 c, void *fpstp) +{ + float_status *fpst =3D fpstp; + return float16_muladd(a, b, c, 0, fpst); +} + float32 VFP_HELPER(muladd, s)(float32 a, float32 b, float32 c, void *fpstp) { float_status *fpst =3D fpstp; diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index 9937fa569e4..b5eb9d66b3d 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -1913,6 +1913,69 @@ static bool trans_VMAXNM_dp(DisasContext *s, arg_VMA= XNM_dp *a) a->vd, a->vn, a->vm, false); } =20 +static bool do_vfm_hp(DisasContext *s, arg_VFMA_sp *a, bool neg_n, bool ne= g_d) +{ + /* + * VFNMA : fd =3D muladd(-fd, fn, fm) + * VFNMS : fd =3D muladd(-fd, -fn, fm) + * VFMA : fd =3D muladd( fd, fn, fm) + * VFMS : fd =3D muladd( fd, -fn, fm) + * + * These are fused multiply-add, and must be done as one floating + * point operation with no rounding between the multiplication and + * addition steps. NB that doing the negations here as separate + * steps is correct : an input NaN should come out with its sign + * bit flipped if it is a negated-input. + */ + TCGv_ptr fpst; + TCGv_i32 vn, vm, vd; + + /* + * Present in VFPv4 only, and only with the FP16 extension. + * Note that we can't rely on the SIMDFMAC check alone, because + * in a Neon-no-VFP core that ID register field will be non-zero. + */ + if (!dc_isar_feature(aa32_fp16_arith, s) || + !dc_isar_feature(aa32_simdfmac, s) || + !dc_isar_feature(aa32_fpsp_v2, s)) { + return false; + } + + if (s->vec_len !=3D 0 || s->vec_stride !=3D 0) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + vn =3D tcg_temp_new_i32(); + vm =3D tcg_temp_new_i32(); + vd =3D tcg_temp_new_i32(); + + neon_load_reg32(vn, a->vn); + neon_load_reg32(vm, a->vm); + if (neg_n) { + /* VFNMS, VFMS */ + gen_helper_vfp_negh(vn, vn); + } + neon_load_reg32(vd, a->vd); + if (neg_d) { + /* VFNMA, VFNMS */ + gen_helper_vfp_negh(vd, vd); + } + fpst =3D fpstatus_ptr(FPST_FPCR_F16); + gen_helper_vfp_muladdh(vd, vn, vm, vd, fpst); + neon_store_reg32(vd, a->vd); + + tcg_temp_free_ptr(fpst); + tcg_temp_free_i32(vn); + tcg_temp_free_i32(vm); + tcg_temp_free_i32(vd); + + return true; +} + static bool do_vfm_sp(DisasContext *s, arg_VFMA_sp *a, bool neg_n, bool ne= g_d) { /* @@ -2062,6 +2125,7 @@ static bool do_vfm_dp(DisasContext *s, arg_VFMA_dp *a= , bool neg_n, bool neg_d) MAKE_ONE_VFM_TRANS_FN(VFNMA, PREC, false, true) \ MAKE_ONE_VFM_TRANS_FN(VFNMS, PREC, true, true) =20 +MAKE_VFM_TRANS_FNS(hp) MAKE_VFM_TRANS_FNS(sp) MAKE_VFM_TRANS_FNS(dp) =20 --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598639769; cv=none; d=zohomail.com; s=zohoarc; b=OD5IaeswmF9M8U1H9637fU22vFG3fNE8DFCOg0ePJ9e/hVHgb4/+hdgncbHrl6ZcBQXzzXEhqN5+/ev0Bkwjdy3KzE48KXgaXi0MFroOY0ODlq2PbUGC1dF5NWS0Y9zj8xchpiH1fHr9JsqgRsp4VrEARt3KncC0Jx0N7QqJ3Rc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598639769; h=Content-Transfer-Encoding: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=pSgg9uuUHzyN4R9Ddc/CwltGoD1XbDu8WkO7Eutn4bA=; b=DIiIqYRVJ0NSzRJTpH+O3d+5mwgscQycQcr8mww9Bc285MpwGP83RlanmYnlklkfSHfWbE6LY+KvP/MX7hIJA3Eajaxb/D3RE1GTC9y35oLff5C2D8/XyUX0NX0jK63vHDF4d0J6jtvhYgPsH7x7dQQSRDo7e1ADmTUUZBSKgxY= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598639769829890.454010809198; Fri, 28 Aug 2020 11:36:09 -0700 (PDT) Received: from localhost ([::1]:37440 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjEP-0004ik-1W for importer@patchew.org; Fri, 28 Aug 2020 14:36:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58564) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCZ-0002A0-Es for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:15 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:46379) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCS-0005wN-Ue for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:15 -0400 Received: by mail-wr1-x441.google.com with SMTP id i7so23469wre.13 for ; Fri, 28 Aug 2020 11:34:06 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:04 -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=pSgg9uuUHzyN4R9Ddc/CwltGoD1XbDu8WkO7Eutn4bA=; b=kydivrvtESuVVrprgp1LdY6EQwXqs1cJtO+23hGFXfTCNYsL9olHnblQOrj2gGwfDJ ifA0PKcndF+zDhrGpi4YsdAiC/7LU5X06HGqZdfXdwWhxu6fjqAgYj5EpzELmuw1eqTa xLYZ7kLaA69XtJZMwlhOMSgqJ0TGKBmA++T+E1hVJTZl9y+n8VYCjeVbhtvK2Tuj/mOU q3hSDesnvxQM5lbprZQ0z4E/Oe1jBrho9ItRFAUXlzYtBsDpctoVlge3hzmwrpUgePFq +UNfBACNQ3QwORHWmZkBtcFmDIQJKFarXgishLDJmBjQj7YcIvB4RcVA/K1dXyJ05Jkc TZ3Q== 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=pSgg9uuUHzyN4R9Ddc/CwltGoD1XbDu8WkO7Eutn4bA=; b=uJVHlE70MO1Hj5N+o6o+ZdPYbmzsOp1gY1/EbjtIP1QQ6vqqBm7UkuV+D+neY0Zi4L HTnYQiD8lD2gcWnoInYWhCsJ8vq+d2jqIvP2xdIfCeXZz96wwWWj5aq6ucCAvJipMgCD 4PiEQ9L3xanse4Pn2AO1Hk8FbFkQly/2q8K9hs57dvHgWbKceqTAaRD5zN7+t5z0WeHv FHkLtgK0n8vKJImSBJQt0FvPOnYoVIP6zoammulavtzZD8M8Yqjt8O3jSZAQy4C/vjKN zXYzyuZSCpQ1s4uqOhev7qrTMBYjz6RQqeFcpj6zB8ow1Uef97pLC9OP+CETsnGG3xZY gyjA== X-Gm-Message-State: AOAM533WXbXVkKRcKQd52+ncRqABMwB2N1WeQVqTK0+krGGqByGjmpEV iY1jZjwL4JF0JZg2aFkZUWuE9ldvoL11PbGb X-Google-Smtp-Source: ABdhPJzWSYFkL3i7EdP8+kAbMwgXRSUUz7MEgkaVT9KhLp3w/hBWQoGNGHgvYaJFMxrltWd9En5rQA== X-Received: by 2002:a5d:54c8:: with SMTP id x8mr228373wrv.405.1598639645274; Fri, 28 Aug 2020 11:34:05 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 07/45] target/arm: Macroify uses of do_vfp_2op_sp() and do_vfp_2op_dp() Date: Fri, 28 Aug 2020 19:33:16 +0100 Message-Id: <20200828183354.27913-8-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::441; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x441.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Macroify the uses of do_vfp_2op_sp() and do_vfp_2op_dp(); this will make it easier to add the halfprec support. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-vfp.c.inc | 49 ++++++++++------------------------ 1 file changed, 14 insertions(+), 35 deletions(-) diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index b5eb9d66b3d..f891d860bb9 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -2234,55 +2234,34 @@ static bool trans_VMOV_imm_dp(DisasContext *s, arg_= VMOV_imm_dp *a) return true; } =20 -static bool trans_VMOV_reg_sp(DisasContext *s, arg_VMOV_reg_sp *a) -{ - return do_vfp_2op_sp(s, tcg_gen_mov_i32, a->vd, a->vm); -} +#define DO_VFP_2OP(INSN, PREC, FN) \ + static bool trans_##INSN##_##PREC(DisasContext *s, \ + arg_##INSN##_##PREC *a) \ + { \ + return do_vfp_2op_##PREC(s, FN, a->vd, a->vm); \ + } =20 -static bool trans_VMOV_reg_dp(DisasContext *s, arg_VMOV_reg_dp *a) -{ - return do_vfp_2op_dp(s, tcg_gen_mov_i64, a->vd, a->vm); -} +DO_VFP_2OP(VMOV_reg, sp, tcg_gen_mov_i32) +DO_VFP_2OP(VMOV_reg, dp, tcg_gen_mov_i64) =20 -static bool trans_VABS_sp(DisasContext *s, arg_VABS_sp *a) -{ - return do_vfp_2op_sp(s, gen_helper_vfp_abss, a->vd, a->vm); -} +DO_VFP_2OP(VABS, sp, gen_helper_vfp_abss) +DO_VFP_2OP(VABS, dp, gen_helper_vfp_absd) =20 -static bool trans_VABS_dp(DisasContext *s, arg_VABS_dp *a) -{ - return do_vfp_2op_dp(s, gen_helper_vfp_absd, a->vd, a->vm); -} - -static bool trans_VNEG_sp(DisasContext *s, arg_VNEG_sp *a) -{ - return do_vfp_2op_sp(s, gen_helper_vfp_negs, a->vd, a->vm); -} - -static bool trans_VNEG_dp(DisasContext *s, arg_VNEG_dp *a) -{ - return do_vfp_2op_dp(s, gen_helper_vfp_negd, a->vd, a->vm); -} +DO_VFP_2OP(VNEG, sp, gen_helper_vfp_negs) +DO_VFP_2OP(VNEG, dp, gen_helper_vfp_negd) =20 static void gen_VSQRT_sp(TCGv_i32 vd, TCGv_i32 vm) { gen_helper_vfp_sqrts(vd, vm, cpu_env); } =20 -static bool trans_VSQRT_sp(DisasContext *s, arg_VSQRT_sp *a) -{ - return do_vfp_2op_sp(s, gen_VSQRT_sp, a->vd, a->vm); -} - static void gen_VSQRT_dp(TCGv_i64 vd, TCGv_i64 vm) { gen_helper_vfp_sqrtd(vd, vm, cpu_env); } =20 -static bool trans_VSQRT_dp(DisasContext *s, arg_VSQRT_dp *a) -{ - return do_vfp_2op_dp(s, gen_VSQRT_dp, a->vd, a->vm); -} +DO_VFP_2OP(VSQRT, sp, gen_VSQRT_sp) +DO_VFP_2OP(VSQRT, dp, gen_VSQRT_dp) =20 static bool trans_VCMP_sp(DisasContext *s, arg_VCMP_sp *a) { --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640309; cv=none; d=zohomail.com; s=zohoarc; b=HBWbN1XWseo4nLD+yiax/d7Q683pKv2rtv4o9XWPGZuAeHZWxfwwQSswC9G9rSTsqcuoj469N0lBxnSgkVuLe5flaidOboDuYiUY8wu1F3E451UGQHe9ptSvXzfH+wetrAU/oX8MLztZZHGjmKUFHD3bS6OCyYHNt3gJFPOtouk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640309; h=Content-Transfer-Encoding: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=h8Y81SV2BHJwRYSGbiFUoFZOvLcZcRtp+4/jdrQZKg4=; b=WAXSA5u4+IiKqp5ZGe6SxkZfGwtsJ/ZXnf0M64Gr2rIt65IqPBDkPSrOR9cvuYp5uAoBUc0rmmAmymfL1GgVHh1B6d7YhILF8nITvTQT8XniAxKIV3NzPsailBk3pYMMjT1PCxZ5AQePFuzbRHewNv9ngRsRwqiaPjnLBTBsvFM= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640309629543.2110134854657; Fri, 28 Aug 2020 11:45:09 -0700 (PDT) Received: from localhost ([::1]:45322 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjN6-0002WH-QC for importer@patchew.org; Fri, 28 Aug 2020 14:45:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58644) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCc-0002DI-1j for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:18 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]:56283) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCS-0005wa-W1 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:17 -0400 Received: by mail-wm1-x32b.google.com with SMTP id a65so114703wme.5 for ; Fri, 28 Aug 2020 11:34:07 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:05 -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=h8Y81SV2BHJwRYSGbiFUoFZOvLcZcRtp+4/jdrQZKg4=; b=pIPsQw2W5nNBtsNekCqVE07DOtKo4R1xOGYF4BJVEUIMAU/bdOPd5L15dEPs4yGUMv pRtju7cFmTqtUS0oUG1kba4lupoYhndTjpPU3Xmw7k0rLAhxTxnsl4i96oQw1svcVSDc GRAPnQUafxnl6revSROzsCffxg37lSUwdAiYfVuL80awKRDMi+s4DyxXWcYCT4aR9zeC VqjVC1MYA19b6iASmSzdc0bz7o7yoSInK3eGgKldLmH8lzkqSevfHxdHfWtHgBy3bl1F XktQOI4N1VxcnJmbYHJjnWm6oCM3gEuF2B8HQtQ8RZN0KSaMMUzXs7KtLasLWE9ZxrKI nifw== 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=h8Y81SV2BHJwRYSGbiFUoFZOvLcZcRtp+4/jdrQZKg4=; b=EhhmD3qyz9Ip9FLSEQ+hqpezPcHbDYOE83VSAq9pb3DjPtIq9K3lW6la3yjWAQ3dgq K2nZ/3ImPBVWlWwaqogAgrQoFLIJrF9gHTt6vpcBnCV3gRufOOg1xM4GaAjuZPz1cyCT UtyI8Gt09eTGjEUpSkmtaKYZ0/23l8gJD/LPdTzGlig9wUwFvtQ7M1o9KIqumcxqtpj1 b4RAICVcRSRsqy95+U+CUyplosPj3qPvs58zTyt3rz2/MiDMYnieNiDtMSs7tTpSj3Wl eQg4ZSNEJrU3qUrC8PWgSfhMK/ocHrL3jLvp5I1GI8dBmA4otoM9N27mhmi8IsaV2vkr /7qQ== X-Gm-Message-State: AOAM531OoqVG/MjviEaP4Xn06vB/fMMh7A3iJ+d+FS/W01i0CDsB0JnU ZCwHMMCStYFqM3AIoiyEHut9Iw== X-Google-Smtp-Source: ABdhPJzFGvy8ob6KRvSpd8+MtSLJytbMMuqfef0tGkc36yeAKcrKKPYIYazGOjU4KOpfFItA5kV6fQ== X-Received: by 2002:a7b:cc0b:: with SMTP id f11mr24767wmh.31.1598639646597; Fri, 28 Aug 2020 11:34:06 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 08/45] target/arm: Implement VFP fp16 for VABS, VNEG, VSQRT Date: Fri, 28 Aug 2020 19:33:17 +0100 Message-Id: <20200828183354.27913-9-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::32b; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32b.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implement VFP fp16 for VABS, VNEG and VSQRT. This is all the fp16 insns that use the DO_VFP_2OP macro, because there is no fp16 version of VMOV_reg. Notes: * the gen_helper_vfp_negh already exists as we needed to create it for the fp16 multiply-add insns * as usual we need to use the f16 version of the fp_status; this is only relevant for VSQRT Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 2 ++ target/arm/vfp.decode | 3 +++ target/arm/vfp_helper.c | 10 +++++++++ target/arm/translate-vfp.c.inc | 40 ++++++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+) diff --git a/target/arm/helper.h b/target/arm/helper.h index 538b1a20ce5..37739b0e788 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -128,8 +128,10 @@ DEF_HELPER_3(vfp_minnumd, f64, f64, f64, ptr) DEF_HELPER_1(vfp_negh, f16, f16) DEF_HELPER_1(vfp_negs, f32, f32) DEF_HELPER_1(vfp_negd, f64, f64) +DEF_HELPER_1(vfp_absh, f16, f16) DEF_HELPER_1(vfp_abss, f32, f32) DEF_HELPER_1(vfp_absd, f64, f64) +DEF_HELPER_2(vfp_sqrth, f16, f16, env) DEF_HELPER_2(vfp_sqrts, f32, f32, env) DEF_HELPER_2(vfp_sqrtd, f64, f64, env) DEF_HELPER_3(vfp_cmps, void, f32, f32, env) diff --git a/target/arm/vfp.decode b/target/arm/vfp.decode index af4829e201b..5c64701dde0 100644 --- a/target/arm/vfp.decode +++ b/target/arm/vfp.decode @@ -162,12 +162,15 @@ VMOV_imm_dp ---- 1110 1.11 .... .... 1011 0000 .... \ VMOV_reg_sp ---- 1110 1.11 0000 .... 1010 01.0 .... @vfp_dm_ss VMOV_reg_dp ---- 1110 1.11 0000 .... 1011 01.0 .... @vfp_dm_dd =20 +VABS_hp ---- 1110 1.11 0000 .... 1001 11.0 .... @vfp_dm_ss VABS_sp ---- 1110 1.11 0000 .... 1010 11.0 .... @vfp_dm_ss VABS_dp ---- 1110 1.11 0000 .... 1011 11.0 .... @vfp_dm_dd =20 +VNEG_hp ---- 1110 1.11 0001 .... 1001 01.0 .... @vfp_dm_ss VNEG_sp ---- 1110 1.11 0001 .... 1010 01.0 .... @vfp_dm_ss VNEG_dp ---- 1110 1.11 0001 .... 1011 01.0 .... @vfp_dm_dd =20 +VSQRT_hp ---- 1110 1.11 0001 .... 1001 11.0 .... @vfp_dm_ss VSQRT_sp ---- 1110 1.11 0001 .... 1010 11.0 .... @vfp_dm_ss VSQRT_dp ---- 1110 1.11 0001 .... 1011 11.0 .... @vfp_dm_dd =20 diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index 579ca3832d1..cc7fb6ddb6a 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -276,6 +276,11 @@ float64 VFP_HELPER(neg, d)(float64 a) return float64_chs(a); } =20 +dh_ctype_f16 VFP_HELPER(abs, h)(dh_ctype_f16 a) +{ + return float16_abs(a); +} + float32 VFP_HELPER(abs, s)(float32 a) { return float32_abs(a); @@ -286,6 +291,11 @@ float64 VFP_HELPER(abs, d)(float64 a) return float64_abs(a); } =20 +dh_ctype_f16 VFP_HELPER(sqrt, h)(dh_ctype_f16 a, CPUARMState *env) +{ + return float16_sqrt(a, &env->vfp.fp_status_f16); +} + float32 VFP_HELPER(sqrt, s)(float32 a, CPUARMState *env) { return float32_sqrt(a, &env->vfp.fp_status); diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index f891d860bb9..99b722b75bd 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -1469,6 +1469,38 @@ static bool do_vfp_2op_sp(DisasContext *s, VFPGen2Op= SPFn *fn, int vd, int vm) return true; } =20 +static bool do_vfp_2op_hp(DisasContext *s, VFPGen2OpSPFn *fn, int vd, int = vm) +{ + /* + * Do a half-precision operation. Functionally this is + * the same as do_vfp_2op_sp(), except: + * - it doesn't need the VFP vector handling (fp16 is a + * v8 feature, and in v8 VFP vectors don't exist) + * - it does the aa32_fp16_arith feature test + */ + TCGv_i32 f0; + + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + if (s->vec_len !=3D 0 || s->vec_stride !=3D 0) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + f0 =3D tcg_temp_new_i32(); + neon_load_reg32(f0, vm); + fn(f0, f0); + neon_store_reg32(f0, vd); + tcg_temp_free_i32(f0); + + return true; +} + static bool do_vfp_2op_dp(DisasContext *s, VFPGen2OpDPFn *fn, int vd, int = vm) { uint32_t delta_m =3D 0; @@ -2244,12 +2276,19 @@ static bool trans_VMOV_imm_dp(DisasContext *s, arg_= VMOV_imm_dp *a) DO_VFP_2OP(VMOV_reg, sp, tcg_gen_mov_i32) DO_VFP_2OP(VMOV_reg, dp, tcg_gen_mov_i64) =20 +DO_VFP_2OP(VABS, hp, gen_helper_vfp_absh) DO_VFP_2OP(VABS, sp, gen_helper_vfp_abss) DO_VFP_2OP(VABS, dp, gen_helper_vfp_absd) =20 +DO_VFP_2OP(VNEG, hp, gen_helper_vfp_negh) DO_VFP_2OP(VNEG, sp, gen_helper_vfp_negs) DO_VFP_2OP(VNEG, dp, gen_helper_vfp_negd) =20 +static void gen_VSQRT_hp(TCGv_i32 vd, TCGv_i32 vm) +{ + gen_helper_vfp_sqrth(vd, vm, cpu_env); +} + static void gen_VSQRT_sp(TCGv_i32 vd, TCGv_i32 vm) { gen_helper_vfp_sqrts(vd, vm, cpu_env); @@ -2260,6 +2299,7 @@ static void gen_VSQRT_dp(TCGv_i64 vd, TCGv_i64 vm) gen_helper_vfp_sqrtd(vd, vm, cpu_env); } =20 +DO_VFP_2OP(VSQRT, hp, gen_VSQRT_hp) DO_VFP_2OP(VSQRT, sp, gen_VSQRT_sp) DO_VFP_2OP(VSQRT, dp, gen_VSQRT_dp) =20 --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598639771; cv=none; d=zohomail.com; s=zohoarc; b=RaTCCSgbZwF2RNT+RMb1SLmntKOvKEQiESSd+DXPZpdhvtY71nmBfmDY3ZPXiiBPSrJKV4c7zC4bf/Nz3Azw+CIAIjYTRX2RCsnfcowSBkEuR9VpzX4ylsULqanFMEvjSeSetawfVXUeUHkhZ6QYeL+vHB+M4Q9A4YYRldTQAAI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598639771; h=Content-Transfer-Encoding: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=ok9515A+UWatZQsVTa5LF82a4fmDdsSTs/unMMozW6w=; b=M3rz3Yvl/vpKXlXxS1xaPY1qNxv7st8zZhFPEKfjHAkDk4kTdzEEeMn2ldACEMVmkVHKtAcQN8qHmKrup32gUT5DjJrVPExmhlUDWzR/rbnrgP5fTqiMiRzIfeE6lewQMEJGsGNuwOibr3fyeanfXznVTYOcwb+hvWZebiktO4A= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598639771383313.8960197958422; Fri, 28 Aug 2020 11:36:11 -0700 (PDT) Received: from localhost ([::1]:37670 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjEQ-0004oG-JG for importer@patchew.org; Fri, 28 Aug 2020 14:36:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58648) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCc-0002Dj-5x for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:18 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:45808) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCT-0005wk-W3 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:17 -0400 Received: by mail-wr1-x442.google.com with SMTP id h15so27145wrt.12 for ; Fri, 28 Aug 2020 11:34:08 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:06 -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=ok9515A+UWatZQsVTa5LF82a4fmDdsSTs/unMMozW6w=; b=mBNatkNgZ+cfLMDqOkG56zeB0OfcZu79i2dAU8ODvkhAQGD98QeQkvPnsEfBF6d0Sf aJOXCV0TE77AvdjU8ZrPCOoqOBH5Xcks7oNOKXeIh43vi0bosHoeTEdUznjhD3sa7DMN AqTJNVLqx+Oq4GBLG1ROinxJ4HkxPSdx4ZGnNqMmbX0LMgZbBZNq+DDk+syUyXUlSzh3 vU4AJjDRi/RQmPEG2apjyE+X2Vy/BerXYO5MI6E7aUh9KaRc3deX2u5aWpmEMOT/qD/o gxi8gPYUExNpnOHKe9AAy778LH7Lk8/FW93BsHSlAKO//BSA4ulrDYRMpB+n8Xa149QG BLGQ== 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=ok9515A+UWatZQsVTa5LF82a4fmDdsSTs/unMMozW6w=; b=rkfOvOp53NqLvz3/cHsa3BI8WvmWb48qK3Vhp+fM4eozDmzeCX9Or4fG0rmDmn1EcH WW4bA4mpPf5G4WCFCIrYwWDDYrHgBYbzkimqrmitHpMYWYtuWhWdas+ewIKC8S9rtmdY OfXxkq2vsMVNtjIwzZuZKtD4KPir3VKGzUmAuU+vUj/U1o5xdDU01xgeg0JueHNS2MH0 B2tzR2OBcv5rX5bbZY46gCjRT9ltUhpiZERWAe7xwh9Vq2ljQgMV/bnmvC4ONNeFwi10 xeAlzZbGTmi4ixCgi0neJZ7dzzbk16YxWz2xdr8I+cigvG1tjGaHnmVjlAdXrdiCRGLH YcEQ== X-Gm-Message-State: AOAM5336tACw8x/n0HVPVY+NgNttpXlV5FZiotzUqGy05dvb7AyP+hpT /t8fvY3jq9Qk8f5Cyjdc79h+FjOT8XYxdCXl X-Google-Smtp-Source: ABdhPJzu8v6aqFcrSzLetM2tkCL21Z1gYmK05KsKcc4zxxxEAYWUaozZC2mVoGqiKn6pDdcaUXULew== X-Received: by 2002:adf:9387:: with SMTP id 7mr263656wrp.332.1598639647680; Fri, 28 Aug 2020 11:34:07 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 09/45] target/arm: Implement VFP fp16 for VMOV immediate Date: Fri, 28 Aug 2020 19:33:18 +0100 Message-Id: <20200828183354.27913-10-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::442; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x442.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implement VFP fp16 support for the VMOV immediate insn. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/vfp.decode | 2 ++ target/arm/translate-vfp.c.inc | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/target/arm/vfp.decode b/target/arm/vfp.decode index 5c64701dde0..c898183771b 100644 --- a/target/arm/vfp.decode +++ b/target/arm/vfp.decode @@ -154,6 +154,8 @@ VFMS_dp ---- 1110 1.10 .... .... 1011 .1.0 .... = @vfp_dnm_d VFNMA_dp ---- 1110 1.01 .... .... 1011 .0.0 .... @vfp_dnm_d VFNMS_dp ---- 1110 1.01 .... .... 1011 .1.0 .... @vfp_dnm_d =20 +VMOV_imm_hp ---- 1110 1.11 .... .... 1001 0000 .... \ + vd=3D%vd_sp imm=3D%vmov_imm VMOV_imm_sp ---- 1110 1.11 .... .... 1010 0000 .... \ vd=3D%vd_sp imm=3D%vmov_imm VMOV_imm_dp ---- 1110 1.11 .... .... 1011 0000 .... \ diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index 99b722b75bd..c864178ad4e 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -2161,6 +2161,28 @@ MAKE_VFM_TRANS_FNS(hp) MAKE_VFM_TRANS_FNS(sp) MAKE_VFM_TRANS_FNS(dp) =20 +static bool trans_VMOV_imm_hp(DisasContext *s, arg_VMOV_imm_sp *a) +{ + TCGv_i32 fd; + + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + if (s->vec_len !=3D 0 || s->vec_stride !=3D 0) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + fd =3D tcg_const_i32(vfp_expand_imm(MO_16, a->imm)); + neon_store_reg32(fd, a->vd); + tcg_temp_free_i32(fd); + return true; +} + static bool trans_VMOV_imm_sp(DisasContext *s, arg_VMOV_imm_sp *a) { uint32_t delta_d =3D 0; --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640165; cv=none; d=zohomail.com; s=zohoarc; b=gnrYF4GVczf2jCjA5umDTh8hH/evWftAdCPOwg+iym4AWQn14vzF/yRdvfzvWn5lhcEIhUtcaRNLkQFgDfQ6HH/kpBFNJO4g9lgzUtZ0EtBq1X7aSkIsBEo7cIeTA1elicry8N7Q0YScuwja/u8BQOi151ecAckeHZg7c64LSBE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640165; h=Content-Transfer-Encoding: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=CYOYh3fW4PMtwewY4tYeCU7uwNMTYjLcjrUorSe/iMI=; b=VUkUOutwPxjQCCxyYw8aEd09TR6JeL3/51lPTt3yf1eWr79S6Ct2f+Q+A6iD0QTKEkSVyleTctV/WKe+MIHeS/qzUtx8/BJPaPkRyF5dtUiHYIZ4OcJgGdCZgBjkUA06xTPaZISBJP4zjooNlA/3hwkkYbnaN879dlPwDM/Yf6A= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159864016524785.57227051885286; Fri, 28 Aug 2020 11:42:45 -0700 (PDT) Received: from localhost ([::1]:34644 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjKm-0006iW-CP for importer@patchew.org; Fri, 28 Aug 2020 14:42:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58704) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCd-0002Hw-Nc for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:19 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:41784) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCX-0005x6-3X for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:19 -0400 Received: by mail-wr1-x443.google.com with SMTP id w5so46361wrp.8 for ; Fri, 28 Aug 2020 11:34:09 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:08 -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=CYOYh3fW4PMtwewY4tYeCU7uwNMTYjLcjrUorSe/iMI=; b=ya31YZ8f5yFp00c6dD9HQ88r9RGZmTwgM00z70UaI2YV8ftstFV8jvbWIdelG0AjfQ TKZ9Ygy2oUCChYvVV6zzdMnMUv27VrpA4vgGMZEenFLjlYnB7vbkEh5uoATlojiWQiT5 SHcooCTYUJetKWXs7BE2TE4k6TSMJEgkfbPFR06e9ao5K4gUeJyBB5W+LaeeR7swh/KS i67tcTwLAAfPVVWOc7KobuheKeVcjCt+I4q10BrtGsyEzYDcqsGeiPVzYhFclXzZmb/m ryvk6m6ySjH3TNdCxjoEkddjN55Wem+8W1NYkcuCzdKKKPb1xbfTI6DPsJ5m7rTkFrcb EGAg== 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=CYOYh3fW4PMtwewY4tYeCU7uwNMTYjLcjrUorSe/iMI=; b=ah5jBiaDmqJspFmVvA85it9Jen7uIK6T/imzmLIE0yYqK6PM1KXQGS3QqlOlpSXa0Z QVMlil8AHLlsP98H1qi9OnC84UoeuFqXf4jPNAt+Xw4tZ7WMpqPxoqWc+udY4182vQFK iaQoP5Wqz0vETRENAaO5gCP1IsXRC5FqQGC/s+w56DJWHFKpY5ilo3evFDH/Ju1hHjVa xEVktrt45LmXFYrJ5wbwUnFeIEJuJfR6U7GYr6NN/hzwVfZVWlLL2IBXFmc7EqfO66vZ WcqI9rl7BxHE11/N226e1KQlmVXivV03Zuz/+fVUS2l4r2cPejzUh2DICvXGh6xC0bsu +xCg== X-Gm-Message-State: AOAM5302uvzguxClc7a8lQmXTE+QC1oEHrLfj80q8CfmV02cNcZP0w/w 7IyWxuCnTxwi7H9uxgliuEMflQ== X-Google-Smtp-Source: ABdhPJx+2eyjjEUcrRYS/3PuknQXLSlnOrO6aXY9yhhvt1XmozUxkn4n01+C6/CzRZXpaL/yBnxJsw== X-Received: by 2002:a5d:61d2:: with SMTP id q18mr263136wrv.404.1598639648946; Fri, 28 Aug 2020 11:34:08 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 10/45] target/arm: Implement VFP fp16 VCMP Date: Fri, 28 Aug 2020 19:33:19 +0100 Message-Id: <20200828183354.27913-11-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::443; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x443.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=unavailable 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implement fp16 version of VCMP. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 2 ++ target/arm/vfp.decode | 2 ++ target/arm/vfp_helper.c | 15 +++++++------ target/arm/translate-vfp.c.inc | 39 ++++++++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 7 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 37739b0e788..18afad634c9 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -134,8 +134,10 @@ DEF_HELPER_1(vfp_absd, f64, f64) DEF_HELPER_2(vfp_sqrth, f16, f16, env) DEF_HELPER_2(vfp_sqrts, f32, f32, env) DEF_HELPER_2(vfp_sqrtd, f64, f64, env) +DEF_HELPER_3(vfp_cmph, void, f16, f16, env) DEF_HELPER_3(vfp_cmps, void, f32, f32, env) DEF_HELPER_3(vfp_cmpd, void, f64, f64, env) +DEF_HELPER_3(vfp_cmpeh, void, f16, f16, env) DEF_HELPER_3(vfp_cmpes, void, f32, f32, env) DEF_HELPER_3(vfp_cmped, void, f64, f64, env) =20 diff --git a/target/arm/vfp.decode b/target/arm/vfp.decode index c898183771b..b213da4b55d 100644 --- a/target/arm/vfp.decode +++ b/target/arm/vfp.decode @@ -176,6 +176,8 @@ VSQRT_hp ---- 1110 1.11 0001 .... 1001 11.0 .... = @vfp_dm_ss VSQRT_sp ---- 1110 1.11 0001 .... 1010 11.0 .... @vfp_dm_ss VSQRT_dp ---- 1110 1.11 0001 .... 1011 11.0 .... @vfp_dm_dd =20 +VCMP_hp ---- 1110 1.11 010 z:1 .... 1001 e:1 1.0 .... \ + vd=3D%vd_sp vm=3D%vm_sp VCMP_sp ---- 1110 1.11 010 z:1 .... 1010 e:1 1.0 .... \ vd=3D%vd_sp vm=3D%vm_sp VCMP_dp ---- 1110 1.11 010 z:1 .... 1011 e:1 1.0 .... \ diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index cc7fb6ddb6a..55aa38f0ce8 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -330,19 +330,20 @@ static void softfloat_to_vfp_compare(CPUARMState *env= , FloatRelation cmp) } =20 /* XXX: check quiet/signaling case */ -#define DO_VFP_cmp(p, type) \ -void VFP_HELPER(cmp, p)(type a, type b, CPUARMState *env) \ +#define DO_VFP_cmp(P, FLOATTYPE, ARGTYPE, FPST) \ +void VFP_HELPER(cmp, P)(ARGTYPE a, ARGTYPE b, CPUARMState *env) \ { \ softfloat_to_vfp_compare(env, \ - type ## _compare_quiet(a, b, &env->vfp.fp_status)); \ + FLOATTYPE ## _compare_quiet(a, b, &env->vfp.FPST)); \ } \ -void VFP_HELPER(cmpe, p)(type a, type b, CPUARMState *env) \ +void VFP_HELPER(cmpe, P)(ARGTYPE a, ARGTYPE b, CPUARMState *env) \ { \ softfloat_to_vfp_compare(env, \ - type ## _compare(a, b, &env->vfp.fp_status)); \ + FLOATTYPE ## _compare(a, b, &env->vfp.FPST)); \ } -DO_VFP_cmp(s, float32) -DO_VFP_cmp(d, float64) +DO_VFP_cmp(h, float16, dh_ctype_f16, fp_status_f16) +DO_VFP_cmp(s, float32, float32, fp_status) +DO_VFP_cmp(d, float64, float64, fp_status) #undef DO_VFP_cmp =20 /* Integer to float and float to integer conversions */ diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index c864178ad4e..00a6363e1e1 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -2325,6 +2325,45 @@ DO_VFP_2OP(VSQRT, hp, gen_VSQRT_hp) DO_VFP_2OP(VSQRT, sp, gen_VSQRT_sp) DO_VFP_2OP(VSQRT, dp, gen_VSQRT_dp) =20 +static bool trans_VCMP_hp(DisasContext *s, arg_VCMP_sp *a) +{ + TCGv_i32 vd, vm; + + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + /* Vm/M bits must be zero for the Z variant */ + if (a->z && a->vm !=3D 0) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + vd =3D tcg_temp_new_i32(); + vm =3D tcg_temp_new_i32(); + + neon_load_reg32(vd, a->vd); + if (a->z) { + tcg_gen_movi_i32(vm, 0); + } else { + neon_load_reg32(vm, a->vm); + } + + if (a->e) { + gen_helper_vfp_cmpeh(vd, vm, cpu_env); + } else { + gen_helper_vfp_cmph(vd, vm, cpu_env); + } + + tcg_temp_free_i32(vd); + tcg_temp_free_i32(vm); + + return true; +} + static bool trans_VCMP_sp(DisasContext *s, arg_VCMP_sp *a) { TCGv_i32 vd, vm; --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598639957; cv=none; d=zohomail.com; s=zohoarc; b=VfHaJ1oj1o2RlKGEX2zNEtN/6DSUth70qQqucwAOcJgNc+XvKZis0XUvjBXcNcib0HVINdjPfXbRxck7WY8A/ZNohtsB+I2lpjF1L/9BXe/CicuylVMk8asnjCtg5iq1pzHureJ6lHigjC7klGtQwNNatZg12T5Z8f8XvXKwNS8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598639957; h=Content-Transfer-Encoding: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=+jA5lQWk27z4fN9b66lo0L+e7azK7DThocQahuWYwHI=; b=CbXNZveVcVFsC/jrKJEPDusHRvACAExUqy3Vb+MyZ0HqX/2RRWY5qSL8VtszA4OeL7qvGiOdgsXVcAztzdDsp9AhqAqU0pgoKmsPLPWHP6dN2SDzIg2+14hAIISFRPLY4adV323G1yw0BaIzBE1W8dihN2NP0J8Netps3nrwQzw= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159863995788621.997814346817222; Fri, 28 Aug 2020 11:39:17 -0700 (PDT) Received: from localhost ([::1]:49220 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjHQ-000163-Uw for importer@patchew.org; Fri, 28 Aug 2020 14:39:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58738) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCe-0002KH-I1 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:20 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:40387) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCW-0005xH-CX for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:20 -0400 Received: by mail-wr1-x441.google.com with SMTP id b18so50180wrs.7 for ; Fri, 28 Aug 2020 11:34:10 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:09 -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=+jA5lQWk27z4fN9b66lo0L+e7azK7DThocQahuWYwHI=; b=asKZH8a2xkEPAOtK//+nFwbK8CLHytrF/xkl5ldFXEYzBxGP+JF2GIc1aJzt5mQrYG z2WYghV04vewxJFg1JIhjnGgCLkuCUOBtdXA+GiBW7Q+86GVb2b3cqjGG2eALUZWAwi6 KZl7rmZNCnYdv7rug6UDgDBXSHXWE0hXvfHBg0v6lH+gqEbzzLJePHXkI9Qwe1/qXoOT +FLJYQNY5Gx/wEguhTeLM4f+pP2jFdkKQjkWzcGR+xR/v3TwmiRk+vpcuj1GJ6sLKd1c IYeBycZSQsinun2/5h3E6BS19RQUVvmgRR7EyDJiusZ2wHOWzLTeFSjsScfYTo2Dj8Es 5vMQ== 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=+jA5lQWk27z4fN9b66lo0L+e7azK7DThocQahuWYwHI=; b=BkO9k4BsSGHdFmXq5QLlPwpUXdCTRa9pHGwepYB6R++UIDI/2HGBkESEjY1Plsc5FT IyUuNo+82h6oSaygRF75f0ucn2M6RssbSvrz+jxn4bzLWL7iwe3stXr8HgSiPE2lidP4 fnI8yZF4SdYESsoXKRAUXL2xP+cF7EHl3dy8dr4oFl5WbQE478Ymej1KhFRrV6OLl8lq 5u49dp6tBrYv6B/zyBLwzoEMpM8jdfy68oOqmGMIYVeRrZ9CCX5Mfjt0jIO0+xOLfeAM /gtp1/JzgVqvZX6q3eGkWpcq0LwER4/gWXv/B4dWJX+U4lVPOl0Tw2ODZC83lEttVc+G Iheg== X-Gm-Message-State: AOAM533JoObVktK2ioEAJ/6UOSY+uCBoyuMYLp9yHpxu8FErb+KiBysR OVr3MtZ7rWLupiqeGRPdY92XsQ== X-Google-Smtp-Source: ABdhPJwGr/5z0JVasQnq8L5lp3l0uUP4k36Jkf74Z+g+phtlrNCN7Waw8MF7rIVh7dILPcunP75b2A== X-Received: by 2002:adf:f7c3:: with SMTP id a3mr281191wrq.162.1598639650004; Fri, 28 Aug 2020 11:34:10 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 11/45] target/arm: Implement VFP fp16 VLDR and VSTR Date: Fri, 28 Aug 2020 19:33:20 +0100 Message-Id: <20200828183354.27913-12-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::441; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x441.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implement the fp16 versions of the VFP VLDR/VSTR (immediate). Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/vfp.decode | 3 +-- target/arm/translate-vfp.c.inc | 35 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/target/arm/vfp.decode b/target/arm/vfp.decode index b213da4b55d..37f96e2d261 100644 --- a/target/arm/vfp.decode +++ b/target/arm/vfp.decode @@ -79,8 +79,7 @@ VMOV_single ---- 1110 000 l:1 .... rt:4 1010 . 001 0000 = vn=3D%vn_sp VMOV_64_sp ---- 1100 010 op:1 rt2:4 rt:4 1010 00.1 .... vm=3D%vm_sp VMOV_64_dp ---- 1100 010 op:1 rt2:4 rt:4 1011 00.1 .... vm=3D%vm_dp =20 -# Note that the half-precision variants of VLDR and VSTR are -# not part of this decodetree at all because they have bits [9:8] =3D=3D 0= b01 +VLDR_VSTR_hp ---- 1101 u:1 .0 l:1 rn:4 .... 1001 imm:8 vd=3D%vd_sp VLDR_VSTR_sp ---- 1101 u:1 .0 l:1 rn:4 .... 1010 imm:8 vd=3D%vd_sp VLDR_VSTR_dp ---- 1101 u:1 .0 l:1 rn:4 .... 1011 imm:8 vd=3D%vd_dp =20 diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index 00a6363e1e1..59ef4d4fbc3 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -886,6 +886,41 @@ static bool trans_VMOV_64_dp(DisasContext *s, arg_VMOV= _64_dp *a) return true; } =20 +static bool trans_VLDR_VSTR_hp(DisasContext *s, arg_VLDR_VSTR_sp *a) +{ + uint32_t offset; + TCGv_i32 addr, tmp; + + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + /* imm8 field is offset/2 for fp16, unlike fp32 and fp64 */ + offset =3D a->imm << 1; + if (!a->u) { + offset =3D -offset; + } + + /* For thumb, use of PC is UNPREDICTABLE. */ + addr =3D add_reg_for_lit(s, a->rn, offset); + tmp =3D tcg_temp_new_i32(); + if (a->l) { + gen_aa32_ld16u(s, tmp, addr, get_mem_index(s)); + neon_store_reg32(tmp, a->vd); + } else { + neon_load_reg32(tmp, a->vd); + gen_aa32_st16(s, tmp, addr, get_mem_index(s)); + } + tcg_temp_free_i32(tmp); + tcg_temp_free_i32(addr); + + return true; +} + static bool trans_VLDR_VSTR_sp(DisasContext *s, arg_VLDR_VSTR_sp *a) { uint32_t offset; --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640089; cv=none; d=zohomail.com; s=zohoarc; b=SVeYU4wn/rs0/jo/YhOdTuA+CZdnu1ppfkwqTCgl2evPrLIPc/Dl7pwdz8oCFNmgTT1qpG5n0vsq6q86lr9hxMWFpFAaeaf+QjSz+XoVGUdGYrieeko3m8P5I2NytxUuUXB44ZMCuLWvJHlXza2fvCGnq9dQBIRmw9rsuDeikRA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640089; h=Content-Transfer-Encoding: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=Hwpf+qxDq5BB579qMqkOfGdKfdGk8X1OZAvqrTZqjos=; b=lfKsvGUJFNRINNbsVPGWG8NGd3N5Xot9qzTpSBuFnupuQL8suMow92QiV4dld43UXe4J+lbTtZiwz63aN7Zn6a11ZVzshpkAgZRLzCUH4dEjRExhrR1KrFAlfXjpRbxioTlwNGpGXVyvn6vRZdp61rEvPs3rlr1OTHeU7ufrKWw= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640089731725.9293173900219; Fri, 28 Aug 2020 11:41:29 -0700 (PDT) Received: from localhost ([::1]:57730 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjJY-0004ew-VL for importer@patchew.org; Fri, 28 Aug 2020 14:41:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58744) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCe-0002Ky-Ty for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:20 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]:45213) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCX-0005xQ-Fq for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:20 -0400 Received: by mail-wr1-x42a.google.com with SMTP id h15so27266wrt.12 for ; Fri, 28 Aug 2020 11:34:12 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:10 -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=Hwpf+qxDq5BB579qMqkOfGdKfdGk8X1OZAvqrTZqjos=; b=Q20YB91oovxxIMG454oycLTw3vdcEFRWdXk+lOCGc0CBYwrcHc25MRe7AIt3Si1BmS los3yOIZ+fqkXGgQDMDdkQ6dBRAlwnJ1FqtUhd4hO3hKvvYO3L+ZFri/p/IXUR4ytCpb JF1JEIZ4IbMlO5/Zn0KJDWI+9WsLnnMtsesSbeoX+w45YeAwkd7siTG6im4VpgmwL0tP FZ0CMM+3znK6h/JKHDQeyVcdpTzLI+SH56fmlOIAVo4ENJUcuK7kjkp33jl/sW0jvZ1y Xori5WzWwgJBEs975BUMVNo2lEZ3Bq7OuH81+Y7YXVj/E4CfDgP5g0Vm+CfQm/1zFngw ws1g== 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=Hwpf+qxDq5BB579qMqkOfGdKfdGk8X1OZAvqrTZqjos=; b=q0u2vyy3MYE+yiVKz5+y65/r3lar/PJbYdL58iLJA1IYMtvyfZ9VSNqKR/bV6S83D1 XYP71hWgUBolCO8Ux13ZSS7gn6d9ya9YKpx7XwKsOfZ9LFkPzD/LDzJVjefHJjWofvW7 Le7ASdtjgQ59bHLoI2tfuw3HHb/3qaLlzTw95R+MUTdG10KZeIltFV1bOMONHeFhbbU3 1AVb73aXfpiKoIq6RT7afdrHx7mGjWCWN5368Xjl7yNb0e8uWKpmkOlmyivvCoCy6PZA QgaWde/A+nTWH1yl3rALtqRcnBmn6PVY01DD2zN8O4xLg0kuK5GFy7Ok8U+Qvga/5xWL lQQg== X-Gm-Message-State: AOAM530ZTJcmgWv04Qy/Y6DqxtF4rfNIgu9OSNy0wibem4UGJ+wJwz4W UYgCxAm3kkJehKNtFpWSnIENso+W6APl5yOi X-Google-Smtp-Source: ABdhPJwR12uddhL50CGKck+Bf+07GHSrZc9xoJIx8OGOnDzBjboXmJmifk5A06B3l1lGRxiM8HRCDA== X-Received: by 2002:adf:f106:: with SMTP id r6mr294739wro.106.1598639651110; Fri, 28 Aug 2020 11:34:11 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 12/45] target/arm: Implement VFP fp16 VCVT between float and integer Date: Fri, 28 Aug 2020 19:33:21 +0100 Message-Id: <20200828183354.27913-13-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::42a; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42a.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implement the fp16 versions of the VFP VCVT instruction forms which convert between floating point and integer. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/vfp.decode | 4 +++ target/arm/translate-vfp.c.inc | 65 ++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) diff --git a/target/arm/vfp.decode b/target/arm/vfp.decode index 37f96e2d261..642ec039e3c 100644 --- a/target/arm/vfp.decode +++ b/target/arm/vfp.decode @@ -210,6 +210,8 @@ VCVT_sp ---- 1110 1.11 0111 .... 1010 11.0 .... = @vfp_dm_ds VCVT_dp ---- 1110 1.11 0111 .... 1011 11.0 .... @vfp_dm_sd =20 # VCVT from integer to floating point: Vm always single; Vd depends on size +VCVT_int_hp ---- 1110 1.11 1000 .... 1001 s:1 1.0 .... \ + vd=3D%vd_sp vm=3D%vm_sp VCVT_int_sp ---- 1110 1.11 1000 .... 1010 s:1 1.0 .... \ vd=3D%vd_sp vm=3D%vm_sp VCVT_int_dp ---- 1110 1.11 1000 .... 1011 s:1 1.0 .... \ @@ -229,6 +231,8 @@ VCVT_fix_dp ---- 1110 1.11 1.1. .... 1011 .1.0 .... \ vd=3D%vd_dp imm=3D%vm_sp opc=3D%vcvt_fix_op =20 # VCVT float to integer (VCVT and VCVTR): Vd always single; Vd depends on = size +VCVT_hp_int ---- 1110 1.11 110 s:1 .... 1001 rz:1 1.0 .... \ + vd=3D%vd_sp vm=3D%vm_sp VCVT_sp_int ---- 1110 1.11 110 s:1 .... 1010 rz:1 1.0 .... \ vd=3D%vd_sp vm=3D%vm_sp VCVT_dp_int ---- 1110 1.11 110 s:1 .... 1011 rz:1 1.0 .... \ diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index 59ef4d4fbc3..0140822d183 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -2845,6 +2845,35 @@ static bool trans_VCVT_dp(DisasContext *s, arg_VCVT_= dp *a) return true; } =20 +static bool trans_VCVT_int_hp(DisasContext *s, arg_VCVT_int_sp *a) +{ + TCGv_i32 vm; + TCGv_ptr fpst; + + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + vm =3D tcg_temp_new_i32(); + neon_load_reg32(vm, a->vm); + fpst =3D fpstatus_ptr(FPST_FPCR_F16); + if (a->s) { + /* i32 -> f16 */ + gen_helper_vfp_sitoh(vm, vm, fpst); + } else { + /* u32 -> f16 */ + gen_helper_vfp_uitoh(vm, vm, fpst); + } + neon_store_reg32(vm, a->vd); + tcg_temp_free_i32(vm); + tcg_temp_free_ptr(fpst); + return true; +} + static bool trans_VCVT_int_sp(DisasContext *s, arg_VCVT_int_sp *a) { TCGv_i32 vm; @@ -3067,6 +3096,42 @@ static bool trans_VCVT_fix_dp(DisasContext *s, arg_V= CVT_fix_dp *a) return true; } =20 +static bool trans_VCVT_hp_int(DisasContext *s, arg_VCVT_sp_int *a) +{ + TCGv_i32 vm; + TCGv_ptr fpst; + + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + fpst =3D fpstatus_ptr(FPST_FPCR_F16); + vm =3D tcg_temp_new_i32(); + neon_load_reg32(vm, a->vm); + + if (a->s) { + if (a->rz) { + gen_helper_vfp_tosizh(vm, vm, fpst); + } else { + gen_helper_vfp_tosih(vm, vm, fpst); + } + } else { + if (a->rz) { + gen_helper_vfp_touizh(vm, vm, fpst); + } else { + gen_helper_vfp_touih(vm, vm, fpst); + } + } + neon_store_reg32(vm, a->vd); + tcg_temp_free_i32(vm); + tcg_temp_free_ptr(fpst); + return true; +} + static bool trans_VCVT_sp_int(DisasContext *s, arg_VCVT_sp_int *a) { TCGv_i32 vm; --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640290; cv=none; d=zohomail.com; s=zohoarc; b=J91xrqdtg4I33s8veqH41dVZZbSi+Rg0hdhIaFLZfgKQ+HGTo5H0yIEJctyMMq3SSfXNNLLPirx2KC1rZsmU8paSZ1Mr/lb4F+HB4Ks6wxQFlAm4cdgd4l60HjYmIQ74WQ/L1CREILRLBMtpIZLi6QHZjkpKHfWpV1rKsa07Iu0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640290; h=Content-Transfer-Encoding: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=FHUFQV4FXXHkAhMkndvZsQ9Vo9mjapkfHTwxSOIt/l0=; b=LiSMg0EVvpGzCH3824Ksoqz7UWn43tFXVUJExkT43wzLEmPDBjK4iGf+vJcT9VY5kFHB2WyrbaRoc7uvqcEjAqvGG8x2KBiN8p7yz4GHhEjOLQNwvkWMvisucX8x4zlt8fX4/xMxG7wkfci86+ACGTmP6gG7yGYYMvP2a1I1l2M= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640290113674.173479180011; Fri, 28 Aug 2020 11:44:50 -0700 (PDT) Received: from localhost ([::1]:44170 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjMn-00024J-Ad for importer@patchew.org; Fri, 28 Aug 2020 14:44:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58776) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCf-0002Mv-Fa for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:21 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:39065) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCX-0005xe-KJ for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:21 -0400 Received: by mail-wr1-x444.google.com with SMTP id a5so55564wrm.6 for ; Fri, 28 Aug 2020 11:34:13 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:11 -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=FHUFQV4FXXHkAhMkndvZsQ9Vo9mjapkfHTwxSOIt/l0=; b=wA1LJRFmANZRhoMDSzF/eLoNuFzKYRS7FgDydVoMnQxheKrL+cb3yy09zcgwh9gzsn c2ACeUIE4TjscPAmEYOvWasQwrdkhticOuX1LKF/8Kw1Pm91nKVvv4JEN+bKClWr9hts +EAT+/lI4v/rjCO2OUy4SVCagy3rVp7QoKcMu/5yhPyLqs+qlWkqLkWLVYY0pIo4C1kT Tz0tDNKcbVSyGWttngYi+K9Bkbq08NzNBF92sRGicrncd1g99TPGKNu8BxxX8qnWa+y7 flhkq97fjte91cjlMB2Ud8ZxreAjWrElkpxfr+MTiEfjmramAAPL652FMxLMe6agV/wL 5ScA== 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=FHUFQV4FXXHkAhMkndvZsQ9Vo9mjapkfHTwxSOIt/l0=; b=iEccw0ronRcRM2LiJ98MizVRmRiC2/tyPr+voIiMrmPbL4DySaFUA95pLLOGhI+7Od /aIYlJ0OpY1BV0u9TqJMVm86eHCpwwKE/TFcdotdaXf/8JdeX9/oZfua8lmLJp/APvHX wdJbZjbzU9Dk98YGx7M2Cg7m9GN3OkkVC+vl3MuZ5HENfYE3thzmiM5evAVV9RJ67o4I jB8GZjNOGOQCKMqZJccEjyvsngIqnqmuXKyaewmo/psRt0MefUahv4uqw0eRMtt4Yfia NmxufEEJ2drwsAr3hGqyiYdKm27Y+E6fSvDeajZsEHD4FzVqjG9DT68/VQEIoQZ4WrWQ fTlQ== X-Gm-Message-State: AOAM530TCVow6wAoCVcvkXK+5cWrqf+oRS6kM2v4+2M9DxkVpMsr0A2L a9y4o73LsS1+vrSXQNS3f0xAmxaw18Sj6k24 X-Google-Smtp-Source: ABdhPJwcI+KACIjiCZgEv3k68nKe04BGcccxzJwRCQSujx90bzOGQYWzXzT4T4bYeZ/SUAQs/THJRg== X-Received: by 2002:adf:dd44:: with SMTP id u4mr266229wrm.366.1598639652225; Fri, 28 Aug 2020 11:34:12 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 13/45] target/arm: Make VFP_CONV_FIX macros take separate float type and float size Date: Fri, 28 Aug 2020 19:33:22 +0100 Message-Id: <20200828183354.27913-14-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::444; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x444.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Currently the VFP_CONV_FIX macros take a single fsz argument for the size of the float type, which is used both to select the name of the functions to call (eg float32_is_any_nan()) and also for the type to use for the float inputs and outputs (eg float32). Separate these into fsz and ftype arguments, so that we can use them for fp16, which uses 'float16' in the function names but is still passing inputs and outputs in a 32-bit sized type. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/vfp_helper.c | 46 ++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index 55aa38f0ce8..7650890d440 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -394,13 +394,13 @@ float32 VFP_HELPER(fcvts, d)(float64 x, CPUARMState *= env) } =20 /* VFP3 fixed point conversion. */ -#define VFP_CONV_FIX_FLOAT(name, p, fsz, isz, itype) \ -float##fsz HELPER(vfp_##name##to##p)(uint##isz##_t x, uint32_t shift, \ +#define VFP_CONV_FIX_FLOAT(name, p, fsz, ftype, isz, itype) \ +ftype HELPER(vfp_##name##to##p)(uint##isz##_t x, uint32_t shift, \ void *fpstp) \ { return itype##_to_##float##fsz##_scalbn(x, -shift, fpstp); } =20 -#define VFP_CONV_FLOAT_FIX_ROUND(name, p, fsz, isz, itype, ROUND, suff) \ -uint##isz##_t HELPER(vfp_to##name##p##suff)(float##fsz x, uint32_t shift, \ +#define VFP_CONV_FLOAT_FIX_ROUND(name, p, fsz, ftype, isz, itype, ROUND, s= uff) \ +uint##isz##_t HELPER(vfp_to##name##p##suff)(ftype x, uint32_t shift, \ void *fpst) \ { \ if (unlikely(float##fsz##_is_any_nan(x))) { \ @@ -410,30 +410,30 @@ uint##isz##_t HELPER(vfp_to##name##p##suff)(float##fs= z x, uint32_t shift, \ return float##fsz##_to_##itype##_scalbn(x, ROUND, shift, fpst); \ } =20 -#define VFP_CONV_FIX(name, p, fsz, isz, itype) \ -VFP_CONV_FIX_FLOAT(name, p, fsz, isz, itype) \ -VFP_CONV_FLOAT_FIX_ROUND(name, p, fsz, isz, itype, \ +#define VFP_CONV_FIX(name, p, fsz, ftype, isz, itype) \ +VFP_CONV_FIX_FLOAT(name, p, fsz, ftype, isz, itype) \ +VFP_CONV_FLOAT_FIX_ROUND(name, p, fsz, ftype, isz, itype, \ float_round_to_zero, _round_to_zero) \ -VFP_CONV_FLOAT_FIX_ROUND(name, p, fsz, isz, itype, \ +VFP_CONV_FLOAT_FIX_ROUND(name, p, fsz, ftype, isz, itype, \ get_float_rounding_mode(fpst), ) =20 -#define VFP_CONV_FIX_A64(name, p, fsz, isz, itype) \ -VFP_CONV_FIX_FLOAT(name, p, fsz, isz, itype) \ -VFP_CONV_FLOAT_FIX_ROUND(name, p, fsz, isz, itype, \ +#define VFP_CONV_FIX_A64(name, p, fsz, ftype, isz, itype) \ +VFP_CONV_FIX_FLOAT(name, p, fsz, ftype, isz, itype) \ +VFP_CONV_FLOAT_FIX_ROUND(name, p, fsz, ftype, isz, itype, \ get_float_rounding_mode(fpst), ) =20 -VFP_CONV_FIX(sh, d, 64, 64, int16) -VFP_CONV_FIX(sl, d, 64, 64, int32) -VFP_CONV_FIX_A64(sq, d, 64, 64, int64) -VFP_CONV_FIX(uh, d, 64, 64, uint16) -VFP_CONV_FIX(ul, d, 64, 64, uint32) -VFP_CONV_FIX_A64(uq, d, 64, 64, uint64) -VFP_CONV_FIX(sh, s, 32, 32, int16) -VFP_CONV_FIX(sl, s, 32, 32, int32) -VFP_CONV_FIX_A64(sq, s, 32, 64, int64) -VFP_CONV_FIX(uh, s, 32, 32, uint16) -VFP_CONV_FIX(ul, s, 32, 32, uint32) -VFP_CONV_FIX_A64(uq, s, 32, 64, uint64) +VFP_CONV_FIX(sh, d, 64, float64, 64, int16) +VFP_CONV_FIX(sl, d, 64, float64, 64, int32) +VFP_CONV_FIX_A64(sq, d, 64, float64, 64, int64) +VFP_CONV_FIX(uh, d, 64, float64, 64, uint16) +VFP_CONV_FIX(ul, d, 64, float64, 64, uint32) +VFP_CONV_FIX_A64(uq, d, 64, float64, 64, uint64) +VFP_CONV_FIX(sh, s, 32, float32, 32, int16) +VFP_CONV_FIX(sl, s, 32, float32, 32, int32) +VFP_CONV_FIX_A64(sq, s, 32, float32, 64, int64) +VFP_CONV_FIX(uh, s, 32, float32, 32, uint16) +VFP_CONV_FIX(ul, s, 32, float32, 32, uint32) +VFP_CONV_FIX_A64(uq, s, 32, float32, 64, uint64) =20 #undef VFP_CONV_FIX #undef VFP_CONV_FIX_FLOAT --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640421; cv=none; d=zohomail.com; s=zohoarc; b=ZdzOm7Yge7KCeo4UoS0oxcDXQK0XfaCXXHlZfJrnrlU+x+wuDYuj9zxwChgS6vCS8udnIUFPV0ENlGkzM8iuYpq98ekDBei9HMY5xoWR55REvwlBA899iNhVw35NA0kFa0yrZmdFInz8yPbR5TOmRULmSRbrpbaDK/62Ot9rTRI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640421; h=Content-Transfer-Encoding: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=wog/DDcjxmwzPzd3wKUUXbXIEInR2+mr6YMMIRusMRo=; b=Q78xhSQlxvk250nMSekR8eY1pPAUoduDXwrZ8XLd7QCmT+nrmJZ8+BfJxacExjcjMOScqXY9DjZV0g/LbBJhcvjWqbCEW6QUpiy33z3u7hTKFppRGK0iBcAuuzFxD6QLSwBsDvNHxngfw66f6egfrgLO2g8ZXVNJg9FzNuoERbI= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640421134554.4866336083094; Fri, 28 Aug 2020 11:47:01 -0700 (PDT) Received: from localhost ([::1]:52684 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjOt-0005WZ-Vm for importer@patchew.org; Fri, 28 Aug 2020 14:46:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58800) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCg-0002P6-9v for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:22 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:36534) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCZ-0005xr-5U for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:21 -0400 Received: by mail-wm1-x342.google.com with SMTP id z9so124174wmk.1 for ; Fri, 28 Aug 2020 11:34:14 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:13 -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=wog/DDcjxmwzPzd3wKUUXbXIEInR2+mr6YMMIRusMRo=; b=z2HGo66BNR+iMV4BhVkgM0X/IPgr+t4eoO/GSfQCRzls3MNh5sdm+VcUTP7nJHlf4r e3+PjES8Ad0HGwhY0jVN+DhZudDWyokrRO6fQlEPikmP7nwm6dnit306SQ5NRQwynhrM 4g/jEPCRc0bIzMBL9ELHL9NIHdfV3BO2lLOmB+5xssHKa0lMRsRjR5hlizgo2SJj/wO0 LD20ePec4NIHRZfjwv6t2nq1pJ4YL9bIszSmo3ua6cLESk+UlKVIh7RSIaGURKxJrJh8 NrN8q597QeCOfe17FEZU0vQC59OPvMAXQ8C2HxXQuHagA0SmabJds7oz0vQEa81pNdkL iIsQ== 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=wog/DDcjxmwzPzd3wKUUXbXIEInR2+mr6YMMIRusMRo=; b=iJlJr5rLnafWkhDgjNaSzBYoKehXsdRQI2bnmVKMNaAWC3WoVQaHiYJCDEs6pZEHCV 6VyZQ+VOWwhRWqG2VXDrJW4le0o6RQ4mMRk+R/FV+13wFjI8Ki+hw4IghrMCnb7L/RWO EAwtlFYdNqgx3QHl1eTVo7yPoP/JnUAoVO9CahKYo6h+I0rWiIgW2T17N59qiTZVcY/w 5sgu8r/Dg9b2fiQoDTxRwZdGuSNbqMEjfsyRphIcLtLIMgYfAj7yFLUDeAhoDxl7YLeM xkLYwJTQ+xOcIwKwPLL0ttxeiVDDIttwAUd7jN4weSf6qpEAJb7xK8Y+w58FFjFV5VLp vzGw== X-Gm-Message-State: AOAM530syYA71MQhjB5RZEcHybjOPHoEl+4pGBTntcktLWLob7GTN4t5 LnoaxEEf2xKU+0sbjiunvAcn/JzNntQIMDVJ X-Google-Smtp-Source: ABdhPJw8yMihllAvlWeFpjeZCn3uf1bRg7iwrJLyejrU186PETbl3XLYxzmwPa+DUKFkYnzgpxZy0w== X-Received: by 2002:a1c:ed0e:: with SMTP id l14mr33583wmh.140.1598639653808; Fri, 28 Aug 2020 11:34:13 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 14/45] target/arm: Use macros instead of open-coding fp16 conversion helpers Date: Fri, 28 Aug 2020 19:33:23 +0100 Message-Id: <20200828183354.27913-15-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::342; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x342.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Now the VFP_CONV_FIX macros can handle fp16's distinction between the width of the operation and the width of the type used to pass operands, use the macros rather than the open-coded functions. This creates an extra six helper functions, all of which we are going to need for the AArch32 VFP fp16 instructions. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 6 +++ target/arm/vfp_helper.c | 86 +++-------------------------------------- 2 files changed, 12 insertions(+), 80 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 18afad634c9..03193728476 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -164,6 +164,10 @@ DEF_HELPER_2(vfp_tosizh, s32, f16, ptr) DEF_HELPER_2(vfp_tosizs, s32, f32, ptr) DEF_HELPER_2(vfp_tosizd, s32, f64, ptr) =20 +DEF_HELPER_3(vfp_toshh_round_to_zero, i32, f16, i32, ptr) +DEF_HELPER_3(vfp_toslh_round_to_zero, i32, f16, i32, ptr) +DEF_HELPER_3(vfp_touhh_round_to_zero, i32, f16, i32, ptr) +DEF_HELPER_3(vfp_toulh_round_to_zero, i32, f16, i32, ptr) DEF_HELPER_3(vfp_toshs_round_to_zero, i32, f32, i32, ptr) DEF_HELPER_3(vfp_tosls_round_to_zero, i32, f32, i32, ptr) DEF_HELPER_3(vfp_touhs_round_to_zero, i32, f32, i32, ptr) @@ -202,6 +206,8 @@ DEF_HELPER_3(vfp_sqtod, f64, i64, i32, ptr) DEF_HELPER_3(vfp_uhtod, f64, i64, i32, ptr) DEF_HELPER_3(vfp_ultod, f64, i64, i32, ptr) DEF_HELPER_3(vfp_uqtod, f64, i64, i32, ptr) +DEF_HELPER_3(vfp_shtoh, f16, i32, i32, ptr) +DEF_HELPER_3(vfp_uhtoh, f16, i32, i32, ptr) DEF_HELPER_3(vfp_sltoh, f16, i32, i32, ptr) DEF_HELPER_3(vfp_ultoh, f16, i32, i32, ptr) DEF_HELPER_3(vfp_sqtoh, f16, i64, i32, ptr) diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index 7650890d440..ab3f0b170a7 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -434,92 +434,18 @@ VFP_CONV_FIX_A64(sq, s, 32, float32, 64, int64) VFP_CONV_FIX(uh, s, 32, float32, 32, uint16) VFP_CONV_FIX(ul, s, 32, float32, 32, uint32) VFP_CONV_FIX_A64(uq, s, 32, float32, 64, uint64) +VFP_CONV_FIX(sh, h, 16, dh_ctype_f16, 32, int16) +VFP_CONV_FIX(sl, h, 16, dh_ctype_f16, 32, int32) +VFP_CONV_FIX_A64(sq, h, 16, dh_ctype_f16, 64, int64) +VFP_CONV_FIX(uh, h, 16, dh_ctype_f16, 32, uint16) +VFP_CONV_FIX(ul, h, 16, dh_ctype_f16, 32, uint32) +VFP_CONV_FIX_A64(uq, h, 16, dh_ctype_f16, 64, uint64) =20 #undef VFP_CONV_FIX #undef VFP_CONV_FIX_FLOAT #undef VFP_CONV_FLOAT_FIX_ROUND #undef VFP_CONV_FIX_A64 =20 -uint32_t HELPER(vfp_sltoh)(uint32_t x, uint32_t shift, void *fpst) -{ - return int32_to_float16_scalbn(x, -shift, fpst); -} - -uint32_t HELPER(vfp_ultoh)(uint32_t x, uint32_t shift, void *fpst) -{ - return uint32_to_float16_scalbn(x, -shift, fpst); -} - -uint32_t HELPER(vfp_sqtoh)(uint64_t x, uint32_t shift, void *fpst) -{ - return int64_to_float16_scalbn(x, -shift, fpst); -} - -uint32_t HELPER(vfp_uqtoh)(uint64_t x, uint32_t shift, void *fpst) -{ - return uint64_to_float16_scalbn(x, -shift, fpst); -} - -uint32_t HELPER(vfp_toshh)(uint32_t x, uint32_t shift, void *fpst) -{ - if (unlikely(float16_is_any_nan(x))) { - float_raise(float_flag_invalid, fpst); - return 0; - } - return float16_to_int16_scalbn(x, get_float_rounding_mode(fpst), - shift, fpst); -} - -uint32_t HELPER(vfp_touhh)(uint32_t x, uint32_t shift, void *fpst) -{ - if (unlikely(float16_is_any_nan(x))) { - float_raise(float_flag_invalid, fpst); - return 0; - } - return float16_to_uint16_scalbn(x, get_float_rounding_mode(fpst), - shift, fpst); -} - -uint32_t HELPER(vfp_toslh)(uint32_t x, uint32_t shift, void *fpst) -{ - if (unlikely(float16_is_any_nan(x))) { - float_raise(float_flag_invalid, fpst); - return 0; - } - return float16_to_int32_scalbn(x, get_float_rounding_mode(fpst), - shift, fpst); -} - -uint32_t HELPER(vfp_toulh)(uint32_t x, uint32_t shift, void *fpst) -{ - if (unlikely(float16_is_any_nan(x))) { - float_raise(float_flag_invalid, fpst); - return 0; - } - return float16_to_uint32_scalbn(x, get_float_rounding_mode(fpst), - shift, fpst); -} - -uint64_t HELPER(vfp_tosqh)(uint32_t x, uint32_t shift, void *fpst) -{ - if (unlikely(float16_is_any_nan(x))) { - float_raise(float_flag_invalid, fpst); - return 0; - } - return float16_to_int64_scalbn(x, get_float_rounding_mode(fpst), - shift, fpst); -} - -uint64_t HELPER(vfp_touqh)(uint32_t x, uint32_t shift, void *fpst) -{ - if (unlikely(float16_is_any_nan(x))) { - float_raise(float_flag_invalid, fpst); - return 0; - } - return float16_to_uint64_scalbn(x, get_float_rounding_mode(fpst), - shift, fpst); -} - /* Set the current fp rounding mode and return the old one. * The argument is a softfloat float_round_ value. */ --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640460; cv=none; d=zohomail.com; s=zohoarc; b=QZInox86/2kTdbXmEfyDeRZW5BXJXZppjEMT8jmk9G1kop6+Wnrt3/fbU1b6UbUqvrOfDQYm67sTYThVp1H93nPspFE8TIqrtyUuxoNMHgJ8xOArC6OBhhe3s/G/4AU6pL+fG+h3Zq+viD4u5UN+Lclr1usBA5vFC9hZrzt/feI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640460; h=Content-Transfer-Encoding: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=DVP2Mp73QOLPJah3nvK3hrNS6x+FIiMTtRkRR6OwSkc=; b=GWyipdscyzx3OdL/hmP3a4swHwhYQywo8rJJyDdHxi2dB0gpz9DhRb9lkzr3ZOGxa69NS/eEZXaSjBx4iGUC6k1opef1a2jekXadRhSdje/1bWNkeMxgLDOTcncIZs80wOcRDOwn4+TFRMdCeF8WCgdz/HPr5uWVgITbaLvWWOY= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640460597874.8716986989164; Fri, 28 Aug 2020 11:47:40 -0700 (PDT) Received: from localhost ([::1]:55104 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjPX-0006V1-OQ for importer@patchew.org; Fri, 28 Aug 2020 14:47:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58818) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCg-0002QO-QO for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:22 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:42502) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCa-0005y6-BY for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:22 -0400 Received: by mail-wr1-x436.google.com with SMTP id c18so42219wrm.9 for ; Fri, 28 Aug 2020 11:34:15 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:14 -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=DVP2Mp73QOLPJah3nvK3hrNS6x+FIiMTtRkRR6OwSkc=; b=xpwmA76DG9nNRd8h2DW9PXEIJzQnocVVd0JXPJLuAgA7elvPCogwZysrmA1Is3mfYZ eVHDrjohVUPR+BmrD6sfyPa1ctY6ZeUMEJYxCH652RGPIKsxOg7oDNdkv/XxDlBRz5a9 3M4rJkkgVsl4WTnW/zmFmdW+pReNCas8M1n7cke2EnqaocPmbjAPE8vx+vlMAwG7fRmj HGvYDAo/17/vCEbIGkGkTyfkWju9DAEp/5IVISyRjfxtaT12td9q+AWQuJEKeKigZg+P XyqwB1L/8bCbLf7oFv+KtDRscEkGQoPLZN/GFuyqj2FWXiUyqPFAwEjBWtzFQg1yHHUt FZag== 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=DVP2Mp73QOLPJah3nvK3hrNS6x+FIiMTtRkRR6OwSkc=; b=Gr955FTmGPz73OXSRi6wAxzHz0KzXVmXTe+Z1Myj8KqwiTE0R8sNn+MMo9woV51EHt qHJTGU/52wgG5buZ2kQwIXzj5nvntVFRiWBBLCyUpRbfm4XASXWavzcI3wBOZg2c8r5U RfcM3YZsE5CfZuSmCNix9mumNZGUEtTav7QOIdf0yo4N6VQxrU5amEYAr2t3LTPUttC+ Re7mr+3psKOX6GDFBTHuB15+9J4z8IiWd2uV1/FJK1YQS0N+zpF9tX5V5ShKu6yguDwo VfACKd8FDXU8OkiEc1hFqc7sJhlG5LfI4LdciuI40lJEuEGEyPGV9jtpo2t7uoz6sgeq p/jQ== X-Gm-Message-State: AOAM530gJTh0y0LLVqGE8FJrFlCopDw4kkBjufKheVHJqPCYnN0zK2Vf qFe+HpOIakqgvMI4DLV7800c9VsIVTxmi9LT X-Google-Smtp-Source: ABdhPJyQfo84ZQRbnc4znsz7NIHl3J1RjoPqnZZHHk2SSX0MB6e6KL9lw4zisEq7WeXbe400uhTFGA== X-Received: by 2002:a5d:5651:: with SMTP id j17mr283414wrw.149.1598639655125; Fri, 28 Aug 2020 11:34:15 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 15/45] target/arm: Implement VFP fp16 VCVT between float and fixed-point Date: Fri, 28 Aug 2020 19:33:24 +0100 Message-Id: <20200828183354.27913-16-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::436; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x436.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implement the fp16 versions of the VFP VCVT instruction forms which convert between floating point and fixed-point. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/vfp.decode | 2 ++ target/arm/translate-vfp.c.inc | 59 ++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/target/arm/vfp.decode b/target/arm/vfp.decode index 642ec039e3c..a8f1137be1e 100644 --- a/target/arm/vfp.decode +++ b/target/arm/vfp.decode @@ -225,6 +225,8 @@ VJCVT ---- 1110 1.11 1001 .... 1011 11.0 .... = @vfp_dm_sd # We assemble bits 18 (op), 16 (u) and 7 (sx) into a single opc field # for the convenience of the trans_VCVT_fix functions. %vcvt_fix_op 18:1 16:1 7:1 +VCVT_fix_hp ---- 1110 1.11 1.1. .... 1001 .1.0 .... \ + vd=3D%vd_sp imm=3D%vm_sp opc=3D%vcvt_fix_op VCVT_fix_sp ---- 1110 1.11 1.1. .... 1010 .1.0 .... \ vd=3D%vd_sp imm=3D%vm_sp opc=3D%vcvt_fix_op VCVT_fix_dp ---- 1110 1.11 1.1. .... 1011 .1.0 .... \ diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index 0140822d183..fdf486b7c15 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -2972,6 +2972,65 @@ static bool trans_VJCVT(DisasContext *s, arg_VJCVT *= a) return true; } =20 +static bool trans_VCVT_fix_hp(DisasContext *s, arg_VCVT_fix_sp *a) +{ + TCGv_i32 vd, shift; + TCGv_ptr fpst; + int frac_bits; + + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + frac_bits =3D (a->opc & 1) ? (32 - a->imm) : (16 - a->imm); + + vd =3D tcg_temp_new_i32(); + neon_load_reg32(vd, a->vd); + + fpst =3D fpstatus_ptr(FPST_FPCR_F16); + shift =3D tcg_const_i32(frac_bits); + + /* Switch on op:U:sx bits */ + switch (a->opc) { + case 0: + gen_helper_vfp_shtoh(vd, vd, shift, fpst); + break; + case 1: + gen_helper_vfp_sltoh(vd, vd, shift, fpst); + break; + case 2: + gen_helper_vfp_uhtoh(vd, vd, shift, fpst); + break; + case 3: + gen_helper_vfp_ultoh(vd, vd, shift, fpst); + break; + case 4: + gen_helper_vfp_toshh_round_to_zero(vd, vd, shift, fpst); + break; + case 5: + gen_helper_vfp_toslh_round_to_zero(vd, vd, shift, fpst); + break; + case 6: + gen_helper_vfp_touhh_round_to_zero(vd, vd, shift, fpst); + break; + case 7: + gen_helper_vfp_toulh_round_to_zero(vd, vd, shift, fpst); + break; + default: + g_assert_not_reached(); + } + + neon_store_reg32(vd, a->vd); + tcg_temp_free_i32(vd); + tcg_temp_free_i32(shift); + tcg_temp_free_ptr(fpst); + return true; +} + static bool trans_VCVT_fix_sp(DisasContext *s, arg_VCVT_fix_sp *a) { TCGv_i32 vd, shift; --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598639970; cv=none; d=zohomail.com; s=zohoarc; b=aD1bo8Llc8bz/ZWsd14rBCa5J/q3bHT4iDmxLjAUrHpsOCZ9b7wlV+1W0kIJHzIWjLR8tt63Md6BMEspGKzhtghdOs1A98yQQAu0hqI4fr1xix6YXYAPaBSwOMGWHlMAyOTL9tHtZxQcQyLV0BgPR3kExVhAp5m/2S75u9M18bY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598639970; h=Content-Transfer-Encoding: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=qNhJwLO6ObTREAr+RR8PmJaX5VQxkvMB5+PhvG7DTPI=; b=BqViJ8zP53YtJu9MVOIi9O/20WY3KOjQgCpwMD5KVhjc5GLvhP7u4LT8LQMMnfk677rVvM2L6QkxPTmxriY9plMIMA9P/AO20jLCBxGLfhtOF4ENk23uIPVjDr8cfsZ3B/+kn6rPATy2Jf7Esb7URAC7G+O5Bf+Yy2iHWwGNK5w= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598639970875105.83027756979152; Fri, 28 Aug 2020 11:39:30 -0700 (PDT) Received: from localhost ([::1]:50542 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjHe-0001dm-26 for importer@patchew.org; Fri, 28 Aug 2020 14:39:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58874) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCi-0002UF-6q for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:24 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]:41556) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCb-0005yQ-PE for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:23 -0400 Received: by mail-wr1-x434.google.com with SMTP id w5so46628wrp.8 for ; Fri, 28 Aug 2020 11:34:17 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:15 -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=qNhJwLO6ObTREAr+RR8PmJaX5VQxkvMB5+PhvG7DTPI=; b=k99wxtIVNFvzVPWDk6sI1dv9LIBZKAhnzQGfsJrZ2IS/GksPmsy18d0smXwtsNoEOA tr+BKrb56NiuQ9iONuGa1G5bFrV5RN10yQS2XHriZSG+u72XH7pUt61dy39TaOBpEhGc cCEyHVOx+Fw05BjF+FGn72RU2LUi5yaudFlIB0ERfcZzTrd+gSvkPjezWmuqKE92khGM +1HwiohMSK+GpiN+ABi8WS2CXjuj1R7o3vQOUORwa4STt6LdOlnKw2fQ1JZ6PdqiVKFh eysT2Spge/QwkDDGTjhLR7Wxf1TTFYeZzQk1ohz9EO2/o8tlC+4SqKT1l59/YsHqq5N+ MkCQ== 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=qNhJwLO6ObTREAr+RR8PmJaX5VQxkvMB5+PhvG7DTPI=; b=j++itPIH8XCJqjk+wVwF4rHIenu1R25MOAEWp/7Bh7PzIR+954Ryxs36+114llasPc fO+hW2C8TDq3oe2ya5Krzm8OPOaG4XeLHW6D6mDiGkLvQpDlX8ZF4RUdJkJleZB3Z1ON 4D13Nx/Nvoy5wYklnfy5BgZlp3C42mdHNfZh1IAj6kcmxsF7v0B28m2XPwwfX4xTuBRK +Sojo5ro6pBWeqs9rzzyRJMW5ovqg+A6M66SvAEZ+/FefAoa8xFH3P0VyFOsRKexIWwB dP8IAwtnm8IBFD3PivsaLEngrB/Z0FZOoEySHuG7O7aWvdehp/XXMUjpJQBApsp7K5oH mkEw== X-Gm-Message-State: AOAM530rO9+/A/p/9zCw9U3Yq6W2SVSUDtEisbUhdD9Zv/O4b5LZRm89 9MzTWw0MjKf5UaqjiLG+nsYSQw== X-Google-Smtp-Source: ABdhPJwrpOLx5ueBBqN3Y5JkDGenPoPkXHHO7FTApai0KKK3eWSFXdqraueKPwjlWlQKjVV3GLWsHQ== X-Received: by 2002:a05:6000:48:: with SMTP id k8mr267868wrx.201.1598639656129; Fri, 28 Aug 2020 11:34:16 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 16/45] target/arm: Implement VFP vp16 VCVT-with-specified-rounding-mode Date: Fri, 28 Aug 2020 19:33:25 +0100 Message-Id: <20200828183354.27913-17-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::434; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x434.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implement the fp16 versions of the VFP VCVT instruction forms which convert between floating point and integer with a specified rounding mode. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/vfp-uncond.decode | 6 ++++-- target/arm/translate-vfp.c.inc | 32 ++++++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/target/arm/vfp-uncond.decode b/target/arm/vfp-uncond.decode index ee700e51972..b7cd9d11ed5 100644 --- a/target/arm/vfp-uncond.decode +++ b/target/arm/vfp-uncond.decode @@ -64,7 +64,9 @@ VRINT 1111 1110 1.11 10 rm:2 .... 1011 01.0 .... \ vm=3D%vm_dp vd=3D%vd_dp dp=3D1 =20 # VCVT float to int with specified rounding mode; Vd is always single-prec= ision +VCVT 1111 1110 1.11 11 rm:2 .... 1001 op:1 1.0 .... \ + vm=3D%vm_sp vd=3D%vd_sp sz=3D1 VCVT 1111 1110 1.11 11 rm:2 .... 1010 op:1 1.0 .... \ - vm=3D%vm_sp vd=3D%vd_sp dp=3D0 + vm=3D%vm_sp vd=3D%vd_sp sz=3D2 VCVT 1111 1110 1.11 11 rm:2 .... 1011 op:1 1.0 .... \ - vm=3D%vm_dp vd=3D%vd_sp dp=3D1 + vm=3D%vm_dp vd=3D%vd_sp sz=3D3 diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index fdf486b7c15..583e7ccdb20 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -396,7 +396,7 @@ static bool trans_VRINT(DisasContext *s, arg_VRINT *a) static bool trans_VCVT(DisasContext *s, arg_VCVT *a) { uint32_t rd, rm; - bool dp =3D a->dp; + int sz =3D a->sz; TCGv_ptr fpst; TCGv_i32 tcg_rmode, tcg_shift; int rounding =3D fp_decode_rm[a->rm]; @@ -406,12 +406,16 @@ static bool trans_VCVT(DisasContext *s, arg_VCVT *a) return false; } =20 - if (dp && !dc_isar_feature(aa32_fpdp_v2, s)) { + if (sz =3D=3D 3 && !dc_isar_feature(aa32_fpdp_v2, s)) { + return false; + } + + if (sz =3D=3D 1 && !dc_isar_feature(aa32_fp16_arith, s)) { return false; } =20 /* UNDEF accesses to D16-D31 if they don't exist */ - if (dp && !dc_isar_feature(aa32_simd_r32, s) && (a->vm & 0x10)) { + if (sz =3D=3D 3 && !dc_isar_feature(aa32_simd_r32, s) && (a->vm & 0x10= )) { return false; } =20 @@ -422,14 +426,18 @@ static bool trans_VCVT(DisasContext *s, arg_VCVT *a) return true; } =20 - fpst =3D fpstatus_ptr(FPST_FPCR); + if (sz =3D=3D 1) { + fpst =3D fpstatus_ptr(FPST_FPCR_F16); + } else { + fpst =3D fpstatus_ptr(FPST_FPCR); + } =20 tcg_shift =3D tcg_const_i32(0); =20 tcg_rmode =3D tcg_const_i32(arm_rmode_to_sf(rounding)); gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); =20 - if (dp) { + if (sz =3D=3D 3) { TCGv_i64 tcg_double, tcg_res; TCGv_i32 tcg_tmp; tcg_double =3D tcg_temp_new_i64(); @@ -451,10 +459,18 @@ static bool trans_VCVT(DisasContext *s, arg_VCVT *a) tcg_single =3D tcg_temp_new_i32(); tcg_res =3D tcg_temp_new_i32(); neon_load_reg32(tcg_single, rm); - if (is_signed) { - gen_helper_vfp_tosls(tcg_res, tcg_single, tcg_shift, fpst); + if (sz =3D=3D 1) { + if (is_signed) { + gen_helper_vfp_toslh(tcg_res, tcg_single, tcg_shift, fpst); + } else { + gen_helper_vfp_toulh(tcg_res, tcg_single, tcg_shift, fpst); + } } else { - gen_helper_vfp_touls(tcg_res, tcg_single, tcg_shift, fpst); + if (is_signed) { + gen_helper_vfp_tosls(tcg_res, tcg_single, tcg_shift, fpst); + } else { + gen_helper_vfp_touls(tcg_res, tcg_single, tcg_shift, fpst); + } } neon_store_reg32(tcg_res, rd); tcg_temp_free_i32(tcg_res); --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640111; cv=none; d=zohomail.com; s=zohoarc; b=PBuoOktmOfTB2/j6/DFwa+7mlihI9LpjgT/U+/jNr/YzkZj/Vg3+bBOpb2eVMbA4aH0yqRMXaV+V6QER3rctlZHjNE+6p1ioo/7+J9YWnLO90cY7GqThFjAfz+CTc1TiAiJ5OkxPRouTDYaISGt+UpEIR3K+1hYQJCHGOMAb/+g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640111; h=Content-Transfer-Encoding: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=SpjNLpXsFoj6kxewsPo7gjZ4twjnVkm0kk0XSYVH8rY=; b=ddlmmpwa+IDHm1tCp3xXV/y1WAWZzEZLUwo92CqOVrWZAuwVFKSwxuBGEUpab7GsdByTajFTMZ1ED0WiVGipR+geOdaV6ddPcQgbWQrdqDHKphnU2DFCV73IqWd6hPdiSqDEKwGd/fyxrRgHGDaLPnxAQQyjLLCtrZfd0jwPd5s= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640111440833.3132697836244; Fri, 28 Aug 2020 11:41:51 -0700 (PDT) Received: from localhost ([::1]:58946 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjJu-00058H-Gd for importer@patchew.org; Fri, 28 Aug 2020 14:41:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58900) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCj-0002X1-A0 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:25 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:42996) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCc-0005yo-PL for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:24 -0400 Received: by mail-wr1-x443.google.com with SMTP id c18so42299wrm.9 for ; Fri, 28 Aug 2020 11:34:18 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:16 -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=SpjNLpXsFoj6kxewsPo7gjZ4twjnVkm0kk0XSYVH8rY=; b=VP5Z8EqdS5lhxOl+Y28w5eD3/KldhPftK7i4fgR1jItfcLRUyzVZiSJDPNFXHCgB/o GrAOjIGhD5XZEPmajc7w2Lv0dymRShJeNVLCorrLhwaxfXKPm+abq/0yMJ8GPSrzcVEl CXa1FZPDmqUP9q9SHQkxSBO6HPqe1gZqeso9RGCXZKD6OYKvQxu4zC21HJOARggOsOIJ dTKNr1cVkiW8+/Cti0RH2qkhygDO2giUJp3MAjip54FuI4pp/iVYKwHeCxc4ZRi0+/fg ABQNts6sklmXQqmOUYaQDf4W8Sbo6dYLngX/x1dyMFqheKUDvR7gVyLKobCPTuyP1Lie RLlQ== 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=SpjNLpXsFoj6kxewsPo7gjZ4twjnVkm0kk0XSYVH8rY=; b=SRdqVZHLSZHYCTJqMoU3N/ofnGNMWtJa15Ve/rL/qDw+QXMKjlvdRjT3hw583o6od+ Q6pB3fOpGcYsBqQbynCX5CygKPKXV8eF0RnblX6zM/oIU2RClcNaluAPlJWo4+MSRx7H 2T26HyXEZjd7DvFrJvcJj8xlMVl/luk66E+GF6XaZIJz/oKQvcXVpPdc58ZYStvEeYdt QV4LVoIN8oVPf/lqPWFRQ0QLv0+6+QK+7jeed76ZwubH+fyRkApaLCrrDr4D1u9RhLMg YY9BKItH9CrIt8xwlxzjhZbvxbZzs4TnnAPshL5GdbYqXGNPP9OWqZ8H+8Z3o9cV/4ti GpxA== X-Gm-Message-State: AOAM530dnu7j5/wMkdrilbZJ0xC5r/0BjJjy46EDkzGyS0XzZGxplJQ6 BK5oDuxoOvqcE65jUC3/5zvLJw== X-Google-Smtp-Source: ABdhPJxjWSbwvs/HwYIADF7zL+On0S0KbABaVf7YbJpz2OZIcWdXW1O1cPEgZKa9qNsgXC1k5EhX5A== X-Received: by 2002:a5d:4ccb:: with SMTP id c11mr250573wrt.159.1598639657426; Fri, 28 Aug 2020 11:34:17 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 17/45] target/arm: Implement VFP fp16 VSEL Date: Fri, 28 Aug 2020 19:33:26 +0100 Message-Id: <20200828183354.27913-18-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::443; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x443.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=unavailable 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implement the fp16 versions of the VFP VSEL instruction. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/vfp-uncond.decode | 6 ++++-- target/arm/translate-vfp.c.inc | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/target/arm/vfp-uncond.decode b/target/arm/vfp-uncond.decode index b7cd9d11ed5..8ba7b1703e0 100644 --- a/target/arm/vfp-uncond.decode +++ b/target/arm/vfp-uncond.decode @@ -44,10 +44,12 @@ @vfp_dnm_s ................................ vm=3D%vm_sp vn=3D%vn_sp vd= =3D%vd_sp @vfp_dnm_d ................................ vm=3D%vm_dp vn=3D%vn_dp vd= =3D%vd_dp =20 +VSEL 1111 1110 0. cc:2 .... .... 1001 .0.0 .... \ + vm=3D%vm_sp vn=3D%vn_sp vd=3D%vd_sp sz=3D1 VSEL 1111 1110 0. cc:2 .... .... 1010 .0.0 .... \ - vm=3D%vm_sp vn=3D%vn_sp vd=3D%vd_sp dp=3D0 + vm=3D%vm_sp vn=3D%vn_sp vd=3D%vd_sp sz=3D2 VSEL 1111 1110 0. cc:2 .... .... 1011 .0.0 .... \ - vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp dp=3D1 + vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp sz=3D3 =20 VMAXNM_hp 1111 1110 1.00 .... .... 1001 .0.0 .... @vfp_dnm_s VMINNM_hp 1111 1110 1.00 .... .... 1001 .1.0 .... @vfp_dnm_s diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index 583e7ccdb20..869b67b2b93 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -190,18 +190,22 @@ static bool vfp_access_check(DisasContext *s) static bool trans_VSEL(DisasContext *s, arg_VSEL *a) { uint32_t rd, rn, rm; - bool dp =3D a->dp; + int sz =3D a->sz; =20 if (!dc_isar_feature(aa32_vsel, s)) { return false; } =20 - if (dp && !dc_isar_feature(aa32_fpdp_v2, s)) { + if (sz =3D=3D 3 && !dc_isar_feature(aa32_fpdp_v2, s)) { + return false; + } + + if (sz =3D=3D 1 && !dc_isar_feature(aa32_fp16_arith, s)) { return false; } =20 /* UNDEF accesses to D16-D31 if they don't exist */ - if (dp && !dc_isar_feature(aa32_simd_r32, s) && + if (sz =3D=3D 3 && !dc_isar_feature(aa32_simd_r32, s) && ((a->vm | a->vn | a->vd) & 0x10)) { return false; } @@ -214,7 +218,7 @@ static bool trans_VSEL(DisasContext *s, arg_VSEL *a) return true; } =20 - if (dp) { + if (sz =3D=3D 3) { TCGv_i64 frn, frm, dest; TCGv_i64 tmp, zero, zf, nf, vf; =20 @@ -307,6 +311,10 @@ static bool trans_VSEL(DisasContext *s, arg_VSEL *a) tcg_temp_free_i32(tmp); break; } + /* For fp16 the top half is always zeroes */ + if (sz =3D=3D 1) { + tcg_gen_andi_i32(dest, dest, 0xffff); + } neon_store_reg32(dest, rd); tcg_temp_free_i32(frn); tcg_temp_free_i32(frm); --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640632; cv=none; d=zohomail.com; s=zohoarc; b=O0GvhGcIA+4TxtiwJUBIR1eWjMdCdTTEuD8QGdT4tUKk5jx2QM5vOaIRxAVpkdemjh8s8mxMZ7J7pnl23enHO9hnrZFnBde7E55hKgSjVXunZM5E2c/5s6++dWXuAxQxivNCs7a4+coQDGjSMLplxgv37vkmph0leaRvm8Pj20k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640632; h=Content-Transfer-Encoding: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=L3poJgA9EWLGwO8d4CxrPwuuiVol61jXvpwTOON3sKg=; b=fG8n1oYGuUw13ympvhaCx5wImd67aHUx8XJxzfMdse2r6s742HwfrA1dbG1f0C7eYu56qTUcizUh7QQrG0BptUpSvQ9h6q8yMiYVIFV8eIQmU7x9bUQ+DXNluycmaqZkUCP3hAeCWecjYYGGIHTakj2sOo9CayXPOxpddBa70RE= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640632103939.732777474025; Fri, 28 Aug 2020 11:50:32 -0700 (PDT) Received: from localhost ([::1]:36624 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjSJ-0001zl-8J for importer@patchew.org; Fri, 28 Aug 2020 14:50:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58938) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCk-0002a9-E8 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:26 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:32821) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCe-0005zF-34 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:26 -0400 Received: by mail-wm1-x341.google.com with SMTP id y8so186541wma.0 for ; Fri, 28 Aug 2020 11:34:19 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:17 -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=L3poJgA9EWLGwO8d4CxrPwuuiVol61jXvpwTOON3sKg=; b=MSWQfvjEf+7m+hu8bnOdQTtgNOGmMpiFKxcPI/x7f3ZZcrA/JhEivQd+Qz9rQlzZMi h4KDyw+8If98lqT3w7rlN/apXSDKRSd5X1piAbgTxNUtY+KIn3fNRfl88KPra425n/8P Nod9flFg0Z7UzUVsEkGvTE75xFUhCHpjCgXAiFfEioMU5wtZdOiitAtoY+HitisAbT5z fmd5lelzoFPErd12QyQ76rzqo4qtPlol54SuDEqnGNVKDxHUwp9E6o3Thsvka8RSOrq6 hvaHRZXfRLgYOJ2q3evKEZhGSBktRJklrr49bOTW66XQ6Q7AqdrQ3z97LcCoubc360dR L2uw== 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=L3poJgA9EWLGwO8d4CxrPwuuiVol61jXvpwTOON3sKg=; b=sBylzyHEgQnhvmO+BQzrp7I6UAvzp09j+iY2hGcSWpaNBQgZdXeAukGIjvgXV8kMjK Fh/LpBI53my1xE1E5NaWPkvTH2OSw5wfDlqjKkVAhC416cyiHXTxxPZU6zU0k8S10dAc Q5QUcjJkO4TS96XZPOwluh9/k2/dxmpOZ6ifBrnbMtyz7hDkcF2MQGvCZG8IEIAEyDQq khCR6QanRW0RK99yGE2EzwikpfvDeq1mQeSDnLtNH5TdHUW41Qd9oYB/7PsycjnfAOqx HzSDp2pBTqKD28dy0nYe8fKAxh/muyEYbScAop+eNChCLin9szZEJBx5E2v1KqBr29LT d5tw== X-Gm-Message-State: AOAM532HuS/QhpVtrjbf9Fra1hvK2jTtrxhz6ba0J/K7qvOxqVO5/Bdz ih5qt5Usf5QV5LnQIgljWyhJbw== X-Google-Smtp-Source: ABdhPJyUYlNAABEkA/m5bnk9JVwvQJ13cJdCzFOybkeKPXp5Lcso5+xOh+LAInPKeTFEjYMxmUMbQg== X-Received: by 2002:a1c:2543:: with SMTP id l64mr37589wml.96.1598639658610; Fri, 28 Aug 2020 11:34:18 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 18/45] target/arm: Implement VFP fp16 VRINT* Date: Fri, 28 Aug 2020 19:33:27 +0100 Message-Id: <20200828183354.27913-19-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::341; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x341.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implement the fp16 version of the VFP VRINT* insns. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 2 + target/arm/vfp-uncond.decode | 6 ++- target/arm/vfp.decode | 3 ++ target/arm/vfp_helper.c | 21 ++++++++ target/arm/translate-vfp.c.inc | 98 +++++++++++++++++++++++++++++++--- 5 files changed, 122 insertions(+), 8 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 03193728476..f5ad5088bf1 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -242,8 +242,10 @@ DEF_HELPER_3(shr_cc, i32, env, i32, i32) DEF_HELPER_3(sar_cc, i32, env, i32, i32) DEF_HELPER_3(ror_cc, i32, env, i32, i32) =20 +DEF_HELPER_FLAGS_2(rinth_exact, TCG_CALL_NO_RWG, f16, f16, ptr) DEF_HELPER_FLAGS_2(rints_exact, TCG_CALL_NO_RWG, f32, f32, ptr) DEF_HELPER_FLAGS_2(rintd_exact, TCG_CALL_NO_RWG, f64, f64, ptr) +DEF_HELPER_FLAGS_2(rinth, TCG_CALL_NO_RWG, f16, f16, ptr) DEF_HELPER_FLAGS_2(rints, TCG_CALL_NO_RWG, f32, f32, ptr) DEF_HELPER_FLAGS_2(rintd, TCG_CALL_NO_RWG, f64, f64, ptr) =20 diff --git a/target/arm/vfp-uncond.decode b/target/arm/vfp-uncond.decode index 8ba7b1703e0..9615544623a 100644 --- a/target/arm/vfp-uncond.decode +++ b/target/arm/vfp-uncond.decode @@ -60,10 +60,12 @@ VMINNM_sp 1111 1110 1.00 .... .... 1010 .1.0 .... = @vfp_dnm_s VMAXNM_dp 1111 1110 1.00 .... .... 1011 .0.0 .... @vfp_dnm_d VMINNM_dp 1111 1110 1.00 .... .... 1011 .1.0 .... @vfp_dnm_d =20 +VRINT 1111 1110 1.11 10 rm:2 .... 1001 01.0 .... \ + vm=3D%vm_sp vd=3D%vd_sp sz=3D1 VRINT 1111 1110 1.11 10 rm:2 .... 1010 01.0 .... \ - vm=3D%vm_sp vd=3D%vd_sp dp=3D0 + vm=3D%vm_sp vd=3D%vd_sp sz=3D2 VRINT 1111 1110 1.11 10 rm:2 .... 1011 01.0 .... \ - vm=3D%vm_dp vd=3D%vd_dp dp=3D1 + vm=3D%vm_dp vd=3D%vd_dp sz=3D3 =20 # VCVT float to int with specified rounding mode; Vd is always single-prec= ision VCVT 1111 1110 1.11 11 rm:2 .... 1001 op:1 1.0 .... \ diff --git a/target/arm/vfp.decode b/target/arm/vfp.decode index a8f1137be1e..9a79e99f1b0 100644 --- a/target/arm/vfp.decode +++ b/target/arm/vfp.decode @@ -195,12 +195,15 @@ VCVT_f16_f32 ---- 1110 1.11 0011 .... 1010 t:1 1.0 ..= .. \ VCVT_f16_f64 ---- 1110 1.11 0011 .... 1011 t:1 1.0 .... \ vd=3D%vd_sp vm=3D%vm_dp =20 +VRINTR_hp ---- 1110 1.11 0110 .... 1001 01.0 .... @vfp_dm_ss VRINTR_sp ---- 1110 1.11 0110 .... 1010 01.0 .... @vfp_dm_ss VRINTR_dp ---- 1110 1.11 0110 .... 1011 01.0 .... @vfp_dm_dd =20 +VRINTZ_hp ---- 1110 1.11 0110 .... 1001 11.0 .... @vfp_dm_ss VRINTZ_sp ---- 1110 1.11 0110 .... 1010 11.0 .... @vfp_dm_ss VRINTZ_dp ---- 1110 1.11 0110 .... 1011 11.0 .... @vfp_dm_dd =20 +VRINTX_hp ---- 1110 1.11 0111 .... 1001 01.0 .... @vfp_dm_ss VRINTX_sp ---- 1110 1.11 0111 .... 1010 01.0 .... @vfp_dm_ss VRINTX_dp ---- 1110 1.11 0111 .... 1011 01.0 .... @vfp_dm_dd =20 diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index ab3f0b170a7..586dfd22e5e 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -1019,6 +1019,11 @@ float64 VFP_HELPER(muladd, d)(float64 a, float64 b, = float64 c, void *fpstp) } =20 /* ARMv8 round to integral */ +dh_ctype_f16 HELPER(rinth_exact)(dh_ctype_f16 x, void *fp_status) +{ + return float16_round_to_int(x, fp_status); +} + float32 HELPER(rints_exact)(float32 x, void *fp_status) { return float32_round_to_int(x, fp_status); @@ -1029,6 +1034,22 @@ float64 HELPER(rintd_exact)(float64 x, void *fp_stat= us) return float64_round_to_int(x, fp_status); } =20 +dh_ctype_f16 HELPER(rinth)(dh_ctype_f16 x, void *fp_status) +{ + int old_flags =3D get_float_exception_flags(fp_status), new_flags; + float16 ret; + + ret =3D float16_round_to_int(x, fp_status); + + /* Suppress any inexact exceptions the conversion produced */ + if (!(old_flags & float_flag_inexact)) { + new_flags =3D get_float_exception_flags(fp_status); + set_float_exception_flags(new_flags & ~float_flag_inexact, fp_stat= us); + } + + return ret; +} + float32 HELPER(rints)(float32 x, void *fp_status) { int old_flags =3D get_float_exception_flags(fp_status), new_flags; diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index 869b67b2b93..7ce044fa896 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -341,7 +341,7 @@ static const uint8_t fp_decode_rm[] =3D { static bool trans_VRINT(DisasContext *s, arg_VRINT *a) { uint32_t rd, rm; - bool dp =3D a->dp; + int sz =3D a->sz; TCGv_ptr fpst; TCGv_i32 tcg_rmode; int rounding =3D fp_decode_rm[a->rm]; @@ -350,12 +350,16 @@ static bool trans_VRINT(DisasContext *s, arg_VRINT *a) return false; } =20 - if (dp && !dc_isar_feature(aa32_fpdp_v2, s)) { + if (sz =3D=3D 3 && !dc_isar_feature(aa32_fpdp_v2, s)) { + return false; + } + + if (sz =3D=3D 1 && !dc_isar_feature(aa32_fp16_arith, s)) { return false; } =20 /* UNDEF accesses to D16-D31 if they don't exist */ - if (dp && !dc_isar_feature(aa32_simd_r32, s) && + if (sz =3D=3D 3 && !dc_isar_feature(aa32_simd_r32, s) && ((a->vm | a->vd) & 0x10)) { return false; } @@ -367,12 +371,16 @@ static bool trans_VRINT(DisasContext *s, arg_VRINT *a) return true; } =20 - fpst =3D fpstatus_ptr(FPST_FPCR); + if (sz =3D=3D 1) { + fpst =3D fpstatus_ptr(FPST_FPCR_F16); + } else { + fpst =3D fpstatus_ptr(FPST_FPCR); + } =20 tcg_rmode =3D tcg_const_i32(arm_rmode_to_sf(rounding)); gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); =20 - if (dp) { + if (sz =3D=3D 3) { TCGv_i64 tcg_op; TCGv_i64 tcg_res; tcg_op =3D tcg_temp_new_i64(); @@ -388,7 +396,11 @@ static bool trans_VRINT(DisasContext *s, arg_VRINT *a) tcg_op =3D tcg_temp_new_i32(); tcg_res =3D tcg_temp_new_i32(); neon_load_reg32(tcg_op, rm); - gen_helper_rints(tcg_res, tcg_op, fpst); + if (sz =3D=3D 1) { + gen_helper_rinth(tcg_res, tcg_op, fpst); + } else { + gen_helper_rints(tcg_res, tcg_op, fpst); + } neon_store_reg32(tcg_res, rd); tcg_temp_free_i32(tcg_op); tcg_temp_free_i32(tcg_res); @@ -2638,6 +2650,29 @@ static bool trans_VCVT_f16_f64(DisasContext *s, arg_= VCVT_f16_f64 *a) return true; } =20 +static bool trans_VRINTR_hp(DisasContext *s, arg_VRINTR_sp *a) +{ + TCGv_ptr fpst; + TCGv_i32 tmp; + + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + tmp =3D tcg_temp_new_i32(); + neon_load_reg32(tmp, a->vm); + fpst =3D fpstatus_ptr(FPST_FPCR_F16); + gen_helper_rinth(tmp, tmp, fpst); + neon_store_reg32(tmp, a->vd); + tcg_temp_free_ptr(fpst); + tcg_temp_free_i32(tmp); + return true; +} + static bool trans_VRINTR_sp(DisasContext *s, arg_VRINTR_sp *a) { TCGv_ptr fpst; @@ -2693,6 +2728,34 @@ static bool trans_VRINTR_dp(DisasContext *s, arg_VRI= NTR_dp *a) return true; } =20 +static bool trans_VRINTZ_hp(DisasContext *s, arg_VRINTZ_sp *a) +{ + TCGv_ptr fpst; + TCGv_i32 tmp; + TCGv_i32 tcg_rmode; + + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + tmp =3D tcg_temp_new_i32(); + neon_load_reg32(tmp, a->vm); + fpst =3D fpstatus_ptr(FPST_FPCR_F16); + tcg_rmode =3D tcg_const_i32(float_round_to_zero); + gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); + gen_helper_rinth(tmp, tmp, fpst); + gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst); + neon_store_reg32(tmp, a->vd); + tcg_temp_free_ptr(fpst); + tcg_temp_free_i32(tcg_rmode); + tcg_temp_free_i32(tmp); + return true; +} + static bool trans_VRINTZ_sp(DisasContext *s, arg_VRINTZ_sp *a) { TCGv_ptr fpst; @@ -2758,6 +2821,29 @@ static bool trans_VRINTZ_dp(DisasContext *s, arg_VRI= NTZ_dp *a) return true; } =20 +static bool trans_VRINTX_hp(DisasContext *s, arg_VRINTX_sp *a) +{ + TCGv_ptr fpst; + TCGv_i32 tmp; + + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + tmp =3D tcg_temp_new_i32(); + neon_load_reg32(tmp, a->vm); + fpst =3D fpstatus_ptr(FPST_FPCR_F16); + gen_helper_rinth_exact(tmp, tmp, fpst); + neon_store_reg32(tmp, a->vd); + tcg_temp_free_ptr(fpst); + tcg_temp_free_i32(tmp); + return true; +} + static bool trans_VRINTX_sp(DisasContext *s, arg_VRINTX_sp *a) { TCGv_ptr fpst; --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640242; cv=none; d=zohomail.com; s=zohoarc; b=eEQSQBCc+pqwrP0BC79oErx6EKHRZaNMYdfPecajp526KWCvwfczu/VkNsKX7uFTL5RSndBevECB9sg9iVUCLFe1wqu6rA3XZQ9vPymvGzl4CUNaJsr5n4xWNhpsYQXDjhrHPIA6lkwFQfMBTWUfGTywtOWzEcxDPnnbE7/8Ob8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640242; h=Content-Transfer-Encoding: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=/Ki0FEJAVncOeHF2Ucul7Zf8qvOQrPlrcF6S9f2G/rs=; b=Gecgq3TILbRqs5X+Pb34T8R/Eyu/EgZE4oYc0Lwjgh6nRO9RWqZ7gCdIyIU+LYscgRZaKvNpj5TT0XKSV+jaI4d7uP+3FVvzoGHTh6YkaQ+iyJL4euqWF8PxTFLoaQjia9l3erfSI00dWsZTEkIrtdH3sJZsQbyl37zUPkDN9FY= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159864024276898.52186308959324; Fri, 28 Aug 2020 11:44:02 -0700 (PDT) Received: from localhost ([::1]:40050 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjM1-0000QG-VJ for importer@patchew.org; Fri, 28 Aug 2020 14:44:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58980) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCl-0002cy-Iz for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:27 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:34600) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCf-0005zf-9N for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:27 -0400 Received: by mail-wr1-x444.google.com with SMTP id f7so80045wrw.1 for ; Fri, 28 Aug 2020 11:34:20 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:19 -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=/Ki0FEJAVncOeHF2Ucul7Zf8qvOQrPlrcF6S9f2G/rs=; b=m09jRW4Tv6kgufoV4Nw2hxTquxtjIxwXe66OwEXY91E7HxUjADOf4iFtSOr29YtTpO KqUUxRb4x7XYqo33sYJKqbIS2FrPm0FOJ8oLFn8FaijLZq7ObRt1/bxk6iHrCULTeBHz O7+U2nku5qHPZIr4X3eWmIVN6Pxtg4b1pnuOXjyL5kTUJaOVCb3rzSENjJQbmIb3i4G+ urV/rp+HozCv4ZMCMgXj0cGvTB17Kox7Nu5F8inu+FKBraUSX+vtyV8s46z1xYvGCgOf sxvZOaYt+zehdwpu46yH5rVtn7IpG5HhkVyWZa/84i3xQ1XD8fHnDy4e38Zh2FzDF5+8 PRPg== 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=/Ki0FEJAVncOeHF2Ucul7Zf8qvOQrPlrcF6S9f2G/rs=; b=q+AscMW96QBu5lDRHrhHaUMf+XtQB+1saigjgVcsSHv0YyFBhSul29HAPzSKf79Q29 vw83xipKAcdALF+q1L6w4JL2nLK0rotwYboAZl5C4Gaz/yiqe8dw3F18ZfoE9rjAtJcd Zb2Bfy9VG3kOlGdXH4uc/pWeC/raqeQ+wiAS4aHWTl3BOde6aZMyD0vp0unMn0NQkcg0 7zWSXVOOE7iw/QQdbJLlwywqLie7r9MeEqZc5PCpwieLlw0GrwSU/kAUYBkVN1S9f7Jo JmiZ3SvsO6gAirMG6gkQqyYE2tZVggroqRerHquBtx63eBZW475oy08ZnSbGkx+hJ67b p2PA== X-Gm-Message-State: AOAM531aXw+AVh6eRaZmJIlGPUe4l1fbYY2dFdJJe2MHrxSVo3f2ue3X ONdKADLZiyFmLzlrLjFLK3donYxJ0Qhdsu6R X-Google-Smtp-Source: ABdhPJzliAeAsLXh940Hqg5V4R4Iq/8F9tP8lPLQWFedqgKmw0g45C+LRv4IoqkAoyVs2NfL/XDcTA== X-Received: by 2002:a5d:68d1:: with SMTP id p17mr257757wrw.378.1598639659872; Fri, 28 Aug 2020 11:34:19 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 19/45] target/arm: Implement new VFP fp16 insn VINS Date: Fri, 28 Aug 2020 19:33:28 +0100 Message-Id: <20200828183354.27913-20-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::444; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x444.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" The fp16 extension includes a new instruction VINS, which copies the lower 16 bits of a 32-bit source VFP register into the upper 16 bits of the destination. Implement it. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/vfp-uncond.decode | 3 +++ target/arm/translate-vfp.c.inc | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/target/arm/vfp-uncond.decode b/target/arm/vfp-uncond.decode index 9615544623a..39dc8f6373a 100644 --- a/target/arm/vfp-uncond.decode +++ b/target/arm/vfp-uncond.decode @@ -74,3 +74,6 @@ VCVT 1111 1110 1.11 11 rm:2 .... 1010 op:1 1.0 ...= . \ vm=3D%vm_sp vd=3D%vd_sp sz=3D2 VCVT 1111 1110 1.11 11 rm:2 .... 1011 op:1 1.0 .... \ vm=3D%vm_dp vd=3D%vd_sp sz=3D3 + +VINS 1111 1110 1.11 0000 .... 1010 11 . 0 .... \ + vd=3D%vd_sp vm=3D%vm_sp diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index 7ce044fa896..bda3dd25136 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -3454,3 +3454,31 @@ static bool trans_NOCP(DisasContext *s, arg_NOCP *a) =20 return false; } + +static bool trans_VINS(DisasContext *s, arg_VINS *a) +{ + TCGv_i32 rd, rm; + + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + if (s->vec_len !=3D 0 || s->vec_stride !=3D 0) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + /* Insert low half of Vm into high half of Vd */ + rm =3D tcg_temp_new_i32(); + rd =3D tcg_temp_new_i32(); + neon_load_reg32(rm, a->vm); + neon_load_reg32(rd, a->vd); + tcg_gen_deposit_i32(rd, rd, rm, 16, 16); + neon_store_reg32(rd, a->vd); + tcg_temp_free_i32(rm); + tcg_temp_free_i32(rd); + return true; +} --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640781; cv=none; d=zohomail.com; s=zohoarc; b=Dds8Q4ej6RonC/ihEggVkXdmVJ8qBEG7cF3w+4qktK5ajrnYXF59RvjW5ejcOGv1QsdyVrwBRyodb+udkgET3lYxZFf3lfjV7Zqc1PNiaA16TjI9eicA2TzoVOWpXPj8kPYKY7aCpzOMBBI8yA6heNY0wEOZLBUBKO65PqJmr54= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640781; h=Content-Transfer-Encoding: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=cOh7GY0pCWe5s/t9AlUFMrvjleZvUswRo8NiK3ZWQJY=; b=NEarmVpE95Zfd4/TABTnGJmB4FbcVgvLsaDM4eUN9KVxHyBJ4VmviU8T+bmpa/ajp/DXs3Etfztvx33r/mXzyLQ6UWpNllxXSs7Y2JPB+f6djo+OJ3J5HSOsbLM8dT+hkgwo+lV67pAkqp/8VMOzkdLrXhslknDqeGOTCugzRQ8= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640781257510.6197709433095; Fri, 28 Aug 2020 11:53:01 -0700 (PDT) Received: from localhost ([::1]:45502 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjUi-0005eH-Cw for importer@patchew.org; Fri, 28 Aug 2020 14:53:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59016) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCm-0002fO-JT for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:28 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:40729) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCg-000604-FS for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:28 -0400 Received: by mail-wm1-x344.google.com with SMTP id k20so105808wmi.5 for ; Fri, 28 Aug 2020 11:34:21 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:20 -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=cOh7GY0pCWe5s/t9AlUFMrvjleZvUswRo8NiK3ZWQJY=; b=VJD8IUlkhn6qJWaoowXbizmhXMnBHttNlMzj1KvM2qd0m1U2tli3ZMI/7DUWFqI4gC 39lGyEODXGJJP3jitEObWf017Lq+sKw8S4nSaYkLxT3nfVfYnOTwS2FkFSVjRHy5o5lM QGUmX1XGuClMnUsMBUJ+wwJEvxmTjtdcUQ5b12cHEi+9Icbq68grjJw0SgU8U+rQYwm3 RHvAKCn4FOjAXmBO5IuYbQc6uNCk02T7ySU7qwW5s3s6hVBNn6m0dh0Nreu6Te1wOHrI RHdWfNry4lE1Vpfv+xlp2YgmGbTeATqF5zeGf6z0faA/WLU/9+NeLuattmSvgxXJNmgh X/VA== 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=cOh7GY0pCWe5s/t9AlUFMrvjleZvUswRo8NiK3ZWQJY=; b=Cb3ZYZsrkJEyjczcWQfU0Uh3gEMJoGBxVW9RanVRSXzPWTwU+IZkpBNY+HDqoA6vyG L73LznTAA+EqVJ9ZT9rYSrj3UohF5oX/3g6wn28/QxCvfb60nHEQEg8Mh5PUMLgzlbfq Td/snGuW/kwVwD5UxL4amGOrJU5KOn/XLkLdIRJonvz7qxKue2eupEFW6CfQ0ifRup7q 621N8y8mweFrrnWX9lSHXculWsJveheSX4rSu/wNIO2D+0DDt7p1dlISapUYsaeOzG12 kUGOdUHlmHDIWQm2xJnktFwFteA+4eZV9BgHsKSSAGS3M8v3/Kz3Z8LwoQICVB0M9v/G /0wQ== X-Gm-Message-State: AOAM533Rr0dk1KyQb3hzABPkPhehMSotTtmRFXDUPudlNB5dmD9MBKLe 1s93jdBKo9Wc/JkELEhhVmK88A== X-Google-Smtp-Source: ABdhPJyeTgZjsNzll7nVj9zK5rcb0s+pInaiM97upqo7GsXyQaacxvs2k4sKbNQUNTB9nhieTeLhgw== X-Received: by 2002:a1c:f70e:: with SMTP id v14mr45064wmh.74.1598639660995; Fri, 28 Aug 2020 11:34:20 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 20/45] target/arm: Implement new VFP fp16 insn VMOVX Date: Fri, 28 Aug 2020 19:33:29 +0100 Message-Id: <20200828183354.27913-21-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::344; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x344.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" The fp16 extension includes a new instruction VMOVX, which copies the upper 16 bits of a 32-bit source VFP register into the lower 16 bits of the destination and zeroes the high half of the destination. Implement it. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/vfp-uncond.decode | 3 +++ target/arm/translate-vfp.c.inc | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/target/arm/vfp-uncond.decode b/target/arm/vfp-uncond.decode index 39dc8f6373a..8891ab3d549 100644 --- a/target/arm/vfp-uncond.decode +++ b/target/arm/vfp-uncond.decode @@ -75,5 +75,8 @@ VCVT 1111 1110 1.11 11 rm:2 .... 1010 op:1 1.0 ...= . \ VCVT 1111 1110 1.11 11 rm:2 .... 1011 op:1 1.0 .... \ vm=3D%vm_dp vd=3D%vd_sp sz=3D3 =20 +VMOVX 1111 1110 1.11 0000 .... 1010 01 . 0 .... \ + vd=3D%vd_sp vm=3D%vm_sp + VINS 1111 1110 1.11 0000 .... 1010 11 . 0 .... \ vd=3D%vd_sp vm=3D%vm_sp diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index bda3dd25136..4b26156eccc 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -3482,3 +3482,28 @@ static bool trans_VINS(DisasContext *s, arg_VINS *a) tcg_temp_free_i32(rd); return true; } + +static bool trans_VMOVX(DisasContext *s, arg_VINS *a) +{ + TCGv_i32 rm; + + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + if (s->vec_len !=3D 0 || s->vec_stride !=3D 0) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + /* Set Vd to high half of Vm */ + rm =3D tcg_temp_new_i32(); + neon_load_reg32(rm, a->vm); + tcg_gen_shri_i32(rm, rm, 16); + neon_store_reg32(rm, a->vd); + tcg_temp_free_i32(rm); + return true; +} --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640788; cv=none; d=zohomail.com; s=zohoarc; b=h7L+/9dFwwRb6IbD1jiNVszi6Nvf1LpxUXBBHjdteozivPh6lCLgq8VD2RlZwa8G7VHjnLR25AMnTtfXpiCX3DyhFDs79wCPO9BzC6Tg7bCXkl8MLuSN8ITHPswkOiozA3MDurFgn62KYI5XL5UnT/ARLXFRGcivpVJVNd1Jdgs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640788; h=Content-Transfer-Encoding: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=fO4bxaTwEV/w3CMo+SSdfW5rxADm6yGqbOxhWupxuUI=; b=Lr/U9aU/noiPTL/MLj+qi9F8eV8rJugGoFCsgwJDXj+lUUNrrGS9VFptDPzlWfL/XhfBNh20KqyijKc6zLJmeV35j1tXzlgt/RvnsVV6GtMKL0fpEepHeF1YfReQlGSELarbQCu8/UOgIdPuJZ/XMGOcbJFKRMqqmVcQQCzg7OA= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640788189229.2715850406181; Fri, 28 Aug 2020 11:53:08 -0700 (PDT) Received: from localhost ([::1]:46264 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjUp-0005x2-Av for importer@patchew.org; Fri, 28 Aug 2020 14:53:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59024) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCm-0002gG-T7 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:28 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:32824) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCh-00060c-L5 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:28 -0400 Received: by mail-wr1-x442.google.com with SMTP id o4so85091wrn.0 for ; Fri, 28 Aug 2020 11:34:23 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:21 -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=fO4bxaTwEV/w3CMo+SSdfW5rxADm6yGqbOxhWupxuUI=; b=HwKlMaUikwZD9Z9ToLszsuD8jJbM0kk50AybXBAdnMOIH7nPlUSIZe12rLqtmJYcJm mBWdQ/F8SOwMXaVoeJAIRUMWSqo2IvLrKGmssQxOBjjXty5zfYx6aG85zi20ypXaa7Yi Y5JpvJ6zjXoevwtlPVFs1NBNO85gB4pujpjBQNrlYHDjG/fzmhG8IVyYiPT/VmodR3ID Z9xuIUMKxQDGUqZN+CXWCDceQLqvRrdn6ziwxEn9yuCt/B1Bre+aQ2TcB4AHy0pbHDor u6ai/Q5KG3dfcoeRreQ+Bp1iY+Yqe912IOgrkjz8OhBk85MZT+IOAdHHb2KySSP7T9ZA 1Z+w== 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=fO4bxaTwEV/w3CMo+SSdfW5rxADm6yGqbOxhWupxuUI=; b=OGUhghCKfp1LtdvkbYnWuvsrunitygjP8B+A/5fwjgrJBnxnfcUDXhXib3188yJVEK fQ1uLwHAflJaeGf6jD4SpRLRzPJUXFBBN9Ih1v2WcjOHQpmqh4zdYGGRrIxwIsZ3m05u nqtluHelufzsiwzp+Q1yOBmYegTS0tlLBdwB20oy8XtWNu1gLADaLhck1xO+X93B49Ei y9nccxVG2g2HwkLOR1uOHCA8/gV42OdvtJbJYbRdtXb7ld9f12T7mRb3oCC4ZDvlyuf1 5JJgX+WDD1wDWE9YipeVTeNmGi81d/I4/xm6TjMcLwqgROuTKNJSHCMpRaCZNUSwcpZc s1Aw== X-Gm-Message-State: AOAM53254G2zXB1pDviyKWjbping3xBt3bnxq49iqmEUjUFAWgNNOkpD z43mUowkEf94vV81xJedXy3EIg== X-Google-Smtp-Source: ABdhPJxVpf2PxZtq6/E8SM5FUcmXTI/O7q80gaShaWsZWnWbMTGSHxp3+O6rpiK+fqXnu4vnTb86rQ== X-Received: by 2002:a5d:420b:: with SMTP id n11mr259999wrq.11.1598639662059; Fri, 28 Aug 2020 11:34:22 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 21/45] target/arm: Implement VFP fp16 VMOV between gp and halfprec registers Date: Fri, 28 Aug 2020 19:33:30 +0100 Message-Id: <20200828183354.27913-22-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::442; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x442.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implement the VFP fp16 variant of VMOV that transfers a 16-bit value between a general purpose register and a VFP register. Note that Rt =3D=3D 15 is UNPREDICTABLE; since this insn is v8 and later only we have no need to replicate the old "updates CPSR.NZCV" behaviour that the singleprec version of this insn does. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/vfp.decode | 1 + target/arm/translate-vfp.c.inc | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/target/arm/vfp.decode b/target/arm/vfp.decode index 9a79e99f1b0..51f143b4a51 100644 --- a/target/arm/vfp.decode +++ b/target/arm/vfp.decode @@ -74,6 +74,7 @@ VDUP ---- 1110 1 b:1 q:1 0 .... rt:4 1011 . 0 e:1= 1 0000 \ vn=3D%vn_dp =20 VMSR_VMRS ---- 1110 111 l:1 reg:4 rt:4 1010 0001 0000 +VMOV_half ---- 1110 000 l:1 .... rt:4 1001 . 001 0000 vn=3D%vn_sp VMOV_single ---- 1110 000 l:1 .... rt:4 1010 . 001 0000 vn=3D%vn_sp =20 VMOV_64_sp ---- 1100 010 op:1 rt2:4 rt:4 1010 00.1 .... vm=3D%vm_sp diff --git a/target/arm/translate-vfp.c.inc b/target/arm/translate-vfp.c.inc index 4b26156eccc..28e0dba5f14 100644 --- a/target/arm/translate-vfp.c.inc +++ b/target/arm/translate-vfp.c.inc @@ -809,6 +809,40 @@ static bool trans_VMSR_VMRS(DisasContext *s, arg_VMSR_= VMRS *a) return true; } =20 +static bool trans_VMOV_half(DisasContext *s, arg_VMOV_single *a) +{ + TCGv_i32 tmp; + + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + if (a->rt =3D=3D 15) { + /* UNPREDICTABLE; we choose to UNDEF */ + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + if (a->l) { + /* VFP to general purpose register */ + tmp =3D tcg_temp_new_i32(); + neon_load_reg32(tmp, a->vn); + tcg_gen_andi_i32(tmp, tmp, 0xffff); + store_reg(s, a->rt, tmp); + } else { + /* general purpose register to VFP */ + tmp =3D load_reg(s, a->rt); + tcg_gen_andi_i32(tmp, tmp, 0xffff); + neon_store_reg32(tmp, a->vn); + tcg_temp_free_i32(tmp); + } + + return true; +} + static bool trans_VMOV_single(DisasContext *s, arg_VMOV_single *a) { TCGv_i32 tmp; --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640234; cv=none; d=zohomail.com; s=zohoarc; b=W7QFPGouT0Um/9Jg/huVdhNJ+c+9K7SUGiyH8gRAVHFyh0ynD04i4p/xTA7f1yaDT1ja3Vf4FIO3Oo78ttWpNITaFaMIui/Xqg2kMIL2SxDxrk7s0pN9BNZ4015OihR49b4xpOX43YDi5yg/jiy1ED2PxwQy2/jW9ACAzKEKKMU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640234; h=Content-Transfer-Encoding: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=xRS9Xs/A7cPVwavP2/d7CO6TOTh4dxr4Fh4pdaLz/eQ=; b=lmD8gQFtyrmFvcO+EbjaiZaWZQSDSJWiw9PSHG3vcCPfaHSBaPr4NQvWEU1e6GwsO50BCxwmgroXj/Lq7oXrzEIe8i+B+2ZH9oPFMjzV9IItZzsPwuns39+HMSDO9HH51MG0o91ecHEnL/mUGWSG09nJkdHgorEu4CGtTsvioQM= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640234188456.8214665814868; Fri, 28 Aug 2020 11:43:54 -0700 (PDT) Received: from localhost ([::1]:39126 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjLt-0008UQ-Cg for importer@patchew.org; Fri, 28 Aug 2020 14:43:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59040) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCn-0002ha-D7 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:29 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:38679) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCi-00060w-QP for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:28 -0400 Received: by mail-wm1-x342.google.com with SMTP id t14so114711wmi.3 for ; Fri, 28 Aug 2020 11:34:24 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:22 -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=xRS9Xs/A7cPVwavP2/d7CO6TOTh4dxr4Fh4pdaLz/eQ=; b=A8HfjYAZwLPq0tRJ5qS8TzXe1/JhbJHag5h1dm2XNuM7VjCHSnFOIgjy1ehFf3+pvg RQhd8DekjEFX2I9k/97I+d6nkusgG+mSY+p68Eo/H5OwUn8qHVZQSom6XurqQwLhAQkg /lKBMDOu+GNpsRWWTjSNhqQrbVhKa3f5P9TaIaTBpQZaOtA0ibLroXfU7uuJLPHV3NWY m4CGt7v0CXrwtFLSkTzg7Yb8KR4mkP4c70yK+3o3D5fn7TAlkngLmVQ6b0G1D7XHyUgx G7aLhRPr0cR4jOTwPaz1uTCrk9ma3FT8Y5ZBnfA6QQIkIGu50RobUT8CDMA3A263XgLr TmtA== 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=xRS9Xs/A7cPVwavP2/d7CO6TOTh4dxr4Fh4pdaLz/eQ=; b=I0CGUXWioQYtG1XcjNp8cd28vJwJJjDhxQPgSKw8C6RTcGBl2kfapKrD25/8kElpUo yjTPOlW98A06mgNiwQ3cNqgfUcofBc+7Zxp73yglKw7MXuxfL8UjxbTg0EK64e567GAc Zb2e4yZXqLmXn6cRb8H/2rC3V0iVNb6hbGPczS9iPKJN1uba5jEuheUhvoCWT7Vx/cim 0hx+nMDXDdMwstMcscqRGrjXk9bTEp2qCw48QaH1DjtMw+cWNjvL26Mmt5Lqx4GADsPn blfgr2zNbf6lSHajC1NJNPKMznoKCKYIzM2AkhC7rAXCB9BmqFZGSygfOK8fte9s2bji SuUg== X-Gm-Message-State: AOAM531ufjvLs7fyTZugx4Quvt9Yb5LvZa2dbWtvAjPwdxEA+ltSnptq Enn/Tep9QrTQ3x4riLeogl+H/A== X-Google-Smtp-Source: ABdhPJwx/CqW1Qyw/jpFGdsdtZU00Qc5CjpLx/qkwPcUEdwLcQnoSM1q91XhViXe9Or7uZFqxoAb4g== X-Received: by 2002:a7b:c925:: with SMTP id h5mr52680wml.28.1598639663462; Fri, 28 Aug 2020 11:34:23 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 22/45] fpu: Add float16 comparison functions Date: Fri, 28 Aug 2020 19:33:31 +0100 Message-Id: <20200828183354.27913-23-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::342; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x342.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Add comparison functions for float16 to match the existing float32 and float64 ones: float16_eq() float16_le() float16_lt() float16_unordered() float16_eq_quiet() float16_le_quiet() float16_lt_quiet() float16_unordered_quiet() These are all just convenience wrappers around float16_compare() and float16_compare_quiet(). We will want these for AArch23 fp16 support. Signed-off-by: Peter Maydell --- include/fpu/softfloat.h | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/include/fpu/softfloat.h b/include/fpu/softfloat.h index 659218b5c78..573fce99bc6 100644 --- a/include/fpu/softfloat.h +++ b/include/fpu/softfloat.h @@ -285,6 +285,47 @@ static inline float16 float16_set_sign(float16 a, int = sign) return make_float16((float16_val(a) & 0x7fff) | (sign << 15)); } =20 +static inline bool float16_eq(float16 a, float16 b, float_status *s) +{ + return float16_compare(a, b, s) =3D=3D float_relation_equal; +} + +static inline bool float16_le(float16 a, float16 b, float_status *s) +{ + return float16_compare(a, b, s) <=3D float_relation_equal; +} + +static inline bool float16_lt(float16 a, float16 b, float_status *s) +{ + return float16_compare(a, b, s) < float_relation_equal; +} + +static inline bool float16_unordered(float16 a, float16 b, float_status *s) +{ + return float16_compare(a, b, s) =3D=3D float_relation_unordered; +} + +static inline bool float16_eq_quiet(float16 a, float16 b, float_status *s) +{ + return float16_compare_quiet(a, b, s) =3D=3D float_relation_equal; +} + +static inline bool float16_le_quiet(float16 a, float16 b, float_status *s) +{ + return float16_compare_quiet(a, b, s) <=3D float_relation_equal; +} + +static inline bool float16_lt_quiet(float16 a, float16 b, float_status *s) +{ + return float16_compare_quiet(a, b, s) < float_relation_equal; +} + +static inline bool float16_unordered_quiet(float16 a, float16 b, + float_status *s) +{ + return float16_compare_quiet(a, b, s) =3D=3D float_relation_unordered; +} + #define float16_zero make_float16(0) #define float16_half make_float16(0x3800) #define float16_one make_float16(0x3c00) --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640494; cv=none; d=zohomail.com; s=zohoarc; b=Ty/MCQ6wVthLrGovLsfF1gpOd+uSbG43qMFyqmsB+szeCxCG4mZhyOQ8sjsb1QIsew1Kg/BPeT+Y0gAa8lZO96aeLHRusVEhl4ciSNwTUm2uIkgVNRC74LG4Jyn0lyp7tv0DW57bDt6JSY/2ZljWFK1wNU+sqexAh/fxhMp+rhY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640494; h=Content-Transfer-Encoding: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=k2fvNqZMBMcu+QPHwCHqAmjAV+Giderb+QvU3S3E5kg=; b=gDnDGwo6skJm0aimyy1uE33Ib6GyAWKh563wO7AVPOP4eglVR6zRcR5mciefsx9NCXB4N8ZpL8D1W0HuOSs4Myg64iwrUkm3eKJwwqXkcRsxlmcGyDOHGlURGDgpGbGg8CoQkxYN/SMKSkcsxGlCSL+wFhQJ8/VdT60ZtCmH9pw= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640494524378.92212652000023; Fri, 28 Aug 2020 11:48:14 -0700 (PDT) Received: from localhost ([::1]:56966 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjQ5-0007FB-NU for importer@patchew.org; Fri, 28 Aug 2020 14:48:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59128) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCp-0002nm-Pp for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:31 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:40392) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCk-00061D-1P for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:31 -0400 Received: by mail-wr1-x443.google.com with SMTP id b18so50684wrs.7 for ; Fri, 28 Aug 2020 11:34:25 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:24 -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=k2fvNqZMBMcu+QPHwCHqAmjAV+Giderb+QvU3S3E5kg=; b=VWA1EareKeIVNI81aZYnIdjOamSaZuyYYcm5QuiqAlJgOtEIKzLTmRz/Bnc8ZtPysj WWVayamAVQJi14sdFSy7lxjEJA5jmc6NZ48ocaEcPyMykxKR4qTDrgpP7tmrnlEbcMQi g35b016zVudrZiEzWypdeQpFcEOe9NGQnGNafEyy0bCHmuQOTeEmQmdsidejkv+DOdMS xzD6nB4H3oj5SnI80zlvC/julxv+m34Ta0SoIbYV3QXoUGuNZVmy/PvQhoDgLZMyTvdo mFCzR1P9nxw/X1G+ZE7Ll/+G09qfHM2h9ttz/y0m9iMfN4a+SqTL/Nftz/bYSN7yEJuo /wfg== 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=k2fvNqZMBMcu+QPHwCHqAmjAV+Giderb+QvU3S3E5kg=; b=oxq+uQtYHcinabS/8CuDxNlXtTrlSmq6WomfyBhWG/kG24G5eVEUBfStaQjgwjat+E sFYm2Xv39Av14FhsJ0LWFUvY65AvM6PIzmPnEFbNjps00wdDnqJNFkFqZ61dcvL0aOG1 s/Agp0xEcZgszQm+1BSQhuMJxtULs/VaxJDPmIMa8MgBruCRgYV/iYtkWXoIVs3XXdys ksquVl0jDo0SWQc3rh3pNypUHB2EXW+qokmWrxL+ZhY2T/EtaZx4QbP8dZ6WK5cqfk6h zd2zohVXwCVXazADjkg5GxyoIuXzIN5xE38z4TXt3jIiCfEn2UqWQTOdAPKn0jbuxn8i TDXA== X-Gm-Message-State: AOAM531Id4xHqru4thqnPrGYUQGaERKKZaSOA3BN5XgD8tDG9UdcyfmT sgrbmNLc9YRQdYl7PLa4b1iF0A== X-Google-Smtp-Source: ABdhPJzmL8mGJK/ez5nYNr+v/juKiI1OzFsy1LT4AVwPKgkp7bJN1yGEWN//x8tol791F8+TqpMSvA== X-Received: by 2002:adf:9ed1:: with SMTP id b17mr278555wrf.140.1598639664666; Fri, 28 Aug 2020 11:34:24 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 23/45] target/arm: Implement FP16 for Neon VADD, VSUB, VABD, VMUL Date: Fri, 28 Aug 2020 19:33:32 +0100 Message-Id: <20200828183354.27913-24-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::443; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x443.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=unavailable 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implement FP16 support for the Neon insns which use the DO_3S_FP_GVEC macro: VADD, VSUB, VABD, VMUL. For VABD this requires us to implement a new gvec_fabd_h helper using the machinery we have already for the other helpers. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 1 + target/arm/vec_helper.c | 6 ++++++ target/arm/translate-neon.c.inc | 36 +++++++++++++++++---------------- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index f5ad5088bf1..aa1ac75571f 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -629,6 +629,7 @@ DEF_HELPER_FLAGS_5(gvec_fmul_h, TCG_CALL_NO_RWG, void, = ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_fmul_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) DEF_HELPER_FLAGS_5(gvec_fmul_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) =20 +DEF_HELPER_FLAGS_5(gvec_fabd_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) DEF_HELPER_FLAGS_5(gvec_fabd_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) =20 DEF_HELPER_FLAGS_5(gvec_ftsmul_h, TCG_CALL_NO_RWG, diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index a6c53d2ab6c..988d5784e83 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -707,6 +707,11 @@ static float64 float64_ftsmul(float64 op1, uint64_t op= 2, float_status *stat) return result; } =20 +static float16 float16_abd(float16 op1, float16 op2, float_status *stat) +{ + return float16_abs(float16_sub(op1, op2, stat)); +} + static float32 float32_abd(float32 op1, float32 op2, float_status *stat) { return float32_abs(float32_sub(op1, op2, stat)); @@ -739,6 +744,7 @@ DO_3OP(gvec_ftsmul_h, float16_ftsmul, float16) DO_3OP(gvec_ftsmul_s, float32_ftsmul, float32) DO_3OP(gvec_ftsmul_d, float64_ftsmul, float64) =20 +DO_3OP(gvec_fabd_h, float16_abd, float16) DO_3OP(gvec_fabd_s, float32_abd, float32) =20 #ifdef TARGET_AARCH64 diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index 9879731a521..9d0959517fa 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -1082,34 +1082,36 @@ static bool do_3same_fp(DisasContext *s, arg_3same = *a, VFPGen3OpSPFn *fn, return true; } =20 -/* - * For all the functions using this macro, size =3D=3D 1 means fp16, - * which is an architecture extension we don't implement yet. - */ -#define DO_3S_FP_GVEC(INSN,FUNC) \ - static void gen_##INSN##_3s(unsigned vece, uint32_t rd_ofs, \ - uint32_t rn_ofs, uint32_t rm_ofs, \ - uint32_t oprsz, uint32_t maxsz) \ +#define WRAP_FP_GVEC(WRAPNAME, FPST, FUNC) \ + static void WRAPNAME(unsigned vece, uint32_t rd_ofs, \ + uint32_t rn_ofs, uint32_t rm_ofs, \ + uint32_t oprsz, uint32_t maxsz) \ { \ - TCGv_ptr fpst =3D fpstatus_ptr(FPST_STD); \ + TCGv_ptr fpst =3D fpstatus_ptr(FPST); \ tcg_gen_gvec_3_ptr(rd_ofs, rn_ofs, rm_ofs, fpst, \ oprsz, maxsz, 0, FUNC); \ tcg_temp_free_ptr(fpst); \ - } \ + } + +#define DO_3S_FP_GVEC(INSN,SFUNC,HFUNC) \ + WRAP_FP_GVEC(gen_##INSN##_fp32_3s, FPST_STD, SFUNC) \ + WRAP_FP_GVEC(gen_##INSN##_fp16_3s, FPST_STD_F16, HFUNC) \ static bool trans_##INSN##_fp_3s(DisasContext *s, arg_3same *a) \ { \ if (a->size !=3D 0) { \ - /* TODO fp16 support */ \ - return false; \ + if (!dc_isar_feature(aa32_fp16_arith, s)) { \ + return false; \ + } \ + return do_3same(s, a, gen_##INSN##_fp16_3s); \ } \ - return do_3same(s, a, gen_##INSN##_3s); \ + return do_3same(s, a, gen_##INSN##_fp32_3s); \ } =20 =20 -DO_3S_FP_GVEC(VADD, gen_helper_gvec_fadd_s) -DO_3S_FP_GVEC(VSUB, gen_helper_gvec_fsub_s) -DO_3S_FP_GVEC(VABD, gen_helper_gvec_fabd_s) -DO_3S_FP_GVEC(VMUL, gen_helper_gvec_fmul_s) +DO_3S_FP_GVEC(VADD, gen_helper_gvec_fadd_s, gen_helper_gvec_fadd_h) +DO_3S_FP_GVEC(VSUB, gen_helper_gvec_fsub_s, gen_helper_gvec_fsub_h) +DO_3S_FP_GVEC(VABD, gen_helper_gvec_fabd_s, gen_helper_gvec_fabd_h) +DO_3S_FP_GVEC(VMUL, gen_helper_gvec_fmul_s, gen_helper_gvec_fmul_h) =20 /* * For all the functions using this macro, size =3D=3D 1 means fp16, --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640360; cv=none; d=zohomail.com; s=zohoarc; b=Pi7itUOADc0fEUN3Z22gW+4FHKKdL1tg5V2ywZHMv+5BpNoxwDsGlA/VmaHlaXvymikIxQNvnyKeXE+yP92qfrP8P6Cc0K6m4m51LPSJ5P9nP+Q3LtMHr18QEsV82h3tU6QnHkx3eoQAubfrSleRCq8m28uoYHzS/ye6N559t4c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640360; h=Content-Transfer-Encoding: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=X35NeqBctB9mslvjbHDeW7p7u1Isiz5hswfcsubx4hw=; b=F6B4ZaH/1UoXbhbKpVvjNPONcasutAUiXMiF4j15ccXsVeWC0RPzh0CSjqyJqRFEA0PEYJNRpW/XWBGCoF7Zhg4x1lfY2wq/7aWipxeddnaA7dmnfCVwA1pYEe2QaiuUNljp9weTlVyrKD+Ty7bzIU3+xqk5BBDpAKLquzz1uzo= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640360165250.00677974942914; Fri, 28 Aug 2020 11:46:00 -0700 (PDT) Received: from localhost ([::1]:49430 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjNv-0004EE-CJ for importer@patchew.org; Fri, 28 Aug 2020 14:45:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59092) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCo-0002lY-TX for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:30 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:38681) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCl-00061Q-4V for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:30 -0400 Received: by mail-wm1-x344.google.com with SMTP id t14so114789wmi.3 for ; Fri, 28 Aug 2020 11:34:26 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:25 -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=X35NeqBctB9mslvjbHDeW7p7u1Isiz5hswfcsubx4hw=; b=SxubAn0tbMmA12D/zBBdAmu9w7RlgU52vVlzcNRfnIDs9WtNjzh5wX+LKzfe743KkE EB5emIOOGzgl48MHyIAfRhaTz+kLXD70MA89FrOJX4uO3KhKzYPt5MNu0pCQumdRE4H0 g0Ix0yNLa6GyG00X9GcGMPX5+1qAiEEldnVuRY/dc0vVi0URikF9x0RfWGwliHgDqYgy F0TTxrHfCP8aqbJYKn7Px4WSEKYyG224Rlw+rpKo6pvxLzdyKyI5iUrlwETsxmokdeHQ 2lyyJqhJJVepC62QwjfvrqZxIuFDJWGgn0UsB/6wmM9iB9vBX/X8VHK1k7LGFoh0CuN6 Ezjw== 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=X35NeqBctB9mslvjbHDeW7p7u1Isiz5hswfcsubx4hw=; b=Av8h1Fp87prmWjphxjKjGi3840vun4tkI2Hf529r3ZYN6unua/hudS2sUbWVkcUWA+ 2HLHS55UDXvbX9heOZ78zWhY+swKvhsr9Uqun+CK1Qg4lN25QSxvi0gShqQ8p/kpynlG H5sTbTgi6pUd+liOik2+LjIM1VtFhGGQb6F9TQdKDtwMD/ERzhXNneD+pXM5fh4Sa3+i bhGFWFihucTBeY+hCR4cSvvQDBFSeaKxtJ+J+qDlae8qOkPnqiWJOC/stn4KjUFAdBfp vNfnYUGh/NJafBpMPALIwnGK6kzdPJJQMTNLn0C4Ls/O5mpFVwUMtL62u7vmg0oavX2Z pDaA== X-Gm-Message-State: AOAM533PQJy+3wilOSlfDCodWh6AAJxezW/vjDCRC91NS9HxzbDvnBt0 VqMIU2ceNHMjCYTOyqNzeAUSIw== X-Google-Smtp-Source: ABdhPJwni1cj4H+rqAEyat8m7Yi4D5+2E8M7g3pvbhkw6+TP5xqIdJqrYqyYkEb8HzynlHb835h5ww== X-Received: by 2002:a1c:e1d6:: with SMTP id y205mr41505wmg.92.1598639665695; Fri, 28 Aug 2020 11:34:25 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 24/45] target/arm: Implement fp16 for Neon VRECPE, VRSQRTE using gvec Date: Fri, 28 Aug 2020 19:33:33 +0100 Message-Id: <20200828183354.27913-25-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::344; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x344.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" We already have gvec helpers for floating point VRECPE and VRQSRTE, so convert the Neon decoder to use them and add the fp16 support. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.c.inc | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index 9d0959517fa..872f093a1fc 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -3857,13 +3857,38 @@ static bool do_2misc_fp(DisasContext *s, arg_2misc = *a, return do_2misc_fp(s, a, FUNC); \ } =20 -DO_2MISC_FP(VRECPE_F, gen_helper_recpe_f32) -DO_2MISC_FP(VRSQRTE_F, gen_helper_rsqrte_f32) DO_2MISC_FP(VCVT_FS, gen_helper_vfp_sitos) DO_2MISC_FP(VCVT_FU, gen_helper_vfp_uitos) DO_2MISC_FP(VCVT_SF, gen_helper_vfp_tosizs) DO_2MISC_FP(VCVT_UF, gen_helper_vfp_touizs) =20 +#define DO_2MISC_FP_VEC(INSN, HFUNC, SFUNC) \ + static void gen_##INSN(unsigned vece, uint32_t rd_ofs, \ + uint32_t rm_ofs, \ + uint32_t oprsz, uint32_t maxsz) \ + { \ + static gen_helper_gvec_2_ptr * const fns[4] =3D { \ + NULL, HFUNC, SFUNC, NULL, \ + }; \ + TCGv_ptr fpst; \ + fpst =3D fpstatus_ptr(vece =3D=3D 1 ? FPST_STD_F16 : FPST_STD); = \ + tcg_gen_gvec_2_ptr(rd_ofs, rm_ofs, fpst, oprsz, maxsz, 0, \ + fns[vece]); \ + tcg_temp_free_ptr(fpst); \ + } \ + static bool trans_##INSN(DisasContext *s, arg_2misc *a) \ + { \ + if (a->size =3D=3D 0 || = \ + (a->size =3D=3D 1 && !dc_isar_feature(aa32_fp16_arith, s))) = \ + { \ + return false; \ + } \ + return do_2misc_vec(s, a, gen_##INSN); \ + } + +DO_2MISC_FP_VEC(VRECPE_F, gen_helper_gvec_frecpe_h, gen_helper_gvec_frecpe= _s) +DO_2MISC_FP_VEC(VRSQRTE_F, gen_helper_gvec_frsqrte_h, gen_helper_gvec_frsq= rte_s) + static bool trans_VRINTX(DisasContext *s, arg_2misc *a) { if (!arm_dc_feature(s, ARM_FEATURE_V8)) { --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640351; cv=none; d=zohomail.com; s=zohoarc; b=hcSOY4D3yxUoNS09GxqJz9LBU48mwPiKa+iAPye5XU9IgNhVnJyszduWsLiuL9lNuInHq8ZVPbOu/r9x9/KLE1NpckJ9QsWvx6oeIM9eLH/V5zEJ/aI1X0qmV9VAwLJIxA2G298s1TTG9byM3PjqNblPo4izj/+ZK6WFfe58AjE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640351; h=Content-Transfer-Encoding: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=LATnJEWO7P/MKdEPBDLegkR2imAlvCK9m77w5J9GprA=; b=XZqetIpTNOKLlgXMR7RQO57YrZcIsjDr+HPRHp/BV2wDbHVU4xJPlKl6iEX8v7iwY8JFOTY9Bkg+hnKPjetvxEjkhAfyS7oIL/4FfuCELszvP60DHWTzgPG2WxHTgA8TxRTrdVpsgE0ONH80p2L5BgLRUQTXkekaBlea1mD04d4= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640351488637.313379368315; Fri, 28 Aug 2020 11:45:51 -0700 (PDT) Received: from localhost ([::1]:48600 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjNm-0003u6-D0 for importer@patchew.org; Fri, 28 Aug 2020 14:45:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59112) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCp-0002n4-H5 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:31 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:41787) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCm-00061p-7x for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:30 -0400 Received: by mail-wr1-x442.google.com with SMTP id w5so47014wrp.8 for ; Fri, 28 Aug 2020 11:34:27 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:26 -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=LATnJEWO7P/MKdEPBDLegkR2imAlvCK9m77w5J9GprA=; b=OfaXH9avmFC+6lAjPrkqOaiZKPTTZ541dGcFZJqvbazLttMGcIvUw2TkvS9OsmpYBR XW+pOXJJeOZeud5bIzVjdZ+tdaCh+qkopRFCdYZAji8+6x4WMKl/Vh0bXzfAfjlP75sa IhYlobyZfkY5leMiZHwRTFcza3pFxXytoqe8FBAgLnh5mp0GUkyrFMHd3aVfSRO0l9ll 7tgFz7B2dQglQWxtXVkYoKGVg7SEYaN9fFD3Wkx62f952OqRT6RYxapO8BCtNW0oxkeB oKM7cEfl5/yD8tTUWNmGKQyspHXzZxAOdABGWacG53xdlqDN7k3MHLcVlNpEA8xD92K3 dbIA== 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=LATnJEWO7P/MKdEPBDLegkR2imAlvCK9m77w5J9GprA=; b=BFrW4eGdrnyqOg07AigDeqn/5fLdg/OG5C56vDw1OEBgN49dBUrGV9IacZGTJTLPFA 5WtZ3HHmcaQRcCpSeTws3WiAqoRfrwe09DYPK7SCoh0kVyZ7DGKH+I8FhTjv5XO38gRp I2Ox3RpwY3XBUcPWAtHQu//yahqqzIUFpt/f61NPKO2+SWiUEzxnL6KUrJWvjgtPGaoe TYHlUKYBGuKvSDf07C3PyJAdUAbUIZONAFeQMr44sgZgOrw3SpKxRBXtzSDXUxJSIPYP w76M556ssOxcNNGj7mYWGViCZOuf+BmoYDZknru5XxC87A08p3/myn/56yVwM4Me2K5K BwTg== X-Gm-Message-State: AOAM53214FICpwkmyb6ZlD5B4MaHFfhkya96EtgzLgztf7HCEV9b2478 wHb57VnJ2eROe8WoV4MdqlgsKDtykhaWivmn X-Google-Smtp-Source: ABdhPJwS46x2U17pP2vR2CGDdvtaQC1o0p+/oztuBv5rLOU64ZhU4JdTWbPPhDHU8BgSEp3IhZMJRw== X-Received: by 2002:adf:edd0:: with SMTP id v16mr267891wro.271.1598639666902; Fri, 28 Aug 2020 11:34:26 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 25/45] target/arm: Implement fp16 for Neon VABS, VNEG of floats Date: Fri, 28 Aug 2020 19:33:34 +0100 Message-Id: <20200828183354.27913-26-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::442; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x442.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Rewrite Neon VABS/VNEG of floats to use gvec logical AND and XOR, so that we can implement the fp16 version of the insns. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.c.inc | 34 +++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index 872f093a1fc..a1bf8dcee09 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -3741,22 +3741,44 @@ static bool trans_VCNT(DisasContext *s, arg_2misc *= a) return do_2misc(s, a, gen_helper_neon_cnt_u8); } =20 +static void gen_VABS_F(unsigned vece, uint32_t rd_ofs, uint32_t rm_ofs, + uint32_t oprsz, uint32_t maxsz) +{ + tcg_gen_gvec_andi(vece, rd_ofs, rm_ofs, + vece =3D=3D MO_16 ? 0x7fff : 0x7fffffff, + oprsz, maxsz); +} + static bool trans_VABS_F(DisasContext *s, arg_2misc *a) { - if (a->size !=3D 2) { + if (a->size =3D=3D 1) { + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + } else if (a->size !=3D 2) { return false; } - /* TODO: FP16 : size =3D=3D 1 */ - return do_2misc(s, a, gen_helper_vfp_abss); + return do_2misc_vec(s, a, gen_VABS_F); +} + +static void gen_VNEG_F(unsigned vece, uint32_t rd_ofs, uint32_t rm_ofs, + uint32_t oprsz, uint32_t maxsz) +{ + tcg_gen_gvec_xori(vece, rd_ofs, rm_ofs, + vece =3D=3D MO_16 ? 0x8000 : 0x80000000, + oprsz, maxsz); } =20 static bool trans_VNEG_F(DisasContext *s, arg_2misc *a) { - if (a->size !=3D 2) { + if (a->size =3D=3D 1) { + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + } else if (a->size !=3D 2) { return false; } - /* TODO: FP16 : size =3D=3D 1 */ - return do_2misc(s, a, gen_helper_vfp_negs); + return do_2misc_vec(s, a, gen_VNEG_F); } =20 static bool trans_VRECPE(DisasContext *s, arg_2misc *a) --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640911; cv=none; d=zohomail.com; s=zohoarc; b=AS1Pdp2LAa86RoTLhzyq2cGZ8CLnAT5m7TzekIA0WZIF/p21rLxpduyAZnr8DNhNhUxbzVGtpM3PKmHwownj4Qdiw5nM5zrzYp9FB18+AaRk7Lpm9h5P/CTVcZFyPrUROEwb/9gSqUuUlNdLURX3mHEx4PLoaI+eK8DpQQQ1VMY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640911; h=Content-Transfer-Encoding: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=HSD4Ok+lVOk3ozBpF+h1bA5KfuR9MqRLk2CJgQiIC48=; b=CJbfwr2MosN2rA1Cdi6l0DQ5tNRcbFHPgNhVl0F7J2M+/HlBNKIL3NzWdYco8wIVVv1vZkQWl0JzXjS42v6IPcgl/QxkHLg49zHAaias6FpsAdodQO+3viYk0e+3pF4I8G73TXKlJv/DzbYs7ibOIcAT7hJubQmX8Z9rifMBmZQ= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640911989131.29938782846625; Fri, 28 Aug 2020 11:55:11 -0700 (PDT) Received: from localhost ([::1]:56394 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjWp-0001au-6O for importer@patchew.org; Fri, 28 Aug 2020 14:55:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59166) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCr-0002ry-6J for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:33 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:36536) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCn-00062G-MR for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:32 -0400 Received: by mail-wm1-x342.google.com with SMTP id z9so124598wmk.1 for ; Fri, 28 Aug 2020 11:34:29 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:27 -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=HSD4Ok+lVOk3ozBpF+h1bA5KfuR9MqRLk2CJgQiIC48=; b=HAdC00iKnQkLsrhG6SOxQAikMk1ibWzq/ScOgWV5TeG6ax87GKUWzhJZBChIwnere3 gK4usvnEwSvpDZUXwOvHkQD/59XmI4hxNu3yywWMI2BfaJJAH0FG9HL9P9K3elfWlyzB BrTrfz/3Wcetx8VfFmrUdowZF1XZi/J7pWhLGh/i+jtIEdDelyVGW3qhMD+o7j3yOmtw 6lvIuBClD/UMkeK1vjrBgBMkAXnjwigJT2BExaP/Z0S0THpWPhrW7AwhGK9KKgTwfRHP 1fFA2vRAVqO/wflZQcQqJ2sQfwjYXizxMj/rvafbsPsEPpNcCnpt0r7g5yAZmA3AKX4v bReg== 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=HSD4Ok+lVOk3ozBpF+h1bA5KfuR9MqRLk2CJgQiIC48=; b=LXL5mPXT/1zc6p1IHCzB2MfnUbbwFSs7kt8pkkmn8R/BVBBVIghtGVhfbBjSCAtteN UylrQNfCxyRf5NmgZFFLrlulIK5BrXHxjZ1T7Vsnir17NhjBUC0xPS5HBzy4OmTf9I6u nQzUjF7/wt75xCIjBHv8XjFovVdWqjcFuECw9nPdvy3NHjAHqxebp2o0AMyrOHk3P0g9 avpYgwO2OvYndM0RPpdJVdmpJRvz3ZHDRhbxfX+22QcvMYhgssl1PH8qlSXcb2hv3TQb QHDxuMpAOxH+0rn6xSgirPsg3qU8XawMqqkFspRW/iMlMXk/qj8g+DjxQbEwh5Wz4K0N cx2g== X-Gm-Message-State: AOAM532Ud/1gYLTWdZwgLmGvzKZsmOFxnoCbkyN+BAyG0B9OcuSlKrdy KJRwNsDkrw8mMP9vFp13CliRcSSlsq17f43d X-Google-Smtp-Source: ABdhPJwoSStL48/dtEwXJU2KD3DVR8YmRBVTGxK2TYZ0IvYwciV23UGFZbHsBnCthCqlHZQvRHVHeA== X-Received: by 2002:a1c:e907:: with SMTP id q7mr4155wmc.155.1598639668351; Fri, 28 Aug 2020 11:34:28 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 26/45] target/arm: Implement fp16 for VCEQ, VCGE, VCGT comparisons Date: Fri, 28 Aug 2020 19:33:35 +0100 Message-Id: <20200828183354.27913-27-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::342; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x342.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=unavailable 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon floating-point vector comparison ops VCEQ, VCGE and VCGT over to using a gvec helper and use this to implement the fp16 case. (We put the float16_ceq() etc functions above the DO_2OP() macro definition because later when we convert the compare-against-zero instructions we'll want their definitions to be visible at that point in the source file.) Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 9 +++++++ target/arm/vec_helper.c | 44 +++++++++++++++++++++++++++++++++ target/arm/translate-neon.c.inc | 6 ++--- 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index aa1ac75571f..a05a0d1a427 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -632,6 +632,15 @@ DEF_HELPER_FLAGS_5(gvec_fmul_d, TCG_CALL_NO_RWG, void,= ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_fabd_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) DEF_HELPER_FLAGS_5(gvec_fabd_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) =20 +DEF_HELPER_FLAGS_5(gvec_fceq_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) +DEF_HELPER_FLAGS_5(gvec_fceq_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) + +DEF_HELPER_FLAGS_5(gvec_fcge_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) +DEF_HELPER_FLAGS_5(gvec_fcge_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) + +DEF_HELPER_FLAGS_5(gvec_fcgt_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) +DEF_HELPER_FLAGS_5(gvec_fcgt_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) + DEF_HELPER_FLAGS_5(gvec_ftsmul_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_ftsmul_s, TCG_CALL_NO_RWG, diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index 988d5784e83..f60968f4997 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -656,6 +656,41 @@ void HELPER(gvec_fcmlad)(void *vd, void *vn, void *vm, clear_tail(d, opr_sz, simd_maxsz(desc)); } =20 +/* + * Floating point comparisons producing an integer result (all 1s or all 0= s). + * Note that EQ doesn't signal InvalidOp for QNaNs but GE and GT do. + * Softfloat routines return 0/1, which we convert to the 0/-1 Neon requir= es. + */ +static uint16_t float16_ceq(float16 op1, float16 op2, float_status *stat) +{ + return -float16_eq_quiet(op1, op2, stat); +} + +static uint32_t float32_ceq(float32 op1, float32 op2, float_status *stat) +{ + return -float32_eq_quiet(op1, op2, stat); +} + +static uint16_t float16_cge(float16 op1, float16 op2, float_status *stat) +{ + return -float16_le(op2, op1, stat); +} + +static uint32_t float32_cge(float32 op1, float32 op2, float_status *stat) +{ + return -float32_le(op2, op1, stat); +} + +static uint16_t float16_cgt(float16 op1, float16 op2, float_status *stat) +{ + return -float16_lt(op2, op1, stat); +} + +static uint32_t float32_cgt(float32 op1, float32 op2, float_status *stat) +{ + return -float32_lt(op2, op1, stat); +} + #define DO_2OP(NAME, FUNC, TYPE) \ void HELPER(NAME)(void *vd, void *vn, void *stat, uint32_t desc) \ { \ @@ -747,6 +782,15 @@ DO_3OP(gvec_ftsmul_d, float64_ftsmul, float64) DO_3OP(gvec_fabd_h, float16_abd, float16) DO_3OP(gvec_fabd_s, float32_abd, float32) =20 +DO_3OP(gvec_fceq_h, float16_ceq, float16) +DO_3OP(gvec_fceq_s, float32_ceq, float32) + +DO_3OP(gvec_fcge_h, float16_cge, float16) +DO_3OP(gvec_fcge_s, float32_cge, float32) + +DO_3OP(gvec_fcgt_h, float16_cgt, float16) +DO_3OP(gvec_fcgt_s, float32_cgt, float32) + #ifdef TARGET_AARCH64 =20 DO_3OP(gvec_recps_h, helper_recpsf_f16, float16) diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index a1bf8dcee09..94871f8597d 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -1112,6 +1112,9 @@ DO_3S_FP_GVEC(VADD, gen_helper_gvec_fadd_s, gen_helpe= r_gvec_fadd_h) DO_3S_FP_GVEC(VSUB, gen_helper_gvec_fsub_s, gen_helper_gvec_fsub_h) DO_3S_FP_GVEC(VABD, gen_helper_gvec_fabd_s, gen_helper_gvec_fabd_h) DO_3S_FP_GVEC(VMUL, gen_helper_gvec_fmul_s, gen_helper_gvec_fmul_h) +DO_3S_FP_GVEC(VCEQ, gen_helper_gvec_fceq_s, gen_helper_gvec_fceq_h) +DO_3S_FP_GVEC(VCGE, gen_helper_gvec_fcge_s, gen_helper_gvec_fcge_h) +DO_3S_FP_GVEC(VCGT, gen_helper_gvec_fcgt_s, gen_helper_gvec_fcgt_h) =20 /* * For all the functions using this macro, size =3D=3D 1 means fp16, @@ -1127,9 +1130,6 @@ DO_3S_FP_GVEC(VMUL, gen_helper_gvec_fmul_s, gen_helpe= r_gvec_fmul_h) return do_3same_fp(s, a, FUNC, READS_VD); \ } =20 -DO_3S_FP(VCEQ, gen_helper_neon_ceq_f32, false) -DO_3S_FP(VCGE, gen_helper_neon_cge_f32, false) -DO_3S_FP(VCGT, gen_helper_neon_cgt_f32, false) DO_3S_FP(VACGE, gen_helper_neon_acge_f32, false) DO_3S_FP(VACGT, gen_helper_neon_acgt_f32, false) DO_3S_FP(VMAX, gen_helper_vfp_maxs, false) --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598641056; cv=none; d=zohomail.com; s=zohoarc; b=FsayHAGQVpfZ+VZrAq9FIQG04/fNa7aakbLGZMZjGf/Sv1IpAYGXovK8Ds/xRWJwW+TlID9I5modB0nE85XrscdbUhETGG2S0O2YY9IqR8VvEh1lKPpBoB7+zqoeqytsKaIcMuVVNzP9NycayywlsFr6QAuS1v3w9792sPer6ag= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598641056; h=Content-Transfer-Encoding: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=d1v3KyQ1t1fIhlpZMIXH6cnFh1IA/Ig80NyUtW4n5r8=; b=Jacy8RWI0vNHKJcq/cOu9qgEgazH31KHWjFJkKLhvmIGkfGnKigz/oXGE34qR4pTzj8i/5060sHXrdYUiggqPjM6i2LLUXlVRiZIegGDXIPjTjlK7RasTzAKm4y4OzU4B2PtfbhW/ypGme7BH2RpOfEaDSUWxr79vI0pjmgSmos= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598641056665368.8243805360611; Fri, 28 Aug 2020 11:57:36 -0700 (PDT) Received: from localhost ([::1]:38638 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjZ9-0005ro-FR for importer@patchew.org; Fri, 28 Aug 2020 14:57:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59244) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCt-0002z1-Px for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:35 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:35704) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCp-00062h-2E for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:35 -0400 Received: by mail-wm1-x344.google.com with SMTP id o21so127426wmc.0 for ; Fri, 28 Aug 2020 11:34:30 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:28 -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=d1v3KyQ1t1fIhlpZMIXH6cnFh1IA/Ig80NyUtW4n5r8=; b=obNgwWI5dHGJSTicvHpLkHO13EPcjlc8dE8Jqc/nXTND9ixkJmOX/Vjo+USXjz8YFb wQLH0TUER2s85o6nTbTca0NnGkJIiDPjyDBzkAWzh8wast+KgnJ0N1KW8utix0SuwKRh UHcfnf9EzG7w1K8mTuMQ1SKkuEXITj9xecDxcpflWBRb6zAqgxv3T8ljtkrbWdP6gQSV +iy4cStds9N905RzX3dz1VRX/+vQl1Sc+aquYG2G71iFFUIfIIBm9J3CkyfRJHufaFbu JCeOoqUViy7RjbYgTBCfJb06tg1sC9XuGf38RNuSVbyRTuIYf3qJcSuHM6vQtNtOkHBs NbEg== 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=d1v3KyQ1t1fIhlpZMIXH6cnFh1IA/Ig80NyUtW4n5r8=; b=g04cRMrL0oe20kEPXglhCs/FdrHiM11vXOXfVr8Ux9MXeOU3QGj6q/5w/Sp2aweK6s niu2rhddT9dNHD5nPIotD7ZTl8b6qFoPVuhPKit3d3e/lr8MBexFvXv3p6AA7pZTStSo YiTsLv7kJ9uuaf3X4biS/lTPo3urClGGSyaWLTegRhrqvcNq7f9OAGY4MgHxHW+NZLaC 0kxX5RJcyvn3lvS4fXdbfRBdmoYLDUbQIgtHLaJ0px38TdF87TpVhRqNw7Yo7Y/BhWoh +Qcm58zBE7nkI1dTI22OwIovfXhObzvgcGWrkPueEhdwicNIdQhvI1HqzeGBJAoNTFlG cUKg== X-Gm-Message-State: AOAM5318cPYJsWG7+8e+NXyBdhFQMVj2tiIbi7tK1i8ALMucYM/7I4oi IYVaT6R3MQM79Ogei1V+KPrwk2ppO5uGGD0H X-Google-Smtp-Source: ABdhPJysrLdTogAzf76v7FsZHZ64I56n99lctlvth2D/B5GzGguWQrL3X3s7wCxGINvg7+su8b4CJA== X-Received: by 2002:a1c:ab06:: with SMTP id u6mr31228wme.172.1598639669482; Fri, 28 Aug 2020 11:34:29 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 27/45] target/arm: Implement fp16 for VACGE, VACGT Date: Fri, 28 Aug 2020 19:33:36 +0100 Message-Id: <20200828183354.27913-28-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::344; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x344.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=unavailable 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the neon floating-point vector absolute comparison ops VACGE and VACGT over to using a gvec hepler and use this to implement the fp16 case. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 6 ++++++ target/arm/vec_helper.c | 26 ++++++++++++++++++++++++++ target/arm/translate-neon.c.inc | 4 ++-- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index a05a0d1a427..b2d24050e27 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -641,6 +641,12 @@ DEF_HELPER_FLAGS_5(gvec_fcge_s, TCG_CALL_NO_RWG, void,= ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_fcgt_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) DEF_HELPER_FLAGS_5(gvec_fcgt_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) =20 +DEF_HELPER_FLAGS_5(gvec_facge_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr= , i32) +DEF_HELPER_FLAGS_5(gvec_facge_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr= , i32) + +DEF_HELPER_FLAGS_5(gvec_facgt_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr= , i32) +DEF_HELPER_FLAGS_5(gvec_facgt_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr= , i32) + DEF_HELPER_FLAGS_5(gvec_ftsmul_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_ftsmul_s, TCG_CALL_NO_RWG, diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index f60968f4997..4ac16ed102c 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -691,6 +691,26 @@ static uint32_t float32_cgt(float32 op1, float32 op2, = float_status *stat) return -float32_lt(op2, op1, stat); } =20 +static uint16_t float16_acge(float16 op1, float16 op2, float_status *stat) +{ + return -float16_le(float16_abs(op2), float16_abs(op1), stat); +} + +static uint32_t float32_acge(float32 op1, float32 op2, float_status *stat) +{ + return -float32_le(float32_abs(op2), float32_abs(op1), stat); +} + +static uint16_t float16_acgt(float16 op1, float16 op2, float_status *stat) +{ + return -float16_lt(float16_abs(op2), float16_abs(op1), stat); +} + +static uint32_t float32_acgt(float32 op1, float32 op2, float_status *stat) +{ + return -float32_lt(float32_abs(op2), float32_abs(op1), stat); +} + #define DO_2OP(NAME, FUNC, TYPE) \ void HELPER(NAME)(void *vd, void *vn, void *stat, uint32_t desc) \ { \ @@ -791,6 +811,12 @@ DO_3OP(gvec_fcge_s, float32_cge, float32) DO_3OP(gvec_fcgt_h, float16_cgt, float16) DO_3OP(gvec_fcgt_s, float32_cgt, float32) =20 +DO_3OP(gvec_facge_h, float16_acge, float16) +DO_3OP(gvec_facge_s, float32_acge, float32) + +DO_3OP(gvec_facgt_h, float16_acgt, float16) +DO_3OP(gvec_facgt_s, float32_acgt, float32) + #ifdef TARGET_AARCH64 =20 DO_3OP(gvec_recps_h, helper_recpsf_f16, float16) diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index 94871f8597d..645a099518d 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -1115,6 +1115,8 @@ DO_3S_FP_GVEC(VMUL, gen_helper_gvec_fmul_s, gen_helpe= r_gvec_fmul_h) DO_3S_FP_GVEC(VCEQ, gen_helper_gvec_fceq_s, gen_helper_gvec_fceq_h) DO_3S_FP_GVEC(VCGE, gen_helper_gvec_fcge_s, gen_helper_gvec_fcge_h) DO_3S_FP_GVEC(VCGT, gen_helper_gvec_fcgt_s, gen_helper_gvec_fcgt_h) +DO_3S_FP_GVEC(VACGE, gen_helper_gvec_facge_s, gen_helper_gvec_facge_h) +DO_3S_FP_GVEC(VACGT, gen_helper_gvec_facgt_s, gen_helper_gvec_facgt_h) =20 /* * For all the functions using this macro, size =3D=3D 1 means fp16, @@ -1130,8 +1132,6 @@ DO_3S_FP_GVEC(VCGT, gen_helper_gvec_fcgt_s, gen_helpe= r_gvec_fcgt_h) return do_3same_fp(s, a, FUNC, READS_VD); \ } =20 -DO_3S_FP(VACGE, gen_helper_neon_acge_f32, false) -DO_3S_FP(VACGT, gen_helper_neon_acgt_f32, false) DO_3S_FP(VMAX, gen_helper_vfp_maxs, false) DO_3S_FP(VMIN, gen_helper_vfp_mins, false) =20 --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640945; cv=none; d=zohomail.com; s=zohoarc; b=Bwg+FwiiZ8KPYms2uspVtoiU8K1KZcklAxVAcWChiFk15cJi6ah0b6R2EL/ZLN05nLqde5IMRE4J3cjjxoawcuFT/dT3VSackERDnmKnWf1pzZ+bi+WsZxsJCV6gcXMJseSxfpoM8oaeFbi6K7pKL7Tpij4Ziou1YbN5fB+wmyw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640945; h=Content-Transfer-Encoding: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=ddfbpJ21TZ9Q17LNM2UsZZUB857tEs2rgQ+ipEgpwVQ=; b=KiPV7vPV/KVfP6NKmfdY33IbPdRWGXx61x+gcvrKxQI7JqHhOYB5qhS655kq3DKgSIGisaRGAwfFqCmavmgF+dfqZERZOYc/YFQlzOvTDyIIYR7D8gsG1TJrMdqr6/HTSK9v+8DsEP28yn6XPuZLskuvlrQbaO/gg/1o3e8OjLQ= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640945454520.1226656662193; Fri, 28 Aug 2020 11:55:45 -0700 (PDT) Received: from localhost ([::1]:58210 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjXM-0002JW-NA for importer@patchew.org; Fri, 28 Aug 2020 14:55:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59210) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCs-0002w8-MY for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:34 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:43866) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCq-000632-3Y for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:34 -0400 Received: by mail-wr1-x443.google.com with SMTP id k15so38336wrn.10 for ; Fri, 28 Aug 2020 11:34:31 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34: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=ddfbpJ21TZ9Q17LNM2UsZZUB857tEs2rgQ+ipEgpwVQ=; b=fA6sCUiARSVq3wAaPcMu1SxXXm6Bz5UPqHap7nUVBKo6iCrQq3GzqJGt7oB466ak94 3GkGpXVnA9LOfL8WKpN0vKPU1aGyX0xlx8mRYnnYsZZFUrJkAPgSS7R9JEgmwa8Loz4+ UTyVMVCvexuzb4qfGpLFO0fak6v1jDWOe9hIiZqbx3hJHxqfyez/d2wzqTqKHnQHMPTM 0iNpXV1FNb0ptm+iPuJIW1rWjhdE6gXNSUh+zVKK7RmVy+ufOGipsSbuMg+tSIL4bgLs AcjlZ1pfE+vjXQFzv4nc/Q6DzoJhH3MGse4HlQacFOjDf3OBmzorESP3yhYI6svexMUN xXVg== 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=ddfbpJ21TZ9Q17LNM2UsZZUB857tEs2rgQ+ipEgpwVQ=; b=Ea8MuefF6iRS0pIpeXga28TmtKdPtLbiwpSdCIs1bUb3/MAJSv8qGaMYqdzlXY0bjq 40odB0mVTaeJfbIvDcMvRIeya6VS6Uy+12ix2ZFjYSI6FMXA8556J/2J8GHi0Im8Wgfe Zuwu68txCwtu9gcUgxVpaLcsjtwNq+UNuvddq31IVJ+oMHHyUhPaYjoAqj7LEoA9+1Zi cO4QO6mxlcK5UHT8Hv8KVinckKdwdO3sR2fgF/OurY0aYEvaZ2VVdbW94viFU0wZqwrs zm887TjliRI4eRfIao3FAYFEtUcj1VTh8N2RUiiC2lyejfHw8GF3AltSDSORzI+JUZPf 8Mzg== X-Gm-Message-State: AOAM533DzThEaEyI6hUMLrPCuT4uGyyKiFED3ZCnk06pZn+sTukS7SK/ cNpl0xBBnLYTBPokxxdG9m41yoMkpIXYELb5 X-Google-Smtp-Source: ABdhPJxZ7VBhDGIluF6rdgHPIh7rzoVlpaLtXKsrrf8RafuA175gqWZn0Gzo3yzP+e8bQjNhQnG3UQ== X-Received: by 2002:a05:6000:1003:: with SMTP id a3mr275229wrx.258.1598639670781; Fri, 28 Aug 2020 11:34:30 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 28/45] target/arm: Implement fp16 for Neon VMAX, VMIN Date: Fri, 28 Aug 2020 19:33:37 +0100 Message-Id: <20200828183354.27913-29-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::443; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x443.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=unavailable 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon float-point VMAX and VMIN insns over to using a gvec helper, and use this to implement the fp16 case. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 6 ++++++ target/arm/vec_helper.c | 6 ++++++ target/arm/translate-neon.c.inc | 5 ++--- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index b2d24050e27..e252f380a89 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -647,6 +647,12 @@ DEF_HELPER_FLAGS_5(gvec_facge_s, TCG_CALL_NO_RWG, void= , ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_facgt_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr= , i32) DEF_HELPER_FLAGS_5(gvec_facgt_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr= , i32) =20 +DEF_HELPER_FLAGS_5(gvec_fmax_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) +DEF_HELPER_FLAGS_5(gvec_fmax_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) + +DEF_HELPER_FLAGS_5(gvec_fmin_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) +DEF_HELPER_FLAGS_5(gvec_fmin_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) + DEF_HELPER_FLAGS_5(gvec_ftsmul_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_ftsmul_s, TCG_CALL_NO_RWG, diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index 4ac16ed102c..9d05e1a568b 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -817,6 +817,12 @@ DO_3OP(gvec_facge_s, float32_acge, float32) DO_3OP(gvec_facgt_h, float16_acgt, float16) DO_3OP(gvec_facgt_s, float32_acgt, float32) =20 +DO_3OP(gvec_fmax_h, float16_max, float16) +DO_3OP(gvec_fmax_s, float32_max, float32) + +DO_3OP(gvec_fmin_h, float16_min, float16) +DO_3OP(gvec_fmin_s, float32_min, float32) + #ifdef TARGET_AARCH64 =20 DO_3OP(gvec_recps_h, helper_recpsf_f16, float16) diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index 645a099518d..621d6524df1 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -1117,6 +1117,8 @@ DO_3S_FP_GVEC(VCGE, gen_helper_gvec_fcge_s, gen_helpe= r_gvec_fcge_h) DO_3S_FP_GVEC(VCGT, gen_helper_gvec_fcgt_s, gen_helper_gvec_fcgt_h) DO_3S_FP_GVEC(VACGE, gen_helper_gvec_facge_s, gen_helper_gvec_facge_h) DO_3S_FP_GVEC(VACGT, gen_helper_gvec_facgt_s, gen_helper_gvec_facgt_h) +DO_3S_FP_GVEC(VMAX, gen_helper_gvec_fmax_s, gen_helper_gvec_fmax_h) +DO_3S_FP_GVEC(VMIN, gen_helper_gvec_fmin_s, gen_helper_gvec_fmin_h) =20 /* * For all the functions using this macro, size =3D=3D 1 means fp16, @@ -1132,9 +1134,6 @@ DO_3S_FP_GVEC(VACGT, gen_helper_gvec_facgt_s, gen_hel= per_gvec_facgt_h) return do_3same_fp(s, a, FUNC, READS_VD); \ } =20 -DO_3S_FP(VMAX, gen_helper_vfp_maxs, false) -DO_3S_FP(VMIN, gen_helper_vfp_mins, false) - static void gen_VMLA_fp_3s(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fpstatus) { --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598641056; cv=none; d=zohomail.com; s=zohoarc; b=KpS5QsngRtNUzPIgwl5PqKObJw4oWD0uNeRl49mw7bRS3NhedvhvN0OM9FeXhPWyjf1cPRSaXau+f4Qblnc7Rd3FNrhX590c5ZNzxo7dFFGIX9ZI5G2DA2eF700DOx/4xgSUhWpj3pcF1/ryOBRwbQoJG7B2SApS44J6oc7it74= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598641056; h=Content-Transfer-Encoding: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=inXY03xGdyZBdSKyNEIZuqr9D88x76DuBRO96S6LpR8=; b=mWbdAWzagbdUl7hIY25BFArQ+0OxbMfN0NsRXE8R6+1iab3sVpvhLk+UUX6Wr2W3N7bzW4dwmZT1CKLfR46yqwbAbdfxxTpwpUIaEA1r5/Ppsx3rGRVG53F3sK0RXwrUiETP0TyHWr5EoXOc8vIo7Nu64Uh6g/3B9E9Lr8tupfM= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598641056529364.6492042347677; Fri, 28 Aug 2020 11:57:36 -0700 (PDT) Received: from localhost ([::1]:38688 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjZ9-0005t6-L0 for importer@patchew.org; Fri, 28 Aug 2020 14:57:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59248) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCt-0002za-V4 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:35 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:32823) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCr-00063J-3q for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:35 -0400 Received: by mail-wm1-x341.google.com with SMTP id y8so186851wma.0 for ; Fri, 28 Aug 2020 11:34:32 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:31 -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=inXY03xGdyZBdSKyNEIZuqr9D88x76DuBRO96S6LpR8=; b=Xu3s+WJGPA/9Cdbgq8xSyEYqx0keUo1u/wuHbASUIjBwgIwkXFk+2c4HjuHKVhG+mC b8BDTBlL0HtQHl6bIpNaawOUBd6I/QnON9ykdnPfPR4QylcnnYRe+hvEkj6nPG5f/k0U 1K0TjaAiqW6CxKlnDHuFTjEjhe14oyhawX452jQ7iIZZ9y8OcJx/0iCHUCiu69LiKP85 fvMng/Yc1Js+qoOUPjXtVZzDIL0MSuSeF2lOIHPPWNj68jx6qyktSDBSp7r5vf6lIzPB YKsYuAUdeigQUAKDGJYKi/rIX7UnBbnR15xXe7hk+u9Mbqgjsbe42ZpPpmIAvXg49U13 KNww== 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=inXY03xGdyZBdSKyNEIZuqr9D88x76DuBRO96S6LpR8=; b=VwZE7ul2zGC6sUtlQkiB5Um94F5vqu6QH37/eMABOBArdSDZnTdhlgPZWvtNxIN+Yy +HAz50nrJj6RQUGJ7gjN5NR9+1HGNSGwKGlHZKew0+miDKPAXhz7ZdkUCOCF6p6Yxgp5 7PELtXSbbEMQMzhOCc+7/p+OJizGEJ+EeJzgBFe9TzeQu6613Wp0kmlY9a9yFv0oQoQV Ltdb9FqiQv2IOTsuxEPTK8pUtgTs2zyNpixpzqjTAJ0Iljl17tYZc7NOvmcZfKsHv0// 9AVdMOGBskU85+/2Okll6VQGDNmno5Tj/t1/ES6d/qoQ8ovNrXPa67XVaKURD30rS7aW kdqQ== X-Gm-Message-State: AOAM530PwhkBD4iIdV6bSJTiY8Me8TnvAOD4V7r1mGmEL+h4IHhCT+YV +wS3ZBl3B2qvVzZ0+533iTR67A== X-Google-Smtp-Source: ABdhPJzl77I8/p4w2x+YYTfTwKuvviRX6g+D9rOBFtN2+g5GAzQ0lkHW2K+I69ZKY6l2W0Ix59aSFA== X-Received: by 2002:a1c:9910:: with SMTP id b16mr17245wme.79.1598639671716; Fri, 28 Aug 2020 11:34:31 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 29/45] target/arm: Implement fp16 for Neon VMAXNM, VMINNM Date: Fri, 28 Aug 2020 19:33:38 +0100 Message-Id: <20200828183354.27913-30-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::341; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x341.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon floating point VMAXNM and VMINNM insns to using a gvec helper and use this to implement the fp16 case. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 6 ++++++ target/arm/vec_helper.c | 6 ++++++ target/arm/translate-neon.c.inc | 23 +++++++++++++++-------- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index e252f380a89..f621940e69d 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -653,6 +653,12 @@ DEF_HELPER_FLAGS_5(gvec_fmax_s, TCG_CALL_NO_RWG, void,= ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_fmin_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) DEF_HELPER_FLAGS_5(gvec_fmin_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) =20 +DEF_HELPER_FLAGS_5(gvec_fmaxnum_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, p= tr, i32) +DEF_HELPER_FLAGS_5(gvec_fmaxnum_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, p= tr, i32) + +DEF_HELPER_FLAGS_5(gvec_fminnum_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, p= tr, i32) +DEF_HELPER_FLAGS_5(gvec_fminnum_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, p= tr, i32) + DEF_HELPER_FLAGS_5(gvec_ftsmul_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_ftsmul_s, TCG_CALL_NO_RWG, diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index 9d05e1a568b..f551f86d5a5 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -823,6 +823,12 @@ DO_3OP(gvec_fmax_s, float32_max, float32) DO_3OP(gvec_fmin_h, float16_min, float16) DO_3OP(gvec_fmin_s, float32_min, float32) =20 +DO_3OP(gvec_fmaxnum_h, float16_maxnum, float16) +DO_3OP(gvec_fmaxnum_s, float32_maxnum, float32) + +DO_3OP(gvec_fminnum_h, float16_minnum, float16) +DO_3OP(gvec_fminnum_s, float32_minnum, float32) + #ifdef TARGET_AARCH64 =20 DO_3OP(gvec_recps_h, helper_recpsf_f16, float16) diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index 621d6524df1..13858aaa08b 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -1151,6 +1151,11 @@ static void gen_VMLS_fp_3s(TCGv_i32 vd, TCGv_i32 vn,= TCGv_i32 vm, DO_3S_FP(VMLA, gen_VMLA_fp_3s, true) DO_3S_FP(VMLS, gen_VMLS_fp_3s, true) =20 +WRAP_FP_GVEC(gen_VMAXNM_fp32_3s, FPST_STD, gen_helper_gvec_fmaxnum_s) +WRAP_FP_GVEC(gen_VMAXNM_fp16_3s, FPST_STD_F16, gen_helper_gvec_fmaxnum_h) +WRAP_FP_GVEC(gen_VMINNM_fp32_3s, FPST_STD, gen_helper_gvec_fminnum_s) +WRAP_FP_GVEC(gen_VMINNM_fp16_3s, FPST_STD_F16, gen_helper_gvec_fminnum_h) + static bool trans_VMAXNM_fp_3s(DisasContext *s, arg_3same *a) { if (!arm_dc_feature(s, ARM_FEATURE_V8)) { @@ -1158,11 +1163,12 @@ static bool trans_VMAXNM_fp_3s(DisasContext *s, arg= _3same *a) } =20 if (a->size !=3D 0) { - /* TODO fp16 support */ - return false; + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + return do_3same(s, a, gen_VMAXNM_fp16_3s); } - - return do_3same_fp(s, a, gen_helper_vfp_maxnums, false); + return do_3same(s, a, gen_VMAXNM_fp32_3s); } =20 static bool trans_VMINNM_fp_3s(DisasContext *s, arg_3same *a) @@ -1172,11 +1178,12 @@ static bool trans_VMINNM_fp_3s(DisasContext *s, arg= _3same *a) } =20 if (a->size !=3D 0) { - /* TODO fp16 support */ - return false; + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + return do_3same(s, a, gen_VMINNM_fp16_3s); } - - return do_3same_fp(s, a, gen_helper_vfp_minnums, false); + return do_3same(s, a, gen_VMINNM_fp32_3s); } =20 WRAP_ENV_FN(gen_VRECPS_tramp, gen_helper_recps_f32) --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598641142; cv=none; d=zohomail.com; s=zohoarc; b=LvFkm/J8EDA3XB64WZJrW3Us7cy2iQw90XpQVaoW2WsULPi1WnnokyLWNGjPEHJznj3ciPgd8zZpk9bjraFBzB5out3Df2f4jNF7gaisYJtTf1Ru8ZZHSh/Tg4nklKRz/tP6ev7x1cZKfWFFeYGECWJVeJCldJaAFEzyhv1J04k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598641142; h=Content-Transfer-Encoding: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=xy+ZubFcXYrLF856j9b+3uusVXUFpAlU1KC0lHWaBwE=; b=JiABYuPaXrM+oxvAinGgbfRWYbuLHyhid+ltXntpdlAm3fZjfAebowSniLRiqZ+LLGx6EduJkoV/SmELgvhzJOTnTOSvYha5AF8vLRU2NEIx/QWIWFcVXO8ErvfquYDGH9R0a63Ep9XKmF08d/CMUV/ItJvCbj3rhKEJoVx8np8= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598641142058745.3806390762991; Fri, 28 Aug 2020 11:59:02 -0700 (PDT) Received: from localhost ([::1]:46234 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjaX-0000XN-4v for importer@patchew.org; Fri, 28 Aug 2020 14:59:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59266) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCu-00031D-Iq for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:36 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:55521) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCs-00063e-Ch for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:36 -0400 Received: by mail-wm1-x341.google.com with SMTP id a65so115636wme.5 for ; Fri, 28 Aug 2020 11:34:33 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:32 -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=xy+ZubFcXYrLF856j9b+3uusVXUFpAlU1KC0lHWaBwE=; b=pua7zVpNWlV0iUY2dpD8xs7MB4FPlriCsqvW0yf1Fj77iskCur3NX++XpRjX+tgMkD 36RYgU2o/qkHU18uRBqdl3idPaPzSS4+Vta/g85qSP9lW8ILdMBkSFVXZowpiKEXbzqd tBj+4hmpTw9uEp/SHrNAy0J4V/qa8g4aKU3/40rl9P+AZMD4lxwwRdHa6mXgDl2tsVPe /fPXwnC/CmWWCEU+yYB4Oyt5+AzJtB3Zg8UrrSrL7bs71V9fKdtJwmN4vUwPWdYGlMcV SaoXFElSEoTJnpfpuus/JzVtk4mTlKUYKpj9LVqR/SLgzwXiTxc4+k7wnzRKv+tOMosr es0g== 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=xy+ZubFcXYrLF856j9b+3uusVXUFpAlU1KC0lHWaBwE=; b=axJbJjHSUIzW7w+VAvF7mROxIyanCouEQMJA88AA1mWXPOqXr8+FgCMzmkO1iv5mMy jrIY/hLbKaQ5el9UjwqJDdwFkrtop63lVIbjEcItRMvFr/bFBQ2ahmxNVXm24trYrn7C T09RL7mQ6356zz2dsbU3TLOrkzG1KCqTFql6d0946nzvXfWLZ/vrN2ARjwKOzMnTUrr7 hvMgPcjtNBv/1y5l9lEf+A1f3SThcZA6m35o1ELMAHuckBk8KBnkTGE5CX2r/pzZ/GcL 9HzS2CfXpDr0JpAqXN2JX23FtBmdJ9dCuo9yc5rpabWnYx8WZR8vd+X3n9boSIhc/Oe/ hJ7A== X-Gm-Message-State: AOAM531QGEM+ifqPsn/S8s/f3h6cd3U5RHdgALrTqOb1Htoa19+H+Hgo oRw0vYUfjiLXOXULPgSBOKSf8A== X-Google-Smtp-Source: ABdhPJw9LMUyXQ9iNQCkFysbVld7Ltt8u40KLEk4Ai/ZMCteCChhv4620HD8SqmpMGtfHj7kvC7unA== X-Received: by 2002:a1c:ed15:: with SMTP id l21mr22962wmh.37.1598639672968; Fri, 28 Aug 2020 11:34:32 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 30/45] target/arm: Implement fp16 for Neon VMLA, VMLS operations Date: Fri, 28 Aug 2020 19:33:39 +0100 Message-Id: <20200828183354.27913-31-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::341; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x341.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon floating-point VMLA and VMLS insns over to using a gvec helper, and use this to implement the fp16 case. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 6 +++++ target/arm/vec_helper.c | 42 +++++++++++++++++++++++++++++++++ target/arm/translate-neon.c.inc | 33 ++------------------------ 3 files changed, 50 insertions(+), 31 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index f621940e69d..6f6c96711b7 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -659,6 +659,12 @@ DEF_HELPER_FLAGS_5(gvec_fmaxnum_s, TCG_CALL_NO_RWG, vo= id, ptr, ptr, ptr, ptr, i3 DEF_HELPER_FLAGS_5(gvec_fminnum_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, p= tr, i32) DEF_HELPER_FLAGS_5(gvec_fminnum_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, p= tr, i32) =20 +DEF_HELPER_FLAGS_5(gvec_fmla_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) +DEF_HELPER_FLAGS_5(gvec_fmla_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) + +DEF_HELPER_FLAGS_5(gvec_fmls_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) +DEF_HELPER_FLAGS_5(gvec_fmls_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) + DEF_HELPER_FLAGS_5(gvec_ftsmul_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_ftsmul_s, TCG_CALL_NO_RWG, diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index f551f86d5a5..5da5969c1c0 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -842,6 +842,48 @@ DO_3OP(gvec_rsqrts_d, helper_rsqrtsf_f64, float64) #endif #undef DO_3OP =20 +/* Non-fused multiply-add (unlike float16_muladd etc, which are fused) */ +static float16 float16_muladd_nf(float16 dest, float16 op1, float16 op2, + float_status *stat) +{ + return float16_add(dest, float16_mul(op1, op2, stat), stat); +} + +static float32 float32_muladd_nf(float32 dest, float32 op1, float32 op2, + float_status *stat) +{ + return float32_add(dest, float32_mul(op1, op2, stat), stat); +} + +static float16 float16_mulsub_nf(float16 dest, float16 op1, float16 op2, + float_status *stat) +{ + return float16_sub(dest, float16_mul(op1, op2, stat), stat); +} + +static float32 float32_mulsub_nf(float32 dest, float32 op1, float32 op2, + float_status *stat) +{ + return float32_sub(dest, float32_mul(op1, op2, stat), stat); +} + +#define DO_MULADD(NAME, FUNC, TYPE) \ +void HELPER(NAME)(void *vd, void *vn, void *vm, void *stat, uint32_t desc)= \ +{ = \ + intptr_t i, oprsz =3D simd_oprsz(desc); = \ + TYPE *d =3D vd, *n =3D vn, *m =3D vm; = \ + for (i =3D 0; i < oprsz / sizeof(TYPE); i++) { = \ + d[i] =3D FUNC(d[i], n[i], m[i], stat); = \ + } = \ + clear_tail(d, oprsz, simd_maxsz(desc)); = \ +} + +DO_MULADD(gvec_fmla_h, float16_muladd_nf, float16) +DO_MULADD(gvec_fmla_s, float32_muladd_nf, float32) + +DO_MULADD(gvec_fmls_h, float16_mulsub_nf, float16) +DO_MULADD(gvec_fmls_s, float32_mulsub_nf, float32) + /* For the indexed ops, SVE applies the index per 128-bit vector segment. * For AdvSIMD, there is of course only one such vector segment. */ diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index 13858aaa08b..1f2522f120a 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -1119,37 +1119,8 @@ DO_3S_FP_GVEC(VACGE, gen_helper_gvec_facge_s, gen_he= lper_gvec_facge_h) DO_3S_FP_GVEC(VACGT, gen_helper_gvec_facgt_s, gen_helper_gvec_facgt_h) DO_3S_FP_GVEC(VMAX, gen_helper_gvec_fmax_s, gen_helper_gvec_fmax_h) DO_3S_FP_GVEC(VMIN, gen_helper_gvec_fmin_s, gen_helper_gvec_fmin_h) - -/* - * For all the functions using this macro, size =3D=3D 1 means fp16, - * which is an architecture extension we don't implement yet. - */ -#define DO_3S_FP(INSN,FUNC,READS_VD) \ - static bool trans_##INSN##_fp_3s(DisasContext *s, arg_3same *a) \ - { \ - if (a->size !=3D 0) { \ - /* TODO fp16 support */ \ - return false; \ - } \ - return do_3same_fp(s, a, FUNC, READS_VD); \ - } - -static void gen_VMLA_fp_3s(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, - TCGv_ptr fpstatus) -{ - gen_helper_vfp_muls(vn, vn, vm, fpstatus); - gen_helper_vfp_adds(vd, vd, vn, fpstatus); -} - -static void gen_VMLS_fp_3s(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, - TCGv_ptr fpstatus) -{ - gen_helper_vfp_muls(vn, vn, vm, fpstatus); - gen_helper_vfp_subs(vd, vd, vn, fpstatus); -} - -DO_3S_FP(VMLA, gen_VMLA_fp_3s, true) -DO_3S_FP(VMLS, gen_VMLS_fp_3s, true) +DO_3S_FP_GVEC(VMLA, gen_helper_gvec_fmla_s, gen_helper_gvec_fmla_h) +DO_3S_FP_GVEC(VMLS, gen_helper_gvec_fmls_s, gen_helper_gvec_fmls_h) =20 WRAP_FP_GVEC(gen_VMAXNM_fp32_3s, FPST_STD, gen_helper_gvec_fmaxnum_s) WRAP_FP_GVEC(gen_VMAXNM_fp16_3s, FPST_STD_F16, gen_helper_gvec_fmaxnum_h) --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640511; cv=none; d=zohomail.com; s=zohoarc; b=cJhbBUZCwurTST9Au4kGO2r7dPNJP3qoM61glFHkJJeq0R2kYWIZL7Eg+gV6/114XmNN4V2sa52y7zn5GygXzkBUeaHubW5C1K1R3mT+f3U10WPowjUaBeTaBXyX0+q2Yjteg8Xj8pQ/7rlXstfKcB8JcvKC5ruvBvN6AtCZIzU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640511; h=Content-Transfer-Encoding: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=vipkm/ZKaTIkHN0wIvZMwLFUHxFrD/YkqRhiiewIQvk=; b=exYRm+VxhpiijmA8LyCcYTlZmDUqcKAGa9CRkKlN9JML07M+b7K1s9lcZYbFB5yUGdEAiNHs8q3n6Pufz9yB3GdVN9FyiB8PwKl8R4ikrhMmWF+rQCqszHR721cdg9jrt0kcIpbcu7lhkeRIKGwhhpD83EGSUqNJMh4x3V8Kt7E= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640511306647.9476011938206; Fri, 28 Aug 2020 11:48:31 -0700 (PDT) Received: from localhost ([::1]:57790 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjQM-0007aB-Io for importer@patchew.org; Fri, 28 Aug 2020 14:48:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59306) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCv-000348-NF for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:37 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:42499) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCt-00063z-Bc for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:37 -0400 Received: by mail-wr1-x431.google.com with SMTP id c18so42868wrm.9 for ; Fri, 28 Aug 2020 11:34:34 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:33 -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=vipkm/ZKaTIkHN0wIvZMwLFUHxFrD/YkqRhiiewIQvk=; b=YBOFKgG4HQbHRaWpeCQRTyAZrHTfl0rRCMQXRHc1ytts/WJLn8vAajfnc5ieF+RPOJ RPkGid19S0GAWsN5ayHrdLgEbNgDZDr9+DhRLAiNg4jgeoGKG7IUZZ1KEdyuwJ2Lomiz BVJZnPY5C+7l8TLDRtqb+vL4drs97cl3aiZ8khKlct1kcywMgan3y7/P6E84oxH9Yz15 d0+w0BeydmSpmSwt45SekKHe2Z5kxKUvc8szn+Zs9LV+DXu6GwuZQoBY4CwR0UoCLEAo f9a24+D2ZOJhuZib28qT+2g5CV2gwgoddUo2NXX77ywP+7PFwaZjwKZXHCkKqbp96vcU Yrmg== 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=vipkm/ZKaTIkHN0wIvZMwLFUHxFrD/YkqRhiiewIQvk=; b=L+UV2dj95zCdNEW3POpEVcX3F1bBMBcE8p0AOmzLn4I3hUu7XJSwe9QFaCHamuoKSy lfLJaLcWljOgp9qXykhKpvQspu/PkFXDLzczNJ1K6kHuiy8nsv2aNR/XKYul3BGctnVu oPTEp17IGA02ayxw0UMq5yhxZ5Z8Foou9fzFbLRhvhHFjjQ5r9Fr/GVjyU9HcD/GPWng 4JNN643Q23Rl9qI4+ZGnCBjea1Uq3ZenCWRFCtjScpPz0JI0sFV4XxpfKpSjzcDlzGPN fmBBsQpV1LFMZX1PiJfTT2XjwKv/Dh1BpTNv62SRJTqV0EsJR17I0OrZFNmgKSl2vPrh Ndag== X-Gm-Message-State: AOAM533i4iXOx6JtQe/rXtP+39SxeZpMLnEwqQff/tgOAqlXckl9sfSa rGlYnL/0bD7lQU6F78m3jOiyZx9Y30Tor2tl X-Google-Smtp-Source: ABdhPJwlMGlvGBU3SViElJ6uWBa6/XxI3pWFOvEc7ULNnGV0RqBjJYxm9fYEfidhkKnTaNTeeAR9Sg== X-Received: by 2002:adf:f507:: with SMTP id q7mr242463wro.343.1598639673942; Fri, 28 Aug 2020 11:34:33 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 31/45] target/arm: Implement fp16 for Neon VFMA, VMFS Date: Fri, 28 Aug 2020 19:33:40 +0100 Message-Id: <20200828183354.27913-32-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::431; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x431.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the neon floating-point vector operations VFMA and VFMS to use a gvec helper, and use this to implement the fp16 case. This is the last use of do_3same_fp() so we can now delete that function. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 6 +++ target/arm/vec_helper.c | 33 +++++++++++- target/arm/translate-neon.c.inc | 92 +-------------------------------- 3 files changed, 40 insertions(+), 91 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 6f6c96711b7..e6f65c74614 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -665,6 +665,12 @@ DEF_HELPER_FLAGS_5(gvec_fmla_s, TCG_CALL_NO_RWG, void,= ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_fmls_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) DEF_HELPER_FLAGS_5(gvec_fmls_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) =20 +DEF_HELPER_FLAGS_5(gvec_vfma_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) +DEF_HELPER_FLAGS_5(gvec_vfma_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) + +DEF_HELPER_FLAGS_5(gvec_vfms_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) +DEF_HELPER_FLAGS_5(gvec_vfms_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) + DEF_HELPER_FLAGS_5(gvec_ftsmul_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_ftsmul_s, TCG_CALL_NO_RWG, diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index 5da5969c1c0..995f09fb71e 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -867,7 +867,32 @@ static float32 float32_mulsub_nf(float32 dest, float32= op1, float32 op2, return float32_sub(dest, float32_mul(op1, op2, stat), stat); } =20 -#define DO_MULADD(NAME, FUNC, TYPE) \ +/* Fused versions; these have the semantics Neon VFMA/VFMS want */ +static float16 float16_muladd_f(float16 dest, float16 op1, float16 op2, + float_status *stat) +{ + return float16_muladd(op1, op2, dest, 0, stat); +} + +static float32 float32_muladd_f(float32 dest, float32 op1, float32 op2, + float_status *stat) +{ + return float32_muladd(op1, op2, dest, 0, stat); +} + +static float16 float16_mulsub_f(float16 dest, float16 op1, float16 op2, + float_status *stat) +{ + return float16_muladd(float16_chs(op1), op2, dest, 0, stat); +} + +static float32 float32_mulsub_f(float32 dest, float32 op1, float32 op2, + float_status *stat) +{ + return float32_muladd(float32_chs(op1), op2, dest, 0, stat); +} + +#define DO_MULADD(NAME, FUNC, TYPE) \ void HELPER(NAME)(void *vd, void *vn, void *vm, void *stat, uint32_t desc)= \ { = \ intptr_t i, oprsz =3D simd_oprsz(desc); = \ @@ -884,6 +909,12 @@ DO_MULADD(gvec_fmla_s, float32_muladd_nf, float32) DO_MULADD(gvec_fmls_h, float16_mulsub_nf, float16) DO_MULADD(gvec_fmls_s, float32_mulsub_nf, float32) =20 +DO_MULADD(gvec_vfma_h, float16_muladd_f, float16) +DO_MULADD(gvec_vfma_s, float32_muladd_f, float32) + +DO_MULADD(gvec_vfms_h, float16_mulsub_f, float16) +DO_MULADD(gvec_vfms_s, float32_mulsub_f, float32) + /* For the indexed ops, SVE applies the index per 128-bit vector segment. * For AdvSIMD, there is of course only one such vector segment. */ diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index 1f2522f120a..cf5eab784bd 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -1033,55 +1033,6 @@ DO_3SAME_PAIR(VPADD, padd_u) DO_3SAME_VQDMULH(VQDMULH, qdmulh) DO_3SAME_VQDMULH(VQRDMULH, qrdmulh) =20 -static bool do_3same_fp(DisasContext *s, arg_3same *a, VFPGen3OpSPFn *fn, - bool reads_vd) -{ - /* - * FP operations handled elementwise 32 bits at a time. - * If reads_vd is true then the old value of Vd will be - * loaded before calling the callback function. This is - * used for multiply-accumulate type operations. - */ - TCGv_i32 tmp, tmp2; - int pass; - - if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { - return false; - } - - /* UNDEF accesses to D16-D31 if they don't exist. */ - if (!dc_isar_feature(aa32_simd_r32, s) && - ((a->vd | a->vn | a->vm) & 0x10)) { - return false; - } - - if ((a->vn | a->vm | a->vd) & a->q) { - return false; - } - - if (!vfp_access_check(s)) { - return true; - } - - TCGv_ptr fpstatus =3D fpstatus_ptr(FPST_STD); - for (pass =3D 0; pass < (a->q ? 4 : 2); pass++) { - tmp =3D neon_load_reg(a->vn, pass); - tmp2 =3D neon_load_reg(a->vm, pass); - if (reads_vd) { - TCGv_i32 tmp_rd =3D neon_load_reg(a->vd, pass); - fn(tmp_rd, tmp, tmp2, fpstatus); - neon_store_reg(a->vd, pass, tmp_rd); - tcg_temp_free_i32(tmp); - } else { - fn(tmp, tmp, tmp2, fpstatus); - neon_store_reg(a->vd, pass, tmp); - } - tcg_temp_free_i32(tmp2); - } - tcg_temp_free_ptr(fpstatus); - return true; -} - #define WRAP_FP_GVEC(WRAPNAME, FPST, FUNC) \ static void WRAPNAME(unsigned vece, uint32_t rd_ofs, \ uint32_t rn_ofs, uint32_t rm_ofs, \ @@ -1121,6 +1072,8 @@ DO_3S_FP_GVEC(VMAX, gen_helper_gvec_fmax_s, gen_helpe= r_gvec_fmax_h) DO_3S_FP_GVEC(VMIN, gen_helper_gvec_fmin_s, gen_helper_gvec_fmin_h) DO_3S_FP_GVEC(VMLA, gen_helper_gvec_fmla_s, gen_helper_gvec_fmla_h) DO_3S_FP_GVEC(VMLS, gen_helper_gvec_fmls_s, gen_helper_gvec_fmls_h) +DO_3S_FP_GVEC(VFMA, gen_helper_gvec_vfma_s, gen_helper_gvec_vfma_h) +DO_3S_FP_GVEC(VFMS, gen_helper_gvec_vfms_s, gen_helper_gvec_vfms_h) =20 WRAP_FP_GVEC(gen_VMAXNM_fp32_3s, FPST_STD, gen_helper_gvec_fmaxnum_s) WRAP_FP_GVEC(gen_VMAXNM_fp16_3s, FPST_STD_F16, gen_helper_gvec_fmaxnum_h) @@ -1197,47 +1150,6 @@ static bool trans_VRSQRTS_fp_3s(DisasContext *s, arg= _3same *a) return do_3same(s, a, gen_VRSQRTS_fp_3s); } =20 -static void gen_VFMA_fp_3s(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, - TCGv_ptr fpstatus) -{ - gen_helper_vfp_muladds(vd, vn, vm, vd, fpstatus); -} - -static bool trans_VFMA_fp_3s(DisasContext *s, arg_3same *a) -{ - if (!dc_isar_feature(aa32_simdfmac, s)) { - return false; - } - - if (a->size !=3D 0) { - /* TODO fp16 support */ - return false; - } - - return do_3same_fp(s, a, gen_VFMA_fp_3s, true); -} - -static void gen_VFMS_fp_3s(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, - TCGv_ptr fpstatus) -{ - gen_helper_vfp_negs(vn, vn); - gen_helper_vfp_muladds(vd, vn, vm, vd, fpstatus); -} - -static bool trans_VFMS_fp_3s(DisasContext *s, arg_3same *a) -{ - if (!dc_isar_feature(aa32_simdfmac, s)) { - return false; - } - - if (a->size !=3D 0) { - /* TODO fp16 support */ - return false; - } - - return do_3same_fp(s, a, gen_VFMS_fp_3s, true); -} - static bool do_3same_fp_pair(DisasContext *s, arg_3same *a, VFPGen3OpSPFn = *fn) { /* FP operations handled pairwise 32 bits at a time */ --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598641168; cv=none; d=zohomail.com; s=zohoarc; b=PdwkQG8ITjjRNhaaTpox+aAuV4x/t7iA8vb2PEdaj+OoRvWM/Ty1GRWelSzsmYFn4kgIxvwB5q3To9KBkY8qtydowg+Tk0WpvIf1k/RZHDYLhuUMpn8h73NfQ5MaAVr9q6pv3XoK68seiVr3GQiB6dCUzW785Kg6+cjBTi3FaUw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598641168; h=Content-Transfer-Encoding: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=dJYU2Ry2eB7dGlMsRwns5pnKgFniEVE8JEK6uxOoxIc=; b=B4OAT16+xcQeD2VIhuPM8hF8iXF6YESsEojb/Ca9PwnsPj98Cc14MUhMp+rvCqcZ4BIccaWrnac0wHL9n6z7upDXjgg7cDT/BzqRNLQj0vbGo21RrKZIhmP7U7EiWwsUxJmaQpXrWGGhCKxGakzAGUWYf1uIQojSU30oHLpzMXI= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598641168370810.6827823962141; Fri, 28 Aug 2020 11:59:28 -0700 (PDT) Received: from localhost ([::1]:47942 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjax-0001H8-J5 for importer@patchew.org; Fri, 28 Aug 2020 14:59:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59330) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCw-00036N-Ms for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:38 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:45815) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCu-00064I-Fe for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:38 -0400 Received: by mail-wr1-x443.google.com with SMTP id h15so28166wrt.12 for ; Fri, 28 Aug 2020 11:34:35 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:34 -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=dJYU2Ry2eB7dGlMsRwns5pnKgFniEVE8JEK6uxOoxIc=; b=h0m3RAuVP/D69CP9TS3WO+KCexjlkZb+PwHgg+pUmzNI8mZDwOQvdm1EPV+GmHEFfj s4AE6cqLaPoI0cNk9CnbWiWpbUft2QNmIIxpmDdZipDBaI04nde8W1l8BIyxE+h8KvbH skrNxNkC6K0R2arwwty65YZ+etZ6GC0/nyIQBGsnIhLVsDzhBC+X4v0rKI/1nZbplZ6Q QKSc5FNGbZRAESyuHVLWceLs5vL1moEE3qQ0LzYvdzKCMLhR6/syTbSUBsgVaTLqIh3i wAE2d21NwyP9CcQL4QV52cyg/HkP4q9BT7qISFoKt8JdIYMnqQIsCncmuAn8nEJhH6tm uLrQ== 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=dJYU2Ry2eB7dGlMsRwns5pnKgFniEVE8JEK6uxOoxIc=; b=rJtb/duxkR9guPSveHiEryvPeFThvvLV2ydF7Sb4c7/dSRbLwD7e6q6gZd+wLU6a+r cYwmTjtnUENeSRvvG1waS53GyiVF9GBkEQtL83ot4xdcidKYpuGo/WDcaer+aB/LOtrw 7okXLpQbsclpJ5KzlKKx5+aHiinwB86rm2UADcLTCvWqABAr5APmC/tGemgH9XZ50sq5 YhIceDlR51Wsefux3Bjn4YTfM++2goqtH9+3fhWZ3UhRjlH0Sz3l3lV03xofqy/veSEO vihjU3I1akmp1+BWB5U2BC/Hqb5bHwRbTn0kWl5BdGrop5FDo1j2T1No+czcyNkuW2vX i16w== X-Gm-Message-State: AOAM531cXsqgbiL+1gykxYaUntlw3kmZ6n7eSOMbkXhWH3qUq6Me0FxJ m0rk6cVcQcY7rhmUEdnCLzqBVos7rY1IoDlR X-Google-Smtp-Source: ABdhPJzgJ9ajVW6mIdOEyw7ctm+dyKR7UZSHPvWWCtnBBIrFD0R7b+BdP71UzuEyiKUW2nup5WVK+w== X-Received: by 2002:adf:f106:: with SMTP id r6mr296038wro.106.1598639675098; Fri, 28 Aug 2020 11:34:35 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 32/45] target/arm: Implement fp16 for Neon fp compare-vs-0 Date: Fri, 28 Aug 2020 19:33:41 +0100 Message-Id: <20200828183354.27913-33-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::443; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x443.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the neon floating-point vector compare-vs-0 insns VCEQ0, VCGT0, VCLE0, VCGE0 and VCLT0 to use a gvec helper, and use this to implement the fp16 case. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 15 +++++++++++++++ target/arm/vec_helper.c | 25 +++++++++++++++++++++++++ target/arm/translate-neon.c.inc | 33 +++++---------------------------- 3 files changed, 45 insertions(+), 28 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index e6f65c74614..bf2b9a7d028 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -617,6 +617,21 @@ DEF_HELPER_FLAGS_4(gvec_frsqrte_h, TCG_CALL_NO_RWG, vo= id, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(gvec_frsqrte_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) DEF_HELPER_FLAGS_4(gvec_frsqrte_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) =20 +DEF_HELPER_FLAGS_4(gvec_fcgt0_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_fcgt0_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) + +DEF_HELPER_FLAGS_4(gvec_fcge0_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_fcge0_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) + +DEF_HELPER_FLAGS_4(gvec_fceq0_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_fceq0_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) + +DEF_HELPER_FLAGS_4(gvec_fcle0_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_fcle0_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) + +DEF_HELPER_FLAGS_4(gvec_fclt0_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_fclt0_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) + DEF_HELPER_FLAGS_5(gvec_fadd_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) DEF_HELPER_FLAGS_5(gvec_fadd_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) DEF_HELPER_FLAGS_5(gvec_fadd_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index 995f09fb71e..072bcd1a9d5 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -730,7 +730,32 @@ DO_2OP(gvec_frsqrte_h, helper_rsqrte_f16, float16) DO_2OP(gvec_frsqrte_s, helper_rsqrte_f32, float32) DO_2OP(gvec_frsqrte_d, helper_rsqrte_f64, float64) =20 +#define WRAP_CMP0_FWD(FN, CMPOP, TYPE) \ + static TYPE TYPE##_##FN##0(TYPE op, float_status *stat) \ + { \ + return TYPE##_##CMPOP(op, TYPE##_zero, stat); \ + } + +#define WRAP_CMP0_REV(FN, CMPOP, TYPE) \ + static TYPE TYPE##_##FN##0(TYPE op, float_status *stat) \ + { \ + return TYPE##_##CMPOP(TYPE##_zero, op, stat); \ + } + +#define DO_2OP_CMP0(FN, CMPOP, DIRN) \ + WRAP_CMP0_##DIRN(FN, CMPOP, float16) \ + WRAP_CMP0_##DIRN(FN, CMPOP, float32) \ + DO_2OP(gvec_f##FN##0_h, float16_##FN##0, float16) \ + DO_2OP(gvec_f##FN##0_s, float32_##FN##0, float32) + +DO_2OP_CMP0(cgt, cgt, FWD) +DO_2OP_CMP0(cge, cge, FWD) +DO_2OP_CMP0(ceq, ceq, FWD) +DO_2OP_CMP0(clt, cgt, REV) +DO_2OP_CMP0(cle, cge, REV) + #undef DO_2OP +#undef DO_2OP_CMP0 =20 /* Floating-point trigonometric starting value. * See the ARM ARM pseudocode function FPTrigSMul. diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index cf5eab784bd..fe9d09973c2 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -3799,6 +3799,11 @@ DO_2MISC_FP(VCVT_UF, gen_helper_vfp_touizs) =20 DO_2MISC_FP_VEC(VRECPE_F, gen_helper_gvec_frecpe_h, gen_helper_gvec_frecpe= _s) DO_2MISC_FP_VEC(VRSQRTE_F, gen_helper_gvec_frsqrte_h, gen_helper_gvec_frsq= rte_s) +DO_2MISC_FP_VEC(VCGT0_F, gen_helper_gvec_fcgt0_h, gen_helper_gvec_fcgt0_s) +DO_2MISC_FP_VEC(VCGE0_F, gen_helper_gvec_fcge0_h, gen_helper_gvec_fcge0_s) +DO_2MISC_FP_VEC(VCEQ0_F, gen_helper_gvec_fceq0_h, gen_helper_gvec_fceq0_s) +DO_2MISC_FP_VEC(VCLT0_F, gen_helper_gvec_fclt0_h, gen_helper_gvec_fclt0_s) +DO_2MISC_FP_VEC(VCLE0_F, gen_helper_gvec_fcle0_h, gen_helper_gvec_fcle0_s) =20 static bool trans_VRINTX(DisasContext *s, arg_2misc *a) { @@ -3808,34 +3813,6 @@ static bool trans_VRINTX(DisasContext *s, arg_2misc = *a) return do_2misc_fp(s, a, gen_helper_rints_exact); } =20 -#define WRAP_FP_CMP0_FWD(WRAPNAME, FUNC) \ - static void WRAPNAME(TCGv_i32 d, TCGv_i32 m, TCGv_ptr fpst) \ - { \ - TCGv_i32 zero =3D tcg_const_i32(0); \ - FUNC(d, m, zero, fpst); \ - tcg_temp_free_i32(zero); \ - } -#define WRAP_FP_CMP0_REV(WRAPNAME, FUNC) \ - static void WRAPNAME(TCGv_i32 d, TCGv_i32 m, TCGv_ptr fpst) \ - { \ - TCGv_i32 zero =3D tcg_const_i32(0); \ - FUNC(d, zero, m, fpst); \ - tcg_temp_free_i32(zero); \ - } - -#define DO_FP_CMP0(INSN, FUNC, REV) \ - WRAP_FP_CMP0_##REV(gen_##INSN, FUNC) \ - static bool trans_##INSN(DisasContext *s, arg_2misc *a) \ - { \ - return do_2misc_fp(s, a, gen_##INSN); \ - } - -DO_FP_CMP0(VCGT0_F, gen_helper_neon_cgt_f32, FWD) -DO_FP_CMP0(VCGE0_F, gen_helper_neon_cge_f32, FWD) -DO_FP_CMP0(VCEQ0_F, gen_helper_neon_ceq_f32, FWD) -DO_FP_CMP0(VCLE0_F, gen_helper_neon_cge_f32, REV) -DO_FP_CMP0(VCLT0_F, gen_helper_neon_cgt_f32, REV) - static bool do_vrint(DisasContext *s, arg_2misc *a, int rmode) { /* --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598641295; cv=none; d=zohomail.com; s=zohoarc; b=TIo2W++2Kuk2OLhGI9xnzl1860v1Skj+AlRF1ws1vwjcama3Kkfyz5xOZZ3bwhgD0v8prLBMs0B+Nh1Vh/Hd3eIfAPu2Cci0yoka5BEw1e7Sqx/0/bwxChQmuOKkjz0GMQ/hSDK+JtNQP4M999DpgDGs9EzgIAjXeMUbflsLz7E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598641295; h=Content-Transfer-Encoding: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=fvqm8C3dM5TmctflCAJIz9ZcX7WSbouhFM9/Ad7Pr7Q=; b=PJuMQujY3lDZsQEByBTehwze0EGRfizY5GYvER5Iek8o8btZ0NPKSI8qIDqGb9r9hXQY1XIsm9t3Wi7BrAnnexcWr20MG2Qmq2MrhO8Ap4f4vcMccyLr2yhC2kNdGtKygjgNK5Yumffn0iSGCaZE2pGhHEenS9MzFJdv5Wc7k8k= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598641295759635.446810715737; Fri, 28 Aug 2020 12:01:35 -0700 (PDT) Received: from localhost ([::1]:54272 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjd0-00040X-Ro for importer@patchew.org; Fri, 28 Aug 2020 15:01:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59364) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCx-0003A9-Sl for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:39 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:36538) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCv-00064f-Nl for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:39 -0400 Received: by mail-wm1-x342.google.com with SMTP id z9so124862wmk.1 for ; Fri, 28 Aug 2020 11:34:37 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:35 -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=fvqm8C3dM5TmctflCAJIz9ZcX7WSbouhFM9/Ad7Pr7Q=; b=HxOHV+4vZ2srB8AycjUd9A1aGVkM4LVN264XyaWm8hVL1kYhoQ+KWj79XPLVWPeKfB mpYRbiQXqfYbvQ19VEourfL8+qKb5ZuFQQzNQFdFON4BloT5V/jGJkD/ICoL620M3AA6 CjFcboDhEltu2OIsZp/RIrjBFimLD66EnUrEMNlJJpaHzP6nF5xZZJZ3V8ldIKLZGU27 8D0ryLwLSPC51LgE4nAdiAYtRiyU23357SV6LRZcnleZkmlYE/Ol7zxe73TbZYwhcKWI zB5pz9qd5gsF3pTVjSm/Gg1qDdiWN2xBL+pSqZFDDuPoAylFWPQgU+KeurvNgcJ2Ovkg RGNA== 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=fvqm8C3dM5TmctflCAJIz9ZcX7WSbouhFM9/Ad7Pr7Q=; b=dMpDyqxx823YhX7bW+aeuQHTqTK8MC9oF+Uxn/cxv2RHp+pRGboO/EZ9yqpIHbg1XH JFY1T9nf0JMnqJgIwJG2eljSDT29S+hlvfUCZn8QDqkbTGHsd9uNXrsl2Ga1/QmMFDEH zZ2yzR7rPiXyecBY73brwRmLx2U69cscTuX3HDqmg38Y5japS7hYM5LVypI3U6L2iW4v ZX9BY9BdQeC5MiJi6MdhV+t3zbvPkuHYgiP5GYVLUAxssIiQdZaytYov5RioRVFNbJu3 WLfW3TacnZbyb0s4GKg9fRWB4U2iv8xQgZuFjADwXEbOZKS2ZlgesruyjhblneY8bJ8f zngQ== X-Gm-Message-State: AOAM532GCH3MZohAlcDIokjjhomShKln85D3hLPhI9eJUWDkQ7mOHhMS buGUZZ1LH+gyeV2SH0c05ww86FdfMtfyFhuO X-Google-Smtp-Source: ABdhPJwRdTgOAJIHfm6U9cS0EGLzaJHo1OX3iztAiqDAsr0gp/jSSUq4mlGatRiV+Cnj3M/0xs2yTw== X-Received: by 2002:a1c:f207:: with SMTP id s7mr54680wmc.22.1598639676268; Fri, 28 Aug 2020 11:34:36 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 33/45] target/arm: Implement fp16 for Neon VRECPS Date: Fri, 28 Aug 2020 19:33:42 +0100 Message-Id: <20200828183354.27913-34-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::342; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x342.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon VRECPS insn to using a gvec helper, and use this to implement the fp16 case. The phrasing of the new float32_recps_nf() is slightly different from the old recps_f32() so that it parallels the f16 version; for f16 we can't assume that flush-to-zero is always enabled. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 4 +++- target/arm/vec_helper.c | 31 +++++++++++++++++++++++++++++++ target/arm/vfp_helper.c | 13 ------------- target/arm/translate-neon.c.inc | 21 +-------------------- 4 files changed, 35 insertions(+), 34 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index bf2b9a7d028..114039c4c33 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -225,7 +225,6 @@ DEF_HELPER_4(vfp_muladdd, f64, f64, f64, f64, ptr) DEF_HELPER_4(vfp_muladds, f32, f32, f32, f32, ptr) DEF_HELPER_4(vfp_muladdh, f16, f16, f16, f16, ptr) =20 -DEF_HELPER_3(recps_f32, f32, env, f32, f32) DEF_HELPER_3(rsqrts_f32, f32, env, f32, f32) DEF_HELPER_FLAGS_2(recpe_f16, TCG_CALL_NO_RWG, f16, f16, ptr) DEF_HELPER_FLAGS_2(recpe_f32, TCG_CALL_NO_RWG, f32, f32, ptr) @@ -674,6 +673,9 @@ DEF_HELPER_FLAGS_5(gvec_fmaxnum_s, TCG_CALL_NO_RWG, voi= d, ptr, ptr, ptr, ptr, i3 DEF_HELPER_FLAGS_5(gvec_fminnum_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, p= tr, i32) DEF_HELPER_FLAGS_5(gvec_fminnum_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, p= tr, i32) =20 +DEF_HELPER_FLAGS_5(gvec_recps_nf_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = ptr, i32) +DEF_HELPER_FLAGS_5(gvec_recps_nf_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = ptr, i32) + DEF_HELPER_FLAGS_5(gvec_fmla_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) DEF_HELPER_FLAGS_5(gvec_fmla_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) =20 diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index 072bcd1a9d5..0111a230244 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -797,6 +797,34 @@ static float32 float32_abd(float32 op1, float32 op2, f= loat_status *stat) return float32_abs(float32_sub(op1, op2, stat)); } =20 +/* + * Reciprocal step. These are the AArch32 version which uses a + * non-fused multiply-and-subtract. + */ +static float16 float16_recps_nf(float16 op1, float16 op2, float_status *st= at) +{ + op1 =3D float16_squash_input_denormal(op1, stat); + op2 =3D float16_squash_input_denormal(op2, stat); + + if ((float16_is_infinity(op1) && float16_is_zero(op2)) || + (float16_is_infinity(op2) && float16_is_zero(op1))) { + return float16_two; + } + return float16_sub(float16_two, float16_mul(op1, op2, stat), stat); +} + +static float32 float32_recps_nf(float32 op1, float32 op2, float_status *st= at) +{ + op1 =3D float32_squash_input_denormal(op1, stat); + op2 =3D float32_squash_input_denormal(op2, stat); + + if ((float32_is_infinity(op1) && float32_is_zero(op2)) || + (float32_is_infinity(op2) && float32_is_zero(op1))) { + return float32_two; + } + return float32_sub(float32_two, float32_mul(op1, op2, stat), stat); +} + #define DO_3OP(NAME, FUNC, TYPE) \ void HELPER(NAME)(void *vd, void *vn, void *vm, void *stat, uint32_t desc)= \ { = \ @@ -854,6 +882,9 @@ DO_3OP(gvec_fmaxnum_s, float32_maxnum, float32) DO_3OP(gvec_fminnum_h, float16_minnum, float16) DO_3OP(gvec_fminnum_s, float32_minnum, float32) =20 +DO_3OP(gvec_recps_nf_h, float16_recps_nf, float16) +DO_3OP(gvec_recps_nf_s, float32_recps_nf, float32) + #ifdef TARGET_AARCH64 =20 DO_3OP(gvec_recps_h, helper_recpsf_f16, float16) diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index 586dfd22e5e..1f452409d4d 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -529,19 +529,6 @@ uint32_t HELPER(vfp_fcvt_f64_to_f16)(float64 a, void *= fpstp, uint32_t ahp_mode) return r; } =20 -float32 HELPER(recps_f32)(CPUARMState *env, float32 a, float32 b) -{ - float_status *s =3D &env->vfp.standard_fp_status; - if ((float32_is_infinity(a) && float32_is_zero_or_denormal(b)) || - (float32_is_infinity(b) && float32_is_zero_or_denormal(a))) { - if (!(float32_is_zero(a) || float32_is_zero(b))) { - float_raise(float_flag_input_denormal, s); - } - return float32_two; - } - return float32_sub(float32_two, float32_mul(a, b, s), s); -} - float32 HELPER(rsqrts_f32)(CPUARMState *env, float32 a, float32 b) { float_status *s =3D &env->vfp.standard_fp_status; diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index fe9d09973c2..9d077be976d 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -1074,6 +1074,7 @@ DO_3S_FP_GVEC(VMLA, gen_helper_gvec_fmla_s, gen_helpe= r_gvec_fmla_h) DO_3S_FP_GVEC(VMLS, gen_helper_gvec_fmls_s, gen_helper_gvec_fmls_h) DO_3S_FP_GVEC(VFMA, gen_helper_gvec_vfma_s, gen_helper_gvec_vfma_h) DO_3S_FP_GVEC(VFMS, gen_helper_gvec_vfms_s, gen_helper_gvec_vfms_h) +DO_3S_FP_GVEC(VRECPS, gen_helper_gvec_recps_nf_s, gen_helper_gvec_recps_nf= _h) =20 WRAP_FP_GVEC(gen_VMAXNM_fp32_3s, FPST_STD, gen_helper_gvec_fmaxnum_s) WRAP_FP_GVEC(gen_VMAXNM_fp16_3s, FPST_STD_F16, gen_helper_gvec_fmaxnum_h) @@ -1110,26 +1111,6 @@ static bool trans_VMINNM_fp_3s(DisasContext *s, arg_= 3same *a) return do_3same(s, a, gen_VMINNM_fp32_3s); } =20 -WRAP_ENV_FN(gen_VRECPS_tramp, gen_helper_recps_f32) - -static void gen_VRECPS_fp_3s(unsigned vece, uint32_t rd_ofs, - uint32_t rn_ofs, uint32_t rm_ofs, - uint32_t oprsz, uint32_t maxsz) -{ - static const GVecGen3 ops =3D { .fni4 =3D gen_VRECPS_tramp }; - tcg_gen_gvec_3(rd_ofs, rn_ofs, rm_ofs, oprsz, maxsz, &ops); -} - -static bool trans_VRECPS_fp_3s(DisasContext *s, arg_3same *a) -{ - if (a->size !=3D 0) { - /* TODO fp16 support */ - return false; - } - - return do_3same(s, a, gen_VRECPS_fp_3s); -} - WRAP_ENV_FN(gen_VRSQRTS_tramp, gen_helper_rsqrts_f32) =20 static void gen_VRSQRTS_fp_3s(unsigned vece, uint32_t rd_ofs, --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640672; cv=none; d=zohomail.com; s=zohoarc; b=C1pB1EWhAvFr/1BG2Exe2TtuvCEbauTzdeEH2JpMOTKd3HzPwmA1MkYxuyau7oYhijnq3V3+pcVomv9nJSCPsjWGDGxNUGPGhXy5oHSORVCXYX0yuJlmJtlenZDx4LDikOhGEmgM8FWuN7+28R04V/11cDmGnQK2+fh24cwe7sk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640672; h=Content-Transfer-Encoding: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=Tlt4PCJ9QBY32aAXI7MSrrhV4Lcy2WR5guUFVfkz0K8=; b=Ymadn4dc5md0gkjV7vz7MXOoyyb3Kkk4VbhXuWsqjoZ/Bj6iRRvKLvPwHuRpIAcnxmfB6qUybLEYTykpheZ7vfNF2yEatjiow6BVtpq/+lgKxw/qoIBz2N16yY9zmT/6n2pWI2gU3NUpH0SO/CA6jw6UqcjymuM7ZfDRu2IrIGY= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640672681172.26029444453116; Fri, 28 Aug 2020 11:51:12 -0700 (PDT) Received: from localhost ([::1]:39534 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjSx-0003Eu-O2 for importer@patchew.org; Fri, 28 Aug 2020 14:51:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59410) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjCz-0003En-NW for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:41 -0400 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]:51318) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCw-00064v-Qq for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:41 -0400 Received: by mail-wm1-x331.google.com with SMTP id w2so133478wmi.1 for ; Fri, 28 Aug 2020 11:34:38 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:36 -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=Tlt4PCJ9QBY32aAXI7MSrrhV4Lcy2WR5guUFVfkz0K8=; b=idGGDqpuAa/CaHCZHNNJyxpoY+3gF4+jXlVO53JX+ctrTT+DuUnZd/4p28BnlwtFL+ tU/a6JfShaItzZraGwgS6OUZfT6kO16rehoA77vueMUsYCA8R/bWsSoYAmaeHYwQWvHu 9mtYlSkeyUGvS9JnJUVj3+5b7Qtl/agFU+XMeZ9abG8I02diPYwcjTW3+55m3tbZhZ02 wvvB60MVfDDE6eLFoS2vEddIIZc3+MikFeyI4JkVyO8oyPqWplJDVdeVgceVJLArkWn0 +YkPwKA6vO+pJ8lytS7atxZx5d3TR/GnJ73rOLuPe21H1PV7HXtoZeuTp0XNjxAshUO3 wUAw== 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=Tlt4PCJ9QBY32aAXI7MSrrhV4Lcy2WR5guUFVfkz0K8=; b=d/3Dzo3VZiSJu67SxMtMVOQJzJwYT4S41ATnZD6+uN8VAPx48dfiT8/he+6XINC0hj 93sKkYoFW/+s8Y9lrpNuBEOeGqA1adtncTxPr+n4rkLDFWcrOws4t77n+Nq8MD6mopVA k52uRM2oetFTZGq84KxeF7/Lrdz95sHvgZTPZeWjMIkXvX3UN1k4h3QZP42tB3rui6Jh 6FE31IUtJcnuINh9LOdu6b1sSPMcevnesPYpFVdnKinTqobdTSkAcNpToFLd/2l95XGk XlitNH2PqHJd8LdbekXvY6mJ9F49zfcEi3KUhkHuEPweGYCwGn1rZvfIc6+ciTSMxT2V C/fA== X-Gm-Message-State: AOAM53096ameIppZ+2BjoZDQ+O7LBig1tT8mrIfuDwOzc9rM1m3gD8CB UBOrn+jyv6RuHFE0GJ62melG8W+gScZn/QyU X-Google-Smtp-Source: ABdhPJwMgO5q8zpdSffUxzanXhD5h7bexr9+ipIMCTCsXtBlieIPDB+pd843I/t04R377DS7e+E/bA== X-Received: by 2002:a1c:f60e:: with SMTP id w14mr23467wmc.19.1598639677393; Fri, 28 Aug 2020 11:34:37 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 34/45] target/arm: Implement fp16 for Neon VRSQRTS Date: Fri, 28 Aug 2020 19:33:43 +0100 Message-Id: <20200828183354.27913-35-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::331; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x331.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=unavailable 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon VRSQRTS insn to using a gvec helper, and use this to implement the fp16 case. As with VRECPS, we adjust the phrasing of the new implementation slightly so that the fp32 version parallels the fp16 one. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 4 +++- target/arm/vec_helper.c | 30 ++++++++++++++++++++++++++++++ target/arm/vfp_helper.c | 15 --------------- target/arm/translate-neon.c.inc | 21 +-------------------- 4 files changed, 34 insertions(+), 36 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 114039c4c33..5a716498913 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -225,7 +225,6 @@ DEF_HELPER_4(vfp_muladdd, f64, f64, f64, f64, ptr) DEF_HELPER_4(vfp_muladds, f32, f32, f32, f32, ptr) DEF_HELPER_4(vfp_muladdh, f16, f16, f16, f16, ptr) =20 -DEF_HELPER_3(rsqrts_f32, f32, env, f32, f32) DEF_HELPER_FLAGS_2(recpe_f16, TCG_CALL_NO_RWG, f16, f16, ptr) DEF_HELPER_FLAGS_2(recpe_f32, TCG_CALL_NO_RWG, f32, f32, ptr) DEF_HELPER_FLAGS_2(recpe_f64, TCG_CALL_NO_RWG, f64, f64, ptr) @@ -676,6 +675,9 @@ DEF_HELPER_FLAGS_5(gvec_fminnum_s, TCG_CALL_NO_RWG, voi= d, ptr, ptr, ptr, ptr, i3 DEF_HELPER_FLAGS_5(gvec_recps_nf_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = ptr, i32) DEF_HELPER_FLAGS_5(gvec_recps_nf_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = ptr, i32) =20 +DEF_HELPER_FLAGS_5(gvec_rsqrts_nf_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr,= ptr, i32) +DEF_HELPER_FLAGS_5(gvec_rsqrts_nf_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr,= ptr, i32) + DEF_HELPER_FLAGS_5(gvec_fmla_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) DEF_HELPER_FLAGS_5(gvec_fmla_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) =20 diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index 0111a230244..e5bb5e395cb 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -825,6 +825,33 @@ static float32 float32_recps_nf(float32 op1, float32 o= p2, float_status *stat) return float32_sub(float32_two, float32_mul(op1, op2, stat), stat); } =20 +/* Reciprocal square-root step. AArch32 non-fused semantics. */ +static float16 float16_rsqrts_nf(float16 op1, float16 op2, float_status *s= tat) +{ + op1 =3D float16_squash_input_denormal(op1, stat); + op2 =3D float16_squash_input_denormal(op2, stat); + + if ((float16_is_infinity(op1) && float16_is_zero(op2)) || + (float16_is_infinity(op2) && float16_is_zero(op1))) { + return float16_one_point_five; + } + op1 =3D float16_sub(float16_three, float16_mul(op1, op2, stat), stat); + return float16_div(op1, float16_two, stat); +} + +static float32 float32_rsqrts_nf(float32 op1, float32 op2, float_status *s= tat) +{ + op1 =3D float32_squash_input_denormal(op1, stat); + op2 =3D float32_squash_input_denormal(op2, stat); + + if ((float32_is_infinity(op1) && float32_is_zero(op2)) || + (float32_is_infinity(op2) && float32_is_zero(op1))) { + return float32_one_point_five; + } + op1 =3D float32_sub(float32_three, float32_mul(op1, op2, stat), stat); + return float32_div(op1, float32_two, stat); +} + #define DO_3OP(NAME, FUNC, TYPE) \ void HELPER(NAME)(void *vd, void *vn, void *vm, void *stat, uint32_t desc)= \ { = \ @@ -885,6 +912,9 @@ DO_3OP(gvec_fminnum_s, float32_minnum, float32) DO_3OP(gvec_recps_nf_h, float16_recps_nf, float16) DO_3OP(gvec_recps_nf_s, float32_recps_nf, float32) =20 +DO_3OP(gvec_rsqrts_nf_h, float16_rsqrts_nf, float16) +DO_3OP(gvec_rsqrts_nf_s, float32_rsqrts_nf, float32) + #ifdef TARGET_AARCH64 =20 DO_3OP(gvec_recps_h, helper_recpsf_f16, float16) diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index 1f452409d4d..8a3dd176819 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -529,21 +529,6 @@ uint32_t HELPER(vfp_fcvt_f64_to_f16)(float64 a, void *= fpstp, uint32_t ahp_mode) return r; } =20 -float32 HELPER(rsqrts_f32)(CPUARMState *env, float32 a, float32 b) -{ - float_status *s =3D &env->vfp.standard_fp_status; - float32 product; - if ((float32_is_infinity(a) && float32_is_zero_or_denormal(b)) || - (float32_is_infinity(b) && float32_is_zero_or_denormal(a))) { - if (!(float32_is_zero(a) || float32_is_zero(b))) { - float_raise(float_flag_input_denormal, s); - } - return float32_one_point_five; - } - product =3D float32_mul(a, b, s); - return float32_div(float32_sub(float32_three, product, s), float32_two= , s); -} - /* NEON helpers. */ =20 /* Constants 256 and 512 are used in some helpers; we avoid relying on diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index 9d077be976d..e11e1e9043c 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -1075,6 +1075,7 @@ DO_3S_FP_GVEC(VMLS, gen_helper_gvec_fmls_s, gen_helpe= r_gvec_fmls_h) DO_3S_FP_GVEC(VFMA, gen_helper_gvec_vfma_s, gen_helper_gvec_vfma_h) DO_3S_FP_GVEC(VFMS, gen_helper_gvec_vfms_s, gen_helper_gvec_vfms_h) DO_3S_FP_GVEC(VRECPS, gen_helper_gvec_recps_nf_s, gen_helper_gvec_recps_nf= _h) +DO_3S_FP_GVEC(VRSQRTS, gen_helper_gvec_rsqrts_nf_s, gen_helper_gvec_rsqrts= _nf_h) =20 WRAP_FP_GVEC(gen_VMAXNM_fp32_3s, FPST_STD, gen_helper_gvec_fmaxnum_s) WRAP_FP_GVEC(gen_VMAXNM_fp16_3s, FPST_STD_F16, gen_helper_gvec_fmaxnum_h) @@ -1111,26 +1112,6 @@ static bool trans_VMINNM_fp_3s(DisasContext *s, arg_= 3same *a) return do_3same(s, a, gen_VMINNM_fp32_3s); } =20 -WRAP_ENV_FN(gen_VRSQRTS_tramp, gen_helper_rsqrts_f32) - -static void gen_VRSQRTS_fp_3s(unsigned vece, uint32_t rd_ofs, - uint32_t rn_ofs, uint32_t rm_ofs, - uint32_t oprsz, uint32_t maxsz) -{ - static const GVecGen3 ops =3D { .fni4 =3D gen_VRSQRTS_tramp }; - tcg_gen_gvec_3(rd_ofs, rn_ofs, rm_ofs, oprsz, maxsz, &ops); -} - -static bool trans_VRSQRTS_fp_3s(DisasContext *s, arg_3same *a) -{ - if (a->size !=3D 0) { - /* TODO fp16 support */ - return false; - } - - return do_3same(s, a, gen_VRSQRTS_fp_3s); -} - static bool do_3same_fp_pair(DisasContext *s, arg_3same *a, VFPGen3OpSPFn = *fn) { /* FP operations handled pairwise 32 bits at a time */ --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640814; cv=none; d=zohomail.com; s=zohoarc; b=lAvnR+3d4bm4kK6D4IdyRQGPlkc/1RpFmvkh0Y5THPzgunfMtcIlQUbPd+kM6neMAyD3p7dZyw3NMz3XWg5YIV4S3DAgohrgEFjsZkXc3MICEMXEOh601OOpwESgSRxarFt7Hd+na/dXjxnuwWH9HR9qvL2zggo063s+DuttA6M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640814; h=Content-Transfer-Encoding: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=OfTatNy+HgIQu1YXgjQx1YZhPxfP3JrKHpNy44lrD8Q=; b=mRHnj36el9dG0BX8DLImvEMG8lostbvQ/T4a5AKVx55na6ijFY9EmnL6WGOH+zKeE/JU/M49omei245zYxqcTqlOQAbSjWg4Asy0GBBcT+mTWiS3WbDmxwcKZNm9Zbsb5GdbjQFzJ7oY9NHHrE93M7NHRzJBGC6XGWwHkCtABVE= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640814751505.3992948913997; Fri, 28 Aug 2020 11:53:34 -0700 (PDT) Received: from localhost ([::1]:48012 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjVF-0006fs-UH for importer@patchew.org; Fri, 28 Aug 2020 14:53:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59418) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjD0-0003GB-7o for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:42 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:39071) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCy-00065J-3J for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:41 -0400 Received: by mail-wr1-x444.google.com with SMTP id a5so56477wrm.6 for ; Fri, 28 Aug 2020 11:34:39 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:37 -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=OfTatNy+HgIQu1YXgjQx1YZhPxfP3JrKHpNy44lrD8Q=; b=JGXIwG+Txi0HgK0OgFwAaPnWSSg6hot7OktWjsUlQsFpeSrodZeKdcE0oT6dudS5fK XMdBQlqHzGy/Asji0XVtj/MYx3aNmAwEIDJsHGu0m2Qz8AbnXRrYGQ9Y9b7WJ3thD7xE +eDU3rm9aYTMaCyjtkbiFlHrU8mwqxlWYk2o8RkV3QJicpW8GQQBgdNTXbDos8ESvDEz fkrTQkebXx/8YcLXfXGnmvPBMib9ov2Hs/zB3bcfLGtoFRzIBfdC5Nz4pAoEFPfPRXuZ ZV+AEH9MQXPbm8y46zPkxY4LzddNx8SlQ3VYfXHbFDvmbPuQI8zmJZdNfI+Sp3qzo9nF FvtQ== 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=OfTatNy+HgIQu1YXgjQx1YZhPxfP3JrKHpNy44lrD8Q=; b=ZG6TXx8CJlm9z17o3NMc2MIV3J8sfasykJ7+vcbSBa2f3XGddDHuyUGlhoP3RpcSgP NUqdDF7U1pj+U/dIq3jXJIEvWcR8rF1CAuy/iAOCN/mhRs5VQICwX7autAvAm3b0202Z yhjuNhFxbct0c31BmoyQTYDLofoyZU0tpQ8xUxUzskOGQXxqt5SsLN19ld5rggyZhdmq CCCoIhMHGpBmUriJhWXdQ9GqmkHqUwMKr4U1OR080lF3ai9yVf0Iu7jz7QiarLd9DDEn 0t+265wQJOlTZT1mZLJVMVKim9ZCuzjAMDAUfXTO3ia6EvuOK36QMA2zOSzbZ/C1yNXu ps5A== X-Gm-Message-State: AOAM533gZbERjrcmBEO03kgOA+/k2Keue2Csx/2a/ZZefOHliddELhOy Z0GZAVQJMGnnIUOUsREHPETTsytZ4cQSlGhd X-Google-Smtp-Source: ABdhPJyIbNS9sU1l6QQutKqC1SNdMt9w4fJfVENu8xh1ldNhoyyrxlgPp8RaLLBYaHRFm02ngz/olA== X-Received: by 2002:adf:dd44:: with SMTP id u4mr267652wrm.366.1598639678719; Fri, 28 Aug 2020 11:34:38 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 35/45] target/arm: Implement fp16 for Neon pairwise fp ops Date: Fri, 28 Aug 2020 19:33:44 +0100 Message-Id: <20200828183354.27913-36-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::444; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x444.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon pairwise fp ops to use a single gvic-style helper to do the full operation instead of one helper call for each 32-bit part. This allows us to use the same framework to implement the fp16. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 7 +++++ target/arm/vec_helper.c | 45 +++++++++++++++++++++++++++++++++ target/arm/translate-neon.c.inc | 42 ++++++++++++------------------ 3 files changed, 68 insertions(+), 26 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 5a716498913..f1f33c696d9 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -607,6 +607,13 @@ DEF_HELPER_FLAGS_5(gvec_fcmlas_idx, TCG_CALL_NO_RWG, DEF_HELPER_FLAGS_5(gvec_fcmlad, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) =20 +DEF_HELPER_FLAGS_5(neon_paddh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_5(neon_pmaxh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_5(neon_pminh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_5(neon_padds, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_5(neon_pmaxs, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_5(neon_pmins, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, = i32) + DEF_HELPER_FLAGS_4(gvec_frecpe_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(gvec_frecpe_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(gvec_frecpe_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index e5bb5e395cb..46623d401e7 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -1771,3 +1771,48 @@ DO_ABA(gvec_uaba_s, uint32_t) DO_ABA(gvec_uaba_d, uint64_t) =20 #undef DO_ABA + +#define DO_NEON_PAIRWISE(NAME, OP) \ + void HELPER(NAME##s)(void *vd, void *vn, void *vm, \ + void *stat, uint32_t oprsz) \ + { \ + float_status *fpst =3D stat; \ + float32 *d =3D vd; \ + float32 *n =3D vn; \ + float32 *m =3D vm; \ + float32 r0, r1; \ + \ + /* Read all inputs before writing outputs in case vm =3D=3D vd */ = \ + r0 =3D float32_##OP(n[H4(0)], n[H4(1)], fpst); \ + r1 =3D float32_##OP(m[H4(0)], m[H4(1)], fpst); \ + \ + d[H4(0)] =3D r0; \ + d[H4(1)] =3D r1; \ + } \ + \ + void HELPER(NAME##h)(void *vd, void *vn, void *vm, \ + void *stat, uint32_t oprsz) \ + { \ + float_status *fpst =3D stat; \ + float16 *d =3D vd; \ + float16 *n =3D vn; \ + float16 *m =3D vm; \ + float16 r0, r1, r2, r3; \ + \ + /* Read all inputs before writing outputs in case vm =3D=3D vd */ = \ + r0 =3D float16_##OP(n[H2(0)], n[H2(1)], fpst); \ + r1 =3D float16_##OP(n[H2(2)], n[H2(3)], fpst); \ + r2 =3D float16_##OP(m[H2(0)], m[H2(1)], fpst); \ + r3 =3D float16_##OP(m[H2(2)], m[H2(3)], fpst); \ + \ + d[H4(0)] =3D r0; \ + d[H4(1)] =3D r1; \ + d[H4(2)] =3D r2; \ + d[H4(3)] =3D r3; \ + } + +DO_NEON_PAIRWISE(neon_padd, add) +DO_NEON_PAIRWISE(neon_pmax, max) +DO_NEON_PAIRWISE(neon_pmin, min) + +#undef DO_NEON_PAIRWISE diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index e11e1e9043c..0248eb68f71 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -1112,10 +1112,10 @@ static bool trans_VMINNM_fp_3s(DisasContext *s, arg= _3same *a) return do_3same(s, a, gen_VMINNM_fp32_3s); } =20 -static bool do_3same_fp_pair(DisasContext *s, arg_3same *a, VFPGen3OpSPFn = *fn) +static bool do_3same_fp_pair(DisasContext *s, arg_3same *a, + gen_helper_gvec_3_ptr *fn) { - /* FP operations handled pairwise 32 bits at a time */ - TCGv_i32 tmp, tmp2, tmp3; + /* FP pairwise operations */ TCGv_ptr fpstatus; =20 if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { @@ -1134,26 +1134,14 @@ static bool do_3same_fp_pair(DisasContext *s, arg_3= same *a, VFPGen3OpSPFn *fn) =20 assert(a->q =3D=3D 0); /* enforced by decode patterns */ =20 - /* - * Note that we have to be careful not to clobber the source operands - * in the "vm =3D=3D vd" case by storing the result of the first pass = too - * early. Since Q is 0 there are always just two passes, so instead - * of a complicated loop over each pass we just unroll. - */ - fpstatus =3D fpstatus_ptr(FPST_STD); - tmp =3D neon_load_reg(a->vn, 0); - tmp2 =3D neon_load_reg(a->vn, 1); - fn(tmp, tmp, tmp2, fpstatus); - tcg_temp_free_i32(tmp2); =20 - tmp3 =3D neon_load_reg(a->vm, 0); - tmp2 =3D neon_load_reg(a->vm, 1); - fn(tmp3, tmp3, tmp2, fpstatus); - tcg_temp_free_i32(tmp2); + fpstatus =3D fpstatus_ptr(a->size !=3D 0 ? FPST_STD_F16 : FPST_STD); + tcg_gen_gvec_3_ptr(vfp_reg_offset(1, a->vd), + vfp_reg_offset(1, a->vn), + vfp_reg_offset(1, a->vm), + fpstatus, 8, 8, 0, fn); tcg_temp_free_ptr(fpstatus); =20 - neon_store_reg(a->vd, 0, tmp); - neon_store_reg(a->vd, 1, tmp3); return true; } =20 @@ -1165,15 +1153,17 @@ static bool do_3same_fp_pair(DisasContext *s, arg_3= same *a, VFPGen3OpSPFn *fn) static bool trans_##INSN##_fp_3s(DisasContext *s, arg_3same *a) \ { \ if (a->size !=3D 0) { \ - /* TODO fp16 support */ \ - return false; \ + if (!dc_isar_feature(aa32_fp16_arith, s)) { \ + return false; \ + } \ + return do_3same_fp_pair(s, a, FUNC##h); \ } \ - return do_3same_fp_pair(s, a, FUNC); \ + return do_3same_fp_pair(s, a, FUNC##s); \ } =20 -DO_3S_FP_PAIR(VPADD, gen_helper_vfp_adds) -DO_3S_FP_PAIR(VPMAX, gen_helper_vfp_maxs) -DO_3S_FP_PAIR(VPMIN, gen_helper_vfp_mins) +DO_3S_FP_PAIR(VPADD, gen_helper_neon_padd) +DO_3S_FP_PAIR(VPMAX, gen_helper_neon_pmax) +DO_3S_FP_PAIR(VPMIN, gen_helper_neon_pmin) =20 static bool do_vector_2sh(DisasContext *s, arg_2reg_shift *a, GVecGen2iFn = *fn) { --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640936; cv=none; d=zohomail.com; s=zohoarc; b=NGBZb0zD6hiPXQBRYNtacS8rtTMJqVZAwcWDuNTyjRDUPhb7V905Yu3tkOWB+kYilzYSCRK8qGdvQdeRjI+udUC7eferJIFfUPoRyK547Cwb7z9ezHz5V5RseoWSc/76j0El+7Q32g7rYUWxbGWTZhsv32yOuLMm0WYMri34hYI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640936; h=Content-Transfer-Encoding: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=LAWgNQM+vnTqdtPBlqJeiYdAB3l9B49QTWcg+ZvpciA=; b=NlRCTkJ8ZNuxiGkigKdX6LCjOuVuxAWCp4mCwuvXgODnphPtoP578z7dBQks9J0npraZJ2z4jyDJrRqKzE71JwIss7QR9rEH3FafwIQGrcFYlesjwJBz645NtAjWAzyTVFcE9fUVIvrIF2f7MRMo02C/fK7sxD3TxqSXUUCkZgQ= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640936148941.8557116577284; Fri, 28 Aug 2020 11:55:36 -0700 (PDT) Received: from localhost ([::1]:57998 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjXC-0002Dv-Ln for importer@patchew.org; Fri, 28 Aug 2020 14:55:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59448) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjD1-0003JF-DX for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:43 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:38682) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjCz-00065c-BG for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:43 -0400 Received: by mail-wm1-x343.google.com with SMTP id t14so115243wmi.3 for ; Fri, 28 Aug 2020 11:34:40 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:39 -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=LAWgNQM+vnTqdtPBlqJeiYdAB3l9B49QTWcg+ZvpciA=; b=H/azhLByVMPMzX7ecjuApMfGHgLe8DMQKfY06AicKjkH0ubKuWgssKhBGLLObK/q9P bQOF+e7apT/NqbL77qck2tqX5uhAohqJdSaGM0EH5kvluz/m+lre8msm/fR1jO0Lv0/5 8D7LZih/4Rcydt3ZBj4f4rVsaS4nTF7VDUVE5vAsKCYnT6UwkNdORjE59lvOejpoC//e faaNW/64IDp+nF7C8MdtpM1Rja0EeDmiiI5Budpl2037P7EsoK+qwz3b9ebbyK4aMAJW r8yof+h1vMz+VrEznDyPkunLbSOQ2C4um/Gnf6To5475mxC9gcJW/kbvcZHH222DihM/ hCKQ== 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=LAWgNQM+vnTqdtPBlqJeiYdAB3l9B49QTWcg+ZvpciA=; b=SOILvblovxhOXj43WddaOUMQmW4gAMy8ma196haO5R8AiNdAxR4haRdb8BcHKZrG/T JFOa+8VA5YZsTClTHJmLef6do3fiI7agAY+tIAbiRBe4giD7w3If7takt0HSo2cIqI+F FiuBeZE9/W8d71IZtVTmFXIeZXMzezD1/Clm5J7DQlArIH5MjLs74PmsWKRRlaKAgsZK GrLlMZXCP2ARZwqJamsp8B3Ntbb/Gsehd6icYnbyH4c1K5pEcO2hyPtuPyLF/P3NJS9O SKn0BihYltJFMWFuMzPyqhVKJ7KqNdWfYJVKHys13yJV6J82ZSMuirQbqN1YGFNBuc7a tSMw== X-Gm-Message-State: AOAM532YGJFa17EL723hfHRkzsF+e1ixBXZPoUe2JTuk7IeUNDG2BSo7 68claRe5JPyv+k+lL2TdoNiNTd+K+UO8Jq+b X-Google-Smtp-Source: ABdhPJyFXcVwSVkJ4rQ7QhNSWvS++RIskBqSNJYn+1neK28pCHHLZx8MEDLWl3a3S3+L3/Yik7Icdw== X-Received: by 2002:a1c:6708:: with SMTP id b8mr8895wmc.141.1598639679957; Fri, 28 Aug 2020 11:34:39 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 36/45] target/arm: Implement fp16 for Neon float-integer VCVT Date: Fri, 28 Aug 2020 19:33:45 +0100 Message-Id: <20200828183354.27913-37-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::343; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x343.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon float-integer VCVT insns to gvec, and use this to implement fp16 support for them. Note that unlike the VFP int<->fp16 VCVT insns we converted earlier and which convert to/from a 32-bit integer, these Neon insns convert to/from 16-bit integers. So we can use the existing vfp conversion helpers for the f32<->u32/i32 case but need to provide our own for f16<->u16/i16. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 9 +++++++++ target/arm/vec_helper.c | 29 +++++++++++++++++++++++++++++ target/arm/translate-neon.c.inc | 15 ++++----------- 3 files changed, 42 insertions(+), 11 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index f1f33c696d9..1d8badf4a21 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -614,6 +614,15 @@ DEF_HELPER_FLAGS_5(neon_padds, TCG_CALL_NO_RWG, void, = ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(neon_pmaxs, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, = i32) DEF_HELPER_FLAGS_5(neon_pmins, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, = i32) =20 +DEF_HELPER_FLAGS_4(gvec_sstoh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_sitos, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_ustoh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_uitos, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_tosszh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_tosizs, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_touszh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_touizs, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) + DEF_HELPER_FLAGS_4(gvec_frecpe_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(gvec_frecpe_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(gvec_frecpe_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index 46623d401e7..6ea9807b790 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -711,6 +711,26 @@ static uint32_t float32_acgt(float32 op1, float32 op2,= float_status *stat) return -float32_lt(float32_abs(op2), float32_abs(op1), stat); } =20 +static int16_t vfp_tosszh(float16 x, void *fpstp) +{ + float_status *fpst =3D fpstp; + if (float16_is_any_nan(x)) { + float_raise(float_flag_invalid, fpst); + return 0; + } + return float16_to_int16_round_to_zero(x, fpst); +} + +static uint16_t vfp_touszh(float16 x, void *fpstp) +{ + float_status *fpst =3D fpstp; + if (float16_is_any_nan(x)) { + float_raise(float_flag_invalid, fpst); + return 0; + } + return float16_to_uint16_round_to_zero(x, fpst); +} + #define DO_2OP(NAME, FUNC, TYPE) \ void HELPER(NAME)(void *vd, void *vn, void *stat, uint32_t desc) \ { \ @@ -730,6 +750,15 @@ DO_2OP(gvec_frsqrte_h, helper_rsqrte_f16, float16) DO_2OP(gvec_frsqrte_s, helper_rsqrte_f32, float32) DO_2OP(gvec_frsqrte_d, helper_rsqrte_f64, float64) =20 +DO_2OP(gvec_sitos, helper_vfp_sitos, int32_t) +DO_2OP(gvec_uitos, helper_vfp_uitos, uint32_t) +DO_2OP(gvec_tosizs, helper_vfp_tosizs, float32) +DO_2OP(gvec_touizs, helper_vfp_touizs, float32) +DO_2OP(gvec_sstoh, int16_to_float16, int16_t) +DO_2OP(gvec_ustoh, uint16_to_float16, uint16_t) +DO_2OP(gvec_tosszh, vfp_tosszh, float16) +DO_2OP(gvec_touszh, vfp_touszh, float16) + #define WRAP_CMP0_FWD(FN, CMPOP, TYPE) \ static TYPE TYPE##_##FN##0(TYPE op, float_status *stat) \ { \ diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index 0248eb68f71..f77506dab24 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -3714,17 +3714,6 @@ static bool do_2misc_fp(DisasContext *s, arg_2misc *= a, return true; } =20 -#define DO_2MISC_FP(INSN, FUNC) \ - static bool trans_##INSN(DisasContext *s, arg_2misc *a) \ - { \ - return do_2misc_fp(s, a, FUNC); \ - } - -DO_2MISC_FP(VCVT_FS, gen_helper_vfp_sitos) -DO_2MISC_FP(VCVT_FU, gen_helper_vfp_uitos) -DO_2MISC_FP(VCVT_SF, gen_helper_vfp_tosizs) -DO_2MISC_FP(VCVT_UF, gen_helper_vfp_touizs) - #define DO_2MISC_FP_VEC(INSN, HFUNC, SFUNC) \ static void gen_##INSN(unsigned vece, uint32_t rd_ofs, \ uint32_t rm_ofs, \ @@ -3756,6 +3745,10 @@ DO_2MISC_FP_VEC(VCGE0_F, gen_helper_gvec_fcge0_h, ge= n_helper_gvec_fcge0_s) DO_2MISC_FP_VEC(VCEQ0_F, gen_helper_gvec_fceq0_h, gen_helper_gvec_fceq0_s) DO_2MISC_FP_VEC(VCLT0_F, gen_helper_gvec_fclt0_h, gen_helper_gvec_fclt0_s) DO_2MISC_FP_VEC(VCLE0_F, gen_helper_gvec_fcle0_h, gen_helper_gvec_fcle0_s) +DO_2MISC_FP_VEC(VCVT_FS, gen_helper_gvec_sstoh, gen_helper_gvec_sitos) +DO_2MISC_FP_VEC(VCVT_FU, gen_helper_gvec_ustoh, gen_helper_gvec_uitos) +DO_2MISC_FP_VEC(VCVT_SF, gen_helper_gvec_tosszh, gen_helper_gvec_tosizs) +DO_2MISC_FP_VEC(VCVT_UF, gen_helper_gvec_touszh, gen_helper_gvec_touizs) =20 static bool trans_VRINTX(DisasContext *s, arg_2misc *a) { --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598641414; cv=none; d=zohomail.com; s=zohoarc; b=m8mVPqw2Ibtptj/bUsZt6qHjgkHrTe0n3sQPhwQuvN2MMaYHHnFgbMUpfvKtTwYvb94CUgmHBQVD+kPLuYwbgejEWqtdYYDc8qeonIhCVzsHZQgCJEoxCArAOO6XWCDRJUVUBvEFDtHG2+NRHaQZh7rntiUgO6eqtN6W4fAzFKY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598641414; h=Content-Transfer-Encoding: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=YxYS6bedwXk9fQo5XTWT6l9ay8TcjftA/wL59SqMRkk=; b=RFMOe68NmEeHzRnLCKxjuIKz9D/yeL+kFaC5neEBOJUSV7fOZJZbWGhQEoDJ3fsHx36eC510dpwudqE7tbcfljEiCoXqOW8iR8KEW57S2KICYjAg6sAddsd5AF/EnAtwu153+4Fw38vyUYyJ6wxftcZj3iqlXDDaX2ErFY7wXiU= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598641414027928.2683642665551; Fri, 28 Aug 2020 12:03:34 -0700 (PDT) Received: from localhost ([::1]:33340 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjev-00073x-9y for importer@patchew.org; Fri, 28 Aug 2020 15:03:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59472) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjD2-0003M1-Gn for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:44 -0400 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]:56295) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjD0-00065r-Ho for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:44 -0400 Received: by mail-wm1-x335.google.com with SMTP id a65so115883wme.5 for ; Fri, 28 Aug 2020 11:34:42 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:40 -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=YxYS6bedwXk9fQo5XTWT6l9ay8TcjftA/wL59SqMRkk=; b=ZYRaAy5a0InMlW+RfPFwYAsn5yQ4tLaCS3PTjd4+w0CaXvWE9REOPbS9/e4n66lWiF 5fEamfKH0uFwSGzgNQ9D0hpPkXNIN1ty8g2F4gGdrMGy2qRjM+KuLhh4EoyGv4UWoFl5 vtVTrW46oOaNwJIaVTViWh9Qn9/bpE7AucKu6c4exfh0YEtp6Pw8wPhwhb+aJ1OP0c7C uz2RnjV0oAvrMtuRCE+b9g5jFEz1icE1hurIeKoGefNMhmQxKw9Bx4uUO7JWkqRv1QFY tCdfkQ2Zh6HrtXZEqB96mW/Cg76nzsUDrMdP3GOvxwGLyIIUnVDoIqqjenS5QqEx7kvN i9eQ== 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=YxYS6bedwXk9fQo5XTWT6l9ay8TcjftA/wL59SqMRkk=; b=BEIgs+qWUuYXROGZgcLgG4a0sA5WCcKeYqYLmR90Frf+Fdq+K4UrDiFpZ0wwm0Gz/+ 8MpmrImqxGFmN5oIyKxi+6m/JkE5zpk2kaVfmIghx00xqGxaAkRCO6io3im1eXbxPXuI 9zdlHXovCjpiIggI2gNWXJYZQfmAq1GJx2Q4uIlhcODA4GlvjkhA1Q1+e8pp/zDx0ePl 54XSXaUxj4wscrQTOcGocqAVoNcJ8OKunozcsANnGIRHpeZlH16Mep/31Qv/5LnNijLL OKt9XDuqlxnqOkmv3oaT7ukYSCPVOksij1EkcjQb1CYXjUJtFGM0W9rda2xJ0hCg4EC9 hJ8w== X-Gm-Message-State: AOAM530sTcXTslHNThFG/wuFcZI/rwNad05foNcQV7BiXV1jEwN1imD7 eTUtHK+SO+A0T+D0ou2KdvpcSQ== X-Google-Smtp-Source: ABdhPJyB8c1sHZb/9qWWyesgH+bvOn94vBxARDafi6Qjx3Vuhad190az2OWgxwUNS13wsF9afyx6RQ== X-Received: by 2002:a7b:cb17:: with SMTP id u23mr15745wmj.79.1598639681164; Fri, 28 Aug 2020 11:34:41 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 37/45] target/arm: Convert Neon VCVT fixed-point to gvec Date: Fri, 28 Aug 2020 19:33:46 +0100 Message-Id: <20200828183354.27913-38-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::335; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x335.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon VCVT float<->fixed-point insns to a gvec style, in preparation for adding fp16 support. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 5 +++++ target/arm/vec_helper.c | 20 +++++++++++++++++++ target/arm/translate-neon.c.inc | 35 +++++++++++++++++---------------- 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 1d8badf4a21..09e0fa052ef 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -623,6 +623,11 @@ DEF_HELPER_FLAGS_4(gvec_tosizs, TCG_CALL_NO_RWG, void,= ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(gvec_touszh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(gvec_touizs, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) =20 +DEF_HELPER_FLAGS_4(gvec_vcvt_sf, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_vcvt_uf, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_vcvt_fs, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_vcvt_fu, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) + DEF_HELPER_FLAGS_4(gvec_frecpe_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(gvec_frecpe_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(gvec_frecpe_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index 6ea9807b790..6d83953ee8f 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -1845,3 +1845,23 @@ DO_NEON_PAIRWISE(neon_pmax, max) DO_NEON_PAIRWISE(neon_pmin, min) =20 #undef DO_NEON_PAIRWISE + +#define DO_VCVT_FIXED(NAME, FUNC, TYPE) \ + void HELPER(NAME)(void *vd, void *vn, void *stat, uint32_t desc) \ + { \ + intptr_t i, oprsz =3D simd_oprsz(desc); \ + int shift =3D simd_data(desc); \ + TYPE *d =3D vd, *n =3D vn; = \ + float_status *fpst =3D stat; \ + for (i =3D 0; i < oprsz / sizeof(TYPE); i++) { \ + d[i] =3D FUNC(n[i], shift, fpst); \ + } \ + clear_tail(d, oprsz, simd_maxsz(desc)); \ + } + +DO_VCVT_FIXED(gvec_vcvt_sf, helper_vfp_sltos, uint32_t) +DO_VCVT_FIXED(gvec_vcvt_uf, helper_vfp_ultos, uint32_t) +DO_VCVT_FIXED(gvec_vcvt_fs, helper_vfp_tosls_round_to_zero, uint32_t) +DO_VCVT_FIXED(gvec_vcvt_fu, helper_vfp_touls_round_to_zero, uint32_t) + +#undef DO_VCVT_FIXED diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index f77506dab24..50fcf4159ea 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -1608,17 +1608,24 @@ static bool trans_VSHLL_U_2sh(DisasContext *s, arg_= 2reg_shift *a) } =20 static bool do_fp_2sh(DisasContext *s, arg_2reg_shift *a, - NeonGenTwoSingleOpFn *fn) + gen_helper_gvec_2_ptr *fn) { /* FP operations in 2-reg-and-shift group */ - TCGv_i32 tmp, shiftv; - TCGv_ptr fpstatus; - int pass; + int vec_size =3D a->q ? 16 : 8; + int rd_ofs =3D neon_reg_offset(a->vd, 0); + int rm_ofs =3D neon_reg_offset(a->vm, 0); + TCGv_ptr fpst; =20 if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { return false; } =20 + if (a->size !=3D 0) { + if (!dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + } + /* UNDEF accesses to D16-D31 if they don't exist. */ if (!dc_isar_feature(aa32_simd_r32, s) && ((a->vd | a->vm) & 0x10)) { @@ -1633,15 +1640,9 @@ static bool do_fp_2sh(DisasContext *s, arg_2reg_shif= t *a, return true; } =20 - fpstatus =3D fpstatus_ptr(FPST_STD); - shiftv =3D tcg_const_i32(a->shift); - for (pass =3D 0; pass < (a->q ? 4 : 2); pass++) { - tmp =3D neon_load_reg(a->vm, pass); - fn(tmp, tmp, shiftv, fpstatus); - neon_store_reg(a->vd, pass, tmp); - } - tcg_temp_free_ptr(fpstatus); - tcg_temp_free_i32(shiftv); + fpst =3D fpstatus_ptr(a->size ? FPST_STD_F16 : FPST_STD); + tcg_gen_gvec_2_ptr(rd_ofs, rm_ofs, fpst, vec_size, vec_size, a->shift,= fn); + tcg_temp_free_ptr(fpst); return true; } =20 @@ -1651,10 +1652,10 @@ static bool do_fp_2sh(DisasContext *s, arg_2reg_shi= ft *a, return do_fp_2sh(s, a, FUNC); \ } =20 -DO_FP_2SH(VCVT_SF, gen_helper_vfp_sltos) -DO_FP_2SH(VCVT_UF, gen_helper_vfp_ultos) -DO_FP_2SH(VCVT_FS, gen_helper_vfp_tosls_round_to_zero) -DO_FP_2SH(VCVT_FU, gen_helper_vfp_touls_round_to_zero) +DO_FP_2SH(VCVT_SF, gen_helper_gvec_vcvt_sf) +DO_FP_2SH(VCVT_UF, gen_helper_gvec_vcvt_uf) +DO_FP_2SH(VCVT_FS, gen_helper_gvec_vcvt_fs) +DO_FP_2SH(VCVT_FU, gen_helper_gvec_vcvt_fu) =20 static uint64_t asimd_imm_const(uint32_t imm, int cmode, int op) { --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598641515; cv=none; d=zohomail.com; s=zohoarc; b=AKkGgphb8KQS5YHnynxMfC/jRx2FVhahdKkMDGglSMbzrNLuN3uww/q3xwaDE9oNqsJRLaIsoE1Lt7yFDx6D7bQ2FVZcIcSEKVNBasvdXc4ykcTeFlL4on3evTsG2jlwUQGDisEZOxXzha904VI8jMn3QIQSS0Ea+Xx483fyYdU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598641515; h=Content-Transfer-Encoding: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=hE3x5UYpTv4DTAsoywo/5Ti5Qf5DuCUIVQT2wDt49Fo=; b=hUZhhWutkX7B6Ge+iSfHhewBRa+WJxaEqbvexj0jZ526qRLihwSS3bRz7u5aaXIDiR0WrUt+xd7s03RJbwOkq7ffsiwONh4D1wsOoluWMCmVFQyP0Ur1EhAi5sV3jkoi1r85mhBZM5Bk10Jyezaj5FY+GnQGft6htm9SM4f5Y08= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598641515408316.5682450525684; Fri, 28 Aug 2020 12:05:15 -0700 (PDT) Received: from localhost ([::1]:41252 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjgY-0001pD-Bl for importer@patchew.org; Fri, 28 Aug 2020 15:05:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59540) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjD7-0003Q6-UE for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:50 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:37750) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjD1-000669-RQ for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:49 -0400 Received: by mail-wr1-x441.google.com with SMTP id y3so66907wrl.4 for ; Fri, 28 Aug 2020 11:34:43 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:41 -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=hE3x5UYpTv4DTAsoywo/5Ti5Qf5DuCUIVQT2wDt49Fo=; b=del1U37Omwl17tNv4Zn0bmRZ8UNBpyX/1+pc8BdozEL0Nc8Y2YByu/phuHRXeFaSCO E+88gJBiUFb4AVRn9h1j1DHIYcFYQpBWshuBN2hKo3HjsJFyGzJ5nHroUx0mw4bJIUR/ 6em0g8PYtCdO3GDrItO1inf7DwViv/uLUmNAd8Ol7+zCmQO8k4RWxVIqAvGlCBbV3KCn 2n6G9OnFJ65Y/Q2/cw8nFse39hpjfwtXKAIgC4hQGCYRX0iPjY8lQxR6Ma7lTixfREe6 M+IM2GEWrLkgnB66Z/UxdDcufx8e5tNII6S1Xhm/wnyHIO2gb+inCx6GuSQar20vIkjq 3tJw== 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=hE3x5UYpTv4DTAsoywo/5Ti5Qf5DuCUIVQT2wDt49Fo=; b=alphyw/gwMq5x1TX9ZFIrJOAbciCpKv9VP+rYV4DiC47UfV2BkqVJxwMEVWhJA84w9 Ff1KlvtWoSPWf9nDoOJ286evqq/6j6iL2Hsz376qX+W4CpTwl+Q1nryR3F2bQXCzoyPF WtUmjm1/fI+RMOULO919DgSSrD1ZUA3ruRaDd1DOoO0ug8SC/ivTfw6amG548XYIpOzo 1EwN6L6tP4rWosJODw0D74TkFYuwjTGJWlFLt6AmU61xkh9uLUYSIUr0tsl2rUyq0qSa 8NfC468cwjsE14B/Q56q77Iu2ObHoiLg5YjQ6egEXzICma9+D1x4Qnv+xeo8M6hFsr2X /zvQ== X-Gm-Message-State: AOAM532G29s1s1cY8QqP7CLjQ9w37aMwbOXc2Wt4xT92/w6KDf8HLqvy ciuwbNfHhZ1gX4KZGUcXwpIXTA== X-Google-Smtp-Source: ABdhPJyopbOd6OJBrOBEbRXciXOkiwen11dw6O2RBgcIohQBNDTtsyVl3g1VzyYTz2ntiQ6SgsxWiw== X-Received: by 2002:a5d:6610:: with SMTP id n16mr261588wru.363.1598639682467; Fri, 28 Aug 2020 11:34:42 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 38/45] target/arm: Implement fp16 for Neon VCVT fixed-point Date: Fri, 28 Aug 2020 19:33:47 +0100 Message-Id: <20200828183354.27913-39-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::441; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x441.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implement fp16 for the Neon VCVT insns which convert between float and fixed-point. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 5 +++++ target/arm/neon-dp.decode | 8 +++++++- target/arm/vec_helper.c | 4 ++++ target/arm/translate-neon.c.inc | 5 +++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 09e0fa052ef..8c98bc40eb3 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -628,6 +628,11 @@ DEF_HELPER_FLAGS_4(gvec_vcvt_uf, TCG_CALL_NO_RWG, void= , ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(gvec_vcvt_fs, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(gvec_vcvt_fu, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) =20 +DEF_HELPER_FLAGS_4(gvec_vcvt_sh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_vcvt_uh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_vcvt_hs, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(gvec_vcvt_hu, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) + DEF_HELPER_FLAGS_4(gvec_frecpe_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(gvec_frecpe_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(gvec_frecpe_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index 686f9fbf46a..1e9e8592917 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -254,6 +254,8 @@ VMINNM_fp_3s 1111 001 1 0 . 1 . .... .... 1111 ... = 1 .... @3same_fp # We use size=3D0 for fp32 and size=3D1 for fp16 to match the 3-same encod= ings. @2reg_vcvt .... ... . . . 1 ..... .... .... . q:1 . . .... \ &2reg_shift vm=3D%vm_dp vd=3D%vd_dp size=3D0 shift=3D%neo= n_rshift_i5 +@2reg_vcvt_f16 .... ... . . . 11 .... .... .... . q:1 . . .... \ + &2reg_shift vm=3D%vm_dp vd=3D%vd_dp size=3D1 shift=3D%neo= n_rshift_i4 =20 VSHR_S_2sh 1111 001 0 1 . ...... .... 0000 . . . 1 .... @2reg_shr_d VSHR_S_2sh 1111 001 0 1 . ...... .... 0000 . . . 1 .... @2reg_shr_s @@ -370,7 +372,11 @@ VSHLL_U_2sh 1111 001 1 1 . ...... .... 1010 . 0 .= 1 .... @2reg_shll_h VSHLL_U_2sh 1111 001 1 1 . ...... .... 1010 . 0 . 1 .... @2reg_shll_b =20 # VCVT fixed<->float conversions -# TODO: FP16 fixed<->float conversions are opc=3D=3D0b1100 and 0b1101 +VCVT_SH_2sh 1111 001 0 1 . ...... .... 1100 0 . . 1 .... @2reg_vcvt_f= 16 +VCVT_UH_2sh 1111 001 1 1 . ...... .... 1100 0 . . 1 .... @2reg_vcvt_f= 16 +VCVT_HS_2sh 1111 001 0 1 . ...... .... 1101 0 . . 1 .... @2reg_vcvt_f= 16 +VCVT_HU_2sh 1111 001 1 1 . ...... .... 1101 0 . . 1 .... @2reg_vcvt_f= 16 + VCVT_SF_2sh 1111 001 0 1 . ...... .... 1110 0 . . 1 .... @2reg_vcvt VCVT_UF_2sh 1111 001 1 1 . ...... .... 1110 0 . . 1 .... @2reg_vcvt VCVT_FS_2sh 1111 001 0 1 . ...... .... 1111 0 . . 1 .... @2reg_vcvt diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index 6d83953ee8f..ea401910f37 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -1863,5 +1863,9 @@ DO_VCVT_FIXED(gvec_vcvt_sf, helper_vfp_sltos, uint32_= t) DO_VCVT_FIXED(gvec_vcvt_uf, helper_vfp_ultos, uint32_t) DO_VCVT_FIXED(gvec_vcvt_fs, helper_vfp_tosls_round_to_zero, uint32_t) DO_VCVT_FIXED(gvec_vcvt_fu, helper_vfp_touls_round_to_zero, uint32_t) +DO_VCVT_FIXED(gvec_vcvt_sh, helper_vfp_shtoh, uint16_t) +DO_VCVT_FIXED(gvec_vcvt_uh, helper_vfp_uhtoh, uint16_t) +DO_VCVT_FIXED(gvec_vcvt_hs, helper_vfp_toshh_round_to_zero, uint16_t) +DO_VCVT_FIXED(gvec_vcvt_hu, helper_vfp_touhh_round_to_zero, uint16_t) =20 #undef DO_VCVT_FIXED diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index 50fcf4159ea..b3b1d46e958 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -1657,6 +1657,11 @@ DO_FP_2SH(VCVT_UF, gen_helper_gvec_vcvt_uf) DO_FP_2SH(VCVT_FS, gen_helper_gvec_vcvt_fs) DO_FP_2SH(VCVT_FU, gen_helper_gvec_vcvt_fu) =20 +DO_FP_2SH(VCVT_SH, gen_helper_gvec_vcvt_sh) +DO_FP_2SH(VCVT_UH, gen_helper_gvec_vcvt_uh) +DO_FP_2SH(VCVT_HS, gen_helper_gvec_vcvt_hs) +DO_FP_2SH(VCVT_HU, gen_helper_gvec_vcvt_hu) + static uint64_t asimd_imm_const(uint32_t imm, int cmode, int op) { /* --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598641274; cv=none; d=zohomail.com; s=zohoarc; b=Pf+0aB4dlhu99hsDNkrY/eeAXys3akhwE3Yy3Pvu6m6yRwt8tuCdMszHnBap5W1BVfEm6UjW6xl5sUM543RCZxYfodG6na3Dq9A96OfoAeRlpJ6hYfrokIknvtoe5FPBYKJ1i7XaaIDNOMdm86Ec3bQHCFnrS/iycxAvGa6tTO4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598641274; h=Content-Transfer-Encoding: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=H+SA5BtJZZsSmfjNYqMp1Lvncj89UN93oPcUQSiNQtg=; b=DzhwZdKyubV3uVEAv2QPYe/xAaFyiebjEsOpPQqmC9jZglAtLJl30AD1l22t1+gSeOpBdKYcc4u3jEoDm+4YYCf88IuxI1latG/vsd21q3AngJCxIOY+7JUzwWWL/N4B/oCqXAE97AB0LyeQ/Se47m3WLP621WYot9WSmCVtFVo= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598641274360624.7518215459362; Fri, 28 Aug 2020 12:01:14 -0700 (PDT) Received: from localhost ([::1]:53412 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjce-0003dU-Vf for importer@patchew.org; Fri, 28 Aug 2020 15:01:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59582) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjD9-0003SI-FP for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:51 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]:35439) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjD3-00066P-29 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:51 -0400 Received: by mail-wr1-x431.google.com with SMTP id e16so75613wrm.2 for ; Fri, 28 Aug 2020 11:34:44 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:42 -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=H+SA5BtJZZsSmfjNYqMp1Lvncj89UN93oPcUQSiNQtg=; b=ybTTfEdXG4i6fqt5l6HLVgx+eprgPBfCYLc+yYBUGvh8IQku4tcbD6OyNqqLR2DTZr JitJ/ryMlbQR6OPoXC7SXyKapi8T9TsSgijW/21H6W/OW7dxDYLIpIdVdNnJXIA027db AIA3fVqoLYEqCDjAR4gOZ5gMcbqam2dKZ5p73aFngDo7E0wsc2tpxr8Paw6GySSwPpnN 6/iA0bv0X99X03C6sGFFVdrWaYJDT1hRF7BssB97GbK12OWV5DT/J0DetIl7hToBidAZ U24YJNWoNNkSZ93SJlBGFdEoHYIjtDkZUNBvs0qc1mdVwDvs4GogE/k+c/AzVpuyaO1c 7SIQ== 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=H+SA5BtJZZsSmfjNYqMp1Lvncj89UN93oPcUQSiNQtg=; b=gCwjYKqWR3a+oSjQIDy6ck7Hfo/gNurDhOLEw7Kj0lOvpPsfnj6CckcGjg6De4BH1J 2ok+NvWCuH6u9G2oCgIH5gppPdbZ0dnEqcSMOlYeN3LARH8tpqY7TdALRVDtCoIg+Tvk Bm7yirHpWF5EaO8dVOysGKKp98C7AeHcF8NI2WoGWcFWTxuJf872NOHDwBSYjm5D6qua Y/hi5ovzrNUFFLJUZkYxbZKgZP4ovIfrPUouNSyzf39vWADY4qYRQXnZLlDOyaMzLWjl QPjoZr43RwIQxUj58PrCQVJTY4N2Q/w+6sQI6Y2YhVtc+zGXD0uipKltYR4gbfs/+9CB 6j3Q== X-Gm-Message-State: AOAM5305HIJzOEawL3ad8zuVlP0IILWQ7615obcjKKYSsA7hQlkoYxS0 ybetsZoegoiXhOAqA8muM53cZg== X-Google-Smtp-Source: ABdhPJyvUXi9wbdbv3o7sdVoR2p5WUTkG5yk0mFOjRUmny/RvZnIOjx5uBLcn+JT4hEC8azjyLzsWQ== X-Received: by 2002:a5d:6946:: with SMTP id r6mr282401wrw.308.1598639683620; Fri, 28 Aug 2020 11:34:43 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 39/45] target/arm: Implement fp16 for Neon VCVT with rounding modes Date: Fri, 28 Aug 2020 19:33:48 +0100 Message-Id: <20200828183354.27913-40-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::431; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x431.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon VCVT with-specified-rounding-mode instructions to gvec, and use this to implement fp16 support for them. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 5 ++ target/arm/vec_helper.c | 23 +++++++ target/arm/translate-neon.c.inc | 103 +++++++++++--------------------- 3 files changed, 64 insertions(+), 67 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 8c98bc40eb3..a2758ded287 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -633,6 +633,11 @@ DEF_HELPER_FLAGS_4(gvec_vcvt_uh, TCG_CALL_NO_RWG, void= , ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(gvec_vcvt_hs, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(gvec_vcvt_hu, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) =20 +DEF_HELPER_FLAGS_4(gvec_vcvt_rm_ss, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(gvec_vcvt_rm_us, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(gvec_vcvt_rm_sh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(gvec_vcvt_rm_uh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) + DEF_HELPER_FLAGS_4(gvec_frecpe_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(gvec_frecpe_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(gvec_frecpe_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index ea401910f37..fae0fe75294 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -1869,3 +1869,26 @@ DO_VCVT_FIXED(gvec_vcvt_hs, helper_vfp_toshh_round_t= o_zero, uint16_t) DO_VCVT_FIXED(gvec_vcvt_hu, helper_vfp_touhh_round_to_zero, uint16_t) =20 #undef DO_VCVT_FIXED + +#define DO_VCVT_RMODE(NAME, FUNC, TYPE) \ + void HELPER(NAME)(void *vd, void *vn, void *stat, uint32_t desc) \ + { \ + float_status *fpst =3D stat; \ + intptr_t i, oprsz =3D simd_oprsz(desc); \ + uint32_t rmode =3D simd_data(desc); \ + uint32_t prev_rmode =3D get_float_rounding_mode(fpst); \ + TYPE *d =3D vd, *n =3D vn; = \ + set_float_rounding_mode(rmode, fpst); \ + for (i =3D 0; i < oprsz / sizeof(TYPE); i++) { \ + d[i] =3D FUNC(n[i], 0, fpst); \ + } \ + set_float_rounding_mode(prev_rmode, fpst); \ + clear_tail(d, oprsz, simd_maxsz(desc)); \ + } + +DO_VCVT_RMODE(gvec_vcvt_rm_ss, helper_vfp_tosls, uint32_t) +DO_VCVT_RMODE(gvec_vcvt_rm_us, helper_vfp_touls, uint32_t) +DO_VCVT_RMODE(gvec_vcvt_rm_sh, helper_vfp_toshh, uint16_t) +DO_VCVT_RMODE(gvec_vcvt_rm_uh, helper_vfp_touhh, uint16_t) + +#undef DO_VCVT_RMODE diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index b3b1d46e958..899de360bf8 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -3825,75 +3825,44 @@ DO_VRINT(VRINTZ, FPROUNDING_ZERO) DO_VRINT(VRINTM, FPROUNDING_NEGINF) DO_VRINT(VRINTP, FPROUNDING_POSINF) =20 -static bool do_vcvt(DisasContext *s, arg_2misc *a, int rmode, bool is_sign= ed) -{ - /* - * Handle a VCVT* operation by iterating 32 bits at a time, - * with a specified rounding mode in operation. - */ - int pass; - TCGv_ptr fpst; - TCGv_i32 tcg_rmode, tcg_shift; - - if (!arm_dc_feature(s, ARM_FEATURE_NEON) || - !arm_dc_feature(s, ARM_FEATURE_V8)) { - return false; +#define DO_VEC_RMODE(INSN, RMODE, OP) \ + static void gen_##INSN(unsigned vece, uint32_t rd_ofs, \ + uint32_t rm_ofs, \ + uint32_t oprsz, uint32_t maxsz) \ + { \ + static gen_helper_gvec_2_ptr * const fns[4] =3D { \ + NULL, \ + gen_helper_gvec_##OP##h, \ + gen_helper_gvec_##OP##s, \ + NULL, \ + }; \ + TCGv_ptr fpst; \ + fpst =3D fpstatus_ptr(vece =3D=3D 1 ? FPST_STD_F16 : FPST_STD); = \ + tcg_gen_gvec_2_ptr(rd_ofs, rm_ofs, fpst, oprsz, maxsz, \ + arm_rmode_to_sf(RMODE), fns[vece]); \ + tcg_temp_free_ptr(fpst); \ + } \ + static bool trans_##INSN(DisasContext *s, arg_2misc *a) \ + { \ + if (!arm_dc_feature(s, ARM_FEATURE_V8)) { \ + return false; \ + } \ + if (a->size =3D=3D 0 || = \ + (a->size =3D=3D 1 && !dc_isar_feature(aa32_fp16_arith, s))) = \ + { \ + return false; \ + } \ + return do_2misc_vec(s, a, gen_##INSN); \ } =20 - /* UNDEF accesses to D16-D31 if they don't exist. */ - if (!dc_isar_feature(aa32_simd_r32, s) && - ((a->vd | a->vm) & 0x10)) { - return false; - } - - if (a->size !=3D 2) { - /* TODO: FP16 will be the size =3D=3D 1 case */ - return false; - } - - if ((a->vd | a->vm) & a->q) { - return false; - } - - if (!vfp_access_check(s)) { - return true; - } - - fpst =3D fpstatus_ptr(FPST_STD); - tcg_shift =3D tcg_const_i32(0); - tcg_rmode =3D tcg_const_i32(arm_rmode_to_sf(rmode)); - gen_helper_set_neon_rmode(tcg_rmode, tcg_rmode, cpu_env); - for (pass =3D 0; pass < (a->q ? 4 : 2); pass++) { - TCGv_i32 tmp =3D neon_load_reg(a->vm, pass); - if (is_signed) { - gen_helper_vfp_tosls(tmp, tmp, tcg_shift, fpst); - } else { - gen_helper_vfp_touls(tmp, tmp, tcg_shift, fpst); - } - neon_store_reg(a->vd, pass, tmp); - } - gen_helper_set_neon_rmode(tcg_rmode, tcg_rmode, cpu_env); - tcg_temp_free_i32(tcg_rmode); - tcg_temp_free_i32(tcg_shift); - tcg_temp_free_ptr(fpst); - - return true; -} - -#define DO_VCVT(INSN, RMODE, SIGNED) \ - static bool trans_##INSN(DisasContext *s, arg_2misc *a) \ - { \ - return do_vcvt(s, a, RMODE, SIGNED); \ - } - -DO_VCVT(VCVTAU, FPROUNDING_TIEAWAY, false) -DO_VCVT(VCVTAS, FPROUNDING_TIEAWAY, true) -DO_VCVT(VCVTNU, FPROUNDING_TIEEVEN, false) -DO_VCVT(VCVTNS, FPROUNDING_TIEEVEN, true) -DO_VCVT(VCVTPU, FPROUNDING_POSINF, false) -DO_VCVT(VCVTPS, FPROUNDING_POSINF, true) -DO_VCVT(VCVTMU, FPROUNDING_NEGINF, false) -DO_VCVT(VCVTMS, FPROUNDING_NEGINF, true) +DO_VEC_RMODE(VCVTAU, FPROUNDING_TIEAWAY, vcvt_rm_u) +DO_VEC_RMODE(VCVTAS, FPROUNDING_TIEAWAY, vcvt_rm_s) +DO_VEC_RMODE(VCVTNU, FPROUNDING_TIEEVEN, vcvt_rm_u) +DO_VEC_RMODE(VCVTNS, FPROUNDING_TIEEVEN, vcvt_rm_s) +DO_VEC_RMODE(VCVTPU, FPROUNDING_POSINF, vcvt_rm_u) +DO_VEC_RMODE(VCVTPS, FPROUNDING_POSINF, vcvt_rm_s) +DO_VEC_RMODE(VCVTMU, FPROUNDING_NEGINF, vcvt_rm_u) +DO_VEC_RMODE(VCVTMS, FPROUNDING_NEGINF, vcvt_rm_s) =20 static bool trans_VSWP(DisasContext *s, arg_2misc *a) { --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598641394; cv=none; d=zohomail.com; s=zohoarc; b=aFPPjNN3Qq4PbW0ngVlHPaWy/A6Q/f+WbbvGB6U6xH453DpcnKScyS0LsgKGNa8A+4HkersM5VtBEI6CqHnK8uYfB2RenpGBB55PmtHmK2C0nfD73WxKvaat1+GtSU2R/UPMLAnYTZkAB0318gxTYKnP3eNw4hPdM2Tt5lpxPuU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598641394; h=Content-Transfer-Encoding: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=aMTfD29FPtiD6L41OXlRIuAGmyQ1AcZ6CdZyeeYTfMI=; b=lj71fMkijNw8ZF6Jsq8uLHS3gLx/0u36x175DiN2xUHrskNPm0jRv3Gup2eTbbuH3S4TvE6HYQcasyeAs5UyzeBjFNqfsq/SwlVYpL8YmN+z3PwuyuGTbf25T7BcePQzIiy3B5fLFiqq2r7VfnpKtTkjuENWBH0pPl3uwqgQXz0= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159864139431914.945620707355488; Fri, 28 Aug 2020 12:03:14 -0700 (PDT) Received: from localhost ([::1]:59942 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjeb-0006Pq-9C for importer@patchew.org; Fri, 28 Aug 2020 15:03:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59612) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjDB-0003Tb-4C for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:53 -0400 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]:45226) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjD7-00066d-MQ for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:52 -0400 Received: by mail-wr1-x435.google.com with SMTP id h15so28508wrt.12 for ; Fri, 28 Aug 2020 11:34:45 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34: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=aMTfD29FPtiD6L41OXlRIuAGmyQ1AcZ6CdZyeeYTfMI=; b=lS4NjKFqDpsNS0mtyDJrF6FLKKOFhSdDdHoDDAVNOOPP72rOpWE1NH+hxIiWtudkt5 GtNQwzvN70Zd8y07Ni0wDtjUSRTq+eVJ4b2MtCTLixzK/cZFJRe/kXrFZVNwFrrZZz5J UHM9RK2kM9pFKr/zf3eyfDj/sD4ySlpHfxK7BFNvvmbaz78PkAm+f3e7qDmBYbgINxaK MttQZrZ7nNBeiksieSMD1e5qdwjxv4/rHRzWVzyqRAUmJFR+uNP6HJnjfBDMrIROlEAh saAmuKSLou8oNA8VUw8R9yGf5cWyiOcPm4PQL2We5OCM6icZ3yMgqv9bl9s12nmCODWa 0UwQ== 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=aMTfD29FPtiD6L41OXlRIuAGmyQ1AcZ6CdZyeeYTfMI=; b=pvKqFQIqpyvkuPjzmce2Fll8TVU5l0wKDgJNJgqB8oQNiVwzn56I/ZbzatogqSfDbA h/0i9RhC3ryWKdweF9RStDH10zUv2v4N27GNrwL1KWTIuvMjYd0cKn+c2WVn6iifLsLa 9s0Tj0WkMNEd4asKA3xTW5JaDfixKucwn8UUzPFoDq5m66gtkOLws1seuUB8Bq4a8mJe cQg5ezI7fkImBcXBM+mZt11dDnnGaFmIOkxTQP8xDQm2YUM5WWmY6omJ80wRqaZuwxLL Je7n5GXabp1NOLEUVrbcLjWEELztAMpIf9Zpx0d1Ub/xOroUY2JuGGcONHginjBst5pA is+g== X-Gm-Message-State: AOAM530ZNLvSzw2Hb9FpzcoX6mdAIbX2KvNQ7WSQ8OeqVrJVOp9PcSyu 0/CgKTMYUDPjiMmwcE4UDRDxN57H9minTSiB X-Google-Smtp-Source: ABdhPJyhySWt8fZyGBmqscMOgPantgtg8SLxJDfKEwndwedTDb411b9vugoSQesu7jnSGRUXv0g8eg== X-Received: by 2002:a5d:54c8:: with SMTP id x8mr230451wrv.405.1598639684789; Fri, 28 Aug 2020 11:34:44 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 40/45] target/arm: Implement fp16 for Neon VRINT-with-specified-rounding-mode Date: Fri, 28 Aug 2020 19:33:49 +0100 Message-Id: <20200828183354.27913-41-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::435; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x435.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon VRINT-with-specified-rounding-mode insns to gvec, and use this to implement the fp16 versions. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 4 +- target/arm/vec_helper.c | 21 +++++++++++ target/arm/vfp_helper.c | 17 --------- target/arm/translate-neon.c.inc | 67 +++------------------------------ 4 files changed, 30 insertions(+), 79 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index a2758ded287..83f7804dfe9 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -214,7 +214,6 @@ DEF_HELPER_3(vfp_sqtoh, f16, i64, i32, ptr) DEF_HELPER_3(vfp_uqtoh, f16, i64, i32, ptr) =20 DEF_HELPER_FLAGS_2(set_rmode, TCG_CALL_NO_RWG, i32, i32, ptr) -DEF_HELPER_FLAGS_2(set_neon_rmode, TCG_CALL_NO_RWG, i32, i32, env) =20 DEF_HELPER_FLAGS_3(vfp_fcvt_f16_to_f32, TCG_CALL_NO_RWG, f32, f16, ptr, i3= 2) DEF_HELPER_FLAGS_3(vfp_fcvt_f32_to_f16, TCG_CALL_NO_RWG, f16, f32, ptr, i3= 2) @@ -638,6 +637,9 @@ DEF_HELPER_FLAGS_4(gvec_vcvt_rm_us, TCG_CALL_NO_RWG, vo= id, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(gvec_vcvt_rm_sh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) DEF_HELPER_FLAGS_4(gvec_vcvt_rm_uh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) =20 +DEF_HELPER_FLAGS_4(gvec_vrint_rm_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(gvec_vrint_rm_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) + DEF_HELPER_FLAGS_4(gvec_frecpe_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(gvec_frecpe_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(gvec_frecpe_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index fae0fe75294..7ddf1e791c9 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -1892,3 +1892,24 @@ DO_VCVT_RMODE(gvec_vcvt_rm_sh, helper_vfp_toshh, uin= t16_t) DO_VCVT_RMODE(gvec_vcvt_rm_uh, helper_vfp_touhh, uint16_t) =20 #undef DO_VCVT_RMODE + +#define DO_VRINT_RMODE(NAME, FUNC, TYPE) \ + void HELPER(NAME)(void *vd, void *vn, void *stat, uint32_t desc) \ + { \ + float_status *fpst =3D stat; \ + intptr_t i, oprsz =3D simd_oprsz(desc); \ + uint32_t rmode =3D simd_data(desc); \ + uint32_t prev_rmode =3D get_float_rounding_mode(fpst); \ + TYPE *d =3D vd, *n =3D vn; = \ + set_float_rounding_mode(rmode, fpst); \ + for (i =3D 0; i < oprsz / sizeof(TYPE); i++) { \ + d[i] =3D FUNC(n[i], fpst); \ + } \ + set_float_rounding_mode(prev_rmode, fpst); \ + clear_tail(d, oprsz, simd_maxsz(desc)); \ + } + +DO_VRINT_RMODE(gvec_vrint_rm_h, helper_rinth, uint16_t) +DO_VRINT_RMODE(gvec_vrint_rm_s, helper_rints, uint32_t) + +#undef DO_VRINT_RMODE diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c index 8a3dd176819..5666393ef79 100644 --- a/target/arm/vfp_helper.c +++ b/target/arm/vfp_helper.c @@ -459,23 +459,6 @@ uint32_t HELPER(set_rmode)(uint32_t rmode, void *fpstp) return prev_rmode; } =20 -/* Set the current fp rounding mode in the standard fp status and return - * the old one. This is for NEON instructions that need to change the - * rounding mode but wish to use the standard FPSCR values for everything - * else. Always set the rounding mode back to the correct value after - * modifying it. - * The argument is a softfloat float_round_ value. - */ -uint32_t HELPER(set_neon_rmode)(uint32_t rmode, CPUARMState *env) -{ - float_status *fp_status =3D &env->vfp.standard_fp_status; - - uint32_t prev_rmode =3D get_float_rounding_mode(fp_status); - set_float_rounding_mode(rmode, fp_status); - - return prev_rmode; -} - /* Half precision conversions. */ float32 HELPER(vfp_fcvt_f16_to_f32)(uint32_t a, void *fpstp, uint32_t ahp_= mode) { diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index 899de360bf8..fe9dc9597bd 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -3764,67 +3764,6 @@ static bool trans_VRINTX(DisasContext *s, arg_2misc = *a) return do_2misc_fp(s, a, gen_helper_rints_exact); } =20 -static bool do_vrint(DisasContext *s, arg_2misc *a, int rmode) -{ - /* - * Handle a VRINT* operation by iterating 32 bits at a time, - * with a specified rounding mode in operation. - */ - int pass; - TCGv_ptr fpst; - TCGv_i32 tcg_rmode; - - if (!arm_dc_feature(s, ARM_FEATURE_NEON) || - !arm_dc_feature(s, ARM_FEATURE_V8)) { - return false; - } - - /* UNDEF accesses to D16-D31 if they don't exist. */ - if (!dc_isar_feature(aa32_simd_r32, s) && - ((a->vd | a->vm) & 0x10)) { - return false; - } - - if (a->size !=3D 2) { - /* TODO: FP16 will be the size =3D=3D 1 case */ - return false; - } - - if ((a->vd | a->vm) & a->q) { - return false; - } - - if (!vfp_access_check(s)) { - return true; - } - - fpst =3D fpstatus_ptr(FPST_STD); - tcg_rmode =3D tcg_const_i32(arm_rmode_to_sf(rmode)); - gen_helper_set_neon_rmode(tcg_rmode, tcg_rmode, cpu_env); - for (pass =3D 0; pass < (a->q ? 4 : 2); pass++) { - TCGv_i32 tmp =3D neon_load_reg(a->vm, pass); - gen_helper_rints(tmp, tmp, fpst); - neon_store_reg(a->vd, pass, tmp); - } - gen_helper_set_neon_rmode(tcg_rmode, tcg_rmode, cpu_env); - tcg_temp_free_i32(tcg_rmode); - tcg_temp_free_ptr(fpst); - - return true; -} - -#define DO_VRINT(INSN, RMODE) \ - static bool trans_##INSN(DisasContext *s, arg_2misc *a) \ - { \ - return do_vrint(s, a, RMODE); \ - } - -DO_VRINT(VRINTN, FPROUNDING_TIEEVEN) -DO_VRINT(VRINTA, FPROUNDING_TIEAWAY) -DO_VRINT(VRINTZ, FPROUNDING_ZERO) -DO_VRINT(VRINTM, FPROUNDING_NEGINF) -DO_VRINT(VRINTP, FPROUNDING_POSINF) - #define DO_VEC_RMODE(INSN, RMODE, OP) \ static void gen_##INSN(unsigned vece, uint32_t rd_ofs, \ uint32_t rm_ofs, \ @@ -3864,6 +3803,12 @@ DO_VEC_RMODE(VCVTPS, FPROUNDING_POSINF, vcvt_rm_s) DO_VEC_RMODE(VCVTMU, FPROUNDING_NEGINF, vcvt_rm_u) DO_VEC_RMODE(VCVTMS, FPROUNDING_NEGINF, vcvt_rm_s) =20 +DO_VEC_RMODE(VRINTN, FPROUNDING_TIEEVEN, vrint_rm_) +DO_VEC_RMODE(VRINTA, FPROUNDING_TIEAWAY, vrint_rm_) +DO_VEC_RMODE(VRINTZ, FPROUNDING_ZERO, vrint_rm_) +DO_VEC_RMODE(VRINTM, FPROUNDING_NEGINF, vrint_rm_) +DO_VEC_RMODE(VRINTP, FPROUNDING_POSINF, vrint_rm_) + static bool trans_VSWP(DisasContext *s, arg_2misc *a) { TCGv_i64 rm, rd; --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640731; cv=none; d=zohomail.com; s=zohoarc; b=GsfZOmOVV1I3pTlZgmD+tdHSAkcUgiKMH851phwF2+w2jKw/XdN4YHDRC6DWxBQdDwiPpW61bGaDu98W6vOE4YPQcVu+YWpga+Sv4pOLk9ZbmwgQ7qr3zrJcEneUSQqwnNtzBtiyrVylwh514vtHdL28qrqX84wRtucdKtEsboE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640731; h=Content-Transfer-Encoding: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=pnesOqSOJA+00ifnyHrnB/Him0ao7vqDMzU/OBSQI8s=; b=D5t44NnnG00m01hXhjCq0zQ/jHi+/38ouENOVjBZAiUqx/XeLAT78UsfR3gthcL9bsCi0PemlkeGsH0VbhKQpbVWYecIB6ZXrGyl069ZopI/BEElZ8YNwVEHOKtbK+vAVPzPfs5OAJlljRAtS+k01kxVBM4zN5i7qo5Nqs/3WRI= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640731746590.7854631960556; Fri, 28 Aug 2020 11:52:11 -0700 (PDT) Received: from localhost ([::1]:43394 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjTt-0004n6-Mp for importer@patchew.org; Fri, 28 Aug 2020 14:52:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59592) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjDA-0003TN-1x for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:52 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]:42503) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjD7-00066n-M8 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:51 -0400 Received: by mail-wr1-x434.google.com with SMTP id c18so43312wrm.9 for ; Fri, 28 Aug 2020 11:34:46 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:45 -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=pnesOqSOJA+00ifnyHrnB/Him0ao7vqDMzU/OBSQI8s=; b=buG9bh10NrOQkW7WNEn1ra57xo+0mhy8qnB1hdkrPqUm4wef9bM6MAcmYZ0yNWMGai WfTt8vOadiRCCxvZLscjJXj1InooWyNQG64cVk6hLY4vGmVgARmjS5Ieq9vfjH4vaXLQ jT7eOlPqa5+gMSOuNer9TZ2zb8HuIlOTnBL4qz1+HKg5d/IoziiAv9ZcioJe5NZHfgTF TjiwRSEuLN43r+NO9f1HeF7jIUfbk081GGC4KLfWtn8F2i4StX0tO+z8AKVNyYK6Xhd3 0gmiQIuhx9vyw0zk9w0TlrXqbiueB2SxqkSJsiMiJgZlZNpthC6MEAyX4s7eVExgfXth VoEg== 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=pnesOqSOJA+00ifnyHrnB/Him0ao7vqDMzU/OBSQI8s=; b=DqarCdSayrXiQWbH1pi27lzoTurdeGTk6p29jwXy2ce4p8r+xEskmWf6P1NPvjTFj0 oXnHIqXP0sDSflH0qofyyDbKyVefRz5K/d+IL8NWrasNXS4zrBZMC4KKO8KUmJb3+8+c DYuNxWkphvycmTySByNnLWUZExs5ovvp2boWfgbidwZkMlLM4JcQblCxruXTvgsZV/h9 Nw8dw4cYAzvf01uBr1lXSb/ktpBZsZu31E51KVLFpsZcAjefA8Whg04mqZiKpOlFcE42 ekeEB8cSCgVc56xRQK5x8oKS8/6SbZmsOEQIFOEjaVdFQxOqNaPIwRun4IheA66GpP9F +nQw== X-Gm-Message-State: AOAM533Cyo8/VCHFRuG8aYm5AN23vpQuwV60E6dKgPX1Fq8OWigG+S3T up3FKw8VGWlAKqBRmS0z8xgo1Q== X-Google-Smtp-Source: ABdhPJxK6mNk+CMFdDBXUwFA9QBWk9L5mCsvPuxd5XNdLoN2Kl7lv7k65KqD3mHaAkd+i8ZmeLgWDg== X-Received: by 2002:adf:9ed1:: with SMTP id b17mr279646wrf.140.1598639685875; Fri, 28 Aug 2020 11:34:45 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 41/45] target/arm: Implement fp16 for Neon VRINTX Date: Fri, 28 Aug 2020 19:33:50 +0100 Message-Id: <20200828183354.27913-42-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::434; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x434.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon VRINTX insn to use gvec, and use this to implement fp16 support for it. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/helper.h | 3 +++ target/arm/vec_helper.c | 3 +++ target/arm/translate-neon.c.inc | 45 +++------------------------------ 3 files changed, 9 insertions(+), 42 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 83f7804dfe9..cbdbf824d8d 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -640,6 +640,9 @@ DEF_HELPER_FLAGS_4(gvec_vcvt_rm_uh, TCG_CALL_NO_RWG, vo= id, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(gvec_vrint_rm_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) DEF_HELPER_FLAGS_4(gvec_vrint_rm_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) =20 +DEF_HELPER_FLAGS_4(gvec_vrintx_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(gvec_vrintx_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) + DEF_HELPER_FLAGS_4(gvec_frecpe_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(gvec_frecpe_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(gvec_frecpe_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index 7ddf1e791c9..20f153b47a1 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -750,6 +750,9 @@ DO_2OP(gvec_frsqrte_h, helper_rsqrte_f16, float16) DO_2OP(gvec_frsqrte_s, helper_rsqrte_f32, float32) DO_2OP(gvec_frsqrte_d, helper_rsqrte_f64, float64) =20 +DO_2OP(gvec_vrintx_h, float16_round_to_int, float16) +DO_2OP(gvec_vrintx_s, float32_round_to_int, float32) + DO_2OP(gvec_sitos, helper_vfp_sitos, int32_t) DO_2OP(gvec_uitos, helper_vfp_uitos, uint32_t) DO_2OP(gvec_tosizs, helper_vfp_tosizs, float32) diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index fe9dc9597bd..e728415c276 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -3679,47 +3679,6 @@ static bool trans_VQNEG(DisasContext *s, arg_2misc *= a) return do_2misc(s, a, fn[a->size]); } =20 -static bool do_2misc_fp(DisasContext *s, arg_2misc *a, - NeonGenOneSingleOpFn *fn) -{ - int pass; - TCGv_ptr fpst; - - /* Handle a 2-reg-misc operation by iterating 32 bits at a time */ - if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { - return false; - } - - /* UNDEF accesses to D16-D31 if they don't exist. */ - if (!dc_isar_feature(aa32_simd_r32, s) && - ((a->vd | a->vm) & 0x10)) { - return false; - } - - if (a->size !=3D 2) { - /* TODO: FP16 will be the size =3D=3D 1 case */ - return false; - } - - if ((a->vd | a->vm) & a->q) { - return false; - } - - if (!vfp_access_check(s)) { - return true; - } - - fpst =3D fpstatus_ptr(FPST_STD); - for (pass =3D 0; pass < (a->q ? 4 : 2); pass++) { - TCGv_i32 tmp =3D neon_load_reg(a->vm, pass); - fn(tmp, tmp, fpst); - neon_store_reg(a->vd, pass, tmp); - } - tcg_temp_free_ptr(fpst); - - return true; -} - #define DO_2MISC_FP_VEC(INSN, HFUNC, SFUNC) \ static void gen_##INSN(unsigned vece, uint32_t rd_ofs, \ uint32_t rm_ofs, \ @@ -3756,12 +3715,14 @@ DO_2MISC_FP_VEC(VCVT_FU, gen_helper_gvec_ustoh, gen= _helper_gvec_uitos) DO_2MISC_FP_VEC(VCVT_SF, gen_helper_gvec_tosszh, gen_helper_gvec_tosizs) DO_2MISC_FP_VEC(VCVT_UF, gen_helper_gvec_touszh, gen_helper_gvec_touizs) =20 +DO_2MISC_FP_VEC(VRINTX_impl, gen_helper_gvec_vrintx_h, gen_helper_gvec_vri= ntx_s) + static bool trans_VRINTX(DisasContext *s, arg_2misc *a) { if (!arm_dc_feature(s, ARM_FEATURE_V8)) { return false; } - return do_2misc_fp(s, a, gen_helper_rints_exact); + return trans_VRINTX_impl(s, a); } =20 #define DO_VEC_RMODE(INSN, RMODE, OP) \ --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598641013; cv=none; d=zohomail.com; s=zohoarc; b=iM8R6OQvMh7C3reEyC6FlG1lsopdjnIeDlNde8s3WhONmeN6MGTNQ9GTm80H/WgjQGY5LYVOvwF8GrV1Pd5lUOtkmfH+SAsf4OvgtntlTumBuC8hqAy8X1SMfrBCcC1x7K2Qd2BpnQ0cYsY+rOp+R5pCik5tNUxBVkFRdeT2LR8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598641013; h=Content-Transfer-Encoding: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=utIVepL1HuQRNNAxKKmGmf0ciz/CjvNHj8UaXUfKars=; b=GQNg0GubMFTtKIXD+t362HZQkR6/lexht9pXLI47x8ozldkJtR/pzhuKTAAEcdP+tVyRUlMj7flrbie10o4cY47e9QHt/VTZ666K6KYKzEeoQOgOlugaMuIxsWkrpeecqhFcaLi042yPxPBCZ7eQgi+zQDI/uRx5Flxy8K3eL1U= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159864101321513.77584847747869; Fri, 28 Aug 2020 11:56:53 -0700 (PDT) Received: from localhost ([::1]:35228 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjYS-0004TV-BB for importer@patchew.org; Fri, 28 Aug 2020 14:56:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59676) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjDD-0003X8-GD for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:55 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:50627) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjD7-00066w-O5 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:54 -0400 Received: by mail-wm1-x342.google.com with SMTP id t2so139516wma.0 for ; Fri, 28 Aug 2020 11:34:47 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:46 -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=utIVepL1HuQRNNAxKKmGmf0ciz/CjvNHj8UaXUfKars=; b=NyUWJHEa4W5epyfV6iOgNg8+OYGCKNyqtxTfMrEkRFcjYBWEGMNwNo6W3CLCfrjINO 9f+R8YbQXMwszKjXisTSd4wmwolUgI6sSrze7M5aeNpJ3Hg5ETLj/fQaalZzDBbkJyEg iHKOxqcG3NUyXSWNFJnCJLIpMNxfc8VUKlOkr6DIm5wbIcz0HLhb/J97iNSDrMk/pdfY gqG0XGjYmzIfV5QzVi+ZRhSvQ900AuiWkXn3C9GimQmGsJoXfPUnYBdH8Fd1VqaDEANs Y7vUJMXH8SFHV9/4noYF1dGGbkOKM+uB6aRcZHnDLwKSaN45WnCg7K2uTeQAPTZcUhwd V1xw== 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=utIVepL1HuQRNNAxKKmGmf0ciz/CjvNHj8UaXUfKars=; b=K+RTN8mqsruY1QIeXBow8j9lbAlIKPDu4vQy9BRSgM/q0OzZ5l2Rg3xubB74vukV0U YVXV2smEZgKB9PPvnfjxJHoGOPUJZEC0sU5tIbn5vpT1ba3XFGgHkl+x6iKpTC//JNQh QB5/2558YNW8CyT0VVLF//TEj3t6WNoYJJC6P3SfTgrLXgLFoTrWB8fPGiSp6MIJHyHZ q8Kf9+nAp6WuhpSFLY2m1PJy3lh9mTy+gnfsuaHbZzMe+RGPlNgEkcpAvi16oVsD4cDJ 4l8wBhuiR/RZUnZr7QK1wUVq2y1scxYbxm1bRbhTQB3FUA4xRkzTj8p3JIp5vdjk4/U1 7hTA== X-Gm-Message-State: AOAM531U325Yt74QZHNVUDwLDhBk/MtMqiUEAQB3N9bk8/VFXEAp9IB+ VyBIvqFiGWxpZgkSjZkNfip1FA== X-Google-Smtp-Source: ABdhPJxZ+gvxnV+cUki7bBnRv40hsu8n/A085WT6ZkczxXUuXogF+MZQTxnWnQo+Y4GI3+cXAsUE2A== X-Received: by 2002:a7b:cc0b:: with SMTP id f11mr26911wmh.31.1598639687005; Fri, 28 Aug 2020 11:34:47 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 42/45] target/arm/vec_helper: Handle oprsz less than 16 bytes in indexed operations Date: Fri, 28 Aug 2020 19:33:51 +0100 Message-Id: <20200828183354.27913-43-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::342; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x342.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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=unavailable 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" In the gvec helper functions for indexed operations, for AArch32 Neon the oprsz (total size of the vector) can be less than 16 bytes if the operation is on a D reg. Since the inner loop in these helpers always goes from 0 to segment, we must clamp it based on oprsz to avoid processing a full 16 byte segment when asked to handle an 8 byte wide vector. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/vec_helper.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index 20f153b47a1..b27b90e1dd8 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -1040,7 +1040,8 @@ DO_MULADD(gvec_vfms_s, float32_mulsub_f, float32) #define DO_MUL_IDX(NAME, TYPE, H) \ void HELPER(NAME)(void *vd, void *vn, void *vm, uint32_t desc) \ { = \ - intptr_t i, j, oprsz =3D simd_oprsz(desc), segment =3D 16 / sizeof(TYP= E); \ + intptr_t i, j, oprsz =3D simd_oprsz(desc); = \ + intptr_t segment =3D MIN(16, oprsz) / sizeof(TYPE); = \ intptr_t idx =3D simd_data(desc); = \ TYPE *d =3D vd, *n =3D vn, *m =3D vm; = \ for (i =3D 0; i < oprsz / sizeof(TYPE); i +=3D segment) { = \ @@ -1061,7 +1062,8 @@ DO_MUL_IDX(gvec_mul_idx_d, uint64_t, ) #define DO_MLA_IDX(NAME, TYPE, OP, H) \ void HELPER(NAME)(void *vd, void *vn, void *vm, void *va, uint32_t desc) = \ { = \ - intptr_t i, j, oprsz =3D simd_oprsz(desc), segment =3D 16 / sizeof(TYP= E); \ + intptr_t i, j, oprsz =3D simd_oprsz(desc); = \ + intptr_t segment =3D MIN(16, oprsz) / sizeof(TYPE); = \ intptr_t idx =3D simd_data(desc); = \ TYPE *d =3D vd, *n =3D vn, *m =3D vm, *a =3D va; = \ for (i =3D 0; i < oprsz / sizeof(TYPE); i +=3D segment) { = \ @@ -1086,7 +1088,8 @@ DO_MLA_IDX(gvec_mls_idx_d, uint64_t, -, ) #define DO_FMUL_IDX(NAME, TYPE, H) \ void HELPER(NAME)(void *vd, void *vn, void *vm, void *stat, uint32_t desc)= \ { = \ - intptr_t i, j, oprsz =3D simd_oprsz(desc), segment =3D 16 / sizeof(TYP= E); \ + intptr_t i, j, oprsz =3D simd_oprsz(desc); = \ + intptr_t segment =3D MIN(16, oprsz) / sizeof(TYPE); = \ intptr_t idx =3D simd_data(desc); = \ TYPE *d =3D vd, *n =3D vn, *m =3D vm; = \ for (i =3D 0; i < oprsz / sizeof(TYPE); i +=3D segment) { = \ @@ -1108,7 +1111,8 @@ DO_FMUL_IDX(gvec_fmul_idx_d, float64, ) void HELPER(NAME)(void *vd, void *vn, void *vm, void *va, = \ void *stat, uint32_t desc) = \ { = \ - intptr_t i, j, oprsz =3D simd_oprsz(desc), segment =3D 16 / sizeof(TYP= E); \ + intptr_t i, j, oprsz =3D simd_oprsz(desc); = \ + intptr_t segment =3D MIN(16, oprsz) / sizeof(TYPE); = \ TYPE op1_neg =3D extract32(desc, SIMD_DATA_SHIFT, 1); = \ intptr_t idx =3D desc >> (SIMD_DATA_SHIFT + 1); = \ TYPE *d =3D vd, *n =3D vn, *m =3D vm, *a =3D va; = \ --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598640854; cv=none; d=zohomail.com; s=zohoarc; b=MQMaqInBMp9kqNLcKfLZTQwFHtxMDv6KZ/yr9Lale3VWlnSE76HblqettW5SUrDrufH88Uq9O6HXDSVQn4+7hSOS9ywPeSYf0+RyeeZW7nBpl963oxwwwfQO7/3BfXIAcsWF6DVLBrifL0uYv3ISoURBgggWZ8rhXm26R/3sWqo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598640854; h=Content-Transfer-Encoding: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=gov6OrVq+v77edQml+nkA/s6hx0NTnYGiTc0gLPrxvY=; b=HviJpJProBVEIAdgeWtQxwzWkNZRL3EE+Bxs4bo51K+6fLkr9Y4Y7pVw5s7EgBEWeXgF1fxehi/CU+Et5iVSf//+VTkkw0snTO7hXkh/fiiIBEqPNX1RCPb9/SDQA+4af/cUiyWsr33vufFNe5MWz8JdcpZ4U1SYW4PveuQ3L78= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598640854213805.8888850964688; Fri, 28 Aug 2020 11:54:14 -0700 (PDT) Received: from localhost ([::1]:51762 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjVt-0008Af-F4 for importer@patchew.org; Fri, 28 Aug 2020 14:54:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59622) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjDB-0003Ux-Ny for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:53 -0400 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]:40503) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjD7-000674-N2 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:53 -0400 Received: by mail-wr1-x42e.google.com with SMTP id b18so51527wrs.7 for ; Fri, 28 Aug 2020 11:34:48 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:47 -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=gov6OrVq+v77edQml+nkA/s6hx0NTnYGiTc0gLPrxvY=; b=VfX91rQuGgQU8qCylnV+9lie6il/R3sbdp4/60On0vG8doJevfzAh6st8gPNtNoGUt xq+LDnVRM5vlg+ipcrcK6fZ9FjODloMBzs+o/Wlb4BhFUbVlCCc0976GNsBfP6MMum8N pZ0r280TJychIX9oU4vXMOFmMc6SAtNN5JP5T/MJWu0X3HqbESqv0ch1qQa6NrD6Jq8u yEGdLSUSIhR7zHnQrHGuOxFdS0GsPCM7eBMZVttZoHDn6cSw8TMwifdQMFNrG1TfBAYU ZppuRg7Bxxsi041xIW3QgikDGfSNg4yt+p4z2nVDgu80P4iHKuxkzdoaaOKAgV2hrxwl FZLw== 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=gov6OrVq+v77edQml+nkA/s6hx0NTnYGiTc0gLPrxvY=; b=tpFVlltkJSx1yMtL9x1fddQA70A78u6KAgC2RKmKqkbUADbQAht0D3XC1s/ET1QE1W SF+O5BfyLxF9a1CPTjTdkoO11xrB92jdObahtXl7o0QgOkHoJBt/7ldbKMBl8b95yILt WD5qdw+Xbj5p5K8tOmRVfAtvqU17UGgERMuITMMlEhUb0bfYG/1/wN+MmCge9YF+BxIp oHanoPEWrzBwreLfiIqj8D35JoRdyz5HKjVNveQnf+1kwBsDKOIDbTzAolhs1Twtuo3V SKREFERKD9I5TdUeZw1Ut3AuEx3FCEmiBkenPI1PFOofriquQlA87ttJiXiw33mDQLzy PztQ== X-Gm-Message-State: AOAM5339D7jcFVWPNiosiFUW7C9sEMTgMVrEKcDt/V7NXs7YlrFsslH7 cmZjBafC6uwioniHuvfvkK8EX/WOZwsUBl/M X-Google-Smtp-Source: ABdhPJwZsS8qcLGpFSegT2TdRbBon4TAZwNp8ztChBSLZtj1Q6cUBmYRSRnjFUbAtslzPoWRGq3mYQ== X-Received: by 2002:a5d:61d2:: with SMTP id q18mr265146wrv.404.1598639688086; Fri, 28 Aug 2020 11:34:48 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 43/45] target/arm/vec_helper: Add gvec fp indexed multiply-and-add operations Date: Fri, 28 Aug 2020 19:33:52 +0100 Message-Id: <20200828183354.27913-44-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::42e; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42e.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Add gvec helpers for doing Neon-style indexed non-fused fp multiply-and-accumulate operations. Signed-off-by: Peter Maydell --- target/arm/helper.h | 10 ++++++++++ target/arm/vec_helper.c | 27 ++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index cbdbf824d8d..8defd7c8019 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -740,6 +740,16 @@ DEF_HELPER_FLAGS_5(gvec_fmul_idx_s, TCG_CALL_NO_RWG, DEF_HELPER_FLAGS_5(gvec_fmul_idx_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) =20 +DEF_HELPER_FLAGS_5(gvec_fmla_nf_idx_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(gvec_fmla_nf_idx_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) + +DEF_HELPER_FLAGS_5(gvec_fmls_nf_idx_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(gvec_fmls_nf_idx_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) + DEF_HELPER_FLAGS_6(gvec_fmla_idx_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_6(gvec_fmla_idx_s, TCG_CALL_NO_RWG, diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index b27b90e1dd8..a973454e4f4 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -1085,7 +1085,7 @@ DO_MLA_IDX(gvec_mls_idx_d, uint64_t, -, ) =20 #undef DO_MLA_IDX =20 -#define DO_FMUL_IDX(NAME, TYPE, H) \ +#define DO_FMUL_IDX(NAME, ADD, TYPE, H) = \ void HELPER(NAME)(void *vd, void *vn, void *vm, void *stat, uint32_t desc)= \ { = \ intptr_t i, j, oprsz =3D simd_oprsz(desc); = \ @@ -1095,16 +1095,33 @@ void HELPER(NAME)(void *vd, void *vn, void *vm, voi= d *stat, uint32_t desc) \ for (i =3D 0; i < oprsz / sizeof(TYPE); i +=3D segment) { = \ TYPE mm =3D m[H(i + idx)]; = \ for (j =3D 0; j < segment; j++) { = \ - d[i + j] =3D TYPE##_mul(n[i + j], mm, stat); = \ + d[i + j] =3D TYPE##_##ADD(d[i + j], = \ + TYPE##_mul(n[i + j], mm, stat), stat);= \ } = \ } = \ clear_tail(d, oprsz, simd_maxsz(desc)); = \ } =20 -DO_FMUL_IDX(gvec_fmul_idx_h, float16, H2) -DO_FMUL_IDX(gvec_fmul_idx_s, float32, H4) -DO_FMUL_IDX(gvec_fmul_idx_d, float64, ) +#define float16_nop(N, M, S) (M) +#define float32_nop(N, M, S) (M) +#define float64_nop(N, M, S) (M) =20 +DO_FMUL_IDX(gvec_fmul_idx_h, nop, float16, H2) +DO_FMUL_IDX(gvec_fmul_idx_s, nop, float32, H4) +DO_FMUL_IDX(gvec_fmul_idx_d, nop, float64, ) + +/* + * Non-fused multiply-accumulate operations, for Neon. NB that unlike + * the fused ops below they assume accumulate both from and into Vd. + */ +DO_FMUL_IDX(gvec_fmla_nf_idx_h, add, float16, H2) +DO_FMUL_IDX(gvec_fmla_nf_idx_s, add, float32, H4) +DO_FMUL_IDX(gvec_fmls_nf_idx_h, sub, float16, H2) +DO_FMUL_IDX(gvec_fmls_nf_idx_s, sub, float32, H4) + +#undef float16_nop +#undef float32_nop +#undef float64_nop #undef DO_FMUL_IDX =20 #define DO_FMLA_IDX(NAME, TYPE, H) = \ --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598641115; cv=none; d=zohomail.com; s=zohoarc; b=Lc4R8ZK0HjYEnmqZL/uF0ZJAsszhbXpqmifLY0Hv77Q6KsUa8JyVbvCxM4voOVOandN2NuLrysGBoe/o1AzMqRvIKJwhwUvrzrLkLLVFqtBknf5X4UuCfBUGh6S7wm7T/6dP1BOl2ZY/46B7UUOCmmbzWinNTV0zdA5VME9ZKfg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598641115; h=Content-Transfer-Encoding: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=HeYlTgG2nVHL2C245Ht4MOVEngVsjvNT2o9I6+aEd/g=; b=h8VA/JACtcJaFg7iYBA6ib9m5uoZaeDU5OA+Ial3oVN6NE2uLO5zwCl54v7Mj5QRKhTRNjMdfmfsBNXZanK1uKimb0kwT//ddTaWyAn5cgkRuhXfegnAFcVvNTI4ijqehT19yHLHVyK0As7TlkIdKpstjh6pRIJmAHUpt0r6DEs= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159864111588210.175790449765714; Fri, 28 Aug 2020 11:58:35 -0700 (PDT) Received: from localhost ([::1]:43834 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBja7-0007zx-40 for importer@patchew.org; Fri, 28 Aug 2020 14:58:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59684) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjDD-0003Y8-Us for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:55 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:39073) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjD9-00068J-3R for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:55 -0400 Received: by mail-wr1-x443.google.com with SMTP id a5so56875wrm.6 for ; Fri, 28 Aug 2020 11:34:50 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:48 -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=HeYlTgG2nVHL2C245Ht4MOVEngVsjvNT2o9I6+aEd/g=; b=DZQWLOB1snAQ7+MVdOHjGG5wlhZXyEV2Y5fDs4OvECl2schG1LumXVlHdHOeCP+g8X dWm70UBx8zpN8rOrfHG4rotrbBI2UQPP2UhC8eFWTZMrpItoZwoiTvOfGgbKoqqmZ13l hoFL+Ody+AMoqTx6PCHt5dsDutx3uFI7ETH83IB1CjjAxUz7tXRwRQLt0esj8Yp+j3c0 qSGFkJNp6j3JqXSg/3HQIS0c3yJvlk4MFdkvdBMGlBstQnXJGIU/jsVYV6baCz5kM78Z 9en1lbXiYhp3DgqRhX01M36cWWFLJs0+hGOE3tUw+mWUeeWlUhnpiroUfvqV68n21frZ 2DHw== 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=HeYlTgG2nVHL2C245Ht4MOVEngVsjvNT2o9I6+aEd/g=; b=Cn3peuiA1+X7FB5GT4iFX42KtaiTa8SZ7l+G5ogK2ULLrqmqZTuvUI1RNRAv+XshgP eYx3X058E6nRWMQw0+iPUglwDoDNZvVAWal/DbGSlImvMWLY6KdfZ2SxZxduu7x1Veuk hjHtyeGmfYQoEPo7UVIT3c7kqmYsMpODigOwXBC9P0HUQMKkk2KQKm2Y/o+MffJfyQCa yV2U4WR3jWaDTAVY+LwSfw+TzkLxHFau5IU4jLEEE6TdlSvY5wNiIOpaBg/c+2BMW0w6 PUAP2mAntYlRGNjqcRVkYJES8U93R/bRY3Qn2PHAr2u5seYDWZY2Pop7eW9PmyXstb4E mOPg== X-Gm-Message-State: AOAM533i/Hs3ciXbyBfPlCI1v6igxAEGHUoEmCzW+1fcK2HXuWW2JYTD rEuUf4zlcO+L9Lx7TSyGxBH8ng== X-Google-Smtp-Source: ABdhPJwz+EvxzcKUgBFcub3FXBA+tkNW6By5kRQn8CULDQoxcFoUF2sx6rHuTfnjB84CensgsT4R9w== X-Received: by 2002:adf:80cb:: with SMTP id 69mr259422wrl.313.1598639689208; Fri, 28 Aug 2020 11:34:49 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 44/45] target/arm: Implement fp16 for Neon VMUL, VMLA, VMLS Date: Fri, 28 Aug 2020 19:33:53 +0100 Message-Id: <20200828183354.27913-45-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::443; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x443.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon floating-point VMUL, VMLA and VMLS to use gvec, and use this to implement fp16 support. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.c.inc | 114 ++++++++++++++++---------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/target/arm/translate-neon.c.inc b/target/arm/translate-neon.c.= inc index e728415c276..f971a5f57ae 100644 --- a/target/arm/translate-neon.c.inc +++ b/target/arm/translate-neon.c.inc @@ -2432,70 +2432,70 @@ static bool trans_VMLS_2sc(DisasContext *s, arg_2sc= alar *a) return do_2scalar(s, a, opfn[a->size], accfn[a->size]); } =20 -/* - * Rather than have a float-specific version of do_2scalar just for - * three insns, we wrap a NeonGenTwoSingleOpFn to turn it into - * a NeonGenTwoOpFn. - */ -#define WRAP_FP_FN(WRAPNAME, FUNC) \ - static void WRAPNAME(TCGv_i32 rd, TCGv_i32 rn, TCGv_i32 rm) \ - { \ - TCGv_ptr fpstatus =3D fpstatus_ptr(FPST_STD); \ - FUNC(rd, rn, rm, fpstatus); \ - tcg_temp_free_ptr(fpstatus); \ +static bool do_2scalar_fp_vec(DisasContext *s, arg_2scalar *a, + gen_helper_gvec_3_ptr *fn) +{ + /* Two registers and a scalar, using gvec */ + int vec_size =3D a->q ? 16 : 8; + int rd_ofs =3D neon_reg_offset(a->vd, 0); + int rn_ofs =3D neon_reg_offset(a->vn, 0); + int rm_ofs; + int idx; + TCGv_ptr fpstatus; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { + return false; } =20 -WRAP_FP_FN(gen_VMUL_F_mul, gen_helper_vfp_muls) -WRAP_FP_FN(gen_VMUL_F_add, gen_helper_vfp_adds) -WRAP_FP_FN(gen_VMUL_F_sub, gen_helper_vfp_subs) + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } =20 -static bool trans_VMUL_F_2sc(DisasContext *s, arg_2scalar *a) -{ - static NeonGenTwoOpFn * const opfn[] =3D { - NULL, - NULL, /* TODO: fp16 support */ - gen_VMUL_F_mul, - NULL, - }; + if (!fn) { + /* Bad size (including size =3D=3D 3, which is a different insn gr= oup) */ + return false; + } =20 - return do_2scalar(s, a, opfn[a->size], NULL); + if (a->q && ((a->vd | a->vn) & 1)) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + /* a->vm is M:Vm, which encodes both register and index */ + idx =3D extract32(a->vm, a->size + 2, 2); + a->vm =3D extract32(a->vm, 0, a->size + 2); + rm_ofs =3D neon_reg_offset(a->vm, 0); + + fpstatus =3D fpstatus_ptr(a->size =3D=3D 1 ? FPST_STD_F16 : FPST_STD); + tcg_gen_gvec_3_ptr(rd_ofs, rn_ofs, rm_ofs, fpstatus, + vec_size, vec_size, idx, fn); + tcg_temp_free_ptr(fpstatus); + return true; } =20 -static bool trans_VMLA_F_2sc(DisasContext *s, arg_2scalar *a) -{ - static NeonGenTwoOpFn * const opfn[] =3D { - NULL, - NULL, /* TODO: fp16 support */ - gen_VMUL_F_mul, - NULL, - }; - static NeonGenTwoOpFn * const accfn[] =3D { - NULL, - NULL, /* TODO: fp16 support */ - gen_VMUL_F_add, - NULL, - }; +#define DO_VMUL_F_2sc(NAME, FUNC) \ + static bool trans_##NAME##_F_2sc(DisasContext *s, arg_2scalar *a) \ + { \ + static gen_helper_gvec_3_ptr * const opfn[] =3D { \ + NULL, \ + gen_helper_##FUNC##_h, \ + gen_helper_##FUNC##_s, \ + NULL, \ + }; \ + if (a->size =3D=3D 1 && !dc_isar_feature(aa32_fp16_arith, s)) { = \ + return false; \ + } \ + return do_2scalar_fp_vec(s, a, opfn[a->size]); \ + } =20 - return do_2scalar(s, a, opfn[a->size], accfn[a->size]); -} - -static bool trans_VMLS_F_2sc(DisasContext *s, arg_2scalar *a) -{ - static NeonGenTwoOpFn * const opfn[] =3D { - NULL, - NULL, /* TODO: fp16 support */ - gen_VMUL_F_mul, - NULL, - }; - static NeonGenTwoOpFn * const accfn[] =3D { - NULL, - NULL, /* TODO: fp16 support */ - gen_VMUL_F_sub, - NULL, - }; - - return do_2scalar(s, a, opfn[a->size], accfn[a->size]); -} +DO_VMUL_F_2sc(VMUL, gvec_fmul_idx) +DO_VMUL_F_2sc(VMLA, gvec_fmla_nf_idx) +DO_VMUL_F_2sc(VMLS, gvec_fmls_nf_idx) =20 WRAP_ENV_FN(gen_VQDMULH_16, gen_helper_neon_qdmulh_s16) WRAP_ENV_FN(gen_VQDMULH_32, gen_helper_neon_qdmulh_s32) --=20 2.20.1 From nobody Sat May 18 16:18:06 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=1598641207; cv=none; d=zohomail.com; s=zohoarc; b=fzar79VnQZhVZlxJro0IVOaLBu2QU5ZOeMIx5zCErEBce5Ws2fbKPRoTXK/1oHWrCaBE7wuAkewF52Czg2B7Vjmk/lfq0AzumGppeEuUinJMx9ctSEia09QQP0atYdZgzX1qIFqkHAXq5o8T9SWZWl9igqMprN/sYDmx+6NnPzY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1598641207; h=Content-Transfer-Encoding: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=TREnSHe4zwXCO3R6kjDkigN6MElrl2moo++OyEa5mKc=; b=NRgJKUdbdBaeXAlFp29hbqavUVr5L3MIDQtJi97GyKRGIJNhT0ZntbjgSyiDKQSGPnhbxZTJuyESOOjVyOitPkvIatmJBYW1rLOenoONa8opd9r7ysKWF/Y0W/p2NxHBD8JbeuabgouDajdA0uxdz40JC+PhsL01dNdnWh9EebM= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1598641207309321.3438972687586; Fri, 28 Aug 2020 12:00:07 -0700 (PDT) Received: from localhost ([::1]:50186 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kBjba-0002BH-CZ for importer@patchew.org; Fri, 28 Aug 2020 15:00:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59686) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kBjDE-0003ZA-6n for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:56 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:32825) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kBjD9-00068c-O8 for qemu-devel@nongnu.org; Fri, 28 Aug 2020 14:34:55 -0400 Received: by mail-wm1-x342.google.com with SMTP id y8so187423wma.0 for ; Fri, 28 Aug 2020 11:34:51 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id s20sm356251wmh.21.2020.08.28.11.34.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2020 11:34:49 -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=TREnSHe4zwXCO3R6kjDkigN6MElrl2moo++OyEa5mKc=; b=jfq+Rl0GI537tIkPzFFZAwjohvmge7gflDWsQo7jXXHGXk2HVCuDNcCDpbW89YFEY0 qWNgJaoS9U96U9Wj3xIQ3P7gOCAifaxlPCZ14Xxogw0nW9aXKXYK4wYmYc6K0AmfGwXG kPsB4Hw/shvv3QwegfhCes/bo2DnDkqzTyGdA9kStzS90Un8p5OI/11ki4s+brH2IAt2 WnmB27jzFiXu0MS6b1Sr0d+sRjLISPNW1IxCLKSwsRwH+8qp/MocfiPDwlf+rGCFU8aU U8KhXVN3E/3z6Muu2QBuYzoRHO+a0rlRv4A9zs1O8x1KZcL1YEVfZLDR0CGDO6dqVHUu HeLg== 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=TREnSHe4zwXCO3R6kjDkigN6MElrl2moo++OyEa5mKc=; b=VeRKweqXsLfaddvb+eX+2a7GdN3zzwg5dQPKNKzsB2dr6m2v4fB4Y3rONtsk17wB0w afiHG6oRh5LIbqqSLj7YSVPwQHZSRhw0izRiGMcl8Yf7jB4AnfCEXoT6qtX+q3TLddAp eMFFl573rh/tIj4l7M+2ZRGZz78xib0ml/zy9Q20TpryuRXq/8xLQ7MSgnPh/0YqRkfc Y76x3t8ihXo5rLU2LR3Sog5OgBKhES20TyQGgUCGrufRjfz2okUnDlpunOsjXZPrFI9t H9lIBBPNbAUg9PyUN0Izx2ZbB4t+RLll4ePWpacSHwk4UywJvgtil/2gHSMh6yZ8uin1 WGOg== X-Gm-Message-State: AOAM530TZ8I9UBnEGKesY186731rU8G/Hpe5TN2cETjVMy3D8TTWgsrV qJYRvhhq9EahKeEhMF/lRtOL/A== X-Google-Smtp-Source: ABdhPJynYt94hYxcodZwKoL3/V2GYBoRRIgRgF6WGQ74+xofxfUqiCQB8c4YvfqyO+QdM7ZFZS/ePQ== X-Received: by 2002:a1c:e1d6:: with SMTP id y205mr42748wmg.92.1598639690466; Fri, 28 Aug 2020 11:34:50 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH v2 45/45] target/arm: Enable FP16 in '-cpu max' Date: Fri, 28 Aug 2020 19:33:54 +0100 Message-Id: <20200828183354.27913-46-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200828183354.27913-1-peter.maydell@linaro.org> References: <20200828183354.27913-1-peter.maydell@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=2a00:1450:4864:20::342; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x342.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Set the MVFR1 ID register FPHP and SIMDHP fields to indicate that our "-cpu max" has v8.2-FP16. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/cpu.c | 3 ++- target/arm/cpu64.c | 10 ++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 6b382fcd60e..c179e0752da 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -2143,7 +2143,8 @@ static void arm_max_initfn(Object *obj) cpu->isar.id_isar6 =3D t; =20 t =3D cpu->isar.mvfr1; - t =3D FIELD_DP32(t, MVFR1, FPHP, 2); /* v8.0 FP support */ + t =3D FIELD_DP32(t, MVFR1, FPHP, 3); /* v8.2-FP16 */ + t =3D FIELD_DP32(t, MVFR1, SIMDHP, 2); /* v8.2-FP16 */ cpu->isar.mvfr1 =3D t; =20 t =3D cpu->isar.mvfr2; diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index dd696183dfb..3c2b3d95993 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -704,12 +704,10 @@ static void aarch64_max_initfn(Object *obj) u =3D FIELD_DP32(u, ID_DFR0, PERFMON, 5); /* v8.4-PMU */ cpu->isar.id_dfr0 =3D u; =20 - /* - * FIXME: We do not yet support ARMv8.2-fp16 for AArch32 yet, - * so do not set MVFR1.FPHP. Strictly speaking this is not legal, - * but it is also not legal to enable SVE without support for FP16, - * and enabling SVE in system mode is more useful in the short ter= m. - */ + u =3D cpu->isar.mvfr1; + u =3D FIELD_DP32(u, MVFR1, FPHP, 3); /* v8.2-FP16 */ + u =3D FIELD_DP32(u, MVFR1, SIMDHP, 2); /* v8.2-FP16 */ + cpu->isar.mvfr1 =3D u; =20 #ifdef CONFIG_USER_ONLY /* For usermode -cpu max we can use a larger and more efficient DCZ --=20 2.20.1