From nobody Wed Oct 29 06:38:51 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 152461964156737.576331883539865; Tue, 24 Apr 2018 18:27:21 -0700 (PDT) Received: from localhost ([::1]:33320 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9DM-0006vF-Oc for importer@patchew.org; Tue, 24 Apr 2018 21:27:20 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55375) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB99N-0003yf-LP for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fB99K-000779-Co for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:13 -0400 Received: from mail-pf0-x242.google.com ([2607:f8b0:400e:c00::242]:42578) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fB99K-00075J-7a for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:10 -0400 Received: by mail-pf0-x242.google.com with SMTP id o16so13743790pfk.9 for ; Tue, 24 Apr 2018 18:23:10 -0700 (PDT) Received: from cloudburst.twiddle.net.com (cpe-76-173-164-138.hawaii.res.rr.com. [76.173.164.138]) by smtp.gmail.com with ESMTPSA id z127sm27767966pfb.72.2018.04.24.18.23.07 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Apr 2018 18:23:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=7hCxfTsMPY3ERXMYGEDirrRU7REZtjUuU95yRA5cF34=; b=h4NZ+ZDOm7B7hntfIb14zPLSn2jaA/RuunJCpYcEtRkxVW7M9YWG1BdWix3WHCXc1R EBiOGpQz5OqbZmL2uLy1UcMwmhl0DCIqMxn0XQwPuMj2pfx+eG7SZXzri0ZkQ/IW2ME+ +2oGTjK0Mv6yA1dOUIt5sYzzzFjRC77zQkT28= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=7hCxfTsMPY3ERXMYGEDirrRU7REZtjUuU95yRA5cF34=; b=O7HCS7dCHzi96tlSPyHLxhFbnbEGof9f9V5AaKFm6pEbq8kGq8jNSeivs8cVlBl/sh bRm9xLZiYim42EWLjuWK5Wjs1SOw4Q15W/ULK69LSmWGlRUjtsbXCL0Y1wXZt895vp37 7mGDMLOJ7HdIEZ7cNaGaR0vD+copY1SImfssswlB+LtXDaFRqvIdOtEn6rES9pJI59VO W6v1ADdaJYkh+aRRbr4KR6Ax8YRLXmVKyTP4yoKLSXDGoieREOivqSeh4kXfnerdY5Kg uI07OKE1Qt4Wjhb1u1a2KcvJ2v6Fg7orFSkaI9Si6uFhuYJjXJrbppVEpjI0/UZakKnL W31g== X-Gm-Message-State: ALQs6tBaSAH2vX7iamsAjPwGulyDhbzvrpns4Ul4pUaQOAu2X1cmPVpT EsuzBgx8xGg+KLzDIxE0NQRD5FjWHNE= X-Google-Smtp-Source: AIpwx4/izWFjRA27n1lLgnqPP1YTlGlcfwVGSFIwqWghubwBQlGMBN1uRoBYdHHn4y7kX6O1gke3og== X-Received: by 10.99.115.28 with SMTP id o28mr21936360pgc.238.1524619388918; Tue, 24 Apr 2018 18:23:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 24 Apr 2018 15:22:52 -1000 Message-Id: <20180425012300.14698-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180425012300.14698-1-richard.henderson@linaro.org> References: <20180425012300.14698-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::242 Subject: [Qemu-devel] [PATCH 1/9] target/arm: Implement vector shifted SCVF/UCVF for fp16 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, alex.bennee@linaro.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" While we have some of the scalar paths for *CVF for fp16, we failed to decode the fp16 version of these instructions. Signed-off-by: Richard Henderson --- target/arm/translate-a64.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index b47319d437..c92e052686 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -7077,13 +7077,26 @@ static void handle_simd_shift_intfp_conv(DisasConte= xt *s, bool is_scalar, int immh, int immb, int opcode, int rn, int rd) { - bool is_double =3D extract32(immh, 3, 1); - int size =3D is_double ? MO_64 : MO_32; - int elements; + int size, elements, fracbits; int immhb =3D immh << 3 | immb; - int fracbits =3D (is_double ? 128 : 64) - immhb; =20 - if (!extract32(immh, 2, 2)) { + if (immh & 8) { + size =3D MO_64; + if (!is_scalar && !is_q) { + unallocated_encoding(s); + return; + } + } else if (immh & 4) { + size =3D MO_32; + } else if (immh & 2) { + size =3D MO_16; + if (!arm_dc_feature(s, ARM_FEATURE_V8_FP16)) { + unallocated_encoding(s); + return; + } + } else { + /* immh =3D=3D 0 would be a failure of the decode logic */ + g_assert(immh =3D=3D 1); unallocated_encoding(s); return; } @@ -7091,20 +7104,14 @@ static void handle_simd_shift_intfp_conv(DisasConte= xt *s, bool is_scalar, if (is_scalar) { elements =3D 1; } else { - elements =3D is_double ? 2 : is_q ? 4 : 2; - if (is_double && !is_q) { - unallocated_encoding(s); - return; - } + elements =3D 8 << is_q >> size; } + fracbits =3D (16 << size) - immhb; =20 if (!fp_access_check(s)) { return; } =20 - /* immh =3D=3D 0 would be a failure of the decode logic */ - g_assert(immh); - handle_simd_intfp_conv(s, rd, rn, elements, !is_u, fracbits, size); } =20 --=20 2.14.3 From nobody Wed Oct 29 06:38:51 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1524619496400489.31640937576753; Tue, 24 Apr 2018 18:24:56 -0700 (PDT) Received: from localhost ([::1]:33305 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9Au-0004sN-1z for importer@patchew.org; Tue, 24 Apr 2018 21:24:48 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55373) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB99N-0003ye-KO for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fB99M-0007CW-2l for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:13 -0400 Received: from mail-pf0-x242.google.com ([2607:f8b0:400e:c00::242]:37596) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fB99L-0007Ai-Ss for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:12 -0400 Received: by mail-pf0-x242.google.com with SMTP id p6so13745898pfn.4 for ; Tue, 24 Apr 2018 18:23:11 -0700 (PDT) Received: from cloudburst.twiddle.net.com (cpe-76-173-164-138.hawaii.res.rr.com. [76.173.164.138]) by smtp.gmail.com with ESMTPSA id z127sm27767966pfb.72.2018.04.24.18.23.09 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Apr 2018 18:23:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=OQzui9EuCc9nQfaD/b7sJPE8M560QcmRDcjPpX30vuA=; b=D/ljD++Jocv+2Cv2kxtC04HPH1FmUTP4xsWSl4R3bAA+Hr2356hh/KEU0qxlgYwzGt y5RYN6QXmPwnaEim6LIwwPBPPxzSfVt2HEpEWL6ajf+TvIN8e1voBXKicxlnc5S+ONiP hoLB4wBgxBM75hpjTTkT8F+mjXNz91uHvOtas= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=OQzui9EuCc9nQfaD/b7sJPE8M560QcmRDcjPpX30vuA=; b=AHYEU4gdHWFrZZWMNsmP3MlFf2at1I+qFv+32iz2B+anx55T9/e/xunFfi+7WTRXNO 40Zll85nMp6CX6+Iyj1PefzZzcnfW1/TlmFZ2NlZ+4gLypAMa/SUN33AVR0yoM7jx1v6 4xY/jOa5BzgP3VZLCoyEDxRm/d6597PmCs/X6sYAQwsGpMT4poGu+I2eI9C2SCLeuwOd d6Mji8LIVuS2egDN5j7Gq+6oD4UBIMaU2cdpmuIcUP0clNsKcCaUAB3Czk4QLUls8sCl LHrzvWDW/+raZ7PWbPU+9F9f8KsWmpjzxYHl3+efOA8mwkzQ+w7s9hWrDpJtFzRm+nBr Keyg== X-Gm-Message-State: ALQs6tCmqJbdMz8S7VYMcA8vq+kn5yafOypA9W7vhgxF7MzDEJfLIG0H MmZC8PxiSmidk4gdj7Ye8OW5FRlIEqM= X-Google-Smtp-Source: AIpwx489X10Jj3GSC3nZOrAmc66oLEm+W3OSghKMw/FnSdaqzcs3fyLLnW1339TsyLJbiFjWQMTtsg== X-Received: by 2002:a17:902:6986:: with SMTP id l6-v6mr27011947plk.209.1524619390695; Tue, 24 Apr 2018 18:23:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 24 Apr 2018 15:22:53 -1000 Message-Id: <20180425012300.14698-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180425012300.14698-1-richard.henderson@linaro.org> References: <20180425012300.14698-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::242 Subject: [Qemu-devel] [PATCH 2/9] target/arm: Implement vector shifted FCVT for fp16 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, alex.bennee@linaro.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" While we have some of the scalar paths for FCVT for fp16, we failed to decode the fp16 version of these instructions. Signed-off-by: Richard Henderson --- target/arm/translate-a64.c | 65 ++++++++++++++++++++++++++++++++----------= ---- 1 file changed, 46 insertions(+), 19 deletions(-) diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index c92e052686..e2d11998bd 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -7120,19 +7120,28 @@ static void handle_simd_shift_fpint_conv(DisasConte= xt *s, bool is_scalar, bool is_q, bool is_u, int immh, int immb, int rn, int r= d) { - bool is_double =3D extract32(immh, 3, 1); int immhb =3D immh << 3 | immb; - int fracbits =3D (is_double ? 128 : 64) - immhb; - int pass; + int pass, size, fracbits; TCGv_ptr tcg_fpstatus; TCGv_i32 tcg_rmode, tcg_shift; =20 - if (!extract32(immh, 2, 2)) { - unallocated_encoding(s); - return; - } - - if (!is_scalar && !is_q && is_double) { + if (immh & 0x8) { + size =3D MO_64; + if (!is_scalar && !is_q) { + unallocated_encoding(s); + return; + } + } else if (immh & 0x4) { + size =3D MO_32; + } else if (immh & 0x2) { + size =3D MO_16; + if (!arm_dc_feature(s, ARM_FEATURE_V8_FP16)) { + unallocated_encoding(s); + return; + } + } else { + /* Should have split out AdvSIMD modified immediate earlier. */ + assert(immh =3D=3D 1); unallocated_encoding(s); return; } @@ -7144,11 +7153,12 @@ static void handle_simd_shift_fpint_conv(DisasConte= xt *s, bool is_scalar, assert(!(is_scalar && is_q)); =20 tcg_rmode =3D tcg_const_i32(arm_rmode_to_sf(FPROUNDING_ZERO)); - tcg_fpstatus =3D get_fpstatus_ptr(false); + tcg_fpstatus =3D get_fpstatus_ptr(size =3D=3D MO_16); gen_helper_set_rmode(tcg_rmode, tcg_rmode, tcg_fpstatus); + fracbits =3D (16 << size) - immhb; tcg_shift =3D tcg_const_i32(fracbits); =20 - if (is_double) { + if (size =3D=3D 3) { int maxpass =3D is_scalar ? 1 : 2; =20 for (pass =3D 0; pass < maxpass; pass++) { @@ -7165,20 +7175,37 @@ static void handle_simd_shift_fpint_conv(DisasConte= xt *s, bool is_scalar, } clear_vec_high(s, is_q, rd); } else { - int maxpass =3D is_scalar ? 1 : is_q ? 4 : 2; + void (*fn)(TCGv_i32, TCGv_i32, TCGv_i32, TCGv_ptr); + int maxpass =3D is_scalar ? 1 : (8 << is_q >> size); + + switch (size) { + case MO_16: + if (is_u) { + fn =3D gen_helper_vfp_toulh; + } else { + fn =3D gen_helper_vfp_toslh; + } + break; + case MO_32: + if (is_u) { + fn =3D gen_helper_vfp_touls; + } else { + fn =3D gen_helper_vfp_tosls; + } + break; + default: + g_assert_not_reached(); + } + for (pass =3D 0; pass < maxpass; pass++) { TCGv_i32 tcg_op =3D tcg_temp_new_i32(); =20 - read_vec_element_i32(s, tcg_op, rn, pass, MO_32); - if (is_u) { - gen_helper_vfp_touls(tcg_op, tcg_op, tcg_shift, tcg_fpstat= us); - } else { - gen_helper_vfp_tosls(tcg_op, tcg_op, tcg_shift, tcg_fpstat= us); - } + read_vec_element_i32(s, tcg_op, rn, pass, size); + fn(tcg_op, tcg_op, tcg_shift, tcg_fpstatus); if (is_scalar) { write_fp_sreg(s, rd, tcg_op); } else { - write_vec_element_i32(s, tcg_op, rd, pass, MO_32); + write_vec_element_i32(s, tcg_op, rd, pass, size); } tcg_temp_free_i32(tcg_op); } --=20 2.14.3 From nobody Wed Oct 29 06:38:51 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1524619496412650.1949645999005; Tue, 24 Apr 2018 18:24:56 -0700 (PDT) Received: from localhost ([::1]:33306 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9Ay-0004w4-1t for importer@patchew.org; Tue, 24 Apr 2018 21:24:52 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55403) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB99P-0003yu-4c for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fB99N-0007HK-SG for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:15 -0400 Received: from mail-pg0-x244.google.com ([2607:f8b0:400e:c05::244]:40445) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fB99N-0007FU-Lm for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:13 -0400 Received: by mail-pg0-x244.google.com with SMTP id e9so12132394pgr.7 for ; Tue, 24 Apr 2018 18:23:13 -0700 (PDT) Received: from cloudburst.twiddle.net.com (cpe-76-173-164-138.hawaii.res.rr.com. [76.173.164.138]) by smtp.gmail.com with ESMTPSA id z127sm27767966pfb.72.2018.04.24.18.23.10 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Apr 2018 18:23:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=HW2lFqjkdeznoEnZz0wGEReab483/vCLPZX1Ws3Xa70=; b=Sp7hZlMDs/U5mktye+I5j7q73ma39bQNztjq3ljHg1VHhm3nkxLMbsLKe5+e7CGRNY fOwV6TFyYaoOXi0lNV4Uag2lpMFn9u9OWuo4teP359AeAX8x1reR+jpefS6Shj7vX936 vRNbyUi6eBx1oOivzb+KPCAK/NBc8KDz/KEZI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=HW2lFqjkdeznoEnZz0wGEReab483/vCLPZX1Ws3Xa70=; b=sTcG75z9CLEML8V/CEkOMSA+hTQ3pLaRM3VI1INirh7EoA8onQFCtZoK5ihaJ46ep/ X4yDNZ8tae7lKbeLIQ45N/OnN4wQLJIdDfvWd/claY/RysIO5mnZOvnN6aattY/z5iXr RGry5irIj5ArxJ0SLE3zp50ddAoGO9lcmAFmtTKcwuGyLFLPVhg4qxadclcCuUn+FBag g9POAb8O81M4R7m82zPNVhsJa6NMCPWyFAh4bA7h0RG+uM+4Rjf1XWw+rSPySOxwos8Y Cjk9Mlz+Z6M6I+x64zQ7K+axOC3S8mhGNlQyr1TXD3W/dMCpPlrCYmF+BDhIdqqPPJFy aymg== X-Gm-Message-State: ALQs6tAD1w+Z1RHiJR4lH85WO1otteBK2e2Vt5Ow3/TEDY0mhCl51E4C cjIv3Dz8i3vnSeI+aHs2lseFiPAcf98= X-Google-Smtp-Source: AIpwx49cOn3SvhoMj7Zim991FBoZeXiK52dZCj5zbCi4wN/ayM/1vxegqY5T6TulkopM3TmvV+3S9A== X-Received: by 10.99.143.22 with SMTP id n22mr21290654pgd.394.1524619392345; Tue, 24 Apr 2018 18:23:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 24 Apr 2018 15:22:54 -1000 Message-Id: <20180425012300.14698-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180425012300.14698-1-richard.henderson@linaro.org> References: <20180425012300.14698-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::244 Subject: [Qemu-devel] [PATCH 3/9] target/arm: Fix float16 to/from int16 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, alex.bennee@linaro.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The instruction "ucvtf v0.4h, v04h, #2", with input 0x8000u, overflows the intermediate float16 to infinity before we have a chance to scale the output. Use float64 as the intermediate type so that no input argument (uint32_t in this case) can overflow or round before scaling. Given the declared argument, the signed int32_t function has the same problem. When converting from float16 to integer, using u/int32_t instead of u/int16_t means that the bounding is incorrect. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e --- target/arm/helper.h | 4 ++-- target/arm/helper.c | 53 ++++++++++++++++++++++++++++++++++++++++++= ++-- target/arm/translate-a64.c | 4 ++-- 3 files changed, 55 insertions(+), 6 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index b3ae394b4f..eafd5d746b 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -149,8 +149,8 @@ DEF_HELPER_3(vfp_toshd_round_to_zero, i64, f64, i32, pt= r) DEF_HELPER_3(vfp_tosld_round_to_zero, i64, f64, i32, ptr) DEF_HELPER_3(vfp_touhd_round_to_zero, i64, f64, i32, ptr) DEF_HELPER_3(vfp_tould_round_to_zero, i64, f64, i32, ptr) -DEF_HELPER_3(vfp_toulh, i32, f16, i32, ptr) -DEF_HELPER_3(vfp_toslh, i32, f16, i32, ptr) +DEF_HELPER_3(vfp_touhh, i32, f16, i32, ptr) +DEF_HELPER_3(vfp_toshh, i32, f16, i32, ptr) DEF_HELPER_3(vfp_toshs, i32, f32, i32, ptr) DEF_HELPER_3(vfp_tosls, i32, f32, i32, ptr) DEF_HELPER_3(vfp_tosqs, i64, f32, i32, ptr) diff --git a/target/arm/helper.c b/target/arm/helper.c index ea09510599..743f34bd0a 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -11409,11 +11409,60 @@ 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_A64(sl, h, 16, 32, int32) -VFP_CONV_FIX_A64(ul, h, 16, 32, uint32) + #undef VFP_CONV_FIX #undef VFP_CONV_FIX_FLOAT #undef VFP_CONV_FLOAT_FIX_ROUND +#undef VFP_CONV_FIX_A64 + +/* Conversion to/from f16 can overflow to infinity before/after scaling. + * Therefore we convert to f64 (which does not round), scale, + * and then convert f64 to f16 (which may round). + */ + +static float16 do_postscale_fp16(float64 f, int shift, float_status *fpst) +{ + return float64_to_float16(float64_scalbn(f, -shift, fpst), true, fpst); +} + +float16 HELPER(vfp_sltoh)(uint32_t x, uint32_t shift, void *fpst) +{ + return do_postscale_fp16(int32_to_float64(x, fpst), shift, fpst); +} + +float16 HELPER(vfp_ultoh)(uint32_t x, uint32_t shift, void *fpst) +{ + return do_postscale_fp16(uint32_to_float64(x, fpst), shift, fpst); +} + +static float64 do_prescale_fp16(float16 f, int shift, float_status *fpst) +{ + if (unlikely(float16_is_any_nan(f))) { + float_raise(float_flag_invalid, fpst); + return 0; + } else { + int old_exc_flags =3D get_float_exception_flags(fpst); + float64 ret; + + ret =3D float16_to_float64(f, true, fpst); + ret =3D float64_scalbn(ret, shift, fpst); + old_exc_flags |=3D get_float_exception_flags(fpst) + & float_flag_input_denormal; + set_float_exception_flags(old_exc_flags, fpst); + + return ret; + } +} + +uint32_t HELPER(vfp_toshh)(float16 x, uint32_t shift, void *fpst) +{ + return float64_to_int16(do_prescale_fp16(x, shift, fpst), fpst); +} + +uint32_t HELPER(vfp_touhh)(float16 x, uint32_t shift, void *fpst) +{ + return float64_to_uint16(do_prescale_fp16(x, shift, fpst), fpst); +} =20 /* Set the current fp rounding mode and return the old one. * The argument is a softfloat float_round_ value. diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index e2d11998bd..b27892d971 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -7181,9 +7181,9 @@ static void handle_simd_shift_fpint_conv(DisasContext= *s, bool is_scalar, switch (size) { case MO_16: if (is_u) { - fn =3D gen_helper_vfp_toulh; + fn =3D gen_helper_vfp_touhh; } else { - fn =3D gen_helper_vfp_toslh; + fn =3D gen_helper_vfp_toshh; } break; case MO_32: --=20 2.14.3 From nobody Wed Oct 29 06:38:51 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1524619773068336.983835837686; Tue, 24 Apr 2018 18:29:33 -0700 (PDT) Received: from localhost ([::1]:33332 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9FU-0000to-9d for importer@patchew.org; Tue, 24 Apr 2018 21:29:32 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55431) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB99Q-0003zI-GP for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fB99P-0007MA-Km for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:16 -0400 Received: from mail-pf0-x241.google.com ([2607:f8b0:400e:c00::241]:35737) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fB99P-0007KO-Ek for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:15 -0400 Received: by mail-pf0-x241.google.com with SMTP id j5so13752383pfh.2 for ; Tue, 24 Apr 2018 18:23:15 -0700 (PDT) Received: from cloudburst.twiddle.net.com (cpe-76-173-164-138.hawaii.res.rr.com. [76.173.164.138]) by smtp.gmail.com with ESMTPSA id z127sm27767966pfb.72.2018.04.24.18.23.12 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Apr 2018 18:23:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=dL2miW0YX+WWgqckHfvEpiy8jFMD8QTEnJmbhMgwTfU=; b=jk4rr88hvWI6OjFTBppO4DiMDVN+t84qNyWOWJO1XTy6QFh4eiSxx/Jzjavm+jKQgQ B4ITygZ99Sg4CWZ/b7ZZGnq/QSuEUTm1+uJZtm/wvIps7Fh0psUrIpktGKcAx2NJWY5c a21S/4OqldeLI9w5xpJd5vkcr/MtP/bbi4jaA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=dL2miW0YX+WWgqckHfvEpiy8jFMD8QTEnJmbhMgwTfU=; b=HTeGF8EEnz2TipXcS+UalDr//DXkAwzrOrYozihzJbJcvd61oMkpbAgMSGrtjc5f51 ZKD0LeR5vg+B/Ymzu0aRqptRrGwYXcSnq6iRI9XzxWxUpXpVhmaRXYWeOR7k+QhG8HFr e29NAE9awJhTDROPJs8Zb4/qm774c/SGffffR/C+eySo52FDyq+fXvUOjmNTKCwRjiVz pkakRWJooijZV4GcsMS2AqXmpkNfV46PMlSKyhMr6bMuLpyzAu4dHhGH0sx/gPbaseLX cn6DOu/dxPeJzjn9wui07FATjr28gOcZkbDHP2P9Z4QF7GuBUbjJUKcQjglGHFf7n9eD PVgQ== X-Gm-Message-State: ALQs6tAmD1ZoUoa4wOvDN1adM+B/AkxSbU4gAMo+oEgz8GnMS6Ma/5BH 8wiSf3Og2LMiXvNxXMnAUIiZazljsHU= X-Google-Smtp-Source: AIpwx4/3pA61Af4VoeueFiwbdomSVfRm0PTxbgMJFUPh13ihknDhZ6vjTu1krIXWRUwA9B6OUlKKmA== X-Received: by 10.98.214.218 with SMTP id a87mr21648027pfl.200.1524619394076; Tue, 24 Apr 2018 18:23:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 24 Apr 2018 15:22:55 -1000 Message-Id: <20180425012300.14698-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180425012300.14698-1-richard.henderson@linaro.org> References: <20180425012300.14698-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::241 Subject: [Qemu-devel] [PATCH 4/9] target/arm: Clear SVE high bits for FMOV X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, alex.bennee@linaro.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use write_fp_dreg and clear_vec_high to zero the bits that need zeroing for these cases. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e --- target/arm/translate-a64.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index b27892d971..f2241d8174 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -5356,31 +5356,24 @@ static void handle_fmov(DisasContext *s, int rd, in= t rn, int type, bool itof) =20 if (itof) { TCGv_i64 tcg_rn =3D cpu_reg(s, rn); + TCGv_i64 tmp; =20 switch (type) { case 0: - { /* 32 bit */ - TCGv_i64 tmp =3D tcg_temp_new_i64(); + tmp =3D tcg_temp_new_i64(); tcg_gen_ext32u_i64(tmp, tcg_rn); - tcg_gen_st_i64(tmp, cpu_env, fp_reg_offset(s, rd, MO_64)); - tcg_gen_movi_i64(tmp, 0); - tcg_gen_st_i64(tmp, cpu_env, fp_reg_hi_offset(s, rd)); + write_fp_dreg(s, rd, tmp); tcg_temp_free_i64(tmp); break; - } case 1: - { /* 64 bit */ - TCGv_i64 tmp =3D tcg_const_i64(0); - tcg_gen_st_i64(tcg_rn, cpu_env, fp_reg_offset(s, rd, MO_64)); - tcg_gen_st_i64(tmp, cpu_env, fp_reg_hi_offset(s, rd)); - tcg_temp_free_i64(tmp); + write_fp_dreg(s, rd, tcg_rn); break; - } case 2: /* 64 bit to top half. */ tcg_gen_st_i64(tcg_rn, cpu_env, fp_reg_hi_offset(s, rd)); + clear_vec_high(s, true, rd); break; } } else { --=20 2.14.3 From nobody Wed Oct 29 06:38:51 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1524619645624975.1922496892786; Tue, 24 Apr 2018 18:27:25 -0700 (PDT) Received: from localhost ([::1]:33321 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9DQ-0006zp-NL for importer@patchew.org; Tue, 24 Apr 2018 21:27:24 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55448) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB99S-00041C-7N for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fB99R-0007PT-8s for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:18 -0400 Received: from mail-pf0-x242.google.com ([2607:f8b0:400e:c00::242]:34310) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fB99R-0007Ob-2B for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:17 -0400 Received: by mail-pf0-x242.google.com with SMTP id a14so3243592pfi.1 for ; Tue, 24 Apr 2018 18:23:16 -0700 (PDT) Received: from cloudburst.twiddle.net.com (cpe-76-173-164-138.hawaii.res.rr.com. [76.173.164.138]) by smtp.gmail.com with ESMTPSA id z127sm27767966pfb.72.2018.04.24.18.23.14 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Apr 2018 18:23:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=K23IM9LkWimzPkzISbK/yu164bpvhZx2QuR/EggjLws=; b=Onp26xMemyBrKPEI//Clzlq5Q5ZHK9Lrf/3WSJo7xCN2lOhgHM9kRPeg2uqIt0WPBE 2SDc3cJAxjCDs+KVLn0zo8jd8Vy11sESkSien8oxVvWumaOJdeXIMu4HTRbcGrsRXUKc zkm7UB+4GslZB+vJ+NWBrukuM+e7rPbQfXZpk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=K23IM9LkWimzPkzISbK/yu164bpvhZx2QuR/EggjLws=; b=d43W+K8i+kjA6F9dcObD+IA6KX3GW3/lnqMs28STcbtWI/SNQWIr1inYqp0iP5S+Qg dV7MQXDtrBdFOxi7//WugcrM89lkJSVM1JBi8blJj9p8QEtJ3ujQ1U72MN001uU6lYLT WGGr1dLBuvHfMZgBIewJ22sdsOXM1PF6CPqUNC1743OrLXP70l0qAgcRKxHKfNwnC+43 PN33s5FOR1xwkqB/JPEbXybHit4GKic3TYZ09al6EMG6vwm98M0nXEq2yH2No8SLEwwG aYwczoqM/YQLSCly/6/25eFJiQqgbTd/lSRT2AfX49mORDCf0pfcdXBG4MN1tn8z/PIb /ENg== X-Gm-Message-State: ALQs6tA6bTxwupi2YZeBavpo9xFemuz2y7KqIdwX8YmzxcVvnEP2eeFr VVb8IoiwoCq9j/I9RWegPOOlrL6mrY8= X-Google-Smtp-Source: AB8JxZq8goVb9SfIO15z+w8OhJkfLtyER4Uu7IDA+JLGrHFzaQtJjoIz/iJ8ohuaXbAJeaPXGD3mJQ== X-Received: by 10.98.182.16 with SMTP id j16mr2976240pff.17.1524619395840; Tue, 24 Apr 2018 18:23:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 24 Apr 2018 15:22:56 -1000 Message-Id: <20180425012300.14698-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180425012300.14698-1-richard.henderson@linaro.org> References: <20180425012300.14698-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::242 Subject: [Qemu-devel] [PATCH 5/9] target/arm: Implement FMOV (general) for fp16 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, alex.bennee@linaro.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Adding the fp16 moves to/from general registers. Signed-off-by: Richard Henderson --- target/arm/translate-a64.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index f2241d8174..36bb5f6f08 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -5375,6 +5375,15 @@ static void handle_fmov(DisasContext *s, int rd, int= rn, int type, bool itof) tcg_gen_st_i64(tcg_rn, cpu_env, fp_reg_hi_offset(s, rd)); clear_vec_high(s, true, rd); break; + case 3: + /* 16 bit */ + tmp =3D tcg_temp_new_i64(); + tcg_gen_ext16u_i64(tmp, tcg_rn); + write_fp_dreg(s, rd, tmp); + tcg_temp_free_i64(tmp); + break; + default: + g_assert_not_reached(); } } else { TCGv_i64 tcg_rd =3D cpu_reg(s, rd); @@ -5392,6 +5401,12 @@ static void handle_fmov(DisasContext *s, int rd, int= rn, int type, bool itof) /* 64 bits from top half */ tcg_gen_ld_i64(tcg_rd, cpu_env, fp_reg_hi_offset(s, rn)); break; + case 3: + /* 16 bit */ + tcg_gen_ld16u_i64(tcg_rd, cpu_env, fp_reg_offset(s, rn, MO_16)= ); + break; + default: + g_assert_not_reached(); } } } @@ -5431,10 +5446,15 @@ static void disas_fp_int_conv(DisasContext *s, uint= 32_t insn) case 0xa: /* 64 bit */ case 0xd: /* 64 bit to top half of quad */ break; + case 0x6: /* 16-bit */ + if (arm_dc_feature(s, ARM_FEATURE_V8_FP16)) { + break; + } + /* fallthru */ default: /* all other sf/type/rmode combinations are invalid */ unallocated_encoding(s); - break; + return; } =20 if (!fp_access_check(s)) { --=20 2.14.3 From nobody Wed Oct 29 06:38:51 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1524619776099169.45129502905684; Tue, 24 Apr 2018 18:29:36 -0700 (PDT) Received: from localhost ([::1]:33333 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9FX-0000w9-9t for importer@patchew.org; Tue, 24 Apr 2018 21:29:35 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55478) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB99Y-00046n-2U for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fB99T-0007Sw-47 for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:24 -0400 Received: from mail-pg0-x244.google.com ([2607:f8b0:400e:c05::244]:40446) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fB99S-0007Rc-Rq for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:19 -0400 Received: by mail-pg0-x244.google.com with SMTP id e9so12132571pgr.7 for ; Tue, 24 Apr 2018 18:23:18 -0700 (PDT) Received: from cloudburst.twiddle.net.com (cpe-76-173-164-138.hawaii.res.rr.com. [76.173.164.138]) by smtp.gmail.com with ESMTPSA id z127sm27767966pfb.72.2018.04.24.18.23.15 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Apr 2018 18:23:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=dtO9o5DCD7E8OE0HysmEWodrMlId7UVZQxMnf9O+Zug=; b=LK+B9ioWU6DboWPFudmu94LszGhwsiG9RoRNIrEUW8rDKkoppWDofzZTRHoLsh+Ijw KRETP7M3tugaLl6abPCwfvUgTN7Mtc97emb4p8aAMyCnpwjaCSI/wtOqCRIAKryW/wZG wtYA8Zrxckm/Ki4QZeA5hNb71+toL4XX1DEd8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=dtO9o5DCD7E8OE0HysmEWodrMlId7UVZQxMnf9O+Zug=; b=JLpdtktK5Rz13gM351oYqrt/t5AuOlWe4DSlbXf9bO4pdjTGFkaJi8YCoWoOftTT9g iKFHI5QTEHU/jLIb1RtWHvtV64Fs2k90k3GGO97xzDNegPC1tr2cq9Pljo+JFJDq4FIi 1V9jRhn5/uQS/yB+Q4mKM6Tm8/LfEp53a5IaEDklAvN/YzQXnzRGSf7l3NlsZi0ji5Jw RIyevIxx2IhhRhJ6HQ/9Q2L8u+9ZOUmKpmGp9wihX/Gbp4rHzU9Qe0xnuMu7PykDZ9m/ jJtFf/dRaB9eCIQ3gTCjUo7/DU4abAOSaViq/8is6ch2ZBPC237FbKDjxQ3t+6axAbnr 1xsQ== X-Gm-Message-State: ALQs6tA1guzuyjI4fDR3aZeElgV/8qSBjdXPeIyfrwz0Gn2B92k5ACQ9 plVkgs+MIsNN2koAZk52ArsRO3RFKDw= X-Google-Smtp-Source: AIpwx48N7j+t5v/oJVLpYkiZwwwORqJL87Iwa5mfoAqTVVnFV7emVaD6coRmbM1pXwIKJb2JYU7dtA== X-Received: by 10.98.60.209 with SMTP id b78mr18396046pfk.44.1524619397571; Tue, 24 Apr 2018 18:23:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 24 Apr 2018 15:22:57 -1000 Message-Id: <20180425012300.14698-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180425012300.14698-1-richard.henderson@linaro.org> References: <20180425012300.14698-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::244 Subject: [Qemu-devel] [PATCH 6/9] target/arm: Implement FCVT (scalar, integer) for fp16 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, alex.bennee@linaro.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e --- target/arm/helper.h | 6 +++ target/arm/helper.c | 38 +++++++++++++++++- target/arm/translate-a64.c | 96 ++++++++++++++++++++++++++++++++++++++----= ---- 3 files changed, 122 insertions(+), 18 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index eafd5d746b..f494b10f1b 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -151,6 +151,10 @@ DEF_HELPER_3(vfp_touhd_round_to_zero, i64, f64, i32, p= tr) DEF_HELPER_3(vfp_tould_round_to_zero, i64, f64, i32, ptr) DEF_HELPER_3(vfp_touhh, i32, f16, i32, ptr) DEF_HELPER_3(vfp_toshh, i32, f16, i32, ptr) +DEF_HELPER_3(vfp_toulh, i32, f16, i32, ptr) +DEF_HELPER_3(vfp_toslh, i32, f16, i32, ptr) +DEF_HELPER_3(vfp_touqh, i64, f16, i32, ptr) +DEF_HELPER_3(vfp_tosqh, i64, f16, i32, ptr) DEF_HELPER_3(vfp_toshs, i32, f32, i32, ptr) DEF_HELPER_3(vfp_tosls, i32, f32, i32, ptr) DEF_HELPER_3(vfp_tosqs, i64, f32, i32, ptr) @@ -177,6 +181,8 @@ DEF_HELPER_3(vfp_ultod, f64, i64, i32, ptr) DEF_HELPER_3(vfp_uqtod, f64, i64, 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) +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) diff --git a/target/arm/helper.c b/target/arm/helper.c index 743f34bd0a..dbc10b454a 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -11416,8 +11416,12 @@ VFP_CONV_FIX_A64(uq, s, 32, 64, uint64) #undef VFP_CONV_FIX_A64 =20 /* Conversion to/from f16 can overflow to infinity before/after scaling. - * Therefore we convert to f64 (which does not round), scale, - * and then convert f64 to f16 (which may round). + * Therefore we convert to f64, scale, and then convert f64 to f16; or + * vice versa for conversion to integer. + * + * For 16- and 32-bit integers, the conversion to f64 never rounds. + * For 64-bit integers, any integer that would cause rounding will also + * overflow to f16 infinity, so there is no double rounding problem. */ =20 static float16 do_postscale_fp16(float64 f, int shift, float_status *fpst) @@ -11435,6 +11439,16 @@ float16 HELPER(vfp_ultoh)(uint32_t x, uint32_t shi= ft, void *fpst) return do_postscale_fp16(uint32_to_float64(x, fpst), shift, fpst); } =20 +float16 HELPER(vfp_sqtoh)(uint64_t x, uint32_t shift, void *fpst) +{ + return do_postscale_fp16(int64_to_float64(x, fpst), shift, fpst); +} + +float16 HELPER(vfp_uqtoh)(uint64_t x, uint32_t shift, void *fpst) +{ + return do_postscale_fp16(uint64_to_float64(x, fpst), shift, fpst); +} + static float64 do_prescale_fp16(float16 f, int shift, float_status *fpst) { if (unlikely(float16_is_any_nan(f))) { @@ -11464,6 +11478,26 @@ uint32_t HELPER(vfp_touhh)(float16 x, uint32_t shi= ft, void *fpst) return float64_to_uint16(do_prescale_fp16(x, shift, fpst), fpst); } =20 +uint32_t HELPER(vfp_toslh)(float16 x, uint32_t shift, void *fpst) +{ + return float64_to_int32(do_prescale_fp16(x, shift, fpst), fpst); +} + +uint32_t HELPER(vfp_toulh)(float16 x, uint32_t shift, void *fpst) +{ + return float64_to_uint32(do_prescale_fp16(x, shift, fpst), fpst); +} + +uint64_t HELPER(vfp_tosqh)(float16 x, uint32_t shift, void *fpst) +{ + return float64_to_int64(do_prescale_fp16(x, shift, fpst), fpst); +} + +uint64_t HELPER(vfp_touqh)(float16 x, uint32_t shift, void *fpst) +{ + return float64_to_uint64(do_prescale_fp16(x, shift, fpst), fpst); +} + /* Set the current fp rounding mode and return the old one. * The argument is a softfloat float_round_ value. */ diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 36bb5f6f08..4f6317aa0f 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -5186,11 +5186,11 @@ static void handle_fpfpcvt(DisasContext *s, int rd,= int rn, int opcode, bool itof, int rmode, int scale, int sf, int ty= pe) { bool is_signed =3D !(opcode & 1); - bool is_double =3D type; TCGv_ptr tcg_fpstatus; - TCGv_i32 tcg_shift; + TCGv_i32 tcg_shift, tcg_single; + TCGv_i64 tcg_double; =20 - tcg_fpstatus =3D get_fpstatus_ptr(false); + tcg_fpstatus =3D get_fpstatus_ptr(type =3D=3D 3); =20 tcg_shift =3D tcg_const_i32(64 - scale); =20 @@ -5208,8 +5208,9 @@ static void handle_fpfpcvt(DisasContext *s, int rd, i= nt rn, int opcode, tcg_int =3D tcg_extend; } =20 - if (is_double) { - TCGv_i64 tcg_double =3D tcg_temp_new_i64(); + switch (type) { + case 1: /* float64 */ + tcg_double =3D tcg_temp_new_i64(); if (is_signed) { gen_helper_vfp_sqtod(tcg_double, tcg_int, tcg_shift, tcg_fpstatus); @@ -5219,8 +5220,10 @@ static void handle_fpfpcvt(DisasContext *s, int rd, = int rn, int opcode, } write_fp_dreg(s, rd, tcg_double); tcg_temp_free_i64(tcg_double); - } else { - TCGv_i32 tcg_single =3D tcg_temp_new_i32(); + break; + + case 0: /* float32 */ + tcg_single =3D tcg_temp_new_i32(); if (is_signed) { gen_helper_vfp_sqtos(tcg_single, tcg_int, tcg_shift, tcg_fpstatus); @@ -5230,6 +5233,23 @@ static void handle_fpfpcvt(DisasContext *s, int rd, = int rn, int opcode, } write_fp_sreg(s, rd, tcg_single); tcg_temp_free_i32(tcg_single); + break; + + case 3: /* float16 */ + tcg_single =3D tcg_temp_new_i32(); + if (is_signed) { + gen_helper_vfp_sqtoh(tcg_single, tcg_int, + tcg_shift, tcg_fpstatus); + } else { + gen_helper_vfp_uqtoh(tcg_single, tcg_int, + tcg_shift, tcg_fpstatus); + } + write_fp_sreg(s, rd, tcg_single); + tcg_temp_free_i32(tcg_single); + break; + + default: + g_assert_not_reached(); } } else { TCGv_i64 tcg_int =3D cpu_reg(s, rd); @@ -5246,8 +5266,9 @@ static void handle_fpfpcvt(DisasContext *s, int rd, i= nt rn, int opcode, =20 gen_helper_set_rmode(tcg_rmode, tcg_rmode, tcg_fpstatus); =20 - if (is_double) { - TCGv_i64 tcg_double =3D read_fp_dreg(s, rn); + switch (type) { + case 1: /* float64 */ + tcg_double =3D read_fp_dreg(s, rn); if (is_signed) { if (!sf) { gen_helper_vfp_tosld(tcg_int, tcg_double, @@ -5265,9 +5286,14 @@ static void handle_fpfpcvt(DisasContext *s, int rd, = int rn, int opcode, tcg_shift, tcg_fpstatus); } } + if (!sf) { + tcg_gen_ext32u_i64(tcg_int, tcg_int); + } tcg_temp_free_i64(tcg_double); - } else { - TCGv_i32 tcg_single =3D read_fp_sreg(s, rn); + break; + + case 0: /* float32 */ + tcg_single =3D read_fp_sreg(s, rn); if (sf) { if (is_signed) { gen_helper_vfp_tosqs(tcg_int, tcg_single, @@ -5289,14 +5315,39 @@ static void handle_fpfpcvt(DisasContext *s, int rd,= int rn, int opcode, tcg_temp_free_i32(tcg_dest); } tcg_temp_free_i32(tcg_single); + break; + + case 3: /* float16 */ + tcg_single =3D read_fp_sreg(s, rn); + if (sf) { + if (is_signed) { + gen_helper_vfp_tosqh(tcg_int, tcg_single, + tcg_shift, tcg_fpstatus); + } else { + gen_helper_vfp_touqh(tcg_int, tcg_single, + tcg_shift, tcg_fpstatus); + } + } else { + TCGv_i32 tcg_dest =3D tcg_temp_new_i32(); + if (is_signed) { + gen_helper_vfp_toslh(tcg_dest, tcg_single, + tcg_shift, tcg_fpstatus); + } else { + gen_helper_vfp_toulh(tcg_dest, tcg_single, + tcg_shift, tcg_fpstatus); + } + tcg_gen_extu_i32_i64(tcg_int, tcg_dest); + tcg_temp_free_i32(tcg_dest); + } + tcg_temp_free_i32(tcg_single); + break; + + default: + g_assert_not_reached(); } =20 gen_helper_set_rmode(tcg_rmode, tcg_rmode, tcg_fpstatus); tcg_temp_free_i32(tcg_rmode); - - if (!sf) { - tcg_gen_ext32u_i64(tcg_int, tcg_int); - } } =20 tcg_temp_free_ptr(tcg_fpstatus); @@ -5465,7 +5516,20 @@ static void disas_fp_int_conv(DisasContext *s, uint3= 2_t insn) /* actual FP conversions */ bool itof =3D extract32(opcode, 1, 1); =20 - if (type > 1 || (rmode !=3D 0 && opcode > 1)) { + if (rmode !=3D 0 && opcode > 1) { + unallocated_encoding(s); + return; + } + switch (type) { + case 0: /* float32 */ + case 1: /* float64 */ + break; + case 3: /* float16 */ + if (arm_dc_feature(s, ARM_FEATURE_V8_FP16)) { + break; + } + /* fallthru */ + default: unallocated_encoding(s); return; } --=20 2.14.3 From nobody Wed Oct 29 06:38:51 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1524619883485470.13242274333277; Tue, 24 Apr 2018 18:31:23 -0700 (PDT) Received: from localhost ([::1]:33348 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9HG-0002BW-GM for importer@patchew.org; Tue, 24 Apr 2018 21:31:22 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55476) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB99Y-00046l-2D for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fB99U-0007Uw-Sg for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:24 -0400 Received: from mail-pg0-x242.google.com ([2607:f8b0:400e:c05::242]:33565) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fB99U-0007U9-Li for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:20 -0400 Received: by mail-pg0-x242.google.com with SMTP id i194so12140107pgd.0 for ; Tue, 24 Apr 2018 18:23:20 -0700 (PDT) Received: from cloudburst.twiddle.net.com (cpe-76-173-164-138.hawaii.res.rr.com. [76.173.164.138]) by smtp.gmail.com with ESMTPSA id z127sm27767966pfb.72.2018.04.24.18.23.17 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Apr 2018 18:23:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=G737kt/S5OrmE3LHlBoTNTT6qSAVbYh6VUnHdxp5Ajs=; b=gnfAGaALw4hHglsrpa0GLGcspaKZkpjSV4/CtF36szuu217/uoaH/NMLxXT+qMxWnO quCFWjitdDKOpFpiUzHF/XoQeFSaLlaZ1MQqTEDQ83q6yqCJJQZU6D2mubw4wfnUDvvZ LnWf63Hb7VKywJ/YDn+I+5gBgtaQCFb5TgbTc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=G737kt/S5OrmE3LHlBoTNTT6qSAVbYh6VUnHdxp5Ajs=; b=cKpFUZ7Y8JlnRQ35tM3xS2n8mXDy8TlcT6cF9CjI2DPfs+P7XyQEiCwmbouyF23XSP Bn1+vSm1Z2G/1WfYxTP52mborZpHFLEzdnHhezAUyQGv3tDSZDiQRoo+VZB/80ECmycj wuW6+B5LziVMlHwo+D6pi/yavIEs6D2VTySWd6bjt8BMUlLxFmUPIhfOYgTZHgin0FBr f/w713lWpSk9DfFTPLqEbRio2Tv5HqTfinB3FLNlj7nWdHCTJBQ0wR8kS1BPP1O0Jr4B MkwPK3itxozc/jiqYtI8h6eCmSeKhOtGK0jK5ySW5zrsYNs18IpNX7cUlOYoRmCTN1gJ OCQg== X-Gm-Message-State: ALQs6tDMk6MACT61XpAyswE3V9TLCHVXaCVtjwyF9M52cFHBwcmse4OB PdXMTirfxFHBjmGvOdRlmXLrxWIWtR4= X-Google-Smtp-Source: AIpwx48DHafXzE9IJ4rTghDOglDMi0gy1zmPzvR1BIMfO8aE7giDR4rE8Bb3bZQTX7jFm2H44bnuUA== X-Received: by 10.99.145.196 with SMTP id l187mr21979569pge.261.1524619399321; Tue, 24 Apr 2018 18:23:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 24 Apr 2018 15:22:58 -1000 Message-Id: <20180425012300.14698-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180425012300.14698-1-richard.henderson@linaro.org> References: <20180425012300.14698-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::242 Subject: [Qemu-devel] [PATCH 7/9] target/arm: Implement FCVT (scalar, fixed-point) for fp16 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, alex.bennee@linaro.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e --- target/arm/translate-a64.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 4f6317aa0f..794ede7222 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -5372,8 +5372,7 @@ static void disas_fp_fixed_conv(DisasContext *s, uint= 32_t insn) bool sf =3D extract32(insn, 31, 1); bool itof; =20 - if (sbit || (type > 1) - || (!sf && scale < 32)) { + if (sbit || (!sf && scale < 32)) { unallocated_encoding(s); return; } @@ -5392,6 +5391,20 @@ static void disas_fp_fixed_conv(DisasContext *s, uin= t32_t insn) return; } =20 + switch (type) { + case 0: /* float32 */ + case 1: /* float64 */ + break; + case 3: /* float16 */ + if (arm_dc_feature(s, ARM_FEATURE_V8_FP16)) { + break; + } + /* fallthru */ + default: + unallocated_encoding(s); + return; + } + if (!fp_access_check(s)) { return; } --=20 2.14.3 From nobody Wed Oct 29 06:38:51 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1524619698318792.5253191814182; Tue, 24 Apr 2018 18:28:18 -0700 (PDT) Received: from localhost ([::1]:33323 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9EH-0007wh-Do for importer@patchew.org; Tue, 24 Apr 2018 21:28:17 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55477) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB99Y-00046m-2Q for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fB99W-0007Wm-KN for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:24 -0400 Received: from mail-pf0-x243.google.com ([2607:f8b0:400e:c00::243]:34312) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fB99W-0007W1-DX for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:22 -0400 Received: by mail-pf0-x243.google.com with SMTP id a14so3243818pfi.1 for ; Tue, 24 Apr 2018 18:23:22 -0700 (PDT) Received: from cloudburst.twiddle.net.com (cpe-76-173-164-138.hawaii.res.rr.com. [76.173.164.138]) by smtp.gmail.com with ESMTPSA id z127sm27767966pfb.72.2018.04.24.18.23.19 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Apr 2018 18:23:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8opmoPXOJ8uXBYz3POcElJbVpN+z1Cw+TI2+idGCP4k=; b=KWbUbQ778jV6KTtE3go6H8r8mV7AtmaAZ1pmhdyugAa7as+zO8BhHZqhZDN/neXusN fZTmpn69usYwBFl3tcHNeY0T/kKwwHQV3RqhQEgwAU5vNza8N23eV3wznczkWLoQL/rb UCR8fq/syJabN2h67rcp/I/+g/219pKPpbs44= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8opmoPXOJ8uXBYz3POcElJbVpN+z1Cw+TI2+idGCP4k=; b=aj5/Q8AChpKc6s0kGTjwvR2o6J1ZN5Rsg4wnHo3x80I9LR3ngMeby8CYQFqJCb4lhY oQiYgxc4X1y+5JW9/Wpr2LZs3BrKT4vOhe0Ed4kpqyBtbByNfiHZTa6yV6MpafoXUUXu OZ4dtLlr1KNDoKMOyHxvlG33Cqb/sXyMALtE2lR1B5vbZW6XbwcxQm/gYb3u3ea3W4TS ZghGoExp4fJ7LRVAIYwoJIlnDjS1dwee/g/RdEOQrhUEkYqoW+gqhdT68zGw5zO8xokY WuXlwWaz1XnXPuBslQEsUoszUCHrDqyTsN02L2LBPZ/E6aQs5sbZKV4szHxEBp1l00Bu da4Q== X-Gm-Message-State: ALQs6tAPDp3y0fZYiCmEccbqMQCGXOfB+NnOBihOGV6/d1fOCiacRYKx MwtFUljkQPfjWFwsSXXanWCCWrYvY6Q= X-Google-Smtp-Source: AIpwx4+ffX1iHOfku4ON3He7jDH+uNsjawXUVo9BpRQGo4NfcUL9k1xO+WNsm5t3/rxaxWbgixh5Zw== X-Received: by 10.99.176.8 with SMTP id h8mr21988232pgf.448.1524619401084; Tue, 24 Apr 2018 18:23:21 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 24 Apr 2018 15:22:59 -1000 Message-Id: <20180425012300.14698-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180425012300.14698-1-richard.henderson@linaro.org> References: <20180425012300.14698-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::243 Subject: [Qemu-devel] [PATCH 8/9] target/arm: Implement FP data-processing (2 source) for fp16 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, alex.bennee@linaro.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We missed all of the scalar fp16 binary operations. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e --- target/arm/translate-a64.c | 73 ++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 73 insertions(+) diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 794ede7222..11b90b7eb0 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -532,6 +532,14 @@ static TCGv_i32 read_fp_sreg(DisasContext *s, int reg) return v; } =20 +static TCGv_i32 read_fp_hreg(DisasContext *s, int reg) +{ + TCGv_i32 v =3D tcg_temp_new_i32(); + + tcg_gen_ld16u_i32(v, cpu_env, fp_reg_offset(s, reg, MO_16)); + return v; +} + /* Clear the bits above an N-bit vector, for N =3D (is_q ? 128 : 64). * If SVE is not enabled, then there are only 128 bits in the vector. */ @@ -4968,6 +4976,61 @@ static void handle_fp_2src_double(DisasContext *s, i= nt opcode, tcg_temp_free_i64(tcg_res); } =20 +/* Floating-point data-processing (2 source) - half precision */ +static void handle_fp_2src_half(DisasContext *s, int opcode, + int rd, int rn, int rm) +{ + TCGv_i32 tcg_op1; + TCGv_i32 tcg_op2; + TCGv_i32 tcg_res; + TCGv_ptr fpst; + + tcg_res =3D tcg_temp_new_i32(); + fpst =3D get_fpstatus_ptr(true); + tcg_op1 =3D read_fp_hreg(s, rn); + tcg_op2 =3D read_fp_hreg(s, rm); + + switch (opcode) { + case 0x0: /* FMUL */ + gen_helper_advsimd_mulh(tcg_res, tcg_op1, tcg_op2, fpst); + break; + case 0x1: /* FDIV */ + gen_helper_advsimd_divh(tcg_res, tcg_op1, tcg_op2, fpst); + break; + case 0x2: /* FADD */ + gen_helper_advsimd_addh(tcg_res, tcg_op1, tcg_op2, fpst); + break; + case 0x3: /* FSUB */ + gen_helper_advsimd_subh(tcg_res, tcg_op1, tcg_op2, fpst); + break; + case 0x4: /* FMAX */ + gen_helper_advsimd_maxh(tcg_res, tcg_op1, tcg_op2, fpst); + break; + case 0x5: /* FMIN */ + gen_helper_advsimd_minh(tcg_res, tcg_op1, tcg_op2, fpst); + break; + case 0x6: /* FMAXNM */ + gen_helper_advsimd_maxnumh(tcg_res, tcg_op1, tcg_op2, fpst); + break; + case 0x7: /* FMINNM */ + gen_helper_advsimd_minnumh(tcg_res, tcg_op1, tcg_op2, fpst); + break; + case 0x8: /* FNMUL */ + gen_helper_advsimd_mulh(tcg_res, tcg_op1, tcg_op2, fpst); + tcg_gen_xori_i32(tcg_res, tcg_res, 0x8000); + break; + default: + g_assert_not_reached(); + } + + write_fp_sreg(s, rd, tcg_res); + + tcg_temp_free_ptr(fpst); + tcg_temp_free_i32(tcg_op1); + tcg_temp_free_i32(tcg_op2); + tcg_temp_free_i32(tcg_res); +} + /* Floating point data-processing (2 source) * 31 30 29 28 24 23 22 21 20 16 15 12 11 10 9 5 4 0 * +---+---+---+-----------+------+---+------+--------+-----+------+------+ @@ -5000,6 +5063,16 @@ static void disas_fp_2src(DisasContext *s, uint32_t = insn) } handle_fp_2src_double(s, opcode, rd, rn, rm); break; + case 3: + if (!arm_dc_feature(s, ARM_FEATURE_V8_FP16)) { + unallocated_encoding(s); + return; + } + if (!fp_access_check(s)) { + return; + } + handle_fp_2src_half(s, opcode, rd, rn, rm); + break; default: unallocated_encoding(s); } --=20 2.14.3 From nobody Wed Oct 29 06:38:51 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1524620014313940.5860274720881; Tue, 24 Apr 2018 18:33:34 -0700 (PDT) Received: from localhost ([::1]:33355 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9JN-0003SY-J7 for importer@patchew.org; Tue, 24 Apr 2018 21:33:33 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55508) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB99Z-000484-Dx for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fB99Y-0007ZS-D4 for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:25 -0400 Received: from mail-pg0-x242.google.com ([2607:f8b0:400e:c05::242]:40446) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fB99Y-0007Y3-7o for qemu-devel@nongnu.org; Tue, 24 Apr 2018 21:23:24 -0400 Received: by mail-pg0-x242.google.com with SMTP id e9so12132781pgr.7 for ; Tue, 24 Apr 2018 18:23:24 -0700 (PDT) Received: from cloudburst.twiddle.net.com (cpe-76-173-164-138.hawaii.res.rr.com. [76.173.164.138]) by smtp.gmail.com with ESMTPSA id z127sm27767966pfb.72.2018.04.24.18.23.21 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Apr 2018 18:23:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=QYB1jA+b/6yV7+O5OAyvdanDF4Pgn2Y+CF2hHxSSV3s=; b=cqQlem/AM3BC9xKhwvIk/TTVzlc2T4OW0hB13sgKGODWL3G3jLAYbVlGoAYWCX709S 4wJ3M6IS+nMbqn6rZmHdKKL3BSb6Q3jmCdt02r8njs+MDANUBL6NRnXWGtRYVAc0ohC6 jEA2xwy2N/wegrn6XKu3MnfahcVer3oi5FXeQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=QYB1jA+b/6yV7+O5OAyvdanDF4Pgn2Y+CF2hHxSSV3s=; b=uYMKwDBXSBhrgI2pWiNnH2/3EdpN4sqS6I5lpmvuKeiSoxmL2dacp87gpJlNdS5n9u imYvpaQbbU8+wYWXpkam9A0LuA/OHU07mqo/H8dtsCy1veDKrey8rGGFr7jHnw0QohwW GrHgIICwWzWXVnmFAABmr80RLJzKLXbEkwNbukXvlwXb9o4jVaMazLtulkU+EPfAbMdq 3f6lswvp9DWWYIlQIPCOLqjD/bCVUqtSQ0feYH2oAsD/pR2KQbqR9ZiGZ22d7n4IBMYk Hd3GDwqm4W7fOtcIb2n4pJ7uhYcLS1PSLMQ6z0YgILhCPbM/gmyEzHjGCBciaM53zSKK d4Ww== X-Gm-Message-State: ALQs6tA22bQwgb+LSurCu12FZ0/WY4dcNMIPMux6dP7q4Ahug8WXd+QJ 2fYMrYPdyuZSAjntJclri7BmOUTSnwI= X-Google-Smtp-Source: AIpwx489ii1B+xmXVrGgY1J81wweiZ/shbO9ne8XW6+Qf9YWLeVrHZxERrp308dOUYI9RNTPeJXNsg== X-Received: by 10.98.155.87 with SMTP id r84mr21376233pfd.109.1524619402893; Tue, 24 Apr 2018 18:23:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Tue, 24 Apr 2018 15:23:00 -1000 Message-Id: <20180425012300.14698-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180425012300.14698-1-richard.henderson@linaro.org> References: <20180425012300.14698-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::242 Subject: [Qemu-devel] [PATCH 9/9] target/arm: Implement FP data-processing (3 source) for fp16 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, alex.bennee@linaro.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We missed all of the scalar fp16 fma operations. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e --- target/arm/translate-a64.c | 48 ++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 48 insertions(+) diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 11b90b7eb0..0cb1fc4d67 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -5154,6 +5154,44 @@ static void handle_fp_3src_double(DisasContext *s, b= ool o0, bool o1, tcg_temp_free_i64(tcg_res); } =20 +/* Floating-point data-processing (3 source) - half precision */ +static void handle_fp_3src_half(DisasContext *s, bool o0, bool o1, + int rd, int rn, int rm, int ra) +{ + TCGv_i32 tcg_op1, tcg_op2, tcg_op3; + TCGv_i32 tcg_res =3D tcg_temp_new_i32(); + TCGv_ptr fpst =3D get_fpstatus_ptr(true); + + tcg_op1 =3D read_fp_hreg(s, rn); + tcg_op2 =3D read_fp_hreg(s, rm); + tcg_op3 =3D read_fp_hreg(s, ra); + + /* 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. + */ + if (o1 =3D=3D true) { + tcg_gen_xori_i32(tcg_op3, tcg_op3, 0x8000); + } + + if (o0 !=3D o1) { + tcg_gen_xori_i32(tcg_op1, tcg_op1, 0x8000); + } + + gen_helper_advsimd_muladdh(tcg_res, tcg_op1, tcg_op2, tcg_op3, fpst); + + write_fp_sreg(s, rd, tcg_res); + + tcg_temp_free_ptr(fpst); + tcg_temp_free_i32(tcg_op1); + tcg_temp_free_i32(tcg_op2); + tcg_temp_free_i32(tcg_op3); + tcg_temp_free_i32(tcg_res); +} + /* Floating point data-processing (3 source) * 31 30 29 28 24 23 22 21 20 16 15 14 10 9 5 4 0 * +---+---+---+-----------+------+----+------+----+------+------+------+ @@ -5183,6 +5221,16 @@ static void disas_fp_3src(DisasContext *s, uint32_t = insn) } handle_fp_3src_double(s, o0, o1, rd, rn, rm, ra); break; + case 3: + if (!arm_dc_feature(s, ARM_FEATURE_V8_FP16)) { + unallocated_encoding(s); + return; + } + if (!fp_access_check(s)) { + return; + } + handle_fp_3src_half(s, o0, o1, rd, rn, rm, ra); + break; default: unallocated_encoding(s); } --=20 2.14.3