From patchwork Wed Apr 25 01:22:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 134207 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp251434lji; Tue, 24 Apr 2018 18:25:49 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpFCa2Jx/UuD87qlyqGHyL9Bb85AvZPiDpEwB9AASkcQTUeSdrxp0+Xelpk1kIjN+CzdaGs X-Received: by 10.55.201.24 with SMTP id q24mr29909710qki.146.1524619549692; Tue, 24 Apr 2018 18:25:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524619549; cv=none; d=google.com; s=arc-20160816; b=RlNVZsnUWoD7e4bZs03SKnnG53ZvxkdiIDk6sD0AIKXpxHxbqdNolg4AETrHFxwy34 MNfG8W6Q6Om0QkjmRVfspV3Hf+41J3ScqTnxwQlk4giOU6o8kY0dXkWdFrKAOkqX9MLV KVFENVDV8cnjq87WNKfl8Gt3dcE4Pr0v27LpHTSkt8kgg4tapwndnGbX0toEeDko0ZYs n0/zlad3AmNHkans5lSjhllmeiNAy/EvHJLIn0r+t/NcBRQb0i0z3qmKczjjsoHVBwoX rjDGu9BvD6WJC98XM89P/Q56QebVtW2eFE2/mSmY5KjwXlKyd6SgFBrhw8wr92mrdCTh zLcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=7hCxfTsMPY3ERXMYGEDirrRU7REZtjUuU95yRA5cF34=; b=n0sCI15sM4Oq8sCCyuoAQRE5np8DqdWU3er8g9aF/lv9UANEfAZVpmHxI7op5m0Cbs rpHtmM86GRjplpoqCAy/Ic8yPF15O047UacCZTrwCzugEowfktMxOgeoJkCsHnJe1ZkN D0kesZWsR6ZcKx3a88bGlT/CSneCMj2j2vCesKuFJIWCciMqdBbDkwPPaS3C6nI3o5Cn zaDO9Px9zCoisG43PMsWzcHmPXrZGuQp7YiALWfo6aJP86Zt8yievhl2fdVGypAPSniL GdxnVd+vGCf6KwqAQ8ft6FN7X47JoSTeZSzAacPw7tHNxlOYBNTbdEbuddHpbyiehgps 7dEg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=h4NZ+ZDO; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id v1-v6si562727qtg.47.2018.04.24.18.25.49 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 24 Apr 2018 18:25:49 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=h4NZ+ZDO; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:33314 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9Bt-0005qW-0r for patch@linaro.org; Tue, 24 Apr 2018 21:25:49 -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) 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-Received: by 10.99.115.28 with SMTP id o28mr21936360pgc.238.1524619388918; Tue, 24 Apr 2018 18:23:08 -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) 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" 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(-) -- 2.14.3 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(DisasContext *s, bool is_scalar, int immh, int immb, int opcode, int rn, int rd) { - bool is_double = extract32(immh, 3, 1); - int size = is_double ? MO_64 : MO_32; - int elements; + int size, elements, fracbits; int immhb = immh << 3 | immb; - int fracbits = (is_double ? 128 : 64) - immhb; - if (!extract32(immh, 2, 2)) { + if (immh & 8) { + size = MO_64; + if (!is_scalar && !is_q) { + unallocated_encoding(s); + return; + } + } else if (immh & 4) { + size = MO_32; + } else if (immh & 2) { + size = MO_16; + if (!arm_dc_feature(s, ARM_FEATURE_V8_FP16)) { + unallocated_encoding(s); + return; + } + } else { + /* immh == 0 would be a failure of the decode logic */ + g_assert(immh == 1); unallocated_encoding(s); return; } @@ -7091,20 +7104,14 @@ static void handle_simd_shift_intfp_conv(DisasContext *s, bool is_scalar, if (is_scalar) { elements = 1; } else { - elements = is_double ? 2 : is_q ? 4 : 2; - if (is_double && !is_q) { - unallocated_encoding(s); - return; - } + elements = 8 << is_q >> size; } + fracbits = (16 << size) - immhb; if (!fp_access_check(s)) { return; } - /* immh == 0 would be a failure of the decode logic */ - g_assert(immh); - handle_simd_intfp_conv(s, rd, rn, elements, !is_u, fracbits, size); } From patchwork Wed Apr 25 01:22:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 134205 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp251083lji; Tue, 24 Apr 2018 18:25:24 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrqWugDN6sHqegOqy0DryNhXsACAjC2N+SGKF8LmOHKPWFbwTAomFD9K1UA2IWzc5LJ2q1v X-Received: by 10.12.249.77 with SMTP id i13mr4880547qvo.93.1524619524582; Tue, 24 Apr 2018 18:25:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524619524; cv=none; d=google.com; s=arc-20160816; b=f9EPK8UoaxrdP8ncbHtAEiNT+Qum4+Kim9+he191ruRo2Z+Q3f7YXU8wjQ2gjoiyIt maWV8z3HuoQmFl07vdLAWvwCWXuA4p4IY3d0DmA3m0DKpb8OcdrKZYU5a/lRTAbOu1fM r6S7tRZEJGtodpCSRb5r2XCAsDEO6t8CnBRsXswa/smjEp68ySn6h6NT8ivSC9TIuc83 sdkZ1avh4QIqJUmr32/TagiSW7lM2yjTpjOXptoB4wIxuwz1RKWRnlNI+3fYaQr4rGK7 fMZE3kCSUcvYXIiATlUgSYI/j9qY+AvFQ+EaVFGy4yl6SJXKx3pWAS6wAiZ/RLS+CNwZ Z/gQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=OQzui9EuCc9nQfaD/b7sJPE8M560QcmRDcjPpX30vuA=; b=W3zwP5kNmSjanPSc3DB9XA4Zin9s2BppAI4PL1AxHI0566s3JB5IE6zzr+rkYS6/Bo 7D/SHaKxhTsJN2KaNZrX/H1O2+eNuulrvdxS6bMR2kE0r7fOu9zkkfArT3Fvis64GMBc n3GfPzcU7pxVgCdmOhsUSLLQJDwH5tonIaMdzvNgUjzpguNMiFpphwAjg+By3yIvOf+z +t2w0Gz6d3g7Vcb5qK9/b2uWY0+9+lrYIPW3Dv+Jd0GkiHreHUd+oIoBO5UY8CzUG0kg Hrr0sqtXjDstGtLWggE9feiN5PKLP9DVi5FpvhYTZRL/2erVynmy8hbQvNqAAARgJjDy j+DA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=D/ljD++J; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id q8si7503164qkj.267.2018.04.24.18.25.24 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 24 Apr 2018 18:25:24 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=D/ljD++J; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:33305 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9BT-0004sN-TN for patch@linaro.org; Tue, 24 Apr 2018 21:25:23 -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) 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-Received: by 2002:a17:902:6986:: with SMTP id l6-v6mr27011947plk.209.1524619390695; 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.09 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 24 Apr 2018 18:23:09 -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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" 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(-) -- 2.14.3 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(DisasContext *s, bool is_scalar, bool is_q, bool is_u, int immh, int immb, int rn, int rd) { - bool is_double = extract32(immh, 3, 1); int immhb = immh << 3 | immb; - int fracbits = (is_double ? 128 : 64) - immhb; - int pass; + int pass, size, fracbits; TCGv_ptr tcg_fpstatus; TCGv_i32 tcg_rmode, tcg_shift; - if (!extract32(immh, 2, 2)) { - unallocated_encoding(s); - return; - } - - if (!is_scalar && !is_q && is_double) { + if (immh & 0x8) { + size = MO_64; + if (!is_scalar && !is_q) { + unallocated_encoding(s); + return; + } + } else if (immh & 0x4) { + size = MO_32; + } else if (immh & 0x2) { + size = 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 == 1); unallocated_encoding(s); return; } @@ -7144,11 +7153,12 @@ static void handle_simd_shift_fpint_conv(DisasContext *s, bool is_scalar, assert(!(is_scalar && is_q)); tcg_rmode = tcg_const_i32(arm_rmode_to_sf(FPROUNDING_ZERO)); - tcg_fpstatus = get_fpstatus_ptr(false); + tcg_fpstatus = get_fpstatus_ptr(size == MO_16); gen_helper_set_rmode(tcg_rmode, tcg_rmode, tcg_fpstatus); + fracbits = (16 << size) - immhb; tcg_shift = tcg_const_i32(fracbits); - if (is_double) { + if (size == 3) { int maxpass = is_scalar ? 1 : 2; for (pass = 0; pass < maxpass; pass++) { @@ -7165,20 +7175,37 @@ static void handle_simd_shift_fpint_conv(DisasContext *s, bool is_scalar, } clear_vec_high(s, is_q, rd); } else { - int maxpass = is_scalar ? 1 : is_q ? 4 : 2; + void (*fn)(TCGv_i32, TCGv_i32, TCGv_i32, TCGv_ptr); + int maxpass = is_scalar ? 1 : (8 << is_q >> size); + + switch (size) { + case MO_16: + if (is_u) { + fn = gen_helper_vfp_toulh; + } else { + fn = gen_helper_vfp_toslh; + } + break; + case MO_32: + if (is_u) { + fn = gen_helper_vfp_touls; + } else { + fn = gen_helper_vfp_tosls; + } + break; + default: + g_assert_not_reached(); + } + for (pass = 0; pass < maxpass; pass++) { TCGv_i32 tcg_op = tcg_temp_new_i32(); - 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_fpstatus); - } else { - gen_helper_vfp_tosls(tcg_op, tcg_op, tcg_shift, tcg_fpstatus); - } + 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); } From patchwork Wed Apr 25 01:22:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 134206 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp251122lji; Tue, 24 Apr 2018 18:25:28 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpxUPT03fZi+1LFkHsMAcF0h+6X/9tbvxxFN6JYmnR2LUIC7v4tNJov292lMZVLm4yHP0dx X-Received: by 10.55.41.66 with SMTP id p63mr5046019qkh.403.1524619528817; Tue, 24 Apr 2018 18:25:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524619528; cv=none; d=google.com; s=arc-20160816; b=ktD/WwALhWmECZMDVcI7VziGoyDZ1qkOF2g227KLUNZALoMKRJByHV1PrDD+iqnyJ/ ioua45BwKWWE1NEo7NcYCsyF2Rbe3v7qxmcliKPbDwwuU5XQB5vUbNXncmk4FMTjtPoB Sr987dMc1jkFj99liXA0v1e1rmpgNFuwYItQ7L+H5K4ocLtsFsFDI1AOyBSKCuLH0gna xaKdxlgCLZ+Gv8HsIHq63FlKSRyPUcFBGU7Bv8o5R63ei12n571QOG3jZBzEPWg5HyJc V87NIQIEAylvl+ubYQ3LtExF1cbVZqy3wnqzCYew8mpED8vC9XM/tYgZrqMOpf0OAjcO gOtw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=HW2lFqjkdeznoEnZz0wGEReab483/vCLPZX1Ws3Xa70=; b=NBSakRhI/L2JHrtYRtjV31WDxMVQJbrxGbCsToplXDPZTKtiivKEMn3M0hSMygU/Pc MS0CnObU8XghGF7i6H8tpa+pRlyaFAR4NLxeWkUw2EF9aE7LB7/oPNl7d+yj12b8olG5 FSYRz1ja9t6/dahuRlkmGu1s0Bc5u9aC+IraT1cR3IxBDS4aH4HZwPWXUlAh/iG5KhyJ 5fddxUNY1mUI2J07xj1l3RYF/Z2PmknS5SHC6X1/lUU6RD8SahFuw05i4d7WMiq44KIz sCfswivjeqMBAhw0bfFqiDRi/LcFJv1NPTAoy36XY/OusfIvp/umhBFtHxeSl7g4RUi4 CdfA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=Sp7hZlMD; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id s2-v6si1591782qtj.183.2018.04.24.18.25.28 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 24 Apr 2018 18:25:28 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=Sp7hZlMD; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:33306 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9BY-0004w4-7B for patch@linaro.org; Tue, 24 Apr 2018 21:25:28 -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) 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-Received: by 10.99.143.22 with SMTP id n22mr21290654pgd.394.1524619392345; Tue, 24 Apr 2018 18:23:12 -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) 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" 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 --- target/arm/helper.h | 4 ++-- target/arm/helper.c | 53 ++++++++++++++++++++++++++++++++++++++++++++-- target/arm/translate-a64.c | 4 ++-- 3 files changed, 55 insertions(+), 6 deletions(-) -- 2.14.3 Reviewed-by: Alex Bennée 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, ptr) 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 = get_float_exception_flags(fpst); + float64 ret; + + ret = float16_to_float64(f, true, fpst); + ret = float64_scalbn(ret, shift, fpst); + old_exc_flags |= 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); +} /* 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 = gen_helper_vfp_toulh; + fn = gen_helper_vfp_touhh; } else { - fn = gen_helper_vfp_toslh; + fn = gen_helper_vfp_toshh; } break; case MO_32: From patchwork Wed Apr 25 01:22:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 134209 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp253428lji; Tue, 24 Apr 2018 18:28:33 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqsEB65D4BEhRsxcHrtz/VPOBRSVYfLoVvsPJNDMY/vBDCt4RVWFdjGz16DWVrKuVAe5D15 X-Received: by 10.55.72.141 with SMTP id v135mr28961327qka.353.1524619712974; Tue, 24 Apr 2018 18:28:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524619712; cv=none; d=google.com; s=arc-20160816; b=dmMyh1ZfHOaTaqfPoq17O2Ilp5glFNTBbL+HGfvlHS0a2NmVvz8YLVLBAdfYeWtNoN kKitPVYKLoXqGkkIVlRcmZAtHop1zr3IfZfDyoNDLBq/1/H7Xq1go3eutlY0BVziDwRi rnyJmzeSPkcMXQwpqti+pJQS3cGNCERLWUFT9yRkQRDYeWu+wrlCXdOctiAjzr7SyRkA 3zrZyj8js6EHfqprwA06o7JalkfhuvpRTiNW3CjpslfOBfA7fqUS7Z0ENyKvuzYs1zzu LmHiheihBz/pD8llfU1NcX+JoRynZjo+WoRB4seT6gJT6MMS3DquJMtus1SK2bZ20E7i 8+iw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=dL2miW0YX+WWgqckHfvEpiy8jFMD8QTEnJmbhMgwTfU=; b=Y71ldftssOFTsiT6K+npF705D9UFJIArYmH2y2pENQgqsS/Tzl7s9Y6f0WF4+wuhyO xFTz44g2UYSW+RIA32T2+5L73dCWdp6XCfga2XrFLp9rCs8gPfael5558ZS6YumpQHt/ 7h33f/XyacHSa93a4/1bK6m5SE6kPsdSVMZabuBR4j/fjsRbCFq7vQZlbd+w1B+SSBRq KBxhRgx0DXO7m8gU3kwPoNZZCYWjehBfsJ2RJ84gpJbH0waY2ofry/hmJMRcLy8U+CiI NbvM9uR9XmZgr76VCFv8dSluegkBPQWZn5rwc8RsClvJqk8HwYHcvrMJfl194HzgU0TG qlcg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=jk4rr88h; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id e13si3665569qvb.235.2018.04.24.18.28.32 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 24 Apr 2018 18:28:32 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=jk4rr88h; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:33325 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9EW-0008KN-Bl for patch@linaro.org; Tue, 24 Apr 2018 21:28: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) 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-Received: by 10.98.214.218 with SMTP id a87mr21648027pfl.200.1524619394076; Tue, 24 Apr 2018 18:23:14 -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) 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Use write_fp_dreg and clear_vec_high to zero the bits that need zeroing for these cases. Signed-off-by: Richard Henderson --- target/arm/translate-a64.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) -- 2.14.3 Reviewed-by: Alex Bennée 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, int rn, int type, bool itof) if (itof) { TCGv_i64 tcg_rn = cpu_reg(s, rn); + TCGv_i64 tmp; switch (type) { case 0: - { /* 32 bit */ - TCGv_i64 tmp = tcg_temp_new_i64(); + tmp = 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 = 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 { From patchwork Wed Apr 25 01:22:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 134208 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp251533lji; Tue, 24 Apr 2018 18:25:56 -0700 (PDT) X-Google-Smtp-Source: AIpwx48BzL1bKWZhnlImd0Sv25/mPRUZzNb9r7KdRxb6L6xIWc0MNyv+i6Bd9+aa4Lo3950Qm4MO X-Received: by 2002:ac8:35b0:: with SMTP id k45-v6mr28704493qtb.81.1524619556416; Tue, 24 Apr 2018 18:25:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524619556; cv=none; d=google.com; s=arc-20160816; b=tJJE4gvTWI6VL9Kn4/1ihDYbc51wN1jJOawehvwNb3i3qx5KqExJATRm9OlI+p7XYC jj/bpvhCxciyFRgZBp2IlGTKuwz6pTqDhm8voKGh/bMKf25oxaudDFsEggiMj9nnYDm9 iEfW2/Dit+hhS1g3W7dUL8x7rJJ3OZUeOR0qBtfvxOwe7kY4dqJCv1EtLdtM6n1LX3ju xSme0UNTBDEgEdzvw7SulbwzH4v4+RDmOFSC6gB9t4LdBfo8GCWcNeT3RnxvIgKXJvjD hCoU0hdU1xjdTtAar/CCo9n2LwvmGsXGpdM5JGt+2bK9K3K+bVoACVVxYLR1xMMTwT7x ZUlA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=K23IM9LkWimzPkzISbK/yu164bpvhZx2QuR/EggjLws=; b=izTDI9An1r7U9ggq6Xxvka82G3VoWj7PV99dwo1o477/TbNWel9+VO4D6uxjdlgrcE p42efLVtqMA0MfUCvrp5oA1w78sibCWoC+9ChbcIRp19lHO5ARxXFx3BnQss2bcMZsY9 pfwdtAywAnPqdLc+CQnKOjHaq6LcL9VaOxYWjFfoB1d0oKN6xxHgsvYX/MvG19N0xlS5 bpyrKn4uBduHRcuVm5LJudcJ6kADaGc2nGgbnzronokYsUtAwNPyaPKlnIE8fD7GfRXF UjmiXY6l+7BN5ZsF1359iEz2YUCVeuCLxqi2j9iWrIUOHFZUVFU8MeveQ2wLmM+s01KO +4fg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=Onp26xMe; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id z34si3565903qvz.247.2018.04.24.18.25.56 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 24 Apr 2018 18:25:56 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=Onp26xMe; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:33317 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9Bz-0005tt-SK for patch@linaro.org; Tue, 24 Apr 2018 21:25:55 -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) 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-Received: by 10.98.182.16 with SMTP id j16mr2976240pff.17.1524619395840; 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.14 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" 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(-) -- 2.14.3 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 = 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 = 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, uint32_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; } if (!fp_access_check(s)) { From patchwork Wed Apr 25 01:22:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 134210 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp253477lji; Tue, 24 Apr 2018 18:28:35 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/RwqKv/iHJ0AroFgJ4jWbp/MpRXUtbHhvh4rEp51gq/wfGVcOksJkySMG0JTPN+JkJhhDK X-Received: by 10.233.192.16 with SMTP id u16mr28734448qkk.407.1524619715857; Tue, 24 Apr 2018 18:28:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524619715; cv=none; d=google.com; s=arc-20160816; b=PPfzb/+xUDCdz/FbE/NfBif+pkaLynP2ZDCY5KU7StLGjh+OkRwhEWXWMMHdqaAFCk /yLbOw5MqL06aNryAjDr151ofcTok6J37MAk1EFmTq8/P6mYM2/HwJjnA5QjIlObYcRq yisdjntFwE8Sb9vQVNLX9fVtvMLXD+Iyf7rGZlDizk6wqQBGNDsiegrWvFt8MTGHKJc6 MA53VP+CmZxPeaWwSqlx9nLT0ZRl5azCf4H7XRD6rlADwBNx4WZHka8spU8W49HTnxHM 8zB1JwHJEOM8mpPZHZRSHlQgALifewBG8jkSvW5hCo866I20jvb0FKG85ERssCGFBAl6 k4wQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=dtO9o5DCD7E8OE0HysmEWodrMlId7UVZQxMnf9O+Zug=; b=JU/r4lE/a59goqcVCE6wZ6q6Wa4b/1u1oBgkUla2wbgiOQkDGjePGUqftsQhDWw4Vm 9E0k4f5D/sOUeyTARqOHFU56mEMi4xXDTOtlrLiURvWfpxCuNPFNC+Qv5mjv6/d746q1 osLngbxomfhZ+GEzFOOv+z0PpshhT8kaMtCrcZkesFvGeBNiqVwp3B0p4eCafZVWOtqo uxtBgeUhS3hsEMSXBjqH6ptoJYIye+JxMUrPn83Z+FQLZ8s2p7QQLR2BGaSiGIsrI2Kn 2Ju/j/UCQnqWp7UymECR1fvPS1zw+Frfd3fG6ZrofTg9WYlGJmRv9pyQIekDOEKGOwrG AWxg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=LK+B9ioW; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id u1si2915402qvg.40.2018.04.24.18.28.35 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 24 Apr 2018 18:28:35 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=LK+B9ioW; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:33327 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9EZ-0008Nd-6w for patch@linaro.org; Tue, 24 Apr 2018 21:28: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) 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-Received: by 10.98.60.209 with SMTP id b78mr18396046pfk.44.1524619397571; Tue, 24 Apr 2018 18:23:17 -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) 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Richard Henderson --- target/arm/helper.h | 6 +++ target/arm/helper.c | 38 +++++++++++++++++- target/arm/translate-a64.c | 96 ++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 122 insertions(+), 18 deletions(-) -- 2.14.3 Reviewed-by: Alex Bennée 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, ptr) 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) 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 /* 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. */ 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 shift, void *fpst) return do_postscale_fp16(uint32_to_float64(x, fpst), shift, fpst); } +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 shift, void *fpst) return float64_to_uint16(do_prescale_fp16(x, shift, fpst), fpst); } +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 type) { bool is_signed = !(opcode & 1); - bool is_double = type; TCGv_ptr tcg_fpstatus; - TCGv_i32 tcg_shift; + TCGv_i32 tcg_shift, tcg_single; + TCGv_i64 tcg_double; - tcg_fpstatus = get_fpstatus_ptr(false); + tcg_fpstatus = get_fpstatus_ptr(type == 3); tcg_shift = tcg_const_i32(64 - scale); @@ -5208,8 +5208,9 @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode, tcg_int = tcg_extend; } - if (is_double) { - TCGv_i64 tcg_double = tcg_temp_new_i64(); + switch (type) { + case 1: /* float64 */ + tcg_double = 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 = tcg_temp_new_i32(); + break; + + case 0: /* float32 */ + tcg_single = 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 = 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 = cpu_reg(s, rd); @@ -5246,8 +5266,9 @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode, gen_helper_set_rmode(tcg_rmode, tcg_rmode, tcg_fpstatus); - if (is_double) { - TCGv_i64 tcg_double = read_fp_dreg(s, rn); + switch (type) { + case 1: /* float64 */ + tcg_double = 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 = read_fp_sreg(s, rn); + break; + + case 0: /* float32 */ + tcg_single = 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 = 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 = 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(); } 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); - } } tcg_temp_free_ptr(tcg_fpstatus); @@ -5465,7 +5516,20 @@ static void disas_fp_int_conv(DisasContext *s, uint32_t insn) /* actual FP conversions */ bool itof = extract32(opcode, 1, 1); - if (type > 1 || (rmode != 0 && opcode > 1)) { + if (rmode != 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; } From patchwork Wed Apr 25 01:22:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 134212 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp254840lji; Tue, 24 Apr 2018 18:30:19 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqvZimYTq15wDxZPJN3jYFqvE9am0wMZknMs3vIo9Yr4wyvaXr2HdJBatbf7vMNRMWY+udV X-Received: by 10.12.150.180 with SMTP id a49mr6316444qvd.119.1524619818976; Tue, 24 Apr 2018 18:30:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524619818; cv=none; d=google.com; s=arc-20160816; b=Av3YzcovLrPXfhiBWjbJLQC8Cs6xnCGldvGQ7VX3QZykko7Usy8UKVe2WpINAbviqB UXDnPb9mUIZ8jwozhlUFHjccVBtp3WunzcUR9Ka8SVzQGIL0iQLrFEZedQF+JXQdgAHi UGAzKj+t5Z9y+7qX97i4Yc3t/qbnHbEbKO+AZGw+1pJ22AJgrYv2163RMfSpfZ4bHbWK A53fgVwJlQBmqEQppBTRFwk2rLbVBIh2GbcEwPPU54N6hve/+mjudJTEwlVE0bCogZFr w5rh70fOibds5rWeJzVWlDrRLmkq0+1mcRFAlORnNvagqT2PZCiE9bBCV5Xxp6cYV8lv 2Hnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=G737kt/S5OrmE3LHlBoTNTT6qSAVbYh6VUnHdxp5Ajs=; b=W6E+N7QNqjY16rLbwKbKzVM66y91XR+0cq6S252dsG0urcNgwxr8XWDR6IBmIulbVp RW9fL4PRD9oZGdTNS+qN5OP8oTqdpAN7eHCAgOJnfkHMgTZao0gcSmfBaMqclTMyB2px /jFhhn2Aoz5VTDZxQT7Udj3FXPl3wpkcBguENul0iux/TrIaHHJPUGTePQUMZ+XPb6is W9wbPchRrOinrlHhg8Ni67AbAhKE6XC9sYaITLCR0KoBW/Sg3bxws4GlgXecvqZsScoT peK8vnKL7kBYZ2lxRKAGNpAqLu9rcdmh6v8YaN8RxCSopTzs/ortjYRYy/azc67wE9h+ O9vg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=gnfAGaAL; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id n129si5218604qkc.86.2018.04.24.18.30.18 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 24 Apr 2018 18:30:18 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=gnfAGaAL; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:33336 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9GE-0001VF-F6 for patch@linaro.org; Tue, 24 Apr 2018 21:30:18 -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) 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-Received: by 10.99.145.196 with SMTP id l187mr21979569pge.261.1524619399321; Tue, 24 Apr 2018 18:23:19 -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) 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Signed-off-by: Richard Henderson --- target/arm/translate-a64.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) -- 2.14.3 Reviewed-by: Alex Bennée 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, uint32_t insn) bool sf = extract32(insn, 31, 1); bool itof; - 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, uint32_t insn) 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; + } + if (!fp_access_check(s)) { return; } From patchwork Wed Apr 25 01:22:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 134211 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp253696lji; Tue, 24 Apr 2018 18:28:54 -0700 (PDT) X-Google-Smtp-Source: AB8JxZoZ3ZW9bVSeyXD6OXxDTmkgVVO1U9nZzhRSWpRHe563jUqJY4/3LPCQ4iwsC8yizZB19Rna X-Received: by 10.233.235.215 with SMTP id b206mr28793261qkg.348.1524619734661; Tue, 24 Apr 2018 18:28:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524619734; cv=none; d=google.com; s=arc-20160816; b=I4Ho2VApBChdF9HMVJlicfUyETqOnGKVfwoYc+T8Ep5NeWWwUzZECqz2F4vqGfI8z+ jRT/3twZ6YkHbWaUSGAViEIDlYaDkY71C4tKzq0yEmUIJolkFsDEg/2TGL4Z+YBc8Yr/ NOrJq/ZzxcQr2vuqkUvSzzUyFMUoBFL2T3a6YRkyBbibRW5zfclOnosCo6NgmKg76Jiv qWGNt9lcqAQsBWm1XZpmZ4g1GVgFh0DCRzc/Lz6vgyC4QydY90ojeyXliRtqv33Dn2s7 Q2v5Df8w+hkkdLXk8Wz9Kj3ht9TMctJB17sRnnuOUa2WHRuS/NVuFsnh76rcWZIpY/0J 1cwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=8opmoPXOJ8uXBYz3POcElJbVpN+z1Cw+TI2+idGCP4k=; b=SlyF6ucUB7ucGd/f4YYhVwGmywKSDn24AIKuj2RN16WPv1WVG7ZHvpoGF9sZhvDFg9 PqxJPKjwMXgp0nHJj8EMYr89peJC9AmJIQnLXIQtr/HLDBlf1iroljcOrguDEjuXAy8D 05mxPrl5xXrQwJc4ykN78rhqakfPbm0EpJKKlNoNmQ/46B4VqUthcENW8oLqsXwQnDSY 2PxzSM/zD2LDAU7DhOgQKcllb2at7Jv3z85qA5M9ocQKIke2G40RK6J65mvXrhTziijV MVbKnh253wZfEhkqk6J9QAbR9Rg+OyAVN6YpRh7kMUSLbK7RhhiqGBu4gq0HL9Ob9RKy RlXQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=KWbUbQ77; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id r3si3592376qvi.90.2018.04.24.18.28.54 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 24 Apr 2018 18:28:54 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=KWbUbQ77; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:33323 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9Es-0007wh-3N for patch@linaro.org; Tue, 24 Apr 2018 21:28:54 -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) 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-Received: by 10.99.176.8 with SMTP id h8mr21988232pgf.448.1524619401084; Tue, 24 Apr 2018 18:23:21 -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) 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" We missed all of the scalar fp16 binary operations. Signed-off-by: Richard Henderson --- target/arm/translate-a64.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) -- 2.14.3 Reviewed-by: Alex Bennée 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; } +static TCGv_i32 read_fp_hreg(DisasContext *s, int reg) +{ + TCGv_i32 v = 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 = (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, int opcode, tcg_temp_free_i64(tcg_res); } +/* 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 = tcg_temp_new_i32(); + fpst = get_fpstatus_ptr(true); + tcg_op1 = read_fp_hreg(s, rn); + tcg_op2 = 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); } From patchwork Wed Apr 25 01:23:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 134213 Delivered-To: patch@linaro.org Received: by 10.46.151.6 with SMTP id r6csp256343lji; Tue, 24 Apr 2018 18:32:17 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqdNsiHW3u26TCDy9tQPFiBFORNKgrii1HSKv7bl0VPcPSCmGMoaNVhMCZIVjv3xcYAa7im X-Received: by 2002:ac8:2998:: with SMTP id 24-v6mr29565561qts.197.1524619937490; Tue, 24 Apr 2018 18:32:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524619937; cv=none; d=google.com; s=arc-20160816; b=SD3qX8ICojSuojHz/r691fxb7j027nkpMsP3eCw9RLggZLaVD8DyMfBWvCC//dVG1F 7fWStMJ1CbllVT8l5iKYYcuC/LNEkcHXTVFjtRcG8qnI8Yrs0DaQVkCE6Gz+zpJl1J0q PwiIkuD9/yVG5dlsVYLdLOPv2d/NwO48MTsT7dLyw5gwdtephV0Wp+VETCc0l6l6noBc 9w1hCPhEYkXQkvRk12bYAEZHW9I7tawmJEb1MwxnDuX1DZJcC5RTMY+1AK7R+FEwculG KICkznx09HglcvVl7TMoJn3qL+QqIT2fOVZA+XjUDAiUl/UcZYCZrbGyPZ90t+srK78B 2sXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=QYB1jA+b/6yV7+O5OAyvdanDF4Pgn2Y+CF2hHxSSV3s=; b=DhMMl8WfZaruYyAlQnQHrXIZPARCDfvtH6drmYZyaxXa+iuJboAdf1SLregzycKr7T a/qFOsSOs7mOk2zXo90sKZv+2UJ/P0PiU0orZJD0AaubLuVfUg1DV90ca2evnw9LCqp9 nLajLS9oMQV842Qne3+7cLnj8OtHNQ1uWCaNYJ7M8rgtj6RPjt1ortPGLdKpWNUusgme G6slmB8d9oUKiETcop7A4yHjGo1iJeRoMp493/xk9BEFI88CCnCfXT0yBjHrq7zg9YG3 2x1c8q9fZNMiBmo+8WDyZWHodRYcUksRhBfDyz6ffeiaPJw7gFiE06k0b8laj0MKvta1 kOWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=cqQlem/A; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id k7si3595694qve.251.2018.04.24.18.32.17 for (version=TLS1 cipher=AES128-SHA bits=128/128); Tue, 24 Apr 2018 18:32:17 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=cqQlem/A; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom=qemu-devel-bounces+patch=linaro.org@nongnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:33353 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fB9I9-0002oo-0C for patch@linaro.org; Tue, 24 Apr 2018 21:32:17 -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) 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-Received: by 10.98.155.87 with SMTP id r84mr21376233pfd.109.1524619402893; 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.21 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); 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+patch=linaro.org@nongnu.org Sender: "Qemu-devel" We missed all of the scalar fp16 fma operations. Signed-off-by: Richard Henderson --- target/arm/translate-a64.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) -- 2.14.3 Reviewed-by: Alex Bennée 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, bool o0, bool o1, tcg_temp_free_i64(tcg_res); } +/* 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 = tcg_temp_new_i32(); + TCGv_ptr fpst = get_fpstatus_ptr(true); + + tcg_op1 = read_fp_hreg(s, rn); + tcg_op2 = read_fp_hreg(s, rm); + tcg_op3 = 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 == true) { + tcg_gen_xori_i32(tcg_op3, tcg_op3, 0x8000); + } + + if (o0 != 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); }