From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588270384; cv=none; d=zohomail.com; s=zohoarc; b=Q8nmbArYWAbcf7EpkCOOYJoesSt2xky1fXXbFjEoi/v1ojzNhKpurCDD++dzDcJbUprtOawMaBWRO4LH84DZ9z/ihTr//QRx5Yc/7+Rp7+UqefHIHQ7okfYSW2C7useo4cbdxEHRyshqPNIFlXIhOF63+ljE29LQEAxjulz1CDg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588270384; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=tdNQQWE9wGAC0mH1muH1gEnZ20h4fqSH0abkP54OzAE=; b=ZAKXGf90i+ZkgjOWhINZoUqQsb5+NkXBpCfuz3+FM62ZMI+41UQfdYR1X4LqUlwhe/KCoLQmTepWnSL8KsdE5xjv6mBYiK7nxAPH1OOset10pCiXy5GahQypOsEhwKVo63pKJpsaVRJeMVR98TZ1feXB9hnnYli1a0i2mafqWSM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588270384010641.4328653475949; Thu, 30 Apr 2020 11:13:04 -0700 (PDT) Received: from localhost ([::1]:38528 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDgD-0004Gq-Me for importer@patchew.org; Thu, 30 Apr 2020 14:13:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36000) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDdp-0001Nk-VN for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdU-0000LE-E4 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:33 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]:40428) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdR-00009C-Bc for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:11 -0400 Received: by mail-wr1-x436.google.com with SMTP id e16so3042370wra.7 for ; Thu, 30 Apr 2020 11:10:08 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tdNQQWE9wGAC0mH1muH1gEnZ20h4fqSH0abkP54OzAE=; b=mNXtO41RG3npsxp3IJbsRB3TEnEDn5hIoYivrOSJKxiG6x9r9djsgrWUKy/tPz1Txo 7EZ+1yPfzFZ1neebWiSs90YVUlKSa8kSd7Dlrb6iqJggy3MhDpfY0fQxsyzxFP9o14fo YWtLiZN9uXURGJRh8yrD5Z1uBTp5vCJ1Ul3xbh/bbueyao4Ni2Xf97FRn9dANJYHAKSP Lt8QvJuEFVGQTwiUwPI905fPwPlBaXCbMQCPAe28PlMqY+RtCxEXAAyBSxLmD/W/GNRc j9bqrFQwN7Aq2nVM7Ffc03qfhER7dbSfRqXOolkYPvzRFAYkq/5fJ5KrycxylJC7hhKI chhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tdNQQWE9wGAC0mH1muH1gEnZ20h4fqSH0abkP54OzAE=; b=DVFzF1WFrOMGUBtXJ8il/COrdkrcu4HMUmH/snCkqA5MDqeuOSDCkb4XhVoeZMC+me C2cGCXqrDIy5DBYIQji+3CwTnVb+LYWqocImydRkRO/CzmGtSzreaILKcVqAYdvsXwa2 dOoNPEgyeUjIFJG1ww0VPPWrrSziQZQMDSoNfOWya65LrargxM8P4u/WNFK7IPvqOOXt u3Ce/P6zu4lgcc6EPVvZ/I6HmoyPyMLltsFQvOkYBF4oaZ3GkLkBwY0EF8g5bE0GAJF+ 4MohJLfbUKuvC1ive2Hst4bSKpyhTnPntD/faLXWmYzcWX++PmjfQUthxBKSjUy/THb4 FEmg== X-Gm-Message-State: AGi0Pua2WWz0xGdrrEJ97oKU+HIOSo4Tiay8E9fd6+/uaeT0twzLxzgm J7JfEL88KbOBkLR0qW6UlzeCrQ== X-Google-Smtp-Source: APiQypJGAHsuW/d+RTrzZorqjoIO9kzT6Vs3poZBodBkH8i1gvB7yTRVQZKMxOm0bKaohDx7bo/bug== X-Received: by 2002:a5d:5386:: with SMTP id d6mr5289201wrv.222.1588270207658; Thu, 30 Apr 2020 11:10:07 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 01/36] target/arm/translate-vfp.inc.c: Remove duplicate simd_r32 check Date: Thu, 30 Apr 2020 19:09:28 +0100 Message-Id: <20200430181003.21682-2-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::436; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x436.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::436 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Somewhere along theline we accidentally added a duplicate "using D16-D31 when they don't exist" check to do_vfm_dp() (probably an artifact of a patchseries rebase). Remove it. Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Richard Henderson --- target/arm/translate-vfp.inc.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/target/arm/translate-vfp.inc.c b/target/arm/translate-vfp.inc.c index b087bbd812e..e1a90175983 100644 --- a/target/arm/translate-vfp.inc.c +++ b/target/arm/translate-vfp.inc.c @@ -1872,12 +1872,6 @@ static bool do_vfm_dp(DisasContext *s, arg_VFMA_dp *= a, bool neg_n, bool neg_d) return false; } =20 - /* UNDEF accesses to D16-D31 if they don't exist. */ - if (!dc_isar_feature(aa32_simd_r32, s) && - ((a->vd | a->vn | a->vm) & 0x10)) { - return false; - } - if (!vfp_access_check(s)) { return true; } --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588270395; cv=none; d=zohomail.com; s=zohoarc; b=X/w5KlfzQhCb8SL0EXseqYQO9cE18p4+ML7tEeHTRtN8yIVnqqXNlCIp7eH6tpXy6OaISCr0BVHScsHaRjiSU8h1tPoz8LFLfeS3ifPLAkD26ffVCjj8B/4drXPXo0fzJi+3Jd08Fbg/90UMTHF6rhurk4YZDMPjcejo1yhgbNA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588270395; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Dm8eT7i1ZIH8eOPph0oKfFrt8J+uhOMpHYDcUQLS3eU=; b=EoWsiENwI+AoPtUC5RQhAI1QVDp+/eh4JXAj+7vzSVOjsPFzxC8dhObRqO7hdMd+Qol6QW59mP5PMMm1VVO8eBbWylCSU931jsPrExXfb1TC7p1oTvGz0M1fXtIt1RyoLv9CBe4CgBPjIPLeOJdVeoAXFacVoJbYh0LtB1qsLKU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588270395851274.3881185576903; Thu, 30 Apr 2020 11:13:15 -0700 (PDT) Received: from localhost ([::1]:39546 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDgQ-0004fz-9h for importer@patchew.org; Thu, 30 Apr 2020 14:13:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36048) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDdt-0001OF-23 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdX-0000V1-F1 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:36 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:34859) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdW-0000A6-Hd for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:14 -0400 Received: by mail-wm1-x342.google.com with SMTP id r26so3079462wmh.0 for ; Thu, 30 Apr 2020 11:10:10 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10: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 :mime-version:content-transfer-encoding; bh=Dm8eT7i1ZIH8eOPph0oKfFrt8J+uhOMpHYDcUQLS3eU=; b=jLKhqxp3K+yE1TmGDjvpITvWaQDy3WYx6DPrtvIcAvMS2GxR9OhZKRtadRBk7yq6oV 8B8c1Cn5XJ1yHMHR5QhLc6nl+PJY9gzu0PPqx5dhczifT9kaJzwPxqPGqyb7jt84mJ3g dF5oGesY//ZKyqXcgBuA7MDZSA8NDWkWMKYKNxrQFeAfD1IaJHTS5KbVzYnOOa9NwC6q 5JLSvLYRh9UrN4eDQKIFGyshjOc6nkOQjWqvkiLv04JOfQsoGe6S2bHX1uoa9l4sBUxt sEhhLaRl8mFTKQhFZummvd86px9CPgpoEjwl/GdIYAec6qkXT/I7ekVJh/MEhN8vtMN5 Wk2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Dm8eT7i1ZIH8eOPph0oKfFrt8J+uhOMpHYDcUQLS3eU=; b=E8QAjoc+isHhBhRPp8imDVHNEEn2TLUxKV1pH5cKnEDtils2+sG3nUvLfmtgki1m7O ksrV9KbiBYPAp9TBCgqaSNBJx/do2GPFBMHShGxrl3vDmegokollWvNOxIAL9P8bHOv1 GxfFIrWSL4l6C4fVzl+BaSmI5Ua4jon0wEBpWdIfgpvKuME+jJ4zXOYkXUciCnOXtz+3 HCn8CzvHCJ/kpf0oK3dSPLh4a264kv8+SsiRgyOd0oT2qEIvFeTtAbMH/7avGygFgjxP Kx99QxFvdoO2RWxzrkw0bh/vOF2JCp6eyDeZtigu1l50yUG+G8DYB0wUujb6lCj0CnBQ /nkw== X-Gm-Message-State: AGi0PuZiN7vBBaz3FA2M+LuBr8TkhA8MTdU8guvMhihr/YlTmIJu/lSM 9FYV+VyBM0VQosnSYS2AXUUq+Q== X-Google-Smtp-Source: APiQypLOkr2PBLgL8Kl6Y193ldX6Gm249kWnIQUREstrORaj+HW8/La0/5XXCo3NBzOL8RihmkoJDw== X-Received: by 2002:a7b:c44d:: with SMTP id l13mr4183993wmi.72.1588270209043; Thu, 30 Apr 2020 11:10:09 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 02/36] target/arm: Don't allow Thumb Neon insns without FEATURE_NEON Date: Thu, 30 Apr 2020 19:09:29 +0100 Message-Id: <20200430181003.21682-3-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::342; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x342.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::342 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" We were accidentally permitting decode of Thumb Neon insns even if the CPU didn't have the FEATURE_NEON bit set, because the feature check was being done before the call to disas_neon_data_insn() and disas_neon_ls_insn() in the Arm decoder but was omitted from the Thumb decoder. Push the feature bit check down into the called functions so it is done for both Arm and Thumb encodings. Signed-off-by: Peter Maydell Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Richard Henderson --- target/arm/translate.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/target/arm/translate.c b/target/arm/translate.c index d4ad2028f12..ab5324a5aaa 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -3258,6 +3258,10 @@ static int disas_neon_ls_insn(DisasContext *s, uint3= 2_t insn) TCGv_i32 tmp2; TCGv_i64 tmp64; =20 + if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { + return 1; + } + /* FIXME: this access check should not take precedence over UNDEF * for invalid encodings; we will generate incorrect syndrome informat= ion * for attempts to execute invalid vfp/neon encodings with FP disabled. @@ -5002,6 +5006,10 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) TCGv_ptr ptr1, ptr2, ptr3; TCGv_i64 tmp64; =20 + if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { + return 1; + } + /* FIXME: this access check should not take precedence over UNDEF * for invalid encodings; we will generate incorrect syndrome informat= ion * for attempts to execute invalid vfp/neon encodings with FP disabled. @@ -10948,10 +10956,6 @@ static void disas_arm_insn(DisasContext *s, unsign= ed int insn) =20 if (((insn >> 25) & 7) =3D=3D 1) { /* NEON Data processing. */ - if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { - goto illegal_op; - } - if (disas_neon_data_insn(s, insn)) { goto illegal_op; } @@ -10959,10 +10963,6 @@ static void disas_arm_insn(DisasContext *s, unsign= ed int insn) } if ((insn & 0x0f100000) =3D=3D 0x04000000) { /* NEON load/store. */ - if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { - goto illegal_op; - } - if (disas_neon_ls_insn(s, insn)) { goto illegal_op; } --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588270616; cv=none; d=zohomail.com; s=zohoarc; b=njqe1BGJYpAKNLhqNgpIXrt6gH1kTUwxVlYD2eiJDF1p7UjQ2MXtnxnLutDvQ1oy5Gahz8Z4V0/hyQmsUMSAoNc32EdSZL8ivgLZ3+/qs0Gkcne2Z9y60CqufavVpmZfg8Mw333tUXF/FDDNFLIiH5MdQ1PqqrM1mnN0GaptYZs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588270616; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=zGpn+nE2cY3bbTpJiEK4NR1N+u/Wt/2TxzlYPkNv3Tc=; b=Hnmjz4N3U974/ZT5mL9gcU7/y2wA8A5wDwHUxK4kVLVPP0Pooivhx7MrMPLNtalLz4cBPAoY4nvLeZULdPmmmpE22xRQmLFgH5i3O6dfyD04PMH1AsoIDdYKHRgc9FZTe/ugJJ0VM9NTYcGtonHLP40wRkBqRQATxNFKxuFGoiU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588270616205606.5050025981192; Thu, 30 Apr 2020 11:16:56 -0700 (PDT) Received: from localhost ([::1]:49650 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDjx-0002Jt-Qa for importer@patchew.org; Thu, 30 Apr 2020 14:16:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36090) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDdx-0001Os-3i for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdX-0000VX-Ee for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:40 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]:36176) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdW-0000FJ-Nx for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:14 -0400 Received: by mail-wm1-x32a.google.com with SMTP id u127so3084773wmg.1 for ; Thu, 30 Apr 2020 11:10:11 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10: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 :mime-version:content-transfer-encoding; bh=zGpn+nE2cY3bbTpJiEK4NR1N+u/Wt/2TxzlYPkNv3Tc=; b=IkeAQpBUZfNC7n5stH6nqQYmSJWqK9nfyNhHNTZ9r3+p78bhf+tbiS19e0Ck5/0OEw KEo5OHLJKoH5LQ0qA7/kyPZoIWRU7Q4wHT0fHSWe4Xj2X+l1y0QZagSY59PxFCHYIo87 pdF/m242bsiNwImD4W8Yg1vRO7p7x7zSJn9yu+Wj6Afw1EL9fTg7rCkXXQ2wfL1OmF0g /OnqgkZua4u2ZXuag1fJ58AVTvanh92ohKOycnll/c/1TfrZQnf350BrF7WzSo18OC9q 33mvr8VFkMYC2h7VjGD32X3N50BTGrYuC+w8pmPWmcnq3Hs7PzzuJvGI7IacOaMBk02C toTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zGpn+nE2cY3bbTpJiEK4NR1N+u/Wt/2TxzlYPkNv3Tc=; b=NmQ7+byl+/paxSUurIjq5fuJ1BE/3fvqtHI/qiYyXgmABUUFHSpyfzRKNrPKMxZglU bMS/GFKwOoqhR/BBqyp+y95kunSAjDNh7GE8hEauK7PKVs/908L/QD4nYXQgTTmAmDRJ 8MI15TC3/VxSqE/85ZH/4VIRNFRuzRNVCis8eFege8ABFB6DmZ/BGVnAj811N+lweAGK 1W3EimbWQciN2Q1CvXwjfyPemOV1+cnM7AAP/60I2EhinFf3cttalLIgf66/vBdmrFLS isKr2PsRhNRtAzqDniH8eQCvMRBKOIFJdS83WVRhE2EwF6lrJGXfuc7UvWQVw4WsHn+d X96A== X-Gm-Message-State: AGi0PuYpoz30b5D+EhC0CbDNlkEWOyTDwX2fIEOtXLqwhxyl6ieCL4m7 8KevMSZWB3gBKds/bCDxaeYvd1nfHvm24g== X-Google-Smtp-Source: APiQypK1HhhStrZHDaxqnrpM42TR16BSkm5Yd+9vGJRlDZOJWrT/XtGunf6hCUBwIU3nZ+etC2p0nw== X-Received: by 2002:a1c:64c5:: with SMTP id y188mr4200094wmb.130.1588270210440; Thu, 30 Apr 2020 11:10:10 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 03/36] target/arm: Add stubs for AArch32 Neon decodetree Date: Thu, 30 Apr 2020 19:09:30 +0100 Message-Id: <20200430181003.21682-4-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32a; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32a.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::32a X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Add the infrastructure for building and invoking a decodetree decoder for the AArch32 Neon encodings. At the moment the new decoder covers nothing, so we always fall back to the existing hand-written decode. We follow the same pattern we did for the VFP decodetree conversion (commit 78e138bc1f672c145ef6ace74617d and following): code that deals with Neon will be moving gradually out to translate-neon.vfp.inc, which we #include into translate.c. In order to share the decode files between A32 and T32, we split Neon into 3 parts: * data-processing * load-store * 'shared' encodings The first two groups of instructions have similar but not identical A32 and T32 encodings, so we need to manually transform the T32 encoding into the A32 one before calling the decoder; the third group covers the Neon instructions which are identical in A32 and T32. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/Makefile.objs | 18 +++++++++++++++++ target/arm/translate-neon.inc.c | 32 +++++++++++++++++++++++++++++ target/arm/translate.c | 36 +++++++++++++++++++++++++++++++-- target/arm/neon-dp.decode | 29 ++++++++++++++++++++++++++ target/arm/neon-ls.decode | 29 ++++++++++++++++++++++++++ target/arm/neon-shared.decode | 27 +++++++++++++++++++++++++ 6 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 target/arm/translate-neon.inc.c create mode 100644 target/arm/neon-dp.decode create mode 100644 target/arm/neon-ls.decode create mode 100644 target/arm/neon-shared.decode diff --git a/target/arm/Makefile.objs b/target/arm/Makefile.objs index cf26c16f5f6..775b3e24f22 100644 --- a/target/arm/Makefile.objs +++ b/target/arm/Makefile.objs @@ -18,6 +18,21 @@ target/arm/decode-sve.inc.c: $(SRC_PATH)/target/arm/sve.= decode $(DECODETREE) $(PYTHON) $(DECODETREE) --decode disas_sve -o $@ $<,\ "GEN", $(TARGET_DIR)$@) =20 +target/arm/decode-neon-shared.inc.c: $(SRC_PATH)/target/arm/neon-shared.de= code $(DECODETREE) + $(call quiet-command,\ + $(PYTHON) $(DECODETREE) --static-decode disas_neon_shared -o $@ $<,\ + "GEN", $(TARGET_DIR)$@) + +target/arm/decode-neon-dp.inc.c: $(SRC_PATH)/target/arm/neon-dp.decode $(D= ECODETREE) + $(call quiet-command,\ + $(PYTHON) $(DECODETREE) --static-decode disas_neon_dp -o $@ $<,\ + "GEN", $(TARGET_DIR)$@) + +target/arm/decode-neon-ls.inc.c: $(SRC_PATH)/target/arm/neon-ls.decode $(D= ECODETREE) + $(call quiet-command,\ + $(PYTHON) $(DECODETREE) --static-decode disas_neon_ls -o $@ $<,\ + "GEN", $(TARGET_DIR)$@) + target/arm/decode-vfp.inc.c: $(SRC_PATH)/target/arm/vfp.decode $(DECODETRE= E) $(call quiet-command,\ $(PYTHON) $(DECODETREE) --static-decode disas_vfp -o $@ $<,\ @@ -49,6 +64,9 @@ target/arm/decode-t16.inc.c: $(SRC_PATH)/target/arm/t16.d= ecode $(DECODETREE) "GEN", $(TARGET_DIR)$@) =20 target/arm/translate-sve.o: target/arm/decode-sve.inc.c +target/arm/translate.o: target/arm/decode-neon-shared.inc.c +target/arm/translate.o: target/arm/decode-neon-dp.inc.c +target/arm/translate.o: target/arm/decode-neon-ls.inc.c target/arm/translate.o: target/arm/decode-vfp.inc.c target/arm/translate.o: target/arm/decode-vfp-uncond.inc.c target/arm/translate.o: target/arm/decode-a32.inc.c diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c new file mode 100644 index 00000000000..a33e81ba3ab --- /dev/null +++ b/target/arm/translate-neon.inc.c @@ -0,0 +1,32 @@ +/* + * ARM translation: AArch32 Neon instructions + * + * Copyright (c) 2003 Fabrice Bellard + * Copyright (c) 2005-2007 CodeSourcery + * Copyright (c) 2007 OpenedHand, Ltd. + * Copyright (c) 2020 Linaro, Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + */ + +/* + * This file is intended to be included from translate.c; it uses + * some macros and definitions provided by that file. + * It might be possible to convert it to a standalone .c file eventually. + */ + +/* Include the generated Neon decoder */ +#include "decode-neon-dp.inc.c" +#include "decode-neon-ls.inc.c" +#include "decode-neon-shared.inc.c" diff --git a/target/arm/translate.c b/target/arm/translate.c index ab5324a5aaa..bd766391e9e 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -1313,8 +1313,9 @@ static TCGv_ptr vfp_reg_ptr(bool dp, int reg) =20 #define ARM_CP_RW_BIT (1 << 20) =20 -/* Include the VFP decoder */ +/* Include the VFP and Neon decoders */ #include "translate-vfp.inc.c" +#include "translate-neon.inc.c" =20 static inline void iwmmxt_load_reg(TCGv_i64 var, int reg) { @@ -10949,7 +10950,10 @@ static void disas_arm_insn(DisasContext *s, unsign= ed int insn) /* Unconditional instructions. */ /* TODO: Perhaps merge these into one decodetree output file. */ if (disas_a32_uncond(s, insn) || - disas_vfp_uncond(s, insn)) { + disas_vfp_uncond(s, insn) || + disas_neon_dp(s, insn) || + disas_neon_ls(s, insn) || + disas_neon_shared(s, insn)) { return; } /* fall back to legacy decoder */ @@ -11102,6 +11106,33 @@ static void disas_thumb2_insn(DisasContext *s, uin= t32_t insn) ARCH(6T2); } =20 + if ((insn & 0xef000000) =3D=3D 0xef000000) { + /* + * T32 encodings 0b111p_1111_qqqq_qqqq_qqqq_qqqq_qqqq_qqqq + * transform into + * A32 encodings 0b1111_001p_qqqq_qqqq_qqqq_qqqq_qqqq_qqqq + */ + uint32_t a32_insn =3D (insn & 0xe2ffffff) | + ((insn & (1 << 28)) >> 4) | (1 << 28); + + if (disas_neon_dp(s, a32_insn)) { + return; + } + } + + if ((insn & 0xff100000) =3D=3D 0xf9000000) { + /* + * T32 encodings 0b1111_1001_ppp0_qqqq_qqqq_qqqq_qqqq_qqqq + * transform into + * A32 encodings 0b1111_0100_ppp0_qqqq_qqqq_qqqq_qqqq_qqqq + */ + uint32_t a32_insn =3D (insn & 0x00ffffff) | 0xf4000000; + + if (disas_neon_ls(s, a32_insn)) { + return; + } + } + /* * TODO: Perhaps merge these into one decodetree output file. * Note disas_vfp is written for a32 with cond field in the @@ -11109,6 +11140,7 @@ static void disas_thumb2_insn(DisasContext *s, uint= 32_t insn) */ if (disas_t32(s, insn) || disas_vfp_uncond(s, insn) || + disas_neon_shared(s, insn) || ((insn >> 28) =3D=3D 0xe && disas_vfp(s, insn))) { return; } diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode new file mode 100644 index 00000000000..c89a1a58591 --- /dev/null +++ b/target/arm/neon-dp.decode @@ -0,0 +1,29 @@ +# AArch32 Neon data-processing instruction descriptions +# +# Copyright (c) 2020 Linaro, Ltd +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, see . + +# +# This file is processed by scripts/decodetree.py +# + +# Encodings for Neon data processing instructions where the T32 encoding +# is a simple transformation of the A32 encoding. +# More specifically, this file covers instructions where the A32 encoding = is +# 0b1111_001p_qqqq_qqqq_qqqq_qqqq_qqqq_qqqq +# and the T32 encoding is +# 0b111p_1111_qqqq_qqqq_qqqq_qqqq_qqqq_qqqq +# This file works on the A32 encoding only; calling code for T32 has to +# transform the insn into the A32 version first. diff --git a/target/arm/neon-ls.decode b/target/arm/neon-ls.decode new file mode 100644 index 00000000000..2b16c9256df --- /dev/null +++ b/target/arm/neon-ls.decode @@ -0,0 +1,29 @@ +# AArch32 Neon load/store instruction descriptions +# +# Copyright (c) 2020 Linaro, Ltd +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, see . + +# +# This file is processed by scripts/decodetree.py +# + +# Encodings for Neon load/store instructions where the T32 encoding +# is a simple transformation of the A32 encoding. +# More specifically, this file covers instructions where the A32 encoding = is +# 0b1111_0100_xxx0_xxxx_xxxx_xxxx_xxxx_xxxx +# and the T32 encoding is +# 0b1111_1001_xxx0_xxxx_xxxx_xxxx_xxxx_xxxx +# This file works on the A32 encoding only; calling code for T32 has to +# transform the insn into the A32 version first. diff --git a/target/arm/neon-shared.decode b/target/arm/neon-shared.decode new file mode 100644 index 00000000000..3aea7c5e188 --- /dev/null +++ b/target/arm/neon-shared.decode @@ -0,0 +1,27 @@ +# AArch32 Neon instruction descriptions +# +# Copyright (c) 2020 Linaro, Ltd +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, see . + +# +# This file is processed by scripts/decodetree.py +# + +# Encodings for Neon instructions whose encoding is the same for +# both A32 and T32. + +# More specifically, this covers: +# 2reg scalar ext: 0b1111_1110_xxxx_xxxx_xxxx_1x0x_xxxx_xxxx +# 3same ext: 0b1111_110x_xxxx_xxxx_xxxx_1x0x_xxxx_xxxx --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588270404; cv=none; d=zohomail.com; s=zohoarc; b=Zot5iWx4RrnjxIdOW9wqwt3sEOX1tyWsArWGWZxvrXPrGKQ9sMyjFF8xTHQLhX2dthNmedT+Zu2rMx2xuI5duwQRfPEGtEFmVuquMRBPqfsh9jmcBGv3zsW6fl3UAo5C0cVGyrVCusZXJGWR/lQ9fF0gMSgw3U4MYuLYzLPtS2A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588270404; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=tUEcahS4A8n7HVNrT331LibayVMgWGTo+zYLEgvzurM=; b=ItCR0ZG5o4eDzgxb8ucBA1A8trOJA3kKKdVdgIquWEi1hLNG0EhLNM93t9fOgcr5IaoTlY/K5ve4PTfC0E+TMtXFq6U6LV447dSvSE6Z7UhQ0R+u0RolH7LEjA4y/WMe9NLCKp7zZxUa4NHYT8+b2nKgY8lPNbRwjV3Umvq7NPE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588270404876276.1747277896759; Thu, 30 Apr 2020 11:13:24 -0700 (PDT) Received: from localhost ([::1]:39944 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDgZ-0004qy-Hh for importer@patchew.org; Thu, 30 Apr 2020 14:13:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36052) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDdt-0001OG-GX for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdX-0000VQ-BX for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:37 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:54353) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdW-0000MC-My for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:14 -0400 Received: by mail-wm1-x341.google.com with SMTP id h4so2975614wmb.4 for ; Thu, 30 Apr 2020 11:10:13 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10: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 :mime-version:content-transfer-encoding; bh=tUEcahS4A8n7HVNrT331LibayVMgWGTo+zYLEgvzurM=; b=F5FX/gXY8ZO/bpRl3UCxFjzk+KYebVfENnudP7qMLN+eMPM2CMkmK4+vW2z/11xEYH kUSYmSsrglNvXYJFLbL9yr9r/Y0d8n90llEMb1EcPaJRm3A2FYgZk90s+J67+Yqv59vu rX557aBJGtbpHSgxY9gOXXtV9qdyD6AyngdMMnr9OTE1HuRNajYAYVBpYSFJfjrIk7MO hvD95jijjZRXTI5fxAhnW54AIBp55W69tzJBdx3igLFmw6/GA6X8I578NwAhlK2m64Zv yloBuBJUFJFX6wBuxH2aw62MUZxx4AE658Vy9UujhTnnH8RObOF7r1ykUZ4h/AFl2jPZ +nxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tUEcahS4A8n7HVNrT331LibayVMgWGTo+zYLEgvzurM=; b=Z5dHi7/AjCtN+1MrhWsAP98jeqkHjsyFN89LVI6KXyElFhiMxWh9IXdXXwAgJo4IJP SFq9Y//a4F2O7zFjcE0Fr3Ktelyyx9u6Z4y+HoIzquqDaAlgeXtaGyZiWk/rO9xcZBQm 3TQWyDgeK1TPh/IVrdqmrc88mIbGWP6bQIw8yFCYhA5nBtqmH0y/60Dwzzsc3bAhm6s5 oLtUNsd8P8Gv547rW74hI8MnsJdpTMPqykufISSa+qY8C2qvtfrDyiOl16MaLj5pzvnX 3NKZS2tSSJihh/OjAoZFNRI9o5JA2VE5DoYrTDHP9Z/ojCe0UM6Xb+XpeAr3c/DfrTak qy5w== X-Gm-Message-State: AGi0PubW5pyCvA937w8zlepTPIifG3U2cr6ISSGrDdp1olM7Jtus/B91 sk4xdt6BVuIwTORnN9S076TDAmh+JgckAQ== X-Google-Smtp-Source: APiQypJSlKD9GQWTk693wI4sCHJIcIprU6Ms0mu5k3QVXq1C+y2CSITiwhglr+0AFHjvHG5cpMB4Pw== X-Received: by 2002:a05:600c:210:: with SMTP id 16mr4146097wmi.57.1588270211970; Thu, 30 Apr 2020 11:10:11 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 04/36] target/arm: Convert VCMLA (vector) to decodetree Date: Thu, 30 Apr 2020 19:09:31 +0100 Message-Id: <20200430181003.21682-5-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::341; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x341.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::341 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the VCMLA (vector) insns in the 3same extension group to decodetree. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 37 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 11 +--------- target/arm/neon-shared.decode | 11 ++++++++++ 3 files changed, 49 insertions(+), 10 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index a33e81ba3ab..0baae1338a3 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -30,3 +30,40 @@ #include "decode-neon-dp.inc.c" #include "decode-neon-ls.inc.c" #include "decode-neon-shared.inc.c" + +static bool trans_VCMLA(DisasContext *s, arg_VCMLA *a) +{ + int opr_sz; + TCGv_ptr fpst; + gen_helper_gvec_3_ptr *fn_gvec_ptr; + + if (!dc_isar_feature(aa32_vcma, s) + || (!a->size && !dc_isar_feature(aa32_fp16_arith, s))) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if ((a->vn | a->vm | a->vd) & a->q) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + opr_sz =3D (1 + a->q) * 8; + fpst =3D get_fpstatus_ptr(1); + fn_gvec_ptr =3D a->size ? gen_helper_gvec_fcmlas : gen_helper_gvec_fcm= lah; + tcg_gen_gvec_3_ptr(vfp_reg_offset(1, a->vd), + vfp_reg_offset(1, a->vn), + vfp_reg_offset(1, a->vm), + fpst, opr_sz, opr_sz, a->rot, + fn_gvec_ptr); + tcg_temp_free_ptr(fpst); + return true; +} diff --git a/target/arm/translate.c b/target/arm/translate.c index bd766391e9e..17167634e29 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -7048,16 +7048,7 @@ static int disas_neon_insn_3same_ext(DisasContext *s= , uint32_t insn) bool is_long =3D false, q =3D extract32(insn, 6, 1); bool ptr_is_env =3D false; =20 - if ((insn & 0xfe200f10) =3D=3D 0xfc200800) { - /* VCMLA -- 1111 110R R.1S .... .... 1000 ...0 .... */ - int size =3D extract32(insn, 20, 1); - data =3D extract32(insn, 23, 2); /* rot */ - if (!dc_isar_feature(aa32_vcma, s) - || (!size && !dc_isar_feature(aa32_fp16_arith, s))) { - return 1; - } - fn_gvec_ptr =3D size ? gen_helper_gvec_fcmlas : gen_helper_gvec_fc= mlah; - } else if ((insn & 0xfea00f10) =3D=3D 0xfc800800) { + if ((insn & 0xfea00f10) =3D=3D 0xfc800800) { /* VCADD -- 1111 110R 1.0S .... .... 1000 ...0 .... */ int size =3D extract32(insn, 20, 1); data =3D extract32(insn, 24, 1); /* rot */ diff --git a/target/arm/neon-shared.decode b/target/arm/neon-shared.decode index 3aea7c5e188..d1d707a56d5 100644 --- a/target/arm/neon-shared.decode +++ b/target/arm/neon-shared.decode @@ -25,3 +25,14 @@ # More specifically, this covers: # 2reg scalar ext: 0b1111_1110_xxxx_xxxx_xxxx_1x0x_xxxx_xxxx # 3same ext: 0b1111_110x_xxxx_xxxx_xxxx_1x0x_xxxx_xxxx + +# VFP/Neon register fields; same as vfp.decode +%vm_dp 5:1 0:4 +%vm_sp 0:4 5:1 +%vn_dp 7:1 16:4 +%vn_sp 16:4 7:1 +%vd_dp 22:1 12:4 +%vd_sp 12:4 22:1 + +VCMLA 1111 110 rot:2 . 1 size:1 .... .... 1000 . q:1 . 0 .... \ + vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588270583; cv=none; d=zohomail.com; s=zohoarc; b=Vm6TefIs5F6fPS3LpRFkmEvC4Hfx6SxZS8kQGFwKohTlf6aAOJKib54DRJ8YoupFK2vbi+hkn4HlxhgILa7F7mzBjAw1ShE+sPKTH9Fs2URHTnj33Ynrc/trUCIPyYb0ZqLmLtyAko/h0pLmmbKjrmw70LilqoWitoVXObEE3C4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588270583; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=XnXDSVyzZWZjdX4ANWhTglZeil8eXcC0WohiZGPb7HI=; b=OrXmN932pBGx2IaI/OP7CNjlfRP7iJArR8RkJgMQ0pRhoOavTForgWtgfe6N1ToEZIhh4+km0iCRufT9JvJqcn+1mViRAFW7ZBuK2QyjJyxsvDd9txh2w9CXMe0PxtGcjyDDNQ9Eb2m0TRwE4MmSQK+JUD6fKEUGPtMl4Gr37zc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588270583100199.6586983097983; Thu, 30 Apr 2020 11:16:23 -0700 (PDT) Received: from localhost ([::1]:48248 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDjR-0001Iq-Ol for importer@patchew.org; Thu, 30 Apr 2020 14:16:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36070) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDdv-0001Ok-D5 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdX-0000VZ-Cd for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:39 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:37582) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdW-0000QE-OW for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:14 -0400 Received: by mail-wm1-x343.google.com with SMTP id z6so3079372wml.2 for ; Thu, 30 Apr 2020 11:10:14 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XnXDSVyzZWZjdX4ANWhTglZeil8eXcC0WohiZGPb7HI=; b=ul7PTTVKdJRlwfCnzQJ/lmbwfvvxYv3rrV/TXzbAoU187elCk50ci5g11G9TbdC/uB rJMSK4CfqzvtXWUQB0hrCEgh6AKg0pPwDpLy6SgTQwQQ94KOjS6Q1bvTON4HkAwPVmFD EUoiFl9erPToF+RpzmLH9osuEdFyn6UPkEF15uiV6xEtkrlI0J+LduHQTk0cZMV405Ug epvmY0euMoIyU5WdLA3X8sPXm+DZ5x4MZVvS3AOVrFrbXSUvvZqgBvBOVfrCenqX7brd kOcfssYlm9g1181LUyXvi7nOgOzVENbpmQJ3D3doZ6ZMyCSvqsJ2ITvE1w5b38S+5THI V6MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=XnXDSVyzZWZjdX4ANWhTglZeil8eXcC0WohiZGPb7HI=; b=NUJjxrSjyeCr9HeMPWlLEBICkjUj651gaGqv6fwhiRKl1gRmIfCm4KX1Nvhdy2ulUp I2gHnm7H1ZZBBrr7gN7jrX1NeM19m3nKba5+LIfnFBbemwKVOhowFvyr3l3pTok43+6D fJyznQGyW6tZrSDYG+8XDOK+hYfwpPZTAnUaspfdA6N1oqvixQcRvRJ1h7FY8jPanFMt hDmRJywOrDKUqTloMYAk6p0DHQAk01LcG8islzG9jfRf2VC2NsaBHtEV33b8g1m1Z3Je ZHj1ygw+cosfZkuVf1vVb8z3POYQ84zY3cEU3Q+pE0pJFZxN2HsOr9deMX0irOlmD/LP zacQ== X-Gm-Message-State: AGi0Pub4u86Um2dcop0hkZL0GvqQw41q58YiMxFuzQhnOdwlTru96D73 R46sQPoNnwQpKiL1vpl8nz/F5A== X-Google-Smtp-Source: APiQypJ3m8MA2RKDWt6CJZ5kby130yQyfjnzc7mBLuub37jlObF8xxNJvLkc/l7sGvypXDUhUefQ4Q== X-Received: by 2002:a1c:544c:: with SMTP id p12mr4284482wmi.88.1588270213204; Thu, 30 Apr 2020 11:10:13 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 05/36] target/arm: Convert VCADD (vector) to decodetree Date: Thu, 30 Apr 2020 19:09:32 +0100 Message-Id: <20200430181003.21682-6-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::343; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x343.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::343 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the VCADD (vector) insns to decodetree. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 37 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 11 +--------- target/arm/neon-shared.decode | 3 +++ 3 files changed, 41 insertions(+), 10 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 0baae1338a3..28011e88d9e 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -67,3 +67,40 @@ static bool trans_VCMLA(DisasContext *s, arg_VCMLA *a) tcg_temp_free_ptr(fpst); return true; } + +static bool trans_VCADD(DisasContext *s, arg_VCADD *a) +{ + int opr_sz; + TCGv_ptr fpst; + gen_helper_gvec_3_ptr *fn_gvec_ptr; + + if (!dc_isar_feature(aa32_vcma, s) + || (!a->size && !dc_isar_feature(aa32_fp16_arith, s))) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if ((a->vn | a->vm | a->vd) & a->q) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + opr_sz =3D (1 + a->q) * 8; + fpst =3D get_fpstatus_ptr(1); + fn_gvec_ptr =3D a->size ? gen_helper_gvec_fcadds : gen_helper_gvec_fca= ddh; + tcg_gen_gvec_3_ptr(vfp_reg_offset(1, a->vd), + vfp_reg_offset(1, a->vn), + vfp_reg_offset(1, a->vm), + fpst, opr_sz, opr_sz, a->rot, + fn_gvec_ptr); + tcg_temp_free_ptr(fpst); + return true; +} diff --git a/target/arm/translate.c b/target/arm/translate.c index 17167634e29..571b64aa89d 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -7048,16 +7048,7 @@ static int disas_neon_insn_3same_ext(DisasContext *s= , uint32_t insn) bool is_long =3D false, q =3D extract32(insn, 6, 1); bool ptr_is_env =3D false; =20 - if ((insn & 0xfea00f10) =3D=3D 0xfc800800) { - /* VCADD -- 1111 110R 1.0S .... .... 1000 ...0 .... */ - int size =3D extract32(insn, 20, 1); - data =3D extract32(insn, 24, 1); /* rot */ - if (!dc_isar_feature(aa32_vcma, s) - || (!size && !dc_isar_feature(aa32_fp16_arith, s))) { - return 1; - } - fn_gvec_ptr =3D size ? gen_helper_gvec_fcadds : gen_helper_gvec_fc= addh; - } else if ((insn & 0xfeb00f00) =3D=3D 0xfc200d00) { + if ((insn & 0xfeb00f00) =3D=3D 0xfc200d00) { /* V[US]DOT -- 1111 1100 0.10 .... .... 1101 .Q.U .... */ bool u =3D extract32(insn, 4, 1); if (!dc_isar_feature(aa32_dp, s)) { diff --git a/target/arm/neon-shared.decode b/target/arm/neon-shared.decode index d1d707a56d5..ed65dae1809 100644 --- a/target/arm/neon-shared.decode +++ b/target/arm/neon-shared.decode @@ -36,3 +36,6 @@ =20 VCMLA 1111 110 rot:2 . 1 size:1 .... .... 1000 . q:1 . 0 .... \ vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp + +VCADD 1111 110 rot:1 1 . 0 size:1 .... .... 1000 . q:1 . 0 .... \ + vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588270802; cv=none; d=zohomail.com; s=zohoarc; b=kt/rgjR786rmK+xYkG+ZrabvsnfRubF4hvCx9b/wIcRhlu+Q9ytD+trfyajuyuDnDDsQ6Gw7+yyyqhyABKK39NvyNVWiFMJqZD4Dw6SDYxRrP6S+3EYS61bVGWtl8LTqlHq0hlUfnBJ40ITtRUkqrkY2WGPilhCjwXbRPYY832M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588270802; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=pxfsuF90gF/QlbN2JtQ5HjFSNuD7mNzJPj+VVM2zoKo=; b=GLQ+4uHEBrzq2rPNAH8T3R6yKdJ+MP61hKzgqjdxOKVvKaMvBz/mCqrS4jNDFjFyWm/T7UVHGOyDHMu0uMl3U9lkBSDTYgfUlwv5gOIkCByI5sKEvzh3/VYtRfkHrxtix2pLi9ZUbG975uW8Swfk7OWiOXRZVnIFCCDPvc1LWP4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588270802191769.5103358070741; Thu, 30 Apr 2020 11:20:02 -0700 (PDT) Received: from localhost ([::1]:58356 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDmy-0006Rz-QR for importer@patchew.org; Thu, 30 Apr 2020 14:20:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36094) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDdx-0001Ou-4j for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdY-0000Za-6a for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:40 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:37581) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdX-0000UB-Q6 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:15 -0400 Received: by mail-wm1-x341.google.com with SMTP id z6so3079445wml.2 for ; Thu, 30 Apr 2020 11:10:15 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10: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 :mime-version:content-transfer-encoding; bh=pxfsuF90gF/QlbN2JtQ5HjFSNuD7mNzJPj+VVM2zoKo=; b=cwZPcSthHybqTQCL3yyXcxaqrdS+/yNB03OCiNsLxoGAgCtofedkUWy4//0ZDRIzG/ ZMg6lxJUMBw3XmCTaneK1318a8nQZMlBl7QLLq3Mzl22x8ccAU++uQfG5kSOuaTu4+KB gBBfstJDRJiC865ATcltSgo0R45Lb1vF1n19d83/iLKLMJUvQ9v/I17xcah07wKyAmx0 MAYZMgjBebzdws7AxXVCrpJdK5cdlgB0XbF/EwWAR+Kz9pEQEMlY7YPJZqu79sgaffiq IVoYrh+7lSwifSgDhRyc56odpb/TP6AJQWuI1+/p4jW3qjbLZD0b+Q4mD31d7TpnPTuQ BJFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pxfsuF90gF/QlbN2JtQ5HjFSNuD7mNzJPj+VVM2zoKo=; b=ueGrA8rScn0CxWNJGIrv1rCzdqMeWnKXvNn933BavYLUE7sbyubEH4v0JOlwIe18gX DBYeKc2mW2Vm1JEWTwHzTDr4Ef4QKaNlMymU4lx7F4/+xk4WC97yuEeVuOvc72UVkb// OkoYtRPL0lVutxT3/gF0o+HpDaFTzlhSzFpiJK65soFp+sOscop1uwIvy1DWOFBrTXwv yXpljaIA5EL+tTAfSdGeWA5Ii/xQZ8nQIUhzVGiSkgwLrkhCrKJ9z1H2wB6u+ShaL9K3 QQ4dHYlD9SXpcJzgl+jcVcsPSo+2IsMMruSW7GMdwIogn9c0I1XSAznNa3sg/K/f3vfu kicg== X-Gm-Message-State: AGi0PuZSLXtqhvLB6WR5wfHcgPIE3JpVIaKLZsC6ITc4a/r8xFG8LXpl 9rEp5IalHB3tJqZWhg/HI5LySQ== X-Google-Smtp-Source: APiQypI+qzLiS2kMMzCQu6roy6QVQqeuOH3ANWr1t3WXVv2VtCXlb81YJJjjWw3oCJt/MHfxCQZCKg== X-Received: by 2002:a1c:8141:: with SMTP id c62mr4305922wmd.87.1588270214400; Thu, 30 Apr 2020 11:10:14 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 06/36] target/arm: Convert V[US]DOT (vector) to decodetree Date: Thu, 30 Apr 2020 19:09:33 +0100 Message-Id: <20200430181003.21682-7-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::341; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x341.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::341 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the V[US]DOT (vector) insns to decodetree. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 32 ++++++++++++++++++++++++++++++++ target/arm/translate.c | 9 +-------- target/arm/neon-shared.decode | 4 ++++ 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 28011e88d9e..6537506c5b6 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -104,3 +104,35 @@ static bool trans_VCADD(DisasContext *s, arg_VCADD *a) tcg_temp_free_ptr(fpst); return true; } + +static bool trans_VDOT(DisasContext *s, arg_VDOT *a) +{ + int opr_sz; + gen_helper_gvec_3 *fn_gvec; + + if (!dc_isar_feature(aa32_dp, s)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if ((a->vn | a->vm | a->vd) & a->q) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + opr_sz =3D (1 + a->q) * 8; + fn_gvec =3D a->u ? gen_helper_gvec_udot_b : gen_helper_gvec_sdot_b; + tcg_gen_gvec_3_ool(vfp_reg_offset(1, a->vd), + vfp_reg_offset(1, a->vn), + vfp_reg_offset(1, a->vm), + opr_sz, opr_sz, 0, fn_gvec); + return true; +} diff --git a/target/arm/translate.c b/target/arm/translate.c index 571b64aa89d..1190ad17cfd 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -7048,14 +7048,7 @@ static int disas_neon_insn_3same_ext(DisasContext *s= , uint32_t insn) bool is_long =3D false, q =3D extract32(insn, 6, 1); bool ptr_is_env =3D false; =20 - if ((insn & 0xfeb00f00) =3D=3D 0xfc200d00) { - /* V[US]DOT -- 1111 1100 0.10 .... .... 1101 .Q.U .... */ - bool u =3D extract32(insn, 4, 1); - if (!dc_isar_feature(aa32_dp, s)) { - return 1; - } - fn_gvec =3D u ? gen_helper_gvec_udot_b : gen_helper_gvec_sdot_b; - } else if ((insn & 0xff300f10) =3D=3D 0xfc200810) { + if ((insn & 0xff300f10) =3D=3D 0xfc200810) { /* VFM[AS]L -- 1111 1100 S.10 .... .... 1000 .Q.1 .... */ int is_s =3D extract32(insn, 23, 1); if (!dc_isar_feature(aa32_fhm, s)) { diff --git a/target/arm/neon-shared.decode b/target/arm/neon-shared.decode index ed65dae1809..c9c641905d3 100644 --- a/target/arm/neon-shared.decode +++ b/target/arm/neon-shared.decode @@ -39,3 +39,7 @@ VCMLA 1111 110 rot:2 . 1 size:1 .... .... 1000 .= q:1 . 0 .... \ =20 VCADD 1111 110 rot:1 1 . 0 size:1 .... .... 1000 . q:1 . 0 .... \ vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp + +# VUDOT and VSDOT +VDOT 1111 110 00 . 10 .... .... 1101 . q:1 . u:1 .... \ + vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271168; cv=none; d=zohomail.com; s=zohoarc; b=Fm/ot56k35a/MUGdz5f0PhFgh963N2BFb6QtIh8axnCGekyUdVYDcY5owmFXzo3NLYnAxHp3cYVaIrwzjpmv4/3V424fYc0WXqm8RV3+1t1IibTMAunfkhSEZBUy7bEJlTz0wb+ZGtM56qvMSaYYGIZUtP2B+G0lgO1JiwbMcdc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271168; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=BlZoUtI4rHnNV/LtPnuuJ8WTY5HEIIJvinnsYBbRVf4=; b=kojc9BI8VdqgqG0lUHkQ9m+lLgO4yRX1M44ekkOPlc/6RIJdWQPek4lcZoIgElbLytTnOdP8D1PEpMALKnpxiwCB1Y7nLDoM1ytKojJDeVi825Z7Bni6f6fxYlFKy3NgJGGmZhga1jFvobRiEKFrmykMWjysvO2T2Aez9zo0ABQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271168954755.2603652338263; Thu, 30 Apr 2020 11:26:08 -0700 (PDT) Received: from localhost ([::1]:49130 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDst-00078w-Fs for importer@patchew.org; Thu, 30 Apr 2020 14:26:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36190) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDe5-0001XT-HZ for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdc-0000mx-BE for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:49 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:34860) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdb-0000Zt-KH for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:19 -0400 Received: by mail-wm1-x342.google.com with SMTP id r26so3079992wmh.0 for ; Thu, 30 Apr 2020 11:10:16 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BlZoUtI4rHnNV/LtPnuuJ8WTY5HEIIJvinnsYBbRVf4=; b=f0YWYJqA9qJCNasqX9aNdchkIpMs50vxJHCchlxSqx+ywUOr2etd/foPXEwSEYSe9+ 52BQg3e8pklNpPyIKQ4dUaJCios3FFQCzvgrMsZV6Q0F4pMPsmvkDGyDvORHupXz9Tsj vpk+AoMXVrGrdgKuU+1IM6zlFS5oO5LbD1QpsaO5actSYYG33jXOmV7Fvhh0vbtiAhdt oiHjwYLDwNHbR5TNAw2GakZuTKk1d6ViogKCaee5OfNFt/uP6hQcLgQiSD/LrHOh2ZBM 9znAX8hlSCaJIFfA7MirBGGze7zlUuVK4Ke/la6fL7bWVmk1YPqJdjYHUOTfME9h70Ph uMBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BlZoUtI4rHnNV/LtPnuuJ8WTY5HEIIJvinnsYBbRVf4=; b=I8WJih0rGkXTF6cf6CAOaWTFDrLKoLuYMaQ7CUgSMEbgTnqBPrgbxsHqN2xao3Ax7X 7Xugc5zOSJEEHwVZajZjBE7fBULI+V3860wKmtyDKtLga/SSpV34BcSszjDz1kphhA8E lSSFX/BctaXij0kqsAUNTQTgUJ1QUM7rcPXT/SxWzhorTU9E00vgvECDiVUiJiKYo9hh w03hfTIvNiejgOuNBk8dfExqZ1Cv6neG34lsk8cIIUbOB0HUV2J84ZNMXOxJfOekhBlz MRC13NfcdLo8rZt8NLmbtC4QdgPsfVBhWCf1pNjEeGAqqZTEoRMtfGQCGt8j9uRXnqf3 28tA== X-Gm-Message-State: AGi0PuaYM/jEDmmmEVa+tZ5Y/AtZlR3SZud8SgN/STvfyKFJ9s+NIGSu 5Pf5EpcXjoSWgmKaQu8Oayvv2Q== X-Google-Smtp-Source: APiQypI3p8Ng/Ic1CBKgjA51QSxapzDw1N8Apij/EIm/9uYtbX+4qXcYc6oG37xd9KvSBtObVN47cA== X-Received: by 2002:a1c:7f86:: with SMTP id a128mr4296418wmd.95.1588270215581; Thu, 30 Apr 2020 11:10:15 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 07/36] target/arm: Convert VFM[AS]L (vector) to decodetree Date: Thu, 30 Apr 2020 19:09:34 +0100 Message-Id: <20200430181003.21682-8-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::342; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x342.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::342 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the VFM[AS]L (vector) insns to decodetree. This is the last insn in the legacy decoder for the 3same_ext group, so we can delete the legacy decoder function for the group entirely. Note that in disas_thumb2_insn() the parts of this encoding space where the decodetree decoder returns false will correctly be directed to illegal_op by the "(insn & (1 << 28))" check so they won't fall into disas_coproc_insn() by mistake. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 31 +++++++++++ target/arm/translate.c | 92 +-------------------------------- target/arm/neon-shared.decode | 6 +++ 3 files changed, 38 insertions(+), 91 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 6537506c5b6..6c58abc54b5 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -136,3 +136,34 @@ static bool trans_VDOT(DisasContext *s, arg_VDOT *a) opr_sz, opr_sz, 0, fn_gvec); return true; } + +static bool trans_VFML(DisasContext *s, arg_VFML *a) +{ + int opr_sz; + + if (!dc_isar_feature(aa32_fhm, s)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + (a->vd & 0x10)) { + return false; + } + + if (a->vd & a->q) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + opr_sz =3D (1 + a->q) * 8; + tcg_gen_gvec_3_ptr(vfp_reg_offset(1, a->vd), + vfp_reg_offset(a->q, a->vn), + vfp_reg_offset(a->q, a->vm), + cpu_env, opr_sz, opr_sz, a->s, /* is_2 =3D=3D 0 */ + gen_helper_gvec_fmlal_a32); + return true; +} diff --git a/target/arm/translate.c b/target/arm/translate.c index 1190ad17cfd..caa18c8c56c 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -7032,84 +7032,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) return 0; } =20 -/* Advanced SIMD three registers of the same length extension. - * 31 25 23 22 20 16 12 11 10 9 8 3 = 0 - * +---------------+-----+---+-----+----+----+---+----+---+----+---------+= ----+ - * | 1 1 1 1 1 1 0 | op1 | D | op2 | Vn | Vd | 1 | o3 | 0 | o4 | N Q M U |= Vm | - * +---------------+-----+---+-----+----+----+---+----+---+----+---------+= ----+ - */ -static int disas_neon_insn_3same_ext(DisasContext *s, uint32_t insn) -{ - gen_helper_gvec_3 *fn_gvec =3D NULL; - gen_helper_gvec_3_ptr *fn_gvec_ptr =3D NULL; - int rd, rn, rm, opr_sz; - int data =3D 0; - int off_rn, off_rm; - bool is_long =3D false, q =3D extract32(insn, 6, 1); - bool ptr_is_env =3D false; - - if ((insn & 0xff300f10) =3D=3D 0xfc200810) { - /* VFM[AS]L -- 1111 1100 S.10 .... .... 1000 .Q.1 .... */ - int is_s =3D extract32(insn, 23, 1); - if (!dc_isar_feature(aa32_fhm, s)) { - return 1; - } - is_long =3D true; - data =3D is_s; /* is_2 =3D=3D 0 */ - fn_gvec_ptr =3D gen_helper_gvec_fmlal_a32; - ptr_is_env =3D true; - } else { - return 1; - } - - VFP_DREG_D(rd, insn); - if (rd & q) { - return 1; - } - if (q || !is_long) { - VFP_DREG_N(rn, insn); - VFP_DREG_M(rm, insn); - if ((rn | rm) & q & !is_long) { - return 1; - } - off_rn =3D vfp_reg_offset(1, rn); - off_rm =3D vfp_reg_offset(1, rm); - } else { - rn =3D VFP_SREG_N(insn); - rm =3D VFP_SREG_M(insn); - off_rn =3D vfp_reg_offset(0, rn); - off_rm =3D vfp_reg_offset(0, rm); - } - - if (s->fp_excp_el) { - gen_exception_insn(s, s->pc_curr, EXCP_UDEF, - syn_simd_access_trap(1, 0xe, false), s->fp_excp= _el); - return 0; - } - if (!s->vfp_enabled) { - return 1; - } - - opr_sz =3D (1 + q) * 8; - if (fn_gvec_ptr) { - TCGv_ptr ptr; - if (ptr_is_env) { - ptr =3D cpu_env; - } else { - ptr =3D get_fpstatus_ptr(1); - } - tcg_gen_gvec_3_ptr(vfp_reg_offset(1, rd), off_rn, off_rm, ptr, - opr_sz, opr_sz, data, fn_gvec_ptr); - if (!ptr_is_env) { - tcg_temp_free_ptr(ptr); - } - } else { - tcg_gen_gvec_3_ool(vfp_reg_offset(1, rd), off_rn, off_rm, - opr_sz, opr_sz, data, fn_gvec); - } - return 0; -} - /* Advanced SIMD two registers and a scalar extension. * 31 24 23 22 20 16 12 11 10 9 8 3 = 0 * +-----------------+----+---+----+----+----+---+----+---+----+---------+= ----+ @@ -10956,12 +10878,6 @@ static void disas_arm_insn(DisasContext *s, unsign= ed int insn) } } } - } else if ((insn & 0x0e000a00) =3D=3D 0x0c000800 - && arm_dc_feature(s, ARM_FEATURE_V8)) { - if (disas_neon_insn_3same_ext(s, insn)) { - goto illegal_op; - } - return; } else if ((insn & 0x0f000a00) =3D=3D 0x0e000800 && arm_dc_feature(s, ARM_FEATURE_V8)) { if (disas_neon_insn_2reg_scalar_ext(s, insn)) { @@ -11145,15 +11061,9 @@ static void disas_thumb2_insn(DisasContext *s, uin= t32_t insn) } break; } - if ((insn & 0xfe000a00) =3D=3D 0xfc000800 + if ((insn & 0xff000a00) =3D=3D 0xfe000800 && arm_dc_feature(s, ARM_FEATURE_V8)) { /* The Thumb2 and ARM encodings are identical. */ - if (disas_neon_insn_3same_ext(s, insn)) { - goto illegal_op; - } - } else if ((insn & 0xff000a00) =3D=3D 0xfe000800 - && arm_dc_feature(s, ARM_FEATURE_V8)) { - /* The Thumb2 and ARM encodings are identical. */ if (disas_neon_insn_2reg_scalar_ext(s, insn)) { goto illegal_op; } diff --git a/target/arm/neon-shared.decode b/target/arm/neon-shared.decode index c9c641905d3..90cd5c871e2 100644 --- a/target/arm/neon-shared.decode +++ b/target/arm/neon-shared.decode @@ -43,3 +43,9 @@ VCADD 1111 110 rot:1 1 . 0 size:1 .... .... 1000= . q:1 . 0 .... \ # VUDOT and VSDOT VDOT 1111 110 00 . 10 .... .... 1101 . q:1 . u:1 .... \ vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp + +# VFM[AS]L +VFML 1111 110 0 s:1 . 10 .... .... 1000 . 0 . 1 .... \ + vm=3D%vm_sp vn=3D%vn_sp vd=3D%vd_dp q=3D0 +VFML 1111 110 0 s:1 . 10 .... .... 1000 . 1 . 1 .... \ + vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp q=3D1 --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588270637; cv=none; d=zohomail.com; s=zohoarc; b=luCRomBRPsl6y6xpLZXGxojrgiqaP6Fwg+VyWlkOK9T0QmiaWgfKUmUdqzB1Ojk+n4ACOz5XBZQWZ3Be5oxoLAW7xHimwBpMOGhDR95x2xj2hPWs7pF2PmBRvp0XFWJ56zmi/9aBtrCg7cGkGvlMZuFAEuG5i3J3GEjjB68DkAg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588270637; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=lz8mXOgIyBmnqYSstj+GgsJWNWgYl7m155/mR9kGoOM=; b=QUtyLOdKFKwkCJph//HCB7kI2JYhwscoq5TS1PoJGWEG6BPSyWqy1Zma3OaYqaJ765qXiC0ax+F/azKIb2LmvI9BVFJ87cAHLazRXdw47Grkx+/eNVGjXOfBoQ0Y8EiXuLDUHfXBu9Ia7vy88572RCekrcGuAO+da1tVdSwAeis= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 15882706371285.9517728370649365; Thu, 30 Apr 2020 11:17:17 -0700 (PDT) Received: from localhost ([::1]:50386 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDkJ-0002qq-OL for importer@patchew.org; Thu, 30 Apr 2020 14:17:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36164) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDe4-0001Vc-Nz for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdc-0000ms-Df for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:48 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:40118) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdb-0000gk-I4 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:19 -0400 Received: by mail-wm1-x344.google.com with SMTP id u16so3072200wmc.5 for ; Thu, 30 Apr 2020 11:10:17 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10: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 :mime-version:content-transfer-encoding; bh=lz8mXOgIyBmnqYSstj+GgsJWNWgYl7m155/mR9kGoOM=; b=RVfemUV9uPSOuHxEh/yplE80sKPs+uz7E53/06NXDev0hHjU5paT7jKGBTv9ALpMhi zykuRvQqNdY+mSq8xAzkQ3EiDJJtuCUbzVaQosU6dKlUSQqgGj8d7f4/ws7pxe6cve8C NbRttkeBERpkRLwH7chalem4Vf+2DqyA0yS2v8p9uEox140fQXIvO8/NYcCUbnayN06j W7fsb2Op270c9e88tsmDZVgRn/MvM9fcIx4k0OcbdrWGvSdeGUjjp/jDoxEUHx4HHK6A 5Iwub1DChe8CxC8Qja5/AyiRfrAnRBFdIrGqpOKRNAM1AbEojegiRm4Sx3EOwbZu71Td +XPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lz8mXOgIyBmnqYSstj+GgsJWNWgYl7m155/mR9kGoOM=; b=EqEGpnQOzWexL29ebRe7cOx7brRuRoE9qE1TyHIOkEZlC/4NwogO5LwrZkWVVgf3nr ySIqRwGGy35ZmBO+VP7jvdmsbaVTQcWIDmbbPVOXCu/Sfwhf02yOSqa3//NNXAgWPdC1 QIcth+ZCjuzwiaHVKcl9lZK/pct32MEUb3yLN+uq7/ltx2r4efbqvmHGhJ+6jOmBShTu 6tOdVJjp1eIn9twIh3x+5AGlhgyjW3Bmti1A/hm/e0E5NpuyVZdrzODGCv2w50JI9fEG qoFlLxGBcAG9yFECd7H0J9S7xBzhLzHziOxcJtbIefaWk08dLRoXnqHx5FDz71PcQRPB Ey7A== X-Gm-Message-State: AGi0PubTckQAB5xRommRB71xWx4iUpo2VtBCGeh2Q71pzn/iK3vtI0+i DcFitrGK+IbfkamkKtLrPqfAxgMA+afhpg== X-Google-Smtp-Source: APiQypLd/2b8lclyNbKwAxbKuQMYHxPKE4lf9iGeXDdg9+ZuCZDenNteVAuviV/WkwfXbIiN5kRmpg== X-Received: by 2002:a1c:a549:: with SMTP id o70mr4302228wme.179.1588270216968; Thu, 30 Apr 2020 11:10:16 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 08/36] target/arm: Convert VCMLA (scalar) to decodetree Date: Thu, 30 Apr 2020 19:09:35 +0100 Message-Id: <20200430181003.21682-9-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::344; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x344.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::344 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert VCMLA (scalar) in the 2reg-scalar-ext group to decodetree. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 40 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 26 +-------------------- target/arm/neon-shared.decode | 5 +++++ 3 files changed, 46 insertions(+), 25 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 6c58abc54b5..92eccbf8236 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -167,3 +167,43 @@ static bool trans_VFML(DisasContext *s, arg_VFML *a) gen_helper_gvec_fmlal_a32); return true; } + +static bool trans_VCMLA_scalar(DisasContext *s, arg_VCMLA_scalar *a) +{ + gen_helper_gvec_3_ptr *fn_gvec_ptr; + int opr_sz; + TCGv_ptr fpst; + + if (!dc_isar_feature(aa32_vcma, s)) { + return false; + } + if (a->size =3D=3D 0 && !dc_isar_feature(aa32_fp16_arith, s)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if ((a->vd | a->vn) & a->q) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + fn_gvec_ptr =3D (a->size ? gen_helper_gvec_fcmlas_idx + : gen_helper_gvec_fcmlah_idx); + opr_sz =3D (1 + a->q) * 8; + fpst =3D get_fpstatus_ptr(1); + tcg_gen_gvec_3_ptr(vfp_reg_offset(1, a->vd), + vfp_reg_offset(1, a->vn), + vfp_reg_offset(1, a->vm), + fpst, opr_sz, opr_sz, + (a->index << 2) | a->rot, fn_gvec_ptr); + tcg_temp_free_ptr(fpst); + return true; +} diff --git a/target/arm/translate.c b/target/arm/translate.c index caa18c8c56c..b82e54b7b23 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -7049,31 +7049,7 @@ static int disas_neon_insn_2reg_scalar_ext(DisasCont= ext *s, uint32_t insn) bool is_long =3D false, q =3D extract32(insn, 6, 1); bool ptr_is_env =3D false; =20 - if ((insn & 0xff000f10) =3D=3D 0xfe000800) { - /* VCMLA (indexed) -- 1111 1110 S.RR .... .... 1000 ...0 .... */ - int rot =3D extract32(insn, 20, 2); - int size =3D extract32(insn, 23, 1); - int index; - - if (!dc_isar_feature(aa32_vcma, s)) { - return 1; - } - if (size =3D=3D 0) { - if (!dc_isar_feature(aa32_fp16_arith, s)) { - return 1; - } - /* For fp16, rm is just Vm, and index is M. */ - rm =3D extract32(insn, 0, 4); - index =3D extract32(insn, 5, 1); - } else { - /* For fp32, rm is the usual M:Vm, and index is 0. */ - VFP_DREG_M(rm, insn); - index =3D 0; - } - data =3D (index << 2) | rot; - fn_gvec_ptr =3D (size ? gen_helper_gvec_fcmlas_idx - : gen_helper_gvec_fcmlah_idx); - } else if ((insn & 0xffb00f00) =3D=3D 0xfe200d00) { + if ((insn & 0xffb00f00) =3D=3D 0xfe200d00) { /* V[US]DOT -- 1111 1110 0.10 .... .... 1101 .Q.U .... */ int u =3D extract32(insn, 4, 1); =20 diff --git a/target/arm/neon-shared.decode b/target/arm/neon-shared.decode index 90cd5c871e2..c11d755ed14 100644 --- a/target/arm/neon-shared.decode +++ b/target/arm/neon-shared.decode @@ -49,3 +49,8 @@ VFML 1111 110 0 s:1 . 10 .... .... 1000 . 0 . 1= .... \ vm=3D%vm_sp vn=3D%vn_sp vd=3D%vd_dp q=3D0 VFML 1111 110 0 s:1 . 10 .... .... 1000 . 1 . 1 .... \ vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp q=3D1 + +VCMLA_scalar 1111 1110 0 . rot:2 .... .... 1000 . q:1 index:1 0 vm:4 \ + vn=3D%vn_dp vd=3D%vd_dp size=3D0 +VCMLA_scalar 1111 1110 1 . rot:2 .... .... 1000 . q:1 . 0 .... \ + vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp size=3D1 index=3D0 --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588270983; cv=none; d=zohomail.com; s=zohoarc; b=mCvHysipbK0YbRmGLodypRdwtoiPqQZosHYVWEfohHyuucb+Z86KA0twooXsLl8ISKRETfJ+ygXFj1lCQj6veoYpYwOldRg1Jevph7PA1Mpg2qUJ/ER1AEzTE4qJ34JWG3eAtQP13kwYSOXtYafbE2a8oulABYwsPsuNibnsBhI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588270983; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=podrIWc2Sg2T1gwDLYmZIz4NN7yExiQdpITVed1EL5o=; b=C2ki078oG7oI4Fhfg0GJlmgbJzEd5FpUF7FI2NL9ygDDbVzabjodwxzFG0aGzvo8lX3pwoVOS7DdH9MsC2kdgoijf2LxYYQEDe37wOb8KvH56qMjlYcIeHd5xaArCDIhsDc87nXPM/HlfMslI7mHbT4EJflpGZbe38KEwRgQDz4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588270983017951.0601725495561; Thu, 30 Apr 2020 11:23:03 -0700 (PDT) Received: from localhost ([::1]:38676 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDpt-0001ll-Jo for importer@patchew.org; Thu, 30 Apr 2020 14:23:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36120) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDdz-0001QU-1R for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdc-0000lu-51 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:42 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:55757) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdb-0000jx-JZ for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:19 -0400 Received: by mail-wm1-x344.google.com with SMTP id e26so2975224wmk.5 for ; Thu, 30 Apr 2020 11:10:19 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=podrIWc2Sg2T1gwDLYmZIz4NN7yExiQdpITVed1EL5o=; b=qKR+eVS9xd2Xe8Sn0TeaNcVA+4Po3Fsa+mQrf26dtaUd3CLzCGPjR+VWhEDUplgYJ0 Z/e2/Yvm2gP/kfONJa5Z41D4e8zEb0/Ah1jAUyAMESjxVzmmF7WIecZXcUddAPiAkFvJ mXHxze8CvoEvfEtCMLxo6/e3dGamfyNdTK1NR/3Ldw0X2USwMuUmOKX15Z7gIJRZswBu BTO8Us/719U7ZEIXl74w/RGZbDQUpJBAUVqywACKZ4Q1zA/UKlKWAzR85z3CuLlQSvus zW3DqsSPhZIfFP7GqmKeNbm5gRTHcSRidKZty7MXPPDazxqmUZcZB4kBJ485Igr/lx8I 91kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=podrIWc2Sg2T1gwDLYmZIz4NN7yExiQdpITVed1EL5o=; b=mzjEfP/5o4SU3gDRpzAyY+ApYzsvK95E42Dr9p3MGdmdF6NO+roScZlh9S3pOV4oqH WwZlXRkU/8ZMFxzQEIP3NNHp8hLb6FOQtF04J7obeN1lIj+NuMgl6mrtwDwZRaFfBxl0 QpxH0w7ksmfM4dEXmIk/07Q1ASfNvwvyQjBK/oABnM0dVDs8fuqDW7V8Par9SK096rtv G1V8cp8C67WODfCZQLCG1j2lNmVdZ8CxOYLKuqo4UHj7hJyfgEKRRA0R9kRe/iUaFA38 XK7aKL3Xk8ErnI2cwTAY2OVLAZLgMdiT3+GBFZ7DZMroKEjhPPYROAy0/ERiHhhqDoQh cqnw== X-Gm-Message-State: AGi0PuYSPPGlIg8hr4idiKDbmAK0tTF34OsBaobDjx+/ubvm0jZ7Kf5Y xOisSYkWATbxIHY2U9RfS8t99w== X-Google-Smtp-Source: APiQypInHAV3/UGy/d6IIseaX5U7c3XI+bRT9fX304OSp8rTLtD86MsLFQ6+irtqMgg5Q7/qiWWcRw== X-Received: by 2002:a1c:bd8b:: with SMTP id n133mr4522363wmf.175.1588270218239; Thu, 30 Apr 2020 11:10:18 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 09/36] target/arm: Convert V[US]DOT (scalar) to decodetree Date: Thu, 30 Apr 2020 19:09:36 +0100 Message-Id: <20200430181003.21682-10-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::344; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x344.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::344 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the V[US]DOT (scalar) insns in the 2reg-scalar-ext group to decodetree. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 35 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 13 +----------- target/arm/neon-shared.decode | 3 +++ 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 92eccbf8236..7cc6ccb0697 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -207,3 +207,38 @@ static bool trans_VCMLA_scalar(DisasContext *s, arg_VC= MLA_scalar *a) tcg_temp_free_ptr(fpst); return true; } + +static bool trans_VDOT_scalar(DisasContext *s, arg_VDOT_scalar *a) +{ + gen_helper_gvec_3 *fn_gvec; + int opr_sz; + TCGv_ptr fpst; + + if (!dc_isar_feature(aa32_dp, s)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn) & 0x10)) { + return false; + } + + if ((a->vd | a->vn) & a->q) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + fn_gvec =3D a->u ? gen_helper_gvec_udot_idx_b : gen_helper_gvec_sdot_i= dx_b; + opr_sz =3D (1 + a->q) * 8; + fpst =3D get_fpstatus_ptr(1); + tcg_gen_gvec_3_ool(vfp_reg_offset(1, a->vd), + vfp_reg_offset(1, a->vn), + vfp_reg_offset(1, a->rm), + opr_sz, opr_sz, a->index, fn_gvec); + tcg_temp_free_ptr(fpst); + return true; +} diff --git a/target/arm/translate.c b/target/arm/translate.c index b82e54b7b23..af2714292ea 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -7049,18 +7049,7 @@ static int disas_neon_insn_2reg_scalar_ext(DisasCont= ext *s, uint32_t insn) bool is_long =3D false, q =3D extract32(insn, 6, 1); bool ptr_is_env =3D false; =20 - if ((insn & 0xffb00f00) =3D=3D 0xfe200d00) { - /* V[US]DOT -- 1111 1110 0.10 .... .... 1101 .Q.U .... */ - int u =3D extract32(insn, 4, 1); - - if (!dc_isar_feature(aa32_dp, s)) { - return 1; - } - fn_gvec =3D u ? gen_helper_gvec_udot_idx_b : gen_helper_gvec_sdot_= idx_b; - /* rm is just Vm, and index is M. */ - data =3D extract32(insn, 5, 1); /* index */ - rm =3D extract32(insn, 0, 4); - } else if ((insn & 0xffa00f10) =3D=3D 0xfe000810) { + if ((insn & 0xffa00f10) =3D=3D 0xfe000810) { /* VFM[AS]L -- 1111 1110 0.0S .... .... 1000 .Q.1 .... */ int is_s =3D extract32(insn, 20, 1); int vm20 =3D extract32(insn, 0, 3); diff --git a/target/arm/neon-shared.decode b/target/arm/neon-shared.decode index c11d755ed14..63a46c63c07 100644 --- a/target/arm/neon-shared.decode +++ b/target/arm/neon-shared.decode @@ -54,3 +54,6 @@ VCMLA_scalar 1111 1110 0 . rot:2 .... .... 1000 . q:1 i= ndex:1 0 vm:4 \ vn=3D%vn_dp vd=3D%vd_dp size=3D0 VCMLA_scalar 1111 1110 1 . rot:2 .... .... 1000 . q:1 . 0 .... \ vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp size=3D1 index=3D0 + +VDOT_scalar 1111 1110 0 . 10 .... .... 1101 . q:1 index:1 u:1 rm:4 \ + vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588270808; cv=none; d=zohomail.com; s=zohoarc; b=NucdVAhGegLWfxQcDeHCh7qtgOxqlVf8OS4e0pM6zuBi7iIxEVLwCH8ZKTFeMiECXB14peJWhMVpRKItSItuTwl3/flXt+uI3vZuLhYQ0XuSiFCnt5E/qEjEsQVXhdTu4+uNNhfDa1lBa7ugz155+Gx6vnMCTm9KaP+HKUFEHi0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588270808; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=NNmnhN83w+zM9TIM95PNTu3ZONyjP5dUXcnOEc1nHQI=; b=D9693OBMtS3W4iUyxaUMNCSPxGGPPrg5ibeCFkRmeOLNVNHHOuLcMf5heAJz7eH53/e3od25qA7Qvb6GTDl3MgegsF8Ph2ycF9cHjg5saOKalGSvonSzToRAeopkNh8GK0vd574j/DiNN5ffpVLzrIHYD9fNLf+PyXk6c8EnmIs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588270808430889.068924969845; Thu, 30 Apr 2020 11:20:08 -0700 (PDT) Received: from localhost ([::1]:58898 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDn5-0006hZ-3V for importer@patchew.org; Thu, 30 Apr 2020 14:20:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36232) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDe9-0001ag-Ea for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdd-0000qx-CU for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:53 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]:54648) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdc-0000la-SZ for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:20 -0400 Received: by mail-wm1-x32e.google.com with SMTP id h4so2976046wmb.4 for ; Thu, 30 Apr 2020 11:10:20 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10: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 :mime-version:content-transfer-encoding; bh=NNmnhN83w+zM9TIM95PNTu3ZONyjP5dUXcnOEc1nHQI=; b=JJF+mIxgUralwEO2dejxlfDyVjmhSgBDTcTrEid0D4j+b4W9E0WUc7WdFFoklbKb2L L9AOK+Sr65yrCtak+GQqyZzY/x+i5Qpb+FDuD8NWpcey2RyWjYYasaQsTYezc34LcJhW Vj2Q1PBjm+gcNepKzjy2r9hRgtI8twXLJDO3YgF+cS7/lySuJmLBaigay/YgE6N9Hcvm 7DJUBBMDbLZs+1zoVI4IopbxTXbdW9pCMHN6dGJ2ZKNUQf1Au45I9X1PIBfVRTetu5jZ ephq1RDSKni2gyeyBQwfFGp54s0pN2QxuMX+GmZ6dQC+m6pKoeQaAtZ8UMO7D7Yr+TBj YFRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NNmnhN83w+zM9TIM95PNTu3ZONyjP5dUXcnOEc1nHQI=; b=hILBdniz00FlMqItejtlCiktPA+tTHwCD4Vd3fYZF5Ulfa7fx4YnWhZ37lfklbYvcB ovoF7dxQpNILpGelxuyetULZafTnbW+LAa9ztiVI1wz+XfpBqOzEzZm18M3zFEwViNpo DRpmb+io/hOJEMyOFLjitKm2cqxl738eYJJgvT8HNuW2lma2DeiQ+uE/6F/7OsWbYzdz KHLJhQsKZam5xdyWVyTzqhw20W7cT11KquzCHpDfj04U+R9TqL22bL0qleom19YrJRNg yaF7voZbe27EWIGJtQ43aQZXCTNtIFNL1Y3uxLDwnDxL7so1LibA3NfsIiUCr4tIX1fL esQw== X-Gm-Message-State: AGi0Pua717tB+UudaOcr/jtWDlmtZinYHcdu/KCwTVxXQZ4PS/Rve1vj yxPzFVSpku738VdidfoQs4W2XX2kcbJJNQ== X-Google-Smtp-Source: APiQypIvHTsoRW+njS9/+1nQESNKxph/5hxuCj8jAirSysg0tbL29GeSHGzaKJo/HhSV54Id1yyH2Q== X-Received: by 2002:a1c:6a08:: with SMTP id f8mr4110975wmc.132.1588270219359; Thu, 30 Apr 2020 11:10:19 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 10/36] target/arm: Convert VFM[AS]L (scalar) to decodetree Date: Thu, 30 Apr 2020 19:09:37 +0100 Message-Id: <20200430181003.21682-11-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32e; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32e.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::32e X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the VFM[AS]L (scalar) insns in the 2reg-scalar-ext group to decodetree. These are the last ones in the group so we can remove all the legacy decode for the group. Note that in disas_thumb2_insn() the parts of this encoding space where the decodetree decoder returns false will correctly be directed to illegal_op by the "(insn & (1 << 28))" check so they won't fall into disas_coproc_insn() by mistake. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 32 ++++++++++ target/arm/translate.c | 107 +------------------------------- target/arm/neon-shared.decode | 7 +++ 3 files changed, 40 insertions(+), 106 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 7cc6ccb0697..b06542b8b83 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -242,3 +242,35 @@ static bool trans_VDOT_scalar(DisasContext *s, arg_VDO= T_scalar *a) tcg_temp_free_ptr(fpst); return true; } + +static bool trans_VFML_scalar(DisasContext *s, arg_VFML_scalar *a) +{ + int opr_sz; + + if (!dc_isar_feature(aa32_fhm, s)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd & 0x10) || (a->q && (a->vn & 0x10)))) { + return false; + } + + if (a->vd & a->q) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + opr_sz =3D (1 + a->q) * 8; + tcg_gen_gvec_3_ptr(vfp_reg_offset(1, a->vd), + vfp_reg_offset(a->q, a->vn), + vfp_reg_offset(a->q, a->rm), + cpu_env, opr_sz, opr_sz, + (a->index << 2) | a->s, /* is_2 =3D=3D 0 */ + gen_helper_gvec_fmlal_idx_a32); + return true; +} diff --git a/target/arm/translate.c b/target/arm/translate.c index af2714292ea..90f2f37908b 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -2610,8 +2610,6 @@ static int disas_dsp_insn(DisasContext *s, uint32_t i= nsn) } =20 #define VFP_REG_SHR(x, n) (((n) > 0) ? (x) >> (n) : (x) << -(n)) -#define VFP_SREG(insn, bigbit, smallbit) \ - ((VFP_REG_SHR(insn, bigbit - 1) & 0x1e) | (((insn) >> (smallbit)) & 1)) #define VFP_DREG(reg, insn, bigbit, smallbit) do { \ if (dc_isar_feature(aa32_simd_r32, s)) { \ reg =3D (((insn) >> (bigbit)) & 0x0f) \ @@ -2622,11 +2620,8 @@ static int disas_dsp_insn(DisasContext *s, uint32_t = insn) reg =3D ((insn) >> (bigbit)) & 0x0f; \ }} while (0) =20 -#define VFP_SREG_D(insn) VFP_SREG(insn, 12, 22) #define VFP_DREG_D(reg, insn) VFP_DREG(reg, insn, 12, 22) -#define VFP_SREG_N(insn) VFP_SREG(insn, 16, 7) #define VFP_DREG_N(reg, insn) VFP_DREG(reg, insn, 16, 7) -#define VFP_SREG_M(insn) VFP_SREG(insn, 0, 5) #define VFP_DREG_M(reg, insn) VFP_DREG(reg, insn, 0, 5) =20 static void gen_neon_dup_low16(TCGv_i32 var) @@ -7032,94 +7027,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) return 0; } =20 -/* Advanced SIMD two registers and a scalar extension. - * 31 24 23 22 20 16 12 11 10 9 8 3 = 0 - * +-----------------+----+---+----+----+----+---+----+---+----+---------+= ----+ - * | 1 1 1 1 1 1 1 0 | o1 | D | o2 | Vn | Vd | 1 | o3 | 0 | o4 | N Q M U |= Vm | - * +-----------------+----+---+----+----+----+---+----+---+----+---------+= ----+ - * - */ - -static int disas_neon_insn_2reg_scalar_ext(DisasContext *s, uint32_t insn) -{ - gen_helper_gvec_3 *fn_gvec =3D NULL; - gen_helper_gvec_3_ptr *fn_gvec_ptr =3D NULL; - int rd, rn, rm, opr_sz, data; - int off_rn, off_rm; - bool is_long =3D false, q =3D extract32(insn, 6, 1); - bool ptr_is_env =3D false; - - if ((insn & 0xffa00f10) =3D=3D 0xfe000810) { - /* VFM[AS]L -- 1111 1110 0.0S .... .... 1000 .Q.1 .... */ - int is_s =3D extract32(insn, 20, 1); - int vm20 =3D extract32(insn, 0, 3); - int vm3 =3D extract32(insn, 3, 1); - int m =3D extract32(insn, 5, 1); - int index; - - if (!dc_isar_feature(aa32_fhm, s)) { - return 1; - } - if (q) { - rm =3D vm20; - index =3D m * 2 + vm3; - } else { - rm =3D vm20 * 2 + m; - index =3D vm3; - } - is_long =3D true; - data =3D (index << 2) | is_s; /* is_2 =3D=3D 0 */ - fn_gvec_ptr =3D gen_helper_gvec_fmlal_idx_a32; - ptr_is_env =3D true; - } else { - return 1; - } - - VFP_DREG_D(rd, insn); - if (rd & q) { - return 1; - } - if (q || !is_long) { - VFP_DREG_N(rn, insn); - if (rn & q & !is_long) { - return 1; - } - off_rn =3D vfp_reg_offset(1, rn); - off_rm =3D vfp_reg_offset(1, rm); - } else { - rn =3D VFP_SREG_N(insn); - off_rn =3D vfp_reg_offset(0, rn); - off_rm =3D vfp_reg_offset(0, rm); - } - if (s->fp_excp_el) { - gen_exception_insn(s, s->pc_curr, EXCP_UDEF, - syn_simd_access_trap(1, 0xe, false), s->fp_excp= _el); - return 0; - } - if (!s->vfp_enabled) { - return 1; - } - - opr_sz =3D (1 + q) * 8; - if (fn_gvec_ptr) { - TCGv_ptr ptr; - if (ptr_is_env) { - ptr =3D cpu_env; - } else { - ptr =3D get_fpstatus_ptr(1); - } - tcg_gen_gvec_3_ptr(vfp_reg_offset(1, rd), off_rn, off_rm, ptr, - opr_sz, opr_sz, data, fn_gvec_ptr); - if (!ptr_is_env) { - tcg_temp_free_ptr(ptr); - } - } else { - tcg_gen_gvec_3_ool(vfp_reg_offset(1, rd), off_rn, off_rm, - opr_sz, opr_sz, data, fn_gvec); - } - return 0; -} - static int disas_coproc_insn(DisasContext *s, uint32_t insn) { int cpnum, is64, crn, crm, opc1, opc2, isread, rt, rt2; @@ -10843,12 +10750,6 @@ static void disas_arm_insn(DisasContext *s, unsign= ed int insn) } } } - } else if ((insn & 0x0f000a00) =3D=3D 0x0e000800 - && arm_dc_feature(s, ARM_FEATURE_V8)) { - if (disas_neon_insn_2reg_scalar_ext(s, insn)) { - goto illegal_op; - } - return; } goto illegal_op; } @@ -11026,13 +10927,7 @@ static void disas_thumb2_insn(DisasContext *s, uin= t32_t insn) } break; } - if ((insn & 0xff000a00) =3D=3D 0xfe000800 - && arm_dc_feature(s, ARM_FEATURE_V8)) { - /* The Thumb2 and ARM encodings are identical. */ - if (disas_neon_insn_2reg_scalar_ext(s, insn)) { - goto illegal_op; - } - } else if (((insn >> 24) & 3) =3D=3D 3) { + if (((insn >> 24) & 3) =3D=3D 3) { /* Translate into the equivalent ARM encoding. */ insn =3D (insn & 0xe2ffffff) | ((insn & (1 << 28)) >> 4) | (1 = << 28); if (disas_neon_data_insn(s, insn)) { diff --git a/target/arm/neon-shared.decode b/target/arm/neon-shared.decode index 63a46c63c07..f297ba8cdfc 100644 --- a/target/arm/neon-shared.decode +++ b/target/arm/neon-shared.decode @@ -57,3 +57,10 @@ VCMLA_scalar 1111 1110 1 . rot:2 .... .... 1000 . q:1 = . 0 .... \ =20 VDOT_scalar 1111 1110 0 . 10 .... .... 1101 . q:1 index:1 u:1 rm:4 \ vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp + +%vfml_scalar_q0_rm 0:3 5:1 +%vfml_scalar_q1_index 5:1 3:1 +VFML_scalar 1111 1110 0 . 0 s:1 .... .... 1000 . 0 . 1 index:1 ... \ + rm=3D%vfml_scalar_q0_rm vn=3D%vn_sp vd=3D%vd_dp q=3D0 +VFML_scalar 1111 1110 0 . 0 s:1 .... .... 1000 . 1 . 1 . rm:3 \ + index=3D%vfml_scalar_q1_index vn=3D%vn_dp vd=3D%vd_dp q=3D1 --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588270988; cv=none; d=zohomail.com; s=zohoarc; b=dku3CI1+LELhPcixTe5HlbHsEKq/O+rTsI5OaARcwPC+t8tTjJjPwMzhPZTaOOzzqdzv7BuH67wxaQ4wKHUl/L8heNpqWb0Fs1n6I/VMdC/Rqsu4O9JyGC6UzEQs+UGlMap9AyEXBVM5lkk9JXWeZBat9qoe/mPbNxKX18KF0YE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588270988; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=pYERjdwlGd9H/In1eyFUoX/A0ms9RFWjYCm6IAS3174=; b=DXgIiYZGXId6RSxb/sOSj9j7BOPY8ELCg/8Qi+ydE/aBo21+LXNib5KhvWHJO4oECx2SHODGm7yLUwFR0AeZyvTAdVQarO2pCX5inS/PD/S4cJ9MD7haE8hjy2c8r1+Dv1AwuxXQlBZwYovnx/SnmNPli3Z9WYBBxjn3ary4sHE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588270988458509.5688702900313; Thu, 30 Apr 2020 11:23:08 -0700 (PDT) Received: from localhost ([::1]:39102 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDpz-0001ye-1P for importer@patchew.org; Thu, 30 Apr 2020 14:23:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36256) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeB-0001bE-5I for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDde-0000sK-8P for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:54 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:39893) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdd-0000q2-Pf for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:21 -0400 Received: by mail-wm1-x343.google.com with SMTP id y24so3074877wma.4 for ; Thu, 30 Apr 2020 11:10:21 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pYERjdwlGd9H/In1eyFUoX/A0ms9RFWjYCm6IAS3174=; b=sx3Q2jBEVWtqWJp4qTwbOZi5hUp2OWDQqLXBl21YHquJrlho5+OSbQmyjb3K7DDBlt wcd7BwfU4oSDwUXUbhSCJxaNA2EBzvYVB5VMfQBSvEPu+QqpgaR/iEEFUESXaoTklKQQ NcixyQGEku152DTymxqlJna/B5GZLQTM9+K062Wnh5/vF/lbDP2n0GMMRKog0HO3ZCsl KVqdx+ygXwQXEA/lemg3TNqvF6JEHn2R/uT17yzFI0wdTfDNpsU+BrKNGd7qyT6ftt2u iJEIEarRkq6KMZKxcfzGpgLBZn6JmDVWkCzTpPdlUhn2hMM0RNlPN1CilbVVUPkRGKIa MP0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pYERjdwlGd9H/In1eyFUoX/A0ms9RFWjYCm6IAS3174=; b=Elr8ee+0iSTFJoVJDsYUV0yACIuGtvd6bFdkc2o+odG7W09EX9DHz7veycPkGLCrEZ ir9+PM2pl+W7KFy3qIhUWBEiOZf3phYpbsWGNcxOJ3PtnM9mobgormNzARg+/Dw+tWy3 yzrdgvW6g6E0gcVZ7m6VPdZYPplBeFHtchk8Emf7GDUpLiJDePIbh2KDczWYojdIbMf2 fy2Cau60TIQalBHw9Fj5DEPlc4+appQCbcXkrb2SvOjtkEfNSMNYxVZWvLFTcrp3WaAd jvPsJQtz9KBELs+eod4UsaM8ATf9ZPnirKB2dIRPoZ/06ZqzLt377frTsexHLw0acKWb TNbw== X-Gm-Message-State: AGi0PuaO3jd6s7CuEFbo9APKLcWDfFL5xab0UuyoF3yoFvaHj0actvT3 /IiFj66DCnPP1W2UxHE3tG8JsVkG1j8N1Q== X-Google-Smtp-Source: APiQypJ3n+fh+usYPFuqanzNlYbruWkv/tMLJ9QBOHOzzbG3jMH5hGmaV3dENdXyoG3U/I4B0cNksg== X-Received: by 2002:a7b:c44d:: with SMTP id l13mr4184964wmi.72.1588270220405; Thu, 30 Apr 2020 11:10:20 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 11/36] target/arm: Convert Neon load/store multiple structures to decodetree Date: Thu, 30 Apr 2020 19:09:38 +0100 Message-Id: <20200430181003.21682-12-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::343; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x343.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::343 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon "load/store multiple structures" insns to decodetree. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 124 ++++++++++++++++++++++++++++++++ target/arm/translate.c | 91 +---------------------- target/arm/neon-ls.decode | 7 ++ 3 files changed, 133 insertions(+), 89 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index b06542b8b83..966c0d92012 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -274,3 +274,127 @@ static bool trans_VFML_scalar(DisasContext *s, arg_VF= ML_scalar *a) gen_helper_gvec_fmlal_idx_a32); return true; } + +static struct { + int nregs; + int interleave; + int spacing; +} const neon_ls_element_type[11] =3D { + {1, 4, 1}, + {1, 4, 2}, + {4, 1, 1}, + {2, 2, 2}, + {1, 3, 1}, + {1, 3, 2}, + {3, 1, 1}, + {1, 1, 1}, + {1, 2, 1}, + {1, 2, 2}, + {2, 1, 1} +}; + +static void gen_neon_ldst_base_update(DisasContext *s, int rm, int rn, + int stride) +{ + if (rm !=3D 15) { + TCGv_i32 base; + + base =3D load_reg(s, rn); + if (rm =3D=3D 13) { + tcg_gen_addi_i32(base, base, stride); + } else { + TCGv_i32 index; + index =3D load_reg(s, rm); + tcg_gen_add_i32(base, base, index); + tcg_temp_free_i32(index); + } + store_reg(s, rn, base); + } +} + +static bool trans_VLDST_multiple(DisasContext *s, arg_VLDST_multiple *a) +{ + /* Neon load/store multiple structures */ + int nregs, interleave, spacing, reg, n; + MemOp endian =3D s->be_data; + int mmu_idx =3D get_mem_index(s); + int size =3D a->size; + TCGv_i64 tmp64; + TCGv_i32 addr, tmp; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist */ + if (!dc_isar_feature(aa32_simd_r32, s) && (a->vd & 0x10)) { + return false; + } + if (a->itype > 10) { + return false; + } + /* Catch UNDEF cases for bad values of align field */ + switch (a->itype & 0xc) { + case 4: + if (a->align >=3D 2) { + return false; + } + break; + case 8: + if (a->align =3D=3D 3) { + return false; + } + break; + default: + break; + } + nregs =3D neon_ls_element_type[a->itype].nregs; + interleave =3D neon_ls_element_type[a->itype].interleave; + spacing =3D neon_ls_element_type[a->itype].spacing; + if (size =3D=3D 3 && (interleave | spacing) !=3D 1) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + /* For our purposes, bytes are always little-endian. */ + if (size =3D=3D 0) { + endian =3D MO_LE; + } + /* + * Consecutive little-endian elements from a single register + * can be promoted to a larger little-endian operation. + */ + if (interleave =3D=3D 1 && endian =3D=3D MO_LE) { + size =3D 3; + } + tmp64 =3D tcg_temp_new_i64(); + addr =3D tcg_temp_new_i32(); + tmp =3D tcg_const_i32(1 << size); + load_reg_var(s, addr, a->rn); + for (reg =3D 0; reg < nregs; reg++) { + for (n =3D 0; n < 8 >> size; n++) { + int xs; + for (xs =3D 0; xs < interleave; xs++) { + int tt =3D a->vd + reg + spacing * xs; + + if (a->l) { + gen_aa32_ld_i64(s, tmp64, addr, mmu_idx, endian | size= ); + neon_store_element64(tt, n, size, tmp64); + } else { + neon_load_element64(tmp64, tt, n, size); + gen_aa32_st_i64(s, tmp64, addr, mmu_idx, endian | size= ); + } + tcg_gen_add_i32(addr, addr, tmp); + } + } + } + tcg_temp_free_i32(addr); + tcg_temp_free_i32(tmp); + tcg_temp_free_i64(tmp64); + + gen_neon_ldst_base_update(s, a->rm, a->rn, nregs * interleave * 8); + return true; +} diff --git a/target/arm/translate.c b/target/arm/translate.c index 90f2f37908b..3f97635a524 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -3214,45 +3214,19 @@ static void gen_neon_trn_u16(TCGv_i32 t0, TCGv_i32 = t1) } =20 =20 -static struct { - int nregs; - int interleave; - int spacing; -} const neon_ls_element_type[11] =3D { - {1, 4, 1}, - {1, 4, 2}, - {4, 1, 1}, - {2, 2, 2}, - {1, 3, 1}, - {1, 3, 2}, - {3, 1, 1}, - {1, 1, 1}, - {1, 2, 1}, - {1, 2, 2}, - {2, 1, 1} -}; - /* Translate a NEON load/store element instruction. Return nonzero if the instruction is invalid. */ static int disas_neon_ls_insn(DisasContext *s, uint32_t insn) { int rd, rn, rm; - int op; int nregs; - int interleave; - int spacing; int stride; int size; int reg; int load; - int n; int vec_size; - int mmu_idx; - MemOp endian; TCGv_i32 addr; TCGv_i32 tmp; - TCGv_i32 tmp2; - TCGv_i64 tmp64; =20 if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { return 1; @@ -3274,70 +3248,9 @@ static int disas_neon_ls_insn(DisasContext *s, uint3= 2_t insn) rn =3D (insn >> 16) & 0xf; rm =3D insn & 0xf; load =3D (insn & (1 << 21)) !=3D 0; - endian =3D s->be_data; - mmu_idx =3D get_mem_index(s); if ((insn & (1 << 23)) =3D=3D 0) { - /* Load store all elements. */ - op =3D (insn >> 8) & 0xf; - size =3D (insn >> 6) & 3; - if (op > 10) - return 1; - /* Catch UNDEF cases for bad values of align field */ - switch (op & 0xc) { - case 4: - if (((insn >> 5) & 1) =3D=3D 1) { - return 1; - } - break; - case 8: - if (((insn >> 4) & 3) =3D=3D 3) { - return 1; - } - break; - default: - break; - } - nregs =3D neon_ls_element_type[op].nregs; - interleave =3D neon_ls_element_type[op].interleave; - spacing =3D neon_ls_element_type[op].spacing; - if (size =3D=3D 3 && (interleave | spacing) !=3D 1) { - return 1; - } - /* For our purposes, bytes are always little-endian. */ - if (size =3D=3D 0) { - endian =3D MO_LE; - } - /* Consecutive little-endian elements from a single register - * can be promoted to a larger little-endian operation. - */ - if (interleave =3D=3D 1 && endian =3D=3D MO_LE) { - size =3D 3; - } - tmp64 =3D tcg_temp_new_i64(); - addr =3D tcg_temp_new_i32(); - tmp2 =3D tcg_const_i32(1 << size); - load_reg_var(s, addr, rn); - for (reg =3D 0; reg < nregs; reg++) { - for (n =3D 0; n < 8 >> size; n++) { - int xs; - for (xs =3D 0; xs < interleave; xs++) { - int tt =3D rd + reg + spacing * xs; - - if (load) { - gen_aa32_ld_i64(s, tmp64, addr, mmu_idx, endian | = size); - neon_store_element64(tt, n, size, tmp64); - } else { - neon_load_element64(tmp64, tt, n, size); - gen_aa32_st_i64(s, tmp64, addr, mmu_idx, endian | = size); - } - tcg_gen_add_i32(addr, addr, tmp2); - } - } - } - tcg_temp_free_i32(addr); - tcg_temp_free_i32(tmp2); - tcg_temp_free_i64(tmp64); - stride =3D nregs * interleave * 8; + /* Load store all elements -- handled already by decodetree */ + return 1; } else { size =3D (insn >> 10) & 3; if (size =3D=3D 3) { diff --git a/target/arm/neon-ls.decode b/target/arm/neon-ls.decode index 2b16c9256df..dd03d5a37bd 100644 --- a/target/arm/neon-ls.decode +++ b/target/arm/neon-ls.decode @@ -27,3 +27,10 @@ # 0b1111_1001_xxx0_xxxx_xxxx_xxxx_xxxx_xxxx # This file works on the A32 encoding only; calling code for T32 has to # transform the insn into the A32 version first. + +%vd_dp 22:1 12:4 + +# Neon load/store multiple structures + +VLDST_multiple 1111 0100 0 . l:1 0 rn:4 .... itype:4 size:2 align:2 rm:4 \ + vd=3D%vd_dp --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271160; cv=none; d=zohomail.com; s=zohoarc; b=bgF5s55mOw5+1axkwtc3k07nQCjFyjNXwRWwnaPNWS5zHU54XvaelaGPPURLq/lLsUYBZXh0V0YLylA+Y2i0dV+LCCRCg3tx3urzpB6nh4MV19sxtQ+dW28s+3iLzPrllvtqiea95sGyLWCxmITsEqvmwNvJFojTS+T1j/IePJk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271160; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=lRqNh66uUwxsrOUZqGJJ72hNoPBVPihCXfF/QnEp9gk=; b=m5mFXrLZaXF3YLd7t8O+kPrjxTay6g8yP8pWi+dC5ZBS5mBnlqQYPJZJfq1N3b3huM3RHuCfLabbwNlkZMyn/1RTvPOtsaRN4YJ3bjQWz31S1qlNkgZ37P0JRnauSBkBJsewoJ68ckXPUazFV9pnt7fRCNNnwp9bso6GsVkpaAM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271160644177.8366334767478; Thu, 30 Apr 2020 11:26:00 -0700 (PDT) Received: from localhost ([::1]:48442 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDsl-0006rK-8x for importer@patchew.org; Thu, 30 Apr 2020 14:25:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36266) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeB-0001bf-T7 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdf-0000wz-G0 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:55 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:39894) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdf-0000sX-2O for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:23 -0400 Received: by mail-wm1-x344.google.com with SMTP id y24so3075027wma.4 for ; Thu, 30 Apr 2020 11:10:22 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lRqNh66uUwxsrOUZqGJJ72hNoPBVPihCXfF/QnEp9gk=; b=vHYvHz5Rwl6GJRqtb5n8BgStHDaL3cHZxvkWU5sQ7hEC26xIP0Fn3341nQu5hBcyMu +85bYTvUR5rUrooVcQbGPK/SVRXKCm9O2Qeo43b0je7qBlSupUX/OR3Oq5GdrGpLsVIM Ftgc7A9VXmaheGmeQiuETvQMqQN/rLsxXOoLQnQErFd5IXRj22/DRfSy2CtIjSp+OWaL TOGPrTY0XfxBtBxphhvCHeX+W7+k6kCoRwMX28Vr0MMiiSKMEEx+uTg5TAwpCaApntSM Vlc94Y2mvxst31EvvtQpjiZRWJlRiGkXJIAhETeAwulJMYpWKz+Eg+JFwVmIsGA/edlX a/8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lRqNh66uUwxsrOUZqGJJ72hNoPBVPihCXfF/QnEp9gk=; b=iPLKSLr/ZuL6CKkqXu2BhncXUS3PyGFHJX/wa7LWuYIdABRV9tlEaaeFC744Nml2J9 ul5kdJYThH0Q5zJao6GCoDQiwlIoZJG18s8W2xpzYdPjU6ULYhpe7NT6zbHXvMcToBL8 CNgVNgEdt2OmMFzbAHrNYCkpKBrfF436SFBBJRp4KuxHvXvM+PCyQcwXG/aSAcyve+AX Fy4XDqWTfMTkqIAK+R8tjvLKlsBF6upqpa16fd7/spliRhVjixSJPfW5aYpHYxwrvVl/ SiHlBcDqDgHBBjs9p3LTwNeoXHh1mI1H5WdjSuGCThTXTin0NtBh1UvPFHjUS1NWrt5k hi5w== X-Gm-Message-State: AGi0PuY8DHIO3cA+ASELrHyTocQOwTFWZX4MvuBEOqRx1+ZfVhX19KlG qhq7CGrNLE9JADdztd1FwlZxaQ== X-Google-Smtp-Source: APiQypLEdqdOIbmQRxGbPAMHd9VGwa8EHgJ8eIM4pmh/k8ybPrc+zMTRYSyBqHr9Xkio0yIyItdviw== X-Received: by 2002:a7b:c1d4:: with SMTP id a20mr4428286wmj.111.1588270221629; Thu, 30 Apr 2020 11:10:21 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 12/36] target/arm: Convert Neon 'load single structure to all lanes' to decodetree Date: Thu, 30 Apr 2020 19:09:39 +0100 Message-Id: <20200430181003.21682-13-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::344; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x344.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::344 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon "load single structure to all lanes" insns to decodetree. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 73 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 55 +------------------------ target/arm/neon-ls.decode | 5 +++ 3 files changed, 80 insertions(+), 53 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 966c0d92012..e60e9559bad 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -398,3 +398,76 @@ static bool trans_VLDST_multiple(DisasContext *s, arg_= VLDST_multiple *a) gen_neon_ldst_base_update(s, a->rm, a->rn, nregs * interleave * 8); return true; } + +static bool trans_VLD_all_lanes(DisasContext *s, arg_VLD_all_lanes *a) +{ + /* Neon load single structure to all lanes */ + int reg, stride, vec_size; + int vd =3D a->vd; + int size =3D a->size; + int nregs =3D a->n + 1; + TCGv_i32 addr, tmp; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist */ + if (!dc_isar_feature(aa32_simd_r32, s) && (a->vd & 0x10)) { + return false; + } + + if (size =3D=3D 3) { + if (nregs !=3D 4 || a->a =3D=3D 0) { + return false; + } + /* For VLD4 size =3D=3D 3 a =3D=3D 1 means 32 bits at 16 byte alig= nment */ + size =3D 2; + } + if (nregs =3D=3D 1 && a->a =3D=3D 1 && size =3D=3D 0) { + return false; + } + if (nregs =3D=3D 3 && a->a =3D=3D 1) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + /* + * VLD1 to all lanes: T bit indicates how many Dregs to write. + * VLD2/3/4 to all lanes: T bit indicates register stride. + */ + stride =3D a->t ? 2 : 1; + vec_size =3D nregs =3D=3D 1 ? stride * 8 : 8; + + tmp =3D tcg_temp_new_i32(); + addr =3D tcg_temp_new_i32(); + load_reg_var(s, addr, a->rn); + for (reg =3D 0; reg < nregs; reg++) { + gen_aa32_ld_i32(s, tmp, addr, get_mem_index(s), + s->be_data | size); + if ((vd & 1) && vec_size =3D=3D 16) { + /* + * We cannot write 16 bytes at once because the + * destination is unaligned. + */ + tcg_gen_gvec_dup_i32(size, neon_reg_offset(vd, 0), + 8, 8, tmp); + tcg_gen_gvec_mov(0, neon_reg_offset(vd + 1, 0), + neon_reg_offset(vd, 0), 8, 8); + } else { + tcg_gen_gvec_dup_i32(size, neon_reg_offset(vd, 0), + vec_size, vec_size, tmp); + } + tcg_gen_addi_i32(addr, addr, 1 << size); + vd +=3D stride; + } + tcg_temp_free_i32(tmp); + tcg_temp_free_i32(addr); + + gen_neon_ldst_base_update(s, a->rm, a->rn, (1 << size) * nregs); + + return true; +} diff --git a/target/arm/translate.c b/target/arm/translate.c index 3f97635a524..a9cad04ba91 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -3224,7 +3224,6 @@ static int disas_neon_ls_insn(DisasContext *s, uint32= _t insn) int size; int reg; int load; - int vec_size; TCGv_i32 addr; TCGv_i32 tmp; =20 @@ -3254,58 +3253,8 @@ static int disas_neon_ls_insn(DisasContext *s, uint3= 2_t insn) } else { size =3D (insn >> 10) & 3; if (size =3D=3D 3) { - /* Load single element to all lanes. */ - int a =3D (insn >> 4) & 1; - if (!load) { - return 1; - } - size =3D (insn >> 6) & 3; - nregs =3D ((insn >> 8) & 3) + 1; - - if (size =3D=3D 3) { - if (nregs !=3D 4 || a =3D=3D 0) { - return 1; - } - /* For VLD4 size=3D=3D3 a =3D=3D 1 means 32 bits at 16 byt= e alignment */ - size =3D 2; - } - if (nregs =3D=3D 1 && a =3D=3D 1 && size =3D=3D 0) { - return 1; - } - if (nregs =3D=3D 3 && a =3D=3D 1) { - return 1; - } - addr =3D tcg_temp_new_i32(); - load_reg_var(s, addr, rn); - - /* VLD1 to all lanes: bit 5 indicates how many Dregs to write. - * VLD2/3/4 to all lanes: bit 5 indicates register stride. - */ - stride =3D (insn & (1 << 5)) ? 2 : 1; - vec_size =3D nregs =3D=3D 1 ? stride * 8 : 8; - - tmp =3D tcg_temp_new_i32(); - for (reg =3D 0; reg < nregs; reg++) { - gen_aa32_ld_i32(s, tmp, addr, get_mem_index(s), - s->be_data | size); - if ((rd & 1) && vec_size =3D=3D 16) { - /* We cannot write 16 bytes at once because the - * destination is unaligned. - */ - tcg_gen_gvec_dup_i32(size, neon_reg_offset(rd, 0), - 8, 8, tmp); - tcg_gen_gvec_mov(0, neon_reg_offset(rd + 1, 0), - neon_reg_offset(rd, 0), 8, 8); - } else { - tcg_gen_gvec_dup_i32(size, neon_reg_offset(rd, 0), - vec_size, vec_size, tmp); - } - tcg_gen_addi_i32(addr, addr, 1 << size); - rd +=3D stride; - } - tcg_temp_free_i32(tmp); - tcg_temp_free_i32(addr); - stride =3D (1 << size) * nregs; + /* Load single element to all lanes -- handled by decodetree = */ + return 1; } else { /* Single element. */ int idx =3D (insn >> 4) & 0xf; diff --git a/target/arm/neon-ls.decode b/target/arm/neon-ls.decode index dd03d5a37bd..f0ab6d2c987 100644 --- a/target/arm/neon-ls.decode +++ b/target/arm/neon-ls.decode @@ -34,3 +34,8 @@ =20 VLDST_multiple 1111 0100 0 . l:1 0 rn:4 .... itype:4 size:2 align:2 rm:4 \ vd=3D%vd_dp + +# Neon load single element to all lanes + +VLD_all_lanes 1111 0100 1 . 1 0 rn:4 .... 11 n:2 size:2 t:1 a:1 rm:4 \ + vd=3D%vd_dp --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588270841; cv=none; d=zohomail.com; s=zohoarc; b=VnWEKJ15p/9tAlh7kVt4kmTx+kwJhxorkevRibMadWNs+6PZYIopvKg8rfNGHu3sD5E6nbzHrqqlmfPjuBdOxuNlaep9Q3jZZHqCfmNmYXI4FL/0EU+6axaChoOAEWCUT36TCCrGKfARWe0h1xwiwHSNNrNE7MseDj5wgzmViBs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588270841; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=eBspgQk++mtdWViFX+jGsC5B+/dbLN5PYD4I61Sc2EE=; b=dtA8htgKz4AC8FfgGP5dNhflJFkPj64SBwH8ivjiJgsEmw/IxmZ9vjychgxq25wKL2jmkWs0WYQ4j7wbO4eOAl/LFtvptewbw1c1EYhkoRQsSeBf8OuCYb0gDVZ9FOPcPZQPK6B2kSnt3GTbm9OqJb06taeJa1QUJRupnPWRJ6I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588270841630810.9253536419948; Thu, 30 Apr 2020 11:20:41 -0700 (PDT) Received: from localhost ([::1]:60324 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDnc-0007Il-35 for importer@patchew.org; Thu, 30 Apr 2020 14:20:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36276) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeC-0001cY-SD for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdg-00012x-VG for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:56 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]:37846) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdg-0000xM-FT for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:24 -0400 Received: by mail-wr1-x432.google.com with SMTP id k1so8184296wrx.4 for ; Thu, 30 Apr 2020 11:10:24 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10: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 :mime-version:content-transfer-encoding; bh=eBspgQk++mtdWViFX+jGsC5B+/dbLN5PYD4I61Sc2EE=; b=zl76gNt2QiZpPrDaUCtRXW/Ki2/35vwiYTdmmXddmdEx1cJNaIv17Rr3ld+uE8Q+CS VT+m+wHFstbnea0wtce62sdTj5QQsff1LjIFjDuQX7VyjtnCM1d3uikOlBgGhEszhusD mtACQViSSwlHC/zRgFN7S3LbZ5wC0X8sfMVgpXu8vUPZTjl0i7LhSj7oZy0C0Emxrvel 0nQLrBiibZoljhlWtHuey3f7ZAiYNd1AkrlKPyCEPeKdXI7TRlXYt6oCxZESuoSBNQWJ R+9j0zwcDI7gRHaHl29wIQVhATOsQpUpK4enxmKzf/SOOXL3+8rRs51X4KxGiqoE4L72 CMhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=eBspgQk++mtdWViFX+jGsC5B+/dbLN5PYD4I61Sc2EE=; b=U8t94yrd0h89axAa9Sm8PLI/waVGq58jlZ5IG6Grkron+QHqYDHt8AKYKN4IOl+GuQ 9ZKBOwnJMB3uR/XIhFsXKp42UmjvKwm+0A5zV5RXV/Zf10dH9Uc+1oD0fexmkFwe/F2q JkE+jlKKxp23dAekTT2jcFbhcoIGt7X009AC+7d7i60RMSEnh8ykQKM+R9LTjmd/8OuD vRgUdW7EOtUqc1ELAY1TDV47wnn7Sduy9Ytr2WVcQsm0DtETjTohjRpy+BFy8YMSRbcJ 56OT4ILUlTKxeAMHf6177SpyiR23adInV/6r3QOOPEvKNKJskEwjGA7xyhmFBNt5dZMD jSwA== X-Gm-Message-State: AGi0PuZbRug0w6ErOhZDkkaRNQQJCxOg3dY7VS4XzU1NGdh47m2TNHgi olYuqkcE9pGNcWQHUC2MIy1k8Q== X-Google-Smtp-Source: APiQypLCdB+74nCYphjdF0aRoSJQNwUx/HUqutmwW6onY3+qp7gRPf49LSKQBo+KcrAiZ04jYS8WZQ== X-Received: by 2002:adf:fd0a:: with SMTP id e10mr5444300wrr.160.1588270222903; Thu, 30 Apr 2020 11:10:22 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 13/36] target/arm: Convert Neon 'load/store single structure' to decodetree Date: Thu, 30 Apr 2020 19:09:40 +0100 Message-Id: <20200430181003.21682-14-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::432; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x432.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::432 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon "load/store single structure to one lane" insns to decodetree. As this is the last set of insns in the neon load/store group, we can remove the whole disas_neon_ls_insn() function. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 89 +++++++++++++++++++ target/arm/translate.c | 147 -------------------------------- target/arm/neon-ls.decode | 11 +++ 3 files changed, 100 insertions(+), 147 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index e60e9559bad..c881d1cf607 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -26,6 +26,11 @@ * It might be possible to convert it to a standalone .c file eventually. */ =20 +static inline int plus1(DisasContext *s, int x) +{ + return x + 1; +} + /* Include the generated Neon decoder */ #include "decode-neon-dp.inc.c" #include "decode-neon-ls.inc.c" @@ -471,3 +476,87 @@ static bool trans_VLD_all_lanes(DisasContext *s, arg_V= LD_all_lanes *a) =20 return true; } + +static bool trans_VLDST_single(DisasContext *s, arg_VLDST_single *a) +{ + /* Neon load/store single structure to one lane */ + int reg; + int nregs =3D a->n + 1; + int vd =3D a->vd; + TCGv_i32 addr, tmp; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist */ + if (!dc_isar_feature(aa32_simd_r32, s) && (a->vd & 0x10)) { + return false; + } + + /* Catch the UNDEF cases. This is unavoidably a bit messy. */ + switch (nregs) { + case 1: + if (((a->align & (1 << a->size)) !=3D 0) || + (a->size =3D=3D 2 && ((a->align & 3) =3D=3D 1 || (a->align & 3= ) =3D=3D 2))) { + return false; + } + break; + case 3: + if ((a->align & 1) !=3D 0) { + return false; + } + /* fall through */ + case 2: + if (a->size =3D=3D 2 && (a->align & 2) !=3D 0) { + return false; + } + break; + case 4: + if ((a->size =3D=3D 2) && ((a->align & 3) =3D=3D 3)) { + return false; + } + break; + default: + abort(); + } + if ((vd + a->stride * (nregs - 1)) > 31) { + /* + * Attempts to write off the end of the register file are + * UNPREDICTABLE; we choose to UNDEF because otherwise we would + * access off the end of the array that holds the register data. + */ + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + tmp =3D tcg_temp_new_i32(); + addr =3D tcg_temp_new_i32(); + load_reg_var(s, addr, a->rn); + /* + * TODO: if we implemented alignment exceptions, we should check + * addr against the alignment encoded in a->align here. + */ + for (reg =3D 0; reg < nregs; reg++) { + if (a->l) { + gen_aa32_ld_i32(s, tmp, addr, get_mem_index(s), + s->be_data | a->size); + neon_store_element(vd, a->reg_idx, a->size, tmp); + } else { /* Store */ + neon_load_element(tmp, vd, a->reg_idx, a->size); + gen_aa32_st_i32(s, tmp, addr, get_mem_index(s), + s->be_data | a->size); + } + vd +=3D a->stride; + tcg_gen_addi_i32(addr, addr, 1 << a->size); + } + tcg_temp_free_i32(addr); + tcg_temp_free_i32(tmp); + + gen_neon_ldst_base_update(s, a->rm, a->rn, (1 << a->size) * nregs); + + return true; +} diff --git a/target/arm/translate.c b/target/arm/translate.c index a9cad04ba91..8c059af0e7e 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -3213,140 +3213,6 @@ static void gen_neon_trn_u16(TCGv_i32 t0, TCGv_i32 = t1) tcg_temp_free_i32(rd); } =20 - -/* Translate a NEON load/store element instruction. Return nonzero if the - instruction is invalid. */ -static int disas_neon_ls_insn(DisasContext *s, uint32_t insn) -{ - int rd, rn, rm; - int nregs; - int stride; - int size; - int reg; - int load; - TCGv_i32 addr; - TCGv_i32 tmp; - - if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { - return 1; - } - - /* FIXME: this access check should not take precedence over UNDEF - * for invalid encodings; we will generate incorrect syndrome informat= ion - * for attempts to execute invalid vfp/neon encodings with FP disabled. - */ - if (s->fp_excp_el) { - gen_exception_insn(s, s->pc_curr, EXCP_UDEF, - syn_simd_access_trap(1, 0xe, false), s->fp_excp= _el); - return 0; - } - - if (!s->vfp_enabled) - return 1; - VFP_DREG_D(rd, insn); - rn =3D (insn >> 16) & 0xf; - rm =3D insn & 0xf; - load =3D (insn & (1 << 21)) !=3D 0; - if ((insn & (1 << 23)) =3D=3D 0) { - /* Load store all elements -- handled already by decodetree */ - return 1; - } else { - size =3D (insn >> 10) & 3; - if (size =3D=3D 3) { - /* Load single element to all lanes -- handled by decodetree = */ - return 1; - } else { - /* Single element. */ - int idx =3D (insn >> 4) & 0xf; - int reg_idx; - switch (size) { - case 0: - reg_idx =3D (insn >> 5) & 7; - stride =3D 1; - break; - case 1: - reg_idx =3D (insn >> 6) & 3; - stride =3D (insn & (1 << 5)) ? 2 : 1; - break; - case 2: - reg_idx =3D (insn >> 7) & 1; - stride =3D (insn & (1 << 6)) ? 2 : 1; - break; - default: - abort(); - } - nregs =3D ((insn >> 8) & 3) + 1; - /* Catch the UNDEF cases. This is unavoidably a bit messy. */ - switch (nregs) { - case 1: - if (((idx & (1 << size)) !=3D 0) || - (size =3D=3D 2 && ((idx & 3) =3D=3D 1 || (idx & 3) =3D= =3D 2))) { - return 1; - } - break; - case 3: - if ((idx & 1) !=3D 0) { - return 1; - } - /* fall through */ - case 2: - if (size =3D=3D 2 && (idx & 2) !=3D 0) { - return 1; - } - break; - case 4: - if ((size =3D=3D 2) && ((idx & 3) =3D=3D 3)) { - return 1; - } - break; - default: - abort(); - } - if ((rd + stride * (nregs - 1)) > 31) { - /* Attempts to write off the end of the register file - * are UNPREDICTABLE; we choose to UNDEF because otherwise - * the neon_load_reg() would write off the end of the arra= y. - */ - return 1; - } - tmp =3D tcg_temp_new_i32(); - addr =3D tcg_temp_new_i32(); - load_reg_var(s, addr, rn); - for (reg =3D 0; reg < nregs; reg++) { - if (load) { - gen_aa32_ld_i32(s, tmp, addr, get_mem_index(s), - s->be_data | size); - neon_store_element(rd, reg_idx, size, tmp); - } else { /* Store */ - neon_load_element(tmp, rd, reg_idx, size); - gen_aa32_st_i32(s, tmp, addr, get_mem_index(s), - s->be_data | size); - } - rd +=3D stride; - tcg_gen_addi_i32(addr, addr, 1 << size); - } - tcg_temp_free_i32(addr); - tcg_temp_free_i32(tmp); - stride =3D nregs * (1 << size); - } - } - if (rm !=3D 15) { - TCGv_i32 base; - - base =3D load_reg(s, rn); - if (rm =3D=3D 13) { - tcg_gen_addi_i32(base, base, stride); - } else { - TCGv_i32 index; - index =3D load_reg(s, rm); - tcg_gen_add_i32(base, base, index); - tcg_temp_free_i32(index); - } - store_reg(s, rn, base); - } - return 0; -} - static inline void gen_neon_narrow(int size, TCGv_i32 dest, TCGv_i64 src) { switch (size) { @@ -10596,13 +10462,6 @@ static void disas_arm_insn(DisasContext *s, unsign= ed int insn) } return; } - if ((insn & 0x0f100000) =3D=3D 0x04000000) { - /* NEON load/store. */ - if (disas_neon_ls_insn(s, insn)) { - goto illegal_op; - } - return; - } if ((insn & 0x0e000f00) =3D=3D 0x0c000100) { if (arm_dc_feature(s, ARM_FEATURE_IWMMXT)) { /* iWMMXt register transfer. */ @@ -10807,12 +10666,6 @@ static void disas_thumb2_insn(DisasContext *s, uin= t32_t insn) } break; case 12: - if ((insn & 0x01100000) =3D=3D 0x01000000) { - if (disas_neon_ls_insn(s, insn)) { - goto illegal_op; - } - break; - } goto illegal_op; default: illegal_op: diff --git a/target/arm/neon-ls.decode b/target/arm/neon-ls.decode index f0ab6d2c987..c7b03a72e8d 100644 --- a/target/arm/neon-ls.decode +++ b/target/arm/neon-ls.decode @@ -39,3 +39,14 @@ VLDST_multiple 1111 0100 0 . l:1 0 rn:4 .... itype:4 siz= e:2 align:2 rm:4 \ =20 VLD_all_lanes 1111 0100 1 . 1 0 rn:4 .... 11 n:2 size:2 t:1 a:1 rm:4 \ vd=3D%vd_dp + +# Neon load/store single structure to one lane +%imm1_5_p1 5:1 !function=3Dplus1 +%imm1_6_p1 6:1 !function=3Dplus1 + +VLDST_single 1111 0100 1 . l:1 0 rn:4 .... 00 n:2 reg_idx:3 align:1 rm:4= \ + vd=3D%vd_dp size=3D0 stride=3D1 +VLDST_single 1111 0100 1 . l:1 0 rn:4 .... 01 n:2 reg_idx:2 align:2 rm:4= \ + vd=3D%vd_dp size=3D1 stride=3D%imm1_5_p1 +VLDST_single 1111 0100 1 . l:1 0 rn:4 .... 10 n:2 reg_idx:1 align:3 rm:4= \ + vd=3D%vd_dp size=3D2 stride=3D%imm1_6_p1 --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588270736; cv=none; d=zohomail.com; s=zohoarc; b=Bx/sALx+T/KLQgqWu6PDuWd0lUmP0HbOjYc5CB3N10QbOIuq7ua3rIVc/m17Igd4OtmiOlHgDnAp4Pmo3XpEk7mnsOjB8tQ8WFn/3ExOYEDVAdWprwSzmszwVrNywlgxaVi063nh+ipbWTzUcHe3kI2yclNKqY1TCu4msR/YMUg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588270736; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ktz+IFnCp3WGIM8gI5HERLwJEWJsvRvRgBzd2QeRej4=; b=VW14180T0sLPQWeMtvUqB/XcO7RZT+/XWiFiMioF3NtxQnBhoM2vaw0sOSMeR3bBlaz+dUSX/gF5A8RrFfuZutee/SDfXNCsifsv2kZ3+EoUaBgs78nqLglLgM3P2kHziN1QODGr5lzPQqEPvciHqY2q9Qsi1BdZTvhkyMvL2d0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588270736083877.9664812009428; Thu, 30 Apr 2020 11:18:56 -0700 (PDT) Received: from localhost ([::1]:54798 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDlu-0004tf-8O for importer@patchew.org; Thu, 30 Apr 2020 14:18:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36316) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeG-0001jm-Ff for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdk-0001Ar-QF for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:00 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:38294) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdk-000122-CX for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:28 -0400 Received: by mail-wr1-x444.google.com with SMTP id x17so8174046wrt.5 for ; Thu, 30 Apr 2020 11:10:25 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ktz+IFnCp3WGIM8gI5HERLwJEWJsvRvRgBzd2QeRej4=; b=UTSRPdyBe6ll966cCrLPgCj0IicUKzxeGzcV4DGtYxx2+G5JeOIYa9gZR8D/Deq5LE A0BSBuLeAT3YqPLZxkX5dc4WdtM0JKsJZGbHYsoASEaZ4AZksflG6SZ85IBA8Uv5Fcfx Uw3flsEvOk3numcLBIJO0oIwAc2r3h5i4jJBr5cn/BYRoLnhF+RPP7ewfjgPsL88KswB t3j+rAYZl///NgIKKYJEoEx9eTwoz3sR8uFvMo7x7yN36dld8NJPz8v5A99rpy8UUKr4 SmvW2ihugfFvbhrMViS0/nWGsqSlcIbPeaichpdQCjyuT1QLkjuwW+yzbHWxqPwNCVTY FQsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ktz+IFnCp3WGIM8gI5HERLwJEWJsvRvRgBzd2QeRej4=; b=DfrsyUwr7YuMP+L3Cq9eYnXrfng5QXUBaBcHP/s+nVqBz/10s429XMujQgUuPFTuN7 rm0OEA3sDeQCX9Fj5mvB+QE9MpvGpW76maQSD5J9Q/S/2zJJUE78mMrwxnl0vyf+orMg FDpoK/+nhOdvdwgZdBbjhTII9+jMocgI7yaU2nh0qCqqhR2qC3Zp+lvXm1LSu6s/jqxi Z/yGW+RKr74w1BUEQhHN8P66nEwa7kxm4jWikLujev0AKN4lUXihkbMSEyjXl6Ozfssm I+r3ss+PJrHTpSBU6oL6kuUNbPu3lYyAncISl9LU62QeTIu4heLWzJmgJmZn7CZfrTI3 mj4g== X-Gm-Message-State: AGi0PuYAxhW9OW3Pp5itohFdouvd5+ROSsdy7S/ofOIVwVb6iDPlQ2WG zrd2Cgo0aXjQczOoZgAKqIpJ0w== X-Google-Smtp-Source: APiQypIdwscYlhhiZDbjzh1aFJbZT8+UdA5NkN6J3gYyc2Y3EnmODEVtOmJ5q5IpUAJe/jEOSZRMmA== X-Received: by 2002:a5d:6148:: with SMTP id y8mr5171455wrt.236.1588270224115; Thu, 30 Apr 2020 11:10:24 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 14/36] target/arm: Convert Neon 3-reg-same VADD/VSUB to decodetree Date: Thu, 30 Apr 2020 19:09:41 +0100 Message-Id: <20200430181003.21682-15-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::444; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x444.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::444 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon 3-reg-same VADD and VSUB insns to decodetree. Note that we don't need the neon_3r_sizes[op] check here because all size values are OK for VADD and VSUB; we'll add this when we convert the first insn that has size restrictions. For this we need one of the GVecGen*Fn typedefs currently in translate-a64.h; move them all to translate.h as a block so they are visible to the 32-bit decoder. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-a64.h | 9 -------- target/arm/translate.h | 9 ++++++++ target/arm/translate-neon.inc.c | 38 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 14 ++++-------- target/arm/neon-dp.decode | 17 +++++++++++++++ 5 files changed, 68 insertions(+), 19 deletions(-) diff --git a/target/arm/translate-a64.h b/target/arm/translate-a64.h index 4c2c91ae1b2..f02fbb63a4a 100644 --- a/target/arm/translate-a64.h +++ b/target/arm/translate-a64.h @@ -115,13 +115,4 @@ static inline int vec_full_reg_size(DisasContext *s) =20 bool disas_sve(DisasContext *, uint32_t); =20 -/* Note that the gvec expanders operate on offsets + sizes. */ -typedef void GVecGen2Fn(unsigned, uint32_t, uint32_t, uint32_t, uint32_t); -typedef void GVecGen2iFn(unsigned, uint32_t, uint32_t, int64_t, - uint32_t, uint32_t); -typedef void GVecGen3Fn(unsigned, uint32_t, uint32_t, - uint32_t, uint32_t, uint32_t); -typedef void GVecGen4Fn(unsigned, uint32_t, uint32_t, uint32_t, - uint32_t, uint32_t, uint32_t); - #endif /* TARGET_ARM_TRANSLATE_A64_H */ diff --git a/target/arm/translate.h b/target/arm/translate.h index 98b319f3f69..95b43e7ab65 100644 --- a/target/arm/translate.h +++ b/target/arm/translate.h @@ -305,4 +305,13 @@ void gen_sshl_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b); #define dc_isar_feature(name, ctx) \ ({ DisasContext *ctx_ =3D (ctx); isar_feature_##name(ctx_->isar); }) =20 +/* Note that the gvec expanders operate on offsets + sizes. */ +typedef void GVecGen2Fn(unsigned, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void GVecGen2iFn(unsigned, uint32_t, uint32_t, int64_t, + uint32_t, uint32_t); +typedef void GVecGen3Fn(unsigned, uint32_t, uint32_t, + uint32_t, uint32_t, uint32_t); +typedef void GVecGen4Fn(unsigned, uint32_t, uint32_t, uint32_t, + uint32_t, uint32_t, uint32_t); + #endif /* TARGET_ARM_TRANSLATE_H */ diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index c881d1cf607..bd9e697b3e2 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -560,3 +560,41 @@ static bool trans_VLDST_single(DisasContext *s, arg_VL= DST_single *a) =20 return true; } + +static bool do_3same(DisasContext *s, arg_3same *a, GVecGen3Fn fn) +{ + int vec_size =3D a->q ? 16 : 8; + int rd_ofs =3D neon_reg_offset(a->vd, 0); + int rn_ofs =3D neon_reg_offset(a->vn, 0); + int rm_ofs =3D neon_reg_offset(a->vm, 0); + + if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if ((a->vn | a->vm | a->vd) & a->q) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + fn(a->size, rd_ofs, rn_ofs, rm_ofs, vec_size, vec_size); + return true; +} + +#define DO_3SAME(INSN, FUNC) \ + static bool trans_##INSN##_3s(DisasContext *s, arg_3same *a) \ + { \ + return do_3same(s, a, FUNC); \ + } + +DO_3SAME(VADD, tcg_gen_gvec_add) +DO_3SAME(VSUB, tcg_gen_gvec_sub) diff --git a/target/arm/translate.c b/target/arm/translate.c index 8c059af0e7e..81a0df78e40 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4885,16 +4885,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) } return 0; =20 - case NEON_3R_VADD_VSUB: - if (u) { - tcg_gen_gvec_sub(size, rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size); - } else { - tcg_gen_gvec_add(size, rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size); - } - return 0; - case NEON_3R_VQADD: tcg_gen_gvec_4(rd_ofs, offsetof(CPUARMState, vfp.qc), rn_ofs, rm_ofs, vec_size, vec_size, @@ -4970,6 +4960,10 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) tcg_gen_gvec_3(rd_ofs, rm_ofs, rn_ofs, vec_size, vec_size, u ? &ushl_op[size] : &sshl_op[size]); return 0; + + case NEON_3R_VADD_VSUB: + /* Already handled by decodetree */ + return 1; } =20 if (size =3D=3D 3) { diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index c89a1a58591..a61b1e88476 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -18,6 +18,10 @@ # # This file is processed by scripts/decodetree.py # +# VFP/Neon register fields; same as vfp.decode +%vm_dp 5:1 0:4 +%vn_dp 7:1 16:4 +%vd_dp 22:1 12:4 =20 # Encodings for Neon data processing instructions where the T32 encoding # is a simple transformation of the A32 encoding. @@ -27,3 +31,16 @@ # 0b111p_1111_qqqq_qqqq_qqqq_qqqq_qqqq_qqqq # This file works on the A32 encoding only; calling code for T32 has to # transform the insn into the A32 version first. + +###################################################################### +# 3-reg-same grouping: +# 1111 001 U 0 D sz:2 Vn:4 Vd:4 opc:4 N Q M op Vm:4 +###################################################################### + +&3same vm vn vd q size + +@3same .... ... . . . size:2 .... .... .... . q:1 . . .... \ + &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp + +VADD_3s 1111 001 0 0 . .. .... .... 1000 . . . 0 .... @3same +VSUB_3s 1111 001 1 0 . .. .... .... 1000 . . . 0 .... @3same --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271305; cv=none; d=zohomail.com; s=zohoarc; b=So6xwT0vUhB6ecL004g8ewt/gx2sHFOzRVwjRrDURp4VbRnQS3i+2x3KezHQCO+NdNSxXkshXwxoFLku3hUELFnpPDFVz0bJJXmIo4bwtJm10pcUt+LZz74FCIEjd3rFfgINeEXDrVKsQ03DsODolzdfU/PL9IGN0+Pvegx6u1g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271305; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=QSstU/hy0hxmLdJnSbMYcJkvE1JZD3c/6g24zzTlD3s=; b=DWEa1PtMybUlbaZ58ZPx2yG8EgrifTCsVNXnhSSQjzibiddwz/ZSNJnKvFN5zfhJM/DBD9YDSCKsNjYmT4zYGR3c/XwDYT4A1Hucof9jc1ZX9aKLYLXucRMTo/9bJpJMTJso87W5OUp60jQlPMs2paBC7lhbU3lXT0mPh652xMA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271305700597.6398720505958; Thu, 30 Apr 2020 11:28:25 -0700 (PDT) Received: from localhost ([::1]:56980 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDv6-00038P-C5 for importer@patchew.org; Thu, 30 Apr 2020 14:28:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36290) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeE-0001gK-ME for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdk-0001Ai-VW for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:58 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:55758) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdk-00017o-BB for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:28 -0400 Received: by mail-wm1-x344.google.com with SMTP id e26so2975678wmk.5 for ; Thu, 30 Apr 2020 11:10:26 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10: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 :mime-version:content-transfer-encoding; bh=QSstU/hy0hxmLdJnSbMYcJkvE1JZD3c/6g24zzTlD3s=; b=TQODx0fzZx7rChF7QmAN+Rd3oDdcTFGVkhZZ/JA8lPtRyG1DUaOu2W+7ZdKSEdCFBi chkyZmPawfF7ps3EqcFQ0ivSUI1GXal0Qwt/i/Fh22nufp/4GUIHtIxI/OAi3KEUIKA1 Qf/ZI+OIAnixnyc/j8XCr7BgGpXg8s2pJMKkrH1qQwL+I2yY0E2+96P2tcM20rmfOSYI Xpfj9su896J5OtvE3dcz3dwCBBFtSa9Op0hXc7mklMF6D7M62FEuGG+D3yMJdzTaZzEF URGp7QJQT+KhQYDyvH8rRjhau95lFdsDIN8MB5hrkRHVIUDvtX4prhhGIk7MoTVsYqaH CB/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QSstU/hy0hxmLdJnSbMYcJkvE1JZD3c/6g24zzTlD3s=; b=NqTSTI3pF7IM8TS0hrnyLuD+FIYtcxyj0d2ZNPohulh/MLq9/QCK+9pON1fvA6CNFz /JZn6wsTBWcHKz7adtI0dowrtT7sQvMJc9AlMWcDGrjrMV3afhd85Fp4zpjxhXpCzEK8 5PNYfjV472AHvvbBNgF+H3BusNeXly42MlhOD8c2Z7y850yTLSrKp2mpBS3Bifn5YdAz uLEKQvzIfkkSf7scWnUsvESxEq7SeXRQEsqKLWP4YyVNIPJzXfTyfw8qVXY2X45ZwU2Y HRfbbdiU6dZRgglJrMW495gDR0OuIHz0B/iGMda4Y+mIP8mwrf+/j0e5qimglzvBA2bf DzBg== X-Gm-Message-State: AGi0PuaZsU6UYEUJ3kf/GBzAmU/hefKHnzDpTYq5oFI+EWNabV6rNvkW gE8iiZAcyy04682dzE1B+UkzyQ== X-Google-Smtp-Source: APiQypINHTRXqpOWnkkCVLPzO9Pxwt4w0QZnRVkbrWs3EfgxNIMg+QFu15j4n1/4jZynKQOCx4Y0bw== X-Received: by 2002:a1c:e90a:: with SMTP id q10mr4244076wmc.22.1588270225441; Thu, 30 Apr 2020 11:10:25 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 15/36] target/arm: Convert Neon 3-reg-same logic ops to decodetree Date: Thu, 30 Apr 2020 19:09:42 +0100 Message-Id: <20200430181003.21682-16-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::344; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x344.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::344 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon logic ops in the 3-reg-same grouping to decodetree. Note that for the logic ops the 'size' field forms part of their decode and the actual operations are always bitwise. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 19 +++++++++++++++++ target/arm/translate.c | 38 +-------------------------------- target/arm/neon-dp.decode | 12 +++++++++++ 3 files changed, 32 insertions(+), 37 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index bd9e697b3e2..507f0abe801 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -598,3 +598,22 @@ static bool do_3same(DisasContext *s, arg_3same *a, GV= ecGen3Fn fn) =20 DO_3SAME(VADD, tcg_gen_gvec_add) DO_3SAME(VSUB, tcg_gen_gvec_sub) +DO_3SAME(VAND, tcg_gen_gvec_and) +DO_3SAME(VBIC, tcg_gen_gvec_andc) +DO_3SAME(VORR, tcg_gen_gvec_or) +DO_3SAME(VORN, tcg_gen_gvec_orc) +DO_3SAME(VEOR, tcg_gen_gvec_xor) + +/* These insns are all gvec_bitsel but with the inputs in various orders. = */ +#define DO_3SAME_BITSEL(INSN, O1, O2, O3) \ + static void gen_##INSN##_3s(unsigned vece, uint32_t rd_ofs, \ + uint32_t rn_ofs, uint32_t rm_ofs, \ + uint32_t oprsz, uint32_t maxsz) \ + { \ + tcg_gen_gvec_bitsel(vece, rd_ofs, O1, O2, O3, oprsz, maxsz); \ + } \ + DO_3SAME(INSN, gen_##INSN##_3s) + +DO_3SAME_BITSEL(VBSL, rd_ofs, rn_ofs, rm_ofs) +DO_3SAME_BITSEL(VBIT, rm_ofs, rn_ofs, rd_ofs) +DO_3SAME_BITSEL(VBIF, rm_ofs, rd_ofs, rn_ofs) diff --git a/target/arm/translate.c b/target/arm/translate.c index 81a0df78e40..a3eaf9a82b7 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4848,43 +4848,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) } return 1; =20 - case NEON_3R_LOGIC: /* Logic ops. */ - switch ((u << 2) | size) { - case 0: /* VAND */ - tcg_gen_gvec_and(0, rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size); - break; - case 1: /* VBIC */ - tcg_gen_gvec_andc(0, rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size); - break; - case 2: /* VORR */ - tcg_gen_gvec_or(0, rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size); - break; - case 3: /* VORN */ - tcg_gen_gvec_orc(0, rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size); - break; - case 4: /* VEOR */ - tcg_gen_gvec_xor(0, rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size); - break; - case 5: /* VBSL */ - tcg_gen_gvec_bitsel(MO_8, rd_ofs, rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size); - break; - case 6: /* VBIT */ - tcg_gen_gvec_bitsel(MO_8, rd_ofs, rm_ofs, rn_ofs, rd_ofs, - vec_size, vec_size); - break; - case 7: /* VBIF */ - tcg_gen_gvec_bitsel(MO_8, rd_ofs, rm_ofs, rd_ofs, rn_ofs, - vec_size, vec_size); - break; - } - return 0; - case NEON_3R_VQADD: tcg_gen_gvec_4(rd_ofs, offsetof(CPUARMState, vfp.qc), rn_ofs, rm_ofs, vec_size, vec_size, @@ -4962,6 +4925,7 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) return 0; =20 case NEON_3R_VADD_VSUB: + case NEON_3R_LOGIC: /* Already handled by decodetree */ return 1; } diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index a61b1e88476..f62dbaa72d5 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -42,5 +42,17 @@ @3same .... ... . . . size:2 .... .... .... . q:1 . . .... \ &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp =20 +@3same_logic .... ... . . . .. .... .... .... . q:1 .. .... \ + &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp size=3D0 + +VAND_3s 1111 001 0 0 . 00 .... .... 0001 ... 1 .... @3same_logic +VBIC_3s 1111 001 0 0 . 01 .... .... 0001 ... 1 .... @3same_logic +VORR_3s 1111 001 0 0 . 10 .... .... 0001 ... 1 .... @3same_logic +VORN_3s 1111 001 0 0 . 11 .... .... 0001 ... 1 .... @3same_logic +VEOR_3s 1111 001 1 0 . 00 .... .... 0001 ... 1 .... @3same_logic +VBSL_3s 1111 001 1 0 . 01 .... .... 0001 ... 1 .... @3same_logic +VBIT_3s 1111 001 1 0 . 10 .... .... 0001 ... 1 .... @3same_logic +VBIF_3s 1111 001 1 0 . 11 .... .... 0001 ... 1 .... @3same_logic + VADD_3s 1111 001 0 0 . .. .... .... 1000 . . . 0 .... @3same VSUB_3s 1111 001 1 0 . .. .... .... 1000 . . . 0 .... @3same --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271016; cv=none; d=zohomail.com; s=zohoarc; b=Gb5zjITvHRF6DNH9IaE98/UcNJGhi0YanWt4EbQw7Z57BIytjti63FEweFTR32wiyv12f4sa3pfLCAQUdciI/gY9nLQKOU9YHu01zGnP8oJUoxW19K7BAj3io4dXVF5HsraQwxI3B7kZ4NeoQFx4pgi6ANNLJIq7a+G5dKFOrh0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271016; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ODnbszWwjBK2kHWFKFvRf6pWCWZZQ+15i6oZRBzn83c=; b=NfyKXklOpqx8cyZxCdrwLRJTosvTjRBHqB8KejQ0ROJESoXZxEyJG00B9YgqpGWT8gxzuubwqB4E3Xg6ihPawZckJE7v2BBhBxiFKYe0M4E58A2A20knfUxat2GSLBaP9o+ugvTC1F5VH4UqjoFVWay9OqlWzLclFyMslsnqIW0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271016141168.79124673081844; Thu, 30 Apr 2020 11:23:36 -0700 (PDT) Received: from localhost ([::1]:40724 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDqQ-0002qr-SR for importer@patchew.org; Thu, 30 Apr 2020 14:23:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36312) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeG-0001jG-7Q for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdl-0001B1-1W for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:59 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:37584) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdk-0001AH-Dg for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:28 -0400 Received: by mail-wm1-x341.google.com with SMTP id z6so3080509wml.2 for ; Thu, 30 Apr 2020 11:10:28 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ODnbszWwjBK2kHWFKFvRf6pWCWZZQ+15i6oZRBzn83c=; b=U6ApjhchLT36+BxwF054Y+zpHtq1Cjamu0kOzKeB5ipZ4ZtX+1Ad6qHRjJ1BzAtay+ xosuFyh7FLQnyACmxheLNC+UPixDezUmqFFaZv4uFCNhpKR6DZ3Mzd8aP+1VlrYhwDf0 gKHgSHCJSLwREtR4SXyQqwjpff0nJef+/185s97cnYlJU4JU8Lv3KsC6uKrNbUVRq5It B17+BSER9x39PVmm6pcx44smNv5a+KkvH3tA8YF7FUG7fIKN7Nko3ncuKol0l07NHkau s1SEg50EEyn28JRNTxorf/9kSGBO7kpbWJpgP9WA3W+c12oZi0riH8evHcnq9ntNGqO5 6Q+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ODnbszWwjBK2kHWFKFvRf6pWCWZZQ+15i6oZRBzn83c=; b=rx2sRmcfCnYDRPx5JYLmWHhXIBVp/OK3LFiBDtLmcPnBN8F06uvkKOQs9AIBwxqjcJ sYLt7fpVIzWUV2j02OpNWkLgwULJh2ecIgoTXWUZABk4f9oGXLyFJuEnLM4hNc25hF+H DyJreWek0Gzspc/loqoyEnOCNBRzKiLMneHio+KvQalVGLHQHiPqpCv332l5vxten/Hh dFKeixB+1sQZIejgEve0IhFznHktFN9C7O6yWZgPxevUb8qHPXRVHvr49NfBeHv5HcL0 rTrUTvqjbcxmImRuLcEprh51LjC4J5OnaK+zKajoci0i/0sFvoRzl8O+H5Z7HYPAakma KT4g== X-Gm-Message-State: AGi0PubsaVxBSR83aMNn/P3Kj71o6L5sNthf1qI7IIWOWn6kxBRbGPwG nwkwyT9vEOSgq/QSKK3CtiO7/g== X-Google-Smtp-Source: APiQypKeTKSfWzR9uEYwPHReSGAhEdnf+puTRL00mGMfBiM9yEAlKueBSL719Wo7ryGcYfM13MGm3Q== X-Received: by 2002:a05:600c:2dcf:: with SMTP id e15mr4498414wmh.171.1588270227132; Thu, 30 Apr 2020 11:10:27 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 16/36] target/arm: Convert Neon 3-reg-same VMAX/VMIN to decodetree Date: Thu, 30 Apr 2020 19:09:43 +0100 Message-Id: <20200430181003.21682-17-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::341; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x341.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::341 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon 3-reg-same VMAX and VMIN insns to decodetree. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 14 ++++++++++++++ target/arm/translate.c | 21 ++------------------- target/arm/neon-dp.decode | 5 +++++ 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 507f0abe801..ab1740201c4 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -617,3 +617,17 @@ DO_3SAME(VEOR, tcg_gen_gvec_xor) DO_3SAME_BITSEL(VBSL, rd_ofs, rn_ofs, rm_ofs) DO_3SAME_BITSEL(VBIT, rm_ofs, rn_ofs, rd_ofs) DO_3SAME_BITSEL(VBIF, rm_ofs, rd_ofs, rn_ofs) + +#define DO_3SAME_NO_SZ_3(INSN, FUNC) \ + static bool trans_##INSN##_3s(DisasContext *s, arg_3same *a) \ + { \ + if (a->size =3D=3D 3) { = \ + return false; \ + } \ + return do_3same(s, a, FUNC); \ + } + +DO_3SAME_NO_SZ_3(VMAX_S, tcg_gen_gvec_smax) +DO_3SAME_NO_SZ_3(VMAX_U, tcg_gen_gvec_umax) +DO_3SAME_NO_SZ_3(VMIN_S, tcg_gen_gvec_smin) +DO_3SAME_NO_SZ_3(VMIN_U, tcg_gen_gvec_umin) diff --git a/target/arm/translate.c b/target/arm/translate.c index a3eaf9a82b7..a22aee802a5 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4899,25 +4899,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) rd_ofs, rn_ofs, rm_ofs, vec_size, vec_size); return 0; =20 - case NEON_3R_VMAX: - if (u) { - tcg_gen_gvec_umax(size, rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size); - } else { - tcg_gen_gvec_smax(size, rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size); - } - return 0; - case NEON_3R_VMIN: - if (u) { - tcg_gen_gvec_umin(size, rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size); - } else { - tcg_gen_gvec_smin(size, rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size); - } - return 0; - case NEON_3R_VSHL: /* Note the operation is vshl vd,vm,vn */ tcg_gen_gvec_3(rd_ofs, rm_ofs, rn_ofs, vec_size, vec_size, @@ -4926,6 +4907,8 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) =20 case NEON_3R_VADD_VSUB: case NEON_3R_LOGIC: + case NEON_3R_VMAX: + case NEON_3R_VMIN: /* Already handled by decodetree */ return 1; } diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index f62dbaa72d5..b721d39c7ba 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -54,5 +54,10 @@ VBSL_3s 1111 001 1 0 . 01 .... .... 0001 ... 1 = .... @3same_logic VBIT_3s 1111 001 1 0 . 10 .... .... 0001 ... 1 .... @3same_logic VBIF_3s 1111 001 1 0 . 11 .... .... 0001 ... 1 .... @3same_logic =20 +VMAX_S_3s 1111 001 0 0 . .. .... .... 0110 . . . 0 .... @3same +VMAX_U_3s 1111 001 1 0 . .. .... .... 0110 . . . 0 .... @3same +VMIN_S_3s 1111 001 0 0 . .. .... .... 0110 . . . 1 .... @3same +VMIN_U_3s 1111 001 1 0 . .. .... .... 0110 . . . 1 .... @3same + VADD_3s 1111 001 0 0 . .. .... .... 1000 . . . 0 .... @3same VSUB_3s 1111 001 1 0 . .. .... .... 1000 . . . 0 .... @3same --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588270904; cv=none; d=zohomail.com; s=zohoarc; b=UlR7iX1CaiR6gy5Ky9vxUbi77gT4mCJ8svJpaD5myqWqqSeCgLIj/kNs4nPsLfGKNDPdG6Ur8nlKy91poRzUrplJgsiT4ZPHEayhIOci9PomUe89Q6jU7Wf3SDg2HGjSS7tMdsb/g+gR9YktETpYRCKt44zpSctheqL+dT0DusM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588270904; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=w26jlTM40qeiGBZbRUdPuo9dr2IcHrAl6DOSMQrLqTU=; b=TcEJWVPe7tMo4v0GIKc0DNqYrd+4gLbhEJ5lgJwObCgfqrtSvLu9xcj2G3+HjGvsiQiRQUmDMG1fU9krUGKRoG7GpFJCpnogO1t4b8SA2tcO17gZcqsdOHvzfujS/Fu3Qc3sOf6XN9WahpJ6E4gP/IUK6jcxDT6LVf6a3qCY7lQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 158827090475125.311160018506257; Thu, 30 Apr 2020 11:21:44 -0700 (PDT) Received: from localhost ([::1]:35186 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDod-0000FM-Dn for importer@patchew.org; Thu, 30 Apr 2020 14:21:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36326) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeH-0001lm-5Z for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdm-0001Bb-4G for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:00 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:38632) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdl-0001Aw-Iy for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:29 -0400 Received: by mail-wm1-x343.google.com with SMTP id g12so3072662wmh.3 for ; Thu, 30 Apr 2020 11:10:29 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=w26jlTM40qeiGBZbRUdPuo9dr2IcHrAl6DOSMQrLqTU=; b=MijK5GN2MAeztVmQfmDcBtPFMzB4bdg94jj0PeE8J33AI2Y3Mr2QKpPLhv7ZgaJL/+ sJR6tS8hb3dZonsGEWybTuyTUCWq99xRHd6L3xA/em/FVGURwvXZz7EetX8Bno66LrVh noyGs24M5lSEB+lriHAhrBXYah0gLni2IhCqxJQRpEDb2vXnL1pmJHbTgOS82qb2FP4q 7cKAgGPFW0y1wcYuXq3IHEYx38w4hVpSeyRK1IuREqLfZaEQu9kYRutUm0s3MFkyu0Py 0/YkcG/WCbt+EUAebTe6uSOmPzey4ANW0rBT551qCiHJD4K5ot3ILp30DDNFr+Vq2gWE tI5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=w26jlTM40qeiGBZbRUdPuo9dr2IcHrAl6DOSMQrLqTU=; b=AmklU/AYY25lCRbndUPV+ShgVn5iKj8+aDssJVGjw0UGC2qsfsMl6Bt+HLeAruCZ5o B66rI+oAlhdS6DsyZ7c5nnFnWouk9qNSVaO1yNlto8oL4DpAcU2IRX+eDH3sz3uz9Wu4 PGUHracRSXbxkNX2x3yskLeXKVFMs6AzTTMqbskfUFj74/1RDN1a11CF45YVLLD58quq +CzXAkqxVbTU9tmmIa/IZWAqFj343GU23QC8GnJ9DiDo7dlw8Qxq8Wbna4r3LNRki0ZD ACLdFm5EbqmexGu1ox2wRWv9bqPjs08Bo4D/LCilRaPu8VP6gBVzKbvroxdBFNhKSQed L8Dg== X-Gm-Message-State: AGi0PuZjp3P6XGJ6GPwXD1IoFst1I8q6YHB+2V1BExjh2wE04NRG/2TP jIwtB4I2liVHsAPV/2qfVcYYIw== X-Google-Smtp-Source: APiQypJSi+2ZyjzucDjkop74LRZCl0PdgQfFsXEur3cMyq57X1Nqu1lwJtneNTuIY2G+7lNdQ6B0FQ== X-Received: by 2002:a05:600c:210:: with SMTP id 16mr4147308wmi.57.1588270228231; Thu, 30 Apr 2020 11:10:28 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 17/36] target/arm: Convert Neon 3-reg-same comparisons to decodetree Date: Thu, 30 Apr 2020 19:09:44 +0100 Message-Id: <20200430181003.21682-18-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::343; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x343.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::343 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon comparison ops in the 3-reg-same grouping to decodetree. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 22 ++++++++++++++++++++++ target/arm/translate.c | 23 +++-------------------- target/arm/neon-dp.decode | 8 ++++++++ 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index ab1740201c4..952e4456f5e 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -631,3 +631,25 @@ DO_3SAME_NO_SZ_3(VMAX_S, tcg_gen_gvec_smax) DO_3SAME_NO_SZ_3(VMAX_U, tcg_gen_gvec_umax) DO_3SAME_NO_SZ_3(VMIN_S, tcg_gen_gvec_smin) DO_3SAME_NO_SZ_3(VMIN_U, tcg_gen_gvec_umin) + +#define DO_3SAME_CMP(INSN, COND) \ + static void gen_##INSN##_3s(unsigned vece, uint32_t rd_ofs, \ + uint32_t rn_ofs, uint32_t rm_ofs, \ + uint32_t oprsz, uint32_t maxsz) \ + { \ + tcg_gen_gvec_cmp(COND, vece, rd_ofs, rn_ofs, rm_ofs, oprsz, maxsz)= ; \ + } \ + DO_3SAME_NO_SZ_3(INSN, gen_##INSN##_3s) + +DO_3SAME_CMP(VCGT_S, TCG_COND_GT) +DO_3SAME_CMP(VCGT_U, TCG_COND_GTU) +DO_3SAME_CMP(VCGE_S, TCG_COND_GE) +DO_3SAME_CMP(VCGE_U, TCG_COND_GEU) +DO_3SAME_CMP(VCEQ, TCG_COND_EQ) + +static void gen_VTST_3s(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, + uint32_t rm_ofs, uint32_t oprsz, uint32_t maxsz) +{ + tcg_gen_gvec_3(rd_ofs, rn_ofs, rm_ofs, oprsz, maxsz, &cmtst_op[vece]); +} +DO_3SAME_NO_SZ_3(VTST, gen_VTST_3s) diff --git a/target/arm/translate.c b/target/arm/translate.c index a22aee802a5..7e4a57157c2 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4879,26 +4879,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) u ? &mls_op[size] : &mla_op[size]); return 0; =20 - case NEON_3R_VTST_VCEQ: - if (u) { /* VCEQ */ - tcg_gen_gvec_cmp(TCG_COND_EQ, size, rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size); - } else { /* VTST */ - tcg_gen_gvec_3(rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size, &cmtst_op[size]); - } - return 0; - - case NEON_3R_VCGT: - tcg_gen_gvec_cmp(u ? TCG_COND_GTU : TCG_COND_GT, size, - rd_ofs, rn_ofs, rm_ofs, vec_size, vec_size); - return 0; - - case NEON_3R_VCGE: - tcg_gen_gvec_cmp(u ? TCG_COND_GEU : TCG_COND_GE, size, - rd_ofs, rn_ofs, rm_ofs, vec_size, vec_size); - return 0; - case NEON_3R_VSHL: /* Note the operation is vshl vd,vm,vn */ tcg_gen_gvec_3(rd_ofs, rm_ofs, rn_ofs, vec_size, vec_size, @@ -4909,6 +4889,9 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_LOGIC: case NEON_3R_VMAX: case NEON_3R_VMIN: + case NEON_3R_VTST_VCEQ: + case NEON_3R_VCGT: + case NEON_3R_VCGE: /* Already handled by decodetree */ return 1; } diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index b721d39c7ba..b89ea6819a9 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -54,6 +54,11 @@ VBSL_3s 1111 001 1 0 . 01 .... .... 0001 ... 1 = .... @3same_logic VBIT_3s 1111 001 1 0 . 10 .... .... 0001 ... 1 .... @3same_logic VBIF_3s 1111 001 1 0 . 11 .... .... 0001 ... 1 .... @3same_logic =20 +VCGT_S_3s 1111 001 0 0 . .. .... .... 0011 . . . 0 .... @3same +VCGT_U_3s 1111 001 1 0 . .. .... .... 0011 . . . 0 .... @3same +VCGE_S_3s 1111 001 0 0 . .. .... .... 0011 . . . 1 .... @3same +VCGE_U_3s 1111 001 1 0 . .. .... .... 0011 . . . 1 .... @3same + VMAX_S_3s 1111 001 0 0 . .. .... .... 0110 . . . 0 .... @3same VMAX_U_3s 1111 001 1 0 . .. .... .... 0110 . . . 0 .... @3same VMIN_S_3s 1111 001 0 0 . .. .... .... 0110 . . . 1 .... @3same @@ -61,3 +66,6 @@ VMIN_U_3s 1111 001 1 0 . .. .... .... 0110 . . . 1= .... @3same =20 VADD_3s 1111 001 0 0 . .. .... .... 1000 . . . 0 .... @3same VSUB_3s 1111 001 1 0 . .. .... .... 1000 . . . 0 .... @3same + +VTST_3s 1111 001 0 0 . .. .... .... 1000 . . . 1 .... @3same +VCEQ_3s 1111 001 1 0 . .. .... .... 1000 . . . 1 .... @3same --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271473; cv=none; d=zohomail.com; s=zohoarc; b=NT/sOKkbvwGJe5nfMu9l1Uq5eqkh3uBMgCqLeDcOS/T1gE/I7Jv2wW/G4mslgG92/iYY7EwOkJU53WdcRNWI08aCkP+s3d8/r4WRwf3OaUMUxSIzIsVGj9syBpuTALzxpqs/YxrM7UpCQXFc4kp0kT9ukFeebQTMCf526DKhS5o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271473; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gCVovwKxXypZUnAhID6Hfz/S5fE2/epvyEFf8xPlaPE=; b=IYwIf5kOZ8MCOAJYHXrVr1OSqiNbiVL6qoUdtALujs6jWz3XnW4qEHx+TJzq+quXnwKT4Vfc6e9S/gmTdPpcrbolC755Sk2kNF2RRs0afEFAjd9EQ7skNSVOdO+wXDW6PIYeIEQ2ROMRqY29aAEOwJyVYPKFvWG9b+58K/7J59Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271473217603.055699342644; Thu, 30 Apr 2020 11:31:13 -0700 (PDT) Received: from localhost ([::1]:37186 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDxn-0007rE-T0 for importer@patchew.org; Thu, 30 Apr 2020 14:31:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36340) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeI-0001no-0Z for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdn-0001CP-Kv for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:01 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:53852) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdn-0001BY-7e for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:31 -0400 Received: by mail-wm1-x343.google.com with SMTP id k12so2964936wmj.3 for ; Thu, 30 Apr 2020 11:10:30 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gCVovwKxXypZUnAhID6Hfz/S5fE2/epvyEFf8xPlaPE=; b=AyNAyUz3IwmAVdTLv8WJ5f/oWKKJqbSIt6kBEbA57zG8eL9JvNOQpqYRpQ3yGlIx4+ foIyUkXJDakIm+V7gBaM3eLQPbQjflR4rmFSF8mIcKEV841mUR5B2IAUhcmQvpx/LhJx DJbMkw3jtfpFC+Ikmfx8K1IOv7Ar4bsXUMnTSODCBzAZS/4sHB9lYxZpwKNp6RFLwF8/ Ttglr6rXokYjSrlHH0GSAsKEkZkALQ0KAVs/nrmACzyuVAgGUuSp2LuMoByV7xLjBFG0 2QAAtAeaclcsFMpBLHQrJAGL5fiSbYXZQCfQ7MqBwvUeU6HCCQmTpTDSbNhyOd0KblSk uQDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gCVovwKxXypZUnAhID6Hfz/S5fE2/epvyEFf8xPlaPE=; b=FngLqpkzO4Uxri7h1S7qO/kriOjONqzaTSfPct7sV2T0ThVG09W72bZQQ86SzeG/+/ 763URVvYZAO9ik1eChcS0kFWBFt6LWhEkPolatzmcItU+VYbQp9VadVEoNmDJfIwn/OB PsPVsXzMXlZV01rWJgKjT4VVeel1dVbKLbopBft1RhBrVcCFjAfWg0uNLSmjO02BzDZ5 9GtE7zZd5pLRs3lKQv+cSQzDMhH/m2oz91VaDwEAga/Ro7FLWM+/s58pg3tk6c8zX5jn 4g3Lo6Y8kzj1cftO9+gUgOOONwfIGtJW6tHWHj5LnIKUoOMbjOvXIvoULSsAa7hXv/gE N35w== X-Gm-Message-State: AGi0Pub7xKI3pYUEoI2NUdMXKtCkneNBu2iMVbkKascKZtaaNiXer8wa OXgQt6eADsOtsOSRrQrt5qgyrw== X-Google-Smtp-Source: APiQypK2594IdSom8F9F4rbws9frjn2jbk0/GkOKTDBw3nCGMwnnn3yb8j98MnAN+XSefu/XxQU0TQ== X-Received: by 2002:a1c:7d4b:: with SMTP id y72mr4418635wmc.11.1588270229454; Thu, 30 Apr 2020 11:10:29 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 18/36] target/arm: Convert Neon 3-reg-same VQADD/VQSUB to decodetree Date: Thu, 30 Apr 2020 19:09:45 +0100 Message-Id: <20200430181003.21682-19-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::343; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x343.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::343 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon VQADD/VQSUB insns in the 3-reg-same grouping to decodetree. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 15 +++++++++++++++ target/arm/translate.c | 14 ++------------ target/arm/neon-dp.decode | 6 ++++++ 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 952e4456f5e..854ab70cd79 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -653,3 +653,18 @@ static void gen_VTST_3s(unsigned vece, uint32_t rd_ofs= , uint32_t rn_ofs, tcg_gen_gvec_3(rd_ofs, rn_ofs, rm_ofs, oprsz, maxsz, &cmtst_op[vece]); } DO_3SAME_NO_SZ_3(VTST, gen_VTST_3s) + +#define DO_3SAME_GVEC4(INSN, OPARRAY) \ + static void gen_##INSN##_3s(unsigned vece, uint32_t rd_ofs, \ + uint32_t rn_ofs, uint32_t rm_ofs, \ + uint32_t oprsz, uint32_t maxsz) \ + { \ + tcg_gen_gvec_4(rd_ofs, offsetof(CPUARMState, vfp.qc), \ + rn_ofs, rm_ofs, oprsz, maxsz, &OPARRAY[vece]); \ + } \ + DO_3SAME(INSN, gen_##INSN##_3s) + +DO_3SAME_GVEC4(VQADD_S, sqadd_op) +DO_3SAME_GVEC4(VQADD_U, uqadd_op) +DO_3SAME_GVEC4(VQSUB_S, sqsub_op) +DO_3SAME_GVEC4(VQSUB_U, uqsub_op) diff --git a/target/arm/translate.c b/target/arm/translate.c index 7e4a57157c2..538e4be8f1b 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4848,18 +4848,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) } return 1; =20 - case NEON_3R_VQADD: - tcg_gen_gvec_4(rd_ofs, offsetof(CPUARMState, vfp.qc), - rn_ofs, rm_ofs, vec_size, vec_size, - (u ? uqadd_op : sqadd_op) + size); - return 0; - - case NEON_3R_VQSUB: - tcg_gen_gvec_4(rd_ofs, offsetof(CPUARMState, vfp.qc), - rn_ofs, rm_ofs, vec_size, vec_size, - (u ? uqsub_op : sqsub_op) + size); - return 0; - case NEON_3R_VMUL: /* VMUL */ if (u) { /* Polynomial case allows only P8. */ @@ -4892,6 +4880,8 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_VTST_VCEQ: case NEON_3R_VCGT: case NEON_3R_VCGE: + case NEON_3R_VQADD: + case NEON_3R_VQSUB: /* Already handled by decodetree */ return 1; } diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index b89ea6819a9..ab59b349aaa 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -42,6 +42,9 @@ @3same .... ... . . . size:2 .... .... .... . q:1 . . .... \ &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp =20 +VQADD_S_3s 1111 001 0 0 . .. .... .... 0000 . . . 1 .... @3same +VQADD_U_3s 1111 001 1 0 . .. .... .... 0000 . . . 1 .... @3same + @3same_logic .... ... . . . .. .... .... .... . q:1 .. .... \ &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp size=3D0 =20 @@ -54,6 +57,9 @@ VBSL_3s 1111 001 1 0 . 01 .... .... 0001 ... 1 .= ... @3same_logic VBIT_3s 1111 001 1 0 . 10 .... .... 0001 ... 1 .... @3same_logic VBIF_3s 1111 001 1 0 . 11 .... .... 0001 ... 1 .... @3same_logic =20 +VQSUB_S_3s 1111 001 0 0 . .. .... .... 0010 . . . 1 .... @3same +VQSUB_U_3s 1111 001 1 0 . .. .... .... 0010 . . . 1 .... @3same + VCGT_S_3s 1111 001 0 0 . .. .... .... 0011 . . . 0 .... @3same VCGT_U_3s 1111 001 1 0 . .. .... .... 0011 . . . 0 .... @3same VCGE_S_3s 1111 001 0 0 . .. .... .... 0011 . . . 1 .... @3same --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271082; cv=none; d=zohomail.com; s=zohoarc; b=N7F6+0m6Ins8Y6T+1bJ2k1ITLhud5Vkd38eXjZT88lKbQerrdB0yCljVWZw1XUpAkebffbiiJJO+zIu0vE8JbdrNWB9ff+aXIXjI5Ij489Y0gVkVSMsOp1rcoR7tX1o+kRLehPwgqwwaPyBroSdHOXitJxvuUs2oJ8Z0yWsWzuo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271082; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ZvVAov9v/saeGj1TRG90d3M5driRZEcd+V+CZGCG07U=; b=HBYXYpnoYSe0YMYIvafgfgqDz3HnDR3DjANquYh7T92yfqZiA1Zh3hiuKALbyHJXinl9NkzZOEFM2hpKmpr4k+1mcMu4+zWUvjk6w6lk2wcCIdo54enC1W6kNBdOtEvuioVEZwthL15TXdGyC/PRBQs6fAFieQ4UOFvbnNaaE30= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271082306101.43919879196744; Thu, 30 Apr 2020 11:24:42 -0700 (PDT) Received: from localhost ([::1]:43590 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDrU-0004c5-Qi for importer@patchew.org; Thu, 30 Apr 2020 14:24:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36350) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeJ-0001rW-BM for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdo-0001EV-QJ for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:03 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:33249) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdo-0001CD-6F for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:32 -0400 Received: by mail-wr1-x442.google.com with SMTP id c12so3037301wrp.0 for ; Thu, 30 Apr 2020 11:10:31 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ZvVAov9v/saeGj1TRG90d3M5driRZEcd+V+CZGCG07U=; b=uz2VaYgPa5e8B4bbG09HGE+xceI0LorGT7Q6MgWFKFnXJQgmmfrecmagLFa54hw89o pGwGLInk630VlvxEqr9KlkHqAUA5Q/xTFs4hXx0v/HAZN0OF4FyH204TTUn0cM0qW6Ln RrHIzUgEGLsjojUJlExgTeA5KH/TlMm++2CtEwQnPbdenfutg/314yzs/4MfdzTWzOh2 PeNYcrJyovW1Mm1Xv87YsO7SzYm3siNRg9a6mGWG/pFRGjNpdi4gcABs1avthfexn70O qPa6kcWIU1xwsmxWbPYaV0Dr9vYuN0Iul8+blQEOn51AtbwQSZ0WvsUAjx2CnecRuwXM jfRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ZvVAov9v/saeGj1TRG90d3M5driRZEcd+V+CZGCG07U=; b=jIXTav2ea9HuS4KxxpLSiRlFaexTlVNtPBl3LKCrEum3tQu154lprWXqw0a8cFYHye 8Qx2MOxZxeKN6LQQMnLp7Mo2mMRK9lwcduosDXZRRc/1R5dGFxzu9Pa7PqLwf0fEGnWV 9cN1g107DBrCwAXZsuP9+LFsOtvXGcDflcrTm1wlpSd6VMYm7AxV1N11AUMTPtm5HKRy Ws1ILddhnS0Uxm9KVz7mZdFVgQNQUheBfeaYcauCL8qhMJAuA9L3SqnlZgJqs1+ddZ3b ztsot6rQQGe7JER5fAptl9axJLMEDcn1CjKgyS7gHffzEGMWdspy+5ap+UxdJFQDLHCW gJaQ== X-Gm-Message-State: AGi0PuZyIUnuittAhFNRILP7sjckei0w/IeJ0NyG7jjzhwBj3LOZfK8e GcZ5V5+Wap5IEJhaPIFq1NPEE6T2RsL/TQ== X-Google-Smtp-Source: APiQypIWVuM+oQnSyjpOp2YHC9xL8vICE4iNQBz9Y7Rfyzja5v1Yp3etQBt1xqBe3vUewv9qLE66eg== X-Received: by 2002:a5d:654f:: with SMTP id z15mr5487863wrv.338.1588270230633; Thu, 30 Apr 2020 11:10:30 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 19/36] target/arm: Convert Neon 3-reg-same VMUL, VMLA, VMLS, VSHL to decodetree Date: Thu, 30 Apr 2020 19:09:46 +0100 Message-Id: <20200430181003.21682-20-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::442; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x442.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::442 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon VMUL, VMLA, VMLS and VSHL insns in the 3-reg-same grouping to decodetree. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 44 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 28 +++------------------ target/arm/neon-dp.decode | 9 +++++++ 3 files changed, 56 insertions(+), 25 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 854ab70cd79..50b77b6d714 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -631,6 +631,7 @@ DO_3SAME_NO_SZ_3(VMAX_S, tcg_gen_gvec_smax) DO_3SAME_NO_SZ_3(VMAX_U, tcg_gen_gvec_umax) DO_3SAME_NO_SZ_3(VMIN_S, tcg_gen_gvec_smin) DO_3SAME_NO_SZ_3(VMIN_U, tcg_gen_gvec_umin) +DO_3SAME_NO_SZ_3(VMUL, tcg_gen_gvec_mul) =20 #define DO_3SAME_CMP(INSN, COND) \ static void gen_##INSN##_3s(unsigned vece, uint32_t rd_ofs, \ @@ -668,3 +669,46 @@ DO_3SAME_GVEC4(VQADD_S, sqadd_op) DO_3SAME_GVEC4(VQADD_U, uqadd_op) DO_3SAME_GVEC4(VQSUB_S, sqsub_op) DO_3SAME_GVEC4(VQSUB_U, uqsub_op) + +static void gen_VMUL_p_3s(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, + uint32_t rm_ofs, uint32_t oprsz, uint32_t maxsz) +{ + tcg_gen_gvec_3_ool(rd_ofs, rn_ofs, rm_ofs, oprsz, maxsz, + 0, gen_helper_gvec_pmul_b); +} + +static bool trans_VMUL_p_3s(DisasContext *s, arg_3same *a) +{ + if (a->size !=3D 0) { + return false; + } + return do_3same(s, a, gen_VMUL_p_3s); +} + +#define DO_3SAME_GVEC3_NO_SZ_3(INSN, OPARRAY) \ + static void gen_##INSN##_3s(unsigned vece, uint32_t rd_ofs, \ + uint32_t rn_ofs, uint32_t rm_ofs, \ + uint32_t oprsz, uint32_t maxsz) \ + { \ + tcg_gen_gvec_3(rd_ofs, rn_ofs, rm_ofs, \ + oprsz, maxsz, &OPARRAY[vece]); \ + } \ + DO_3SAME_NO_SZ_3(INSN, gen_##INSN##_3s) + + +DO_3SAME_GVEC3_NO_SZ_3(VMLA, mla_op) +DO_3SAME_GVEC3_NO_SZ_3(VMLS, mls_op) + +#define DO_3SAME_GVEC3_SHIFT(INSN, OPARRAY) \ + static void gen_##INSN##_3s(unsigned vece, uint32_t rd_ofs, \ + uint32_t rn_ofs, uint32_t rm_ofs, \ + uint32_t oprsz, uint32_t maxsz) \ + { \ + /* Note the operation is vshl vd,vm,vn */ \ + tcg_gen_gvec_3(rd_ofs, rm_ofs, rn_ofs, \ + oprsz, maxsz, &OPARRAY[vece]); \ + } \ + DO_3SAME(INSN, gen_##INSN##_3s) + +DO_3SAME_GVEC3_SHIFT(VSHL_S, sshl_op) +DO_3SAME_GVEC3_SHIFT(VSHL_U, ushl_op) diff --git a/target/arm/translate.c b/target/arm/translate.c index 538e4be8f1b..ad60b7190f9 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4848,31 +4848,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) } return 1; =20 - case NEON_3R_VMUL: /* VMUL */ - if (u) { - /* Polynomial case allows only P8. */ - if (size !=3D 0) { - return 1; - } - tcg_gen_gvec_3_ool(rd_ofs, rn_ofs, rm_ofs, vec_size, vec_s= ize, - 0, gen_helper_gvec_pmul_b); - } else { - tcg_gen_gvec_mul(size, rd_ofs, rn_ofs, rm_ofs, - vec_size, vec_size); - } - return 0; - - case NEON_3R_VML: /* VMLA, VMLS */ - tcg_gen_gvec_3(rd_ofs, rn_ofs, rm_ofs, vec_size, vec_size, - u ? &mls_op[size] : &mla_op[size]); - return 0; - - case NEON_3R_VSHL: - /* Note the operation is vshl vd,vm,vn */ - tcg_gen_gvec_3(rd_ofs, rm_ofs, rn_ofs, vec_size, vec_size, - u ? &ushl_op[size] : &sshl_op[size]); - return 0; - case NEON_3R_VADD_VSUB: case NEON_3R_LOGIC: case NEON_3R_VMAX: @@ -4882,6 +4857,9 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_VCGE: case NEON_3R_VQADD: case NEON_3R_VQSUB: + case NEON_3R_VMUL: + case NEON_3R_VML: + case NEON_3R_VSHL: /* Already handled by decodetree */ return 1; } diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index ab59b349aaa..ec3a92fe753 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -65,6 +65,9 @@ VCGT_U_3s 1111 001 1 0 . .. .... .... 0011 . . . 0= .... @3same VCGE_S_3s 1111 001 0 0 . .. .... .... 0011 . . . 1 .... @3same VCGE_U_3s 1111 001 1 0 . .. .... .... 0011 . . . 1 .... @3same =20 +VSHL_S_3s 1111 001 0 0 . .. .... .... 0100 . . . 0 .... @3same +VSHL_U_3s 1111 001 1 0 . .. .... .... 0100 . . . 0 .... @3same + VMAX_S_3s 1111 001 0 0 . .. .... .... 0110 . . . 0 .... @3same VMAX_U_3s 1111 001 1 0 . .. .... .... 0110 . . . 0 .... @3same VMIN_S_3s 1111 001 0 0 . .. .... .... 0110 . . . 1 .... @3same @@ -75,3 +78,9 @@ VSUB_3s 1111 001 1 0 . .. .... .... 1000 . . . 0= .... @3same =20 VTST_3s 1111 001 0 0 . .. .... .... 1000 . . . 1 .... @3same VCEQ_3s 1111 001 1 0 . .. .... .... 1000 . . . 1 .... @3same + +VMLA_3s 1111 001 0 0 . .. .... .... 1001 . . . 0 .... @3same +VMLS_3s 1111 001 1 0 . .. .... .... 1001 . . . 0 .... @3same + +VMUL_3s 1111 001 0 0 . .. .... .... 1001 . . . 1 .... @3same +VMUL_p_3s 1111 001 1 0 . .. .... .... 1001 . . . 1 .... @3same --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271190; cv=none; d=zohomail.com; s=zohoarc; b=ixi+KW0Gdy/bFKtr/H6wxQxWA6sJj49t0YD2f9CKGo/0139H4h+tm2nSe0JiQMaV62JWf+IxbXRPk1PYLl787nk+2o17twHOjcgnyz9YuVPW0meU8dnz/aogA+skh9QoUuMnvYaaZWXbVcvdgjCSMpH0uv0CFtvmNgZuP0f845I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271190; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Id3Uc/B7n4Syo/SnHMGumI6na3pAMsUQ7gLuSb0aqVo=; b=AVpImS+q4SQbpiE9GaPpeTlHSoXjXwQmxIA0/PjTU32vdCWdGi6tvHrdmGraT6yeX316tWLGDu9f1s2kXsJUpR9wCvag65u9eSnCIyyMBnkSyr61XlfWjDIEFxvrfcu428ZhtNLCwBoYSVFBeVnr4aJUdcVpIw4p+LTyC6LsNWk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271190905342.8653070867598; Thu, 30 Apr 2020 11:26:30 -0700 (PDT) Received: from localhost ([::1]:50100 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDtD-0007Z1-GU for importer@patchew.org; Thu, 30 Apr 2020 14:26:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36358) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeK-0001xe-Tq for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdp-0001FB-LM for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:04 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:38633) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdp-0001EF-85 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:33 -0400 Received: by mail-wm1-x343.google.com with SMTP id g12so3072993wmh.3 for ; Thu, 30 Apr 2020 11:10:32 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Id3Uc/B7n4Syo/SnHMGumI6na3pAMsUQ7gLuSb0aqVo=; b=U3ctwcjO4D9WXH7EdS5+jX0xmj1PdoqMG14/7NAgxY4tGUI38WZUfp7iSBZqg3jk1a bxAtf3gySMlV3WsCoXBxSR1Q60KlA9nxOq4jZDzQTjg40Z/yFsgqsrz0WIIHSD8o6QMz CJWQyIm+0mpQVbluaq3xqAFME2DdP9nwCyDLODDMf5l/5n1jO16I7ns9z3PP0PgPG5jC aMTdudtbMj+/o4e9cwYFHKYjdGqpvK5dQdGaJDew6ou2gQQM6WhdRKNAbrI/JBzPsJwf NjCkzgEfWCXD20mQoe0DSwnsi+qZa9jFNHIFfcfDs80LeGr9FN0PL25tMFZ/rUf0HtK6 c9Cw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Id3Uc/B7n4Syo/SnHMGumI6na3pAMsUQ7gLuSb0aqVo=; b=PNk23VBcBGGbv22LwsiBZR/iEkltEXIOhN/e8c80CljAJjFlFaP1xdAD7zGRu8lZb0 WsQSWydjzoW4ARUQU3tGJxhSSwDLABnYDEwcLSla/9huj7cL2fxhCXIwwxDXf4Jz/1Og lLRc/goQeto5I9mgqUQ7tfaggDQIsOTjTclmdIIft20UAr3+V+N64pF9ggjYY+I7mbXY Cjs/29fEIVKnCVazVBs9Yb8NBtgnBWXE/JrZnZlZAC2Iyk2zAe4avw75NbKmm0cNd5Sf JXHkZtK4Inx7hhinWj0Af46qjbbdeYMCraUHBU2a05VBVcm4AyNQlrw2uXlgkfuAQgTG Fuxg== X-Gm-Message-State: AGi0Pub/QQ7nZFqh172esh5OOH2zK1srAnU7VWx4/AMKcxfMSXQ/4ams 20pwEPVfFsczfUTETKkTrBSOEw== X-Google-Smtp-Source: APiQypISEGM+f9sl+zb1QGRq1emThEcJGMySa7lvgeWakl1Z+I0LAo/E9jjZJr0HpdOjoxs2xBpmgw== X-Received: by 2002:a05:600c:2306:: with SMTP id 6mr4546477wmo.17.1588270231867; Thu, 30 Apr 2020 11:10:31 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 20/36] target/arm: Convert Neon 3-reg-same VQRDMLAH/VQRDMLSH to decodetree Date: Thu, 30 Apr 2020 19:09:47 +0100 Message-Id: <20200430181003.21682-21-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::343; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x343.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::343 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon VQRDMLAH and VQRDMLSH insns in the 3-reg-same group to decodetree. These don't use do_3same() because they want to operate on VFP double registers, whose offsets are different from the neon_reg_offset() calculations do_3same does. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 57 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 36 ++------------------- target/arm/neon-dp.decode | 3 ++ 3 files changed, 62 insertions(+), 34 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 50b77b6d714..c8beb048fa2 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -712,3 +712,60 @@ DO_3SAME_GVEC3_NO_SZ_3(VMLS, mls_op) =20 DO_3SAME_GVEC3_SHIFT(VSHL_S, sshl_op) DO_3SAME_GVEC3_SHIFT(VSHL_U, ushl_op) + +static bool do_vqrdmlah(DisasContext *s, arg_3same *a, + gen_helper_gvec_3_ptr *fn) +{ + int vec_size =3D a->q ? 16 : 8; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON) || + !dc_isar_feature(aa32_rdm, s)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if (!fn) { + return false; /* bad size */ + } + + if ((a->vn | a->vm | a->vd) & a->q) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + tcg_gen_gvec_3_ptr(vfp_reg_offset(1, a->vd), + vfp_reg_offset(1, a->vn), + vfp_reg_offset(1, a->vm), + cpu_env, vec_size, vec_size, 0, fn); + return true; +} + +static bool trans_VQRDMLAH_3s(DisasContext *s, arg_3same *a) +{ + static gen_helper_gvec_3_ptr * const fns[] =3D { + NULL, + gen_helper_gvec_qrdmlah_s16, + gen_helper_gvec_qrdmlah_s32, + NULL, + }; + return do_vqrdmlah(s, a, fns[a->size]); +} + +static bool trans_VQRDMLSH_3s(DisasContext *s, arg_3same *a) +{ + static gen_helper_gvec_3_ptr * const fns[] =3D { + NULL, + gen_helper_gvec_qrdmlsh_s16, + gen_helper_gvec_qrdmlsh_s32, + NULL, + }; + return do_vqrdmlah(s, a, fns[a->size]); +} diff --git a/target/arm/translate.c b/target/arm/translate.c index ad60b7190f9..adc42362469 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -3629,22 +3629,6 @@ static const uint8_t neon_2rm_sizes[] =3D { [NEON_2RM_VCVT_UF] =3D 0x4, }; =20 - -/* Expand v8.1 simd helper. */ -static int do_v81_helper(DisasContext *s, gen_helper_gvec_3_ptr *fn, - int q, int rd, int rn, int rm) -{ - if (dc_isar_feature(aa32_rdm, s)) { - int opr_sz =3D (1 + q) * 8; - tcg_gen_gvec_3_ptr(vfp_reg_offset(1, rd), - vfp_reg_offset(1, rn), - vfp_reg_offset(1, rm), cpu_env, - opr_sz, opr_sz, 0, fn); - return 0; - } - return 1; -} - static void gen_ceq0_i32(TCGv_i32 d, TCGv_i32 a) { tcg_gen_setcondi_i32(TCG_COND_EQ, d, a, 0); @@ -4818,15 +4802,7 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) if (!u) { break; /* VPADD */ } - /* VQRDMLAH */ - switch (size) { - case 1: - return do_v81_helper(s, gen_helper_gvec_qrdmlah_s16, - q, rd, rn, rm); - case 2: - return do_v81_helper(s, gen_helper_gvec_qrdmlah_s32, - q, rd, rn, rm); - } + /* VQRDMLAH : handled by decodetree */ return 1; =20 case NEON_3R_VFM_VQRDMLSH: @@ -4837,15 +4813,7 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) } break; } - /* VQRDMLSH */ - switch (size) { - case 1: - return do_v81_helper(s, gen_helper_gvec_qrdmlsh_s16, - q, rd, rn, rm); - case 2: - return do_v81_helper(s, gen_helper_gvec_qrdmlsh_s32, - q, rd, rn, rm); - } + /* VQRDMLSH : handled by decodetree */ return 1; =20 case NEON_3R_VADD_VSUB: diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index ec3a92fe753..ce0db476c88 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -84,3 +84,6 @@ VMLS_3s 1111 001 1 0 . .. .... .... 1001 . . . 0= .... @3same =20 VMUL_3s 1111 001 0 0 . .. .... .... 1001 . . . 1 .... @3same VMUL_p_3s 1111 001 1 0 . .. .... .... 1001 . . . 1 .... @3same + +VQRDMLAH_3s 1111 001 1 0 . .. .... .... 1011 ... 1 .... @3same +VQRDMLSH_3s 1111 001 1 0 . .. .... .... 1100 ... 1 .... @3same --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271409; cv=none; d=zohomail.com; s=zohoarc; b=RilgKoLLD6Js/82YIRielOVaZszlsFZupo7josTBzJ4Yl5PKwo7fUYF67He74xniuPSNBfblhReDR5pB8IPO8NaznILmfQ0FfxlCioLNax193/OFUVWi+iABMAXk8s5yIUhVoOvWwILho5Ma0j0Bnr0kANP+rh7zt4vykhJAt8U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271409; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=l8VA/iThXhnqkBkxtC9ELSbE+ekhmsnZea++PtUSqsg=; b=NvsipNso4Hao3sxs6hgI6XEumfrScIeBSZ3+x0Z/UKXLQFkhIkuoYQZ6P23mIf3a8x5EAofZeyeUl3dhRlGtb5MOCpnhIUD/rHteeJmMR/x1MmE8/45bNuqH5S4Me1SvRVknGYTfi6I6hMA9KyuH9dwXG0evAVZBkNd3a1QgnEs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271409324332.4337371833451; Thu, 30 Apr 2020 11:30:09 -0700 (PDT) Received: from localhost ([::1]:33590 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDwl-00066x-Gy for importer@patchew.org; Thu, 30 Apr 2020 14:30:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36366) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeN-00022l-5Y for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdr-0001Gg-94 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:06 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:38295) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdq-0001FY-RW for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:34 -0400 Received: by mail-wr1-x443.google.com with SMTP id x17so8174724wrt.5 for ; Thu, 30 Apr 2020 11:10:34 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=l8VA/iThXhnqkBkxtC9ELSbE+ekhmsnZea++PtUSqsg=; b=mJ5qRTTPyxHrfVnMEqC/e5fum/vpMCPFljzQffSpAskEEg5Gs5ZrqidfFBoOjy65bZ HB1W2S5aFYAz5N3bt/IEuUaM/VeiSpL9Ke98lyAc/e7Z4cpZthMQwuYEJhTad3XGUDsJ 9ra+mbwCl/r29RdCjPFDX0BvAkX6aNaT+ayYWHir1mOcZDx6SoBwW1GjDPSvAbkZhmJi AfU7192QOu/JTOCSKDRz7yU+Sopj4QOQFWw+vmXeu+XejVvMq6W58AnFquXl3ViolNP2 HDgWFg1s0t79GRBD5pm1lLJo8ZuFjVT56hCZh+WNTXt6jlCew0HF60kuJW+I/iqEiwkc Frvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=l8VA/iThXhnqkBkxtC9ELSbE+ekhmsnZea++PtUSqsg=; b=QlRn6Vi+9eWDFjxDshIvfw79N3Dlj9FE641gpnU1bC1dHkBJtNzWy+xWE7YX/LrmDV GS8Qv1oPGpwG9wwX5XvGCihaRotnHLgvW6t7ZyR49geplO+Zze6JZvQASrxEsUMTqTte JZtejfTM2jzuZMqiILvLGUgcVJTZB26d04W9K8iiOpAxmskKpDF+tpK8wsUNc6AWFx1g d9NXKUnMzi/L3DeAAEPTodFRQTS+z8bYvmIaEBgKnt8S++ypl8RRH6KGl+MzQ+ksw3Nl BA032NF+nQSC0qCDlhOF0N1dnfwaJl0wcD0AQvlOgj203xEGk/9fAH4V0f4zvoYVFS/n BXNg== X-Gm-Message-State: AGi0PuZzcK6ktrNC1M7ejVSaZtznfJ/eFDwQzb8r1u2zuAV25G8f/isH WfTBjJR1bMOKZW7d1MowNOpPMQ46kLuMpg== X-Google-Smtp-Source: APiQypI5xzqHyzXk4dZS6FWpEVve5BlJiPDA3L6IS83JYAZxdoWNnrNEX/w//LVCwbyv1oAfWsEHPQ== X-Received: by 2002:a5d:6a8b:: with SMTP id s11mr5255139wru.258.1588270233389; Thu, 30 Apr 2020 11:10:33 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 21/36] target/arm: Convert Neon 3-reg-same SHA to decodetree Date: Thu, 30 Apr 2020 19:09:48 +0100 Message-Id: <20200430181003.21682-22-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::443; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x443.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::443 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon SHA instructions in the 3-reg-same group to decodetree. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 139 ++++++++++++++++++++++++++++++++ target/arm/translate.c | 46 +---------- target/arm/neon-dp.decode | 10 +++ 3 files changed, 151 insertions(+), 44 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index c8beb048fa2..161313ad879 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -769,3 +769,142 @@ static bool trans_VQRDMLSH_3s(DisasContext *s, arg_3s= ame *a) }; return do_vqrdmlah(s, a, fns[a->size]); } + +static bool trans_SHA1_3s(DisasContext *s, arg_SHA1_3s *a) +{ + TCGv_ptr ptr1, ptr2, ptr3; + TCGv_i32 tmp; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON) || + !dc_isar_feature(aa32_sha1, s)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if ((a->vn | a->vm | a->vd) & 1) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + ptr1 =3D vfp_reg_ptr(true, a->vd); + ptr2 =3D vfp_reg_ptr(true, a->vn); + ptr3 =3D vfp_reg_ptr(true, a->vm); + tmp =3D tcg_const_i32(a->optype); + gen_helper_crypto_sha1_3reg(ptr1, ptr2, ptr3, tmp); + tcg_temp_free_i32(tmp); + tcg_temp_free_ptr(ptr1); + tcg_temp_free_ptr(ptr2); + tcg_temp_free_ptr(ptr3); + + return true; +} + +static bool trans_SHA256H_3s(DisasContext *s, arg_SHA256H_3s *a) +{ + TCGv_ptr ptr1, ptr2, ptr3; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON) || + !dc_isar_feature(aa32_sha2, s)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if ((a->vn | a->vm | a->vd) & 1) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + ptr1 =3D vfp_reg_ptr(true, a->vd); + ptr2 =3D vfp_reg_ptr(true, a->vn); + ptr3 =3D vfp_reg_ptr(true, a->vm); + gen_helper_crypto_sha256h(ptr1, ptr2, ptr3); + tcg_temp_free_ptr(ptr1); + tcg_temp_free_ptr(ptr2); + tcg_temp_free_ptr(ptr3); + + return true; +} + +static bool trans_SHA256H2_3s(DisasContext *s, arg_SHA256H2_3s *a) +{ + TCGv_ptr ptr1, ptr2, ptr3; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON) || + !dc_isar_feature(aa32_sha2, s)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if ((a->vn | a->vm | a->vd) & 1) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + ptr1 =3D vfp_reg_ptr(true, a->vd); + ptr2 =3D vfp_reg_ptr(true, a->vn); + ptr3 =3D vfp_reg_ptr(true, a->vm); + gen_helper_crypto_sha256h2(ptr1, ptr2, ptr3); + tcg_temp_free_ptr(ptr1); + tcg_temp_free_ptr(ptr2); + tcg_temp_free_ptr(ptr3); + + return true; +} + +static bool trans_SHA256SU1_3s(DisasContext *s, arg_SHA256SU1_3s *a) +{ + TCGv_ptr ptr1, ptr2, ptr3; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON) || + !dc_isar_feature(aa32_sha2, s)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if ((a->vn | a->vm | a->vd) & 1) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + ptr1 =3D vfp_reg_ptr(true, a->vd); + ptr2 =3D vfp_reg_ptr(true, a->vn); + ptr3 =3D vfp_reg_ptr(true, a->vm); + gen_helper_crypto_sha256su1(ptr1, ptr2, ptr3); + tcg_temp_free_ptr(ptr1); + tcg_temp_free_ptr(ptr2); + tcg_temp_free_ptr(ptr3); + + return true; +} diff --git a/target/arm/translate.c b/target/arm/translate.c index adc42362469..160638e2a7c 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4711,7 +4711,7 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) int vec_size; uint32_t imm; TCGv_i32 tmp, tmp2, tmp3, tmp4, tmp5; - TCGv_ptr ptr1, ptr2, ptr3; + TCGv_ptr ptr1, ptr2; TCGv_i64 tmp64; =20 if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { @@ -4755,49 +4755,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) return 1; } switch (op) { - case NEON_3R_SHA: - /* The SHA-1/SHA-256 3-register instructions require special - * treatment here, as their size field is overloaded as an - * op type selector, and they all consume their input in a - * single pass. - */ - if (!q) { - return 1; - } - if (!u) { /* SHA-1 */ - if (!dc_isar_feature(aa32_sha1, s)) { - return 1; - } - ptr1 =3D vfp_reg_ptr(true, rd); - ptr2 =3D vfp_reg_ptr(true, rn); - ptr3 =3D vfp_reg_ptr(true, rm); - tmp4 =3D tcg_const_i32(size); - gen_helper_crypto_sha1_3reg(ptr1, ptr2, ptr3, tmp4); - tcg_temp_free_i32(tmp4); - } else { /* SHA-256 */ - if (!dc_isar_feature(aa32_sha2, s) || size =3D=3D 3) { - return 1; - } - ptr1 =3D vfp_reg_ptr(true, rd); - ptr2 =3D vfp_reg_ptr(true, rn); - ptr3 =3D vfp_reg_ptr(true, rm); - switch (size) { - case 0: - gen_helper_crypto_sha256h(ptr1, ptr2, ptr3); - break; - case 1: - gen_helper_crypto_sha256h2(ptr1, ptr2, ptr3); - break; - case 2: - gen_helper_crypto_sha256su1(ptr1, ptr2, ptr3); - break; - } - } - tcg_temp_free_ptr(ptr1); - tcg_temp_free_ptr(ptr2); - tcg_temp_free_ptr(ptr3); - return 0; - case NEON_3R_VPADD_VQRDMLAH: if (!u) { break; /* VPADD */ @@ -4828,6 +4785,7 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_VMUL: case NEON_3R_VML: case NEON_3R_VSHL: + case NEON_3R_SHA: /* Already handled by decodetree */ return 1; } diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index ce0db476c88..f22606b2bd5 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -86,4 +86,14 @@ VMUL_3s 1111 001 0 0 . .. .... .... 1001 . . . = 1 .... @3same VMUL_p_3s 1111 001 1 0 . .. .... .... 1001 . . . 1 .... @3same =20 VQRDMLAH_3s 1111 001 1 0 . .. .... .... 1011 ... 1 .... @3same + +SHA1_3s 1111 001 0 0 . optype:2 .... .... 1100 . 1 . 0 .... \ + vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp +SHA256H_3s 1111 001 1 0 . 00 .... .... 1100 . 1 . 0 .... \ + vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp +SHA256H2_3s 1111 001 1 0 . 01 .... .... 1100 . 1 . 0 .... \ + vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp +SHA256SU1_3s 1111 001 1 0 . 10 .... .... 1100 . 1 . 0 .... \ + vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp + VQRDMLSH_3s 1111 001 1 0 . .. .... .... 1100 ... 1 .... @3same --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271226; cv=none; d=zohomail.com; s=zohoarc; b=NF3OWnBN49oCR2F3i8UXGa5GwXlhpKlyPsssrejoBVWpWGRjG9l87dHaxxASZj6IgZb0EqHTRekIQrNmMNGyzNJZYAq4TL/r2aUdzFumJjcHrkwvhYEbmwD+DmFESNirF/CPtDqUEH/9xBj6pczyGfTSGYNz+r0kdd9QzvTh0RQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271226; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=XKGUFsA+PQ5gNasR70DiFZqblEfd/NvB+SNX6wf5d6o=; b=KnzImg+sEKta56+clSqBGAdVLCTQEIcWdkqq7HrxLAJ0EwqSBnibndzz2hM5zHrA+Hq57RwDcs+nnRx43TYqSQXktynDMfwwi3ylRIZNwnpqvsviq/DJW98L4sKH2KwNP4XKacVMDp5+OY0dFn6Uz38v1mE9X5bzNCYtRDmHMDY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271226935359.0638755243775; Thu, 30 Apr 2020 11:27:06 -0700 (PDT) Received: from localhost ([::1]:52112 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDtp-0008Sm-Cy for importer@patchew.org; Thu, 30 Apr 2020 14:27:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36374) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeO-00026L-DN for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDds-0001HA-4K for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:08 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:54356) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdr-0001GU-NC for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:35 -0400 Received: by mail-wm1-x341.google.com with SMTP id h4so2976991wmb.4 for ; Thu, 30 Apr 2020 11:10:35 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XKGUFsA+PQ5gNasR70DiFZqblEfd/NvB+SNX6wf5d6o=; b=YyWb/2bPWDGE8YO/Njwu+/vFsjD2t6seWQx7FgYDIBdIqtq64fx2dp0cNc/aVEcmeo RF4JdTwJzHUHluT9zeKE+loYFNVOvGT8Qfz755nNGwKoyNKGZ4U2LDyg+RlokcGErN+Q Y+wdSQRI3RfhXLtXtTatmQ729fl8BDgBdUYpjuGN5YJtzkBo4cF2/4ie0nwzxUFQPl89 DPzn675PvJ3Jfmi6EfhSZ3P3nt5Lmy1V1A0KxEwHY8tkppPF+7eAU11wMbyZHz1+psHu eK9tS67XG+AIcIOkINZQfTKeGTDeVADi0IKfaQBux0jSjJZpYD9JtWBc8PcTddMD5LDH LYZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=XKGUFsA+PQ5gNasR70DiFZqblEfd/NvB+SNX6wf5d6o=; b=V+ETa7xZ4f2jYwKk1Y1sy3k4A0iVzyLJvsCYeJ0dH6Nvbi3czOUn5c4qaixnRf7E6v Xxwpf4yVs5qhRT26DIMrWV+bF+Uf+UZY121mNPLc0HoN/PsxBvPH6HZF5beMqqVi4Ucb j/UR6wCNysxqC90BeMGfYEoPdsoX8Uvb4seTa26VmqDiozPIrxnJTZR97QbNP5C7H90X wMJwGhIket9u0F2rtlcw2uXuyInVD/1ojgRRVCUfwB9dVdvDWluj9zhGjDVX5bJLLGyw S5kUNLStCin42KEc8eIGMfHRlPj4WkMaOsMoyNp6+oNzlwAvvcv5RjVCh7FffGw0tMz0 S9wA== X-Gm-Message-State: AGi0PuYBJSPQQndio4joUXwZkhgeZIpM+eFfDMWjVL/dtKW+kIR8Igca FYo0OAYaAud2XPfBfzINSBpytg== X-Google-Smtp-Source: APiQypJ4AFo81FFaCmMMM49+IbvvazojGO/bYpTaq6XUXs7vYf79DKGpX5KtFqVVvW0cbOaMH5OIVw== X-Received: by 2002:a1c:8141:: with SMTP id c62mr4307463wmd.87.1588270234537; Thu, 30 Apr 2020 11:10:34 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 22/36] target/arm: Move gen_ function typedefs to translate.h Date: Thu, 30 Apr 2020 19:09:49 +0100 Message-Id: <20200430181003.21682-23-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::341; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x341.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::341 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" We're going to want at least some of the NeonGen* typedefs for the refactored 32-bit Neon decoder, so move them all to translate.h since it makes more sense to keep them in one group. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate.h | 17 +++++++++++++++++ target/arm/translate-a64.c | 17 ----------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/target/arm/translate.h b/target/arm/translate.h index 95b43e7ab65..cb7925ea461 100644 --- a/target/arm/translate.h +++ b/target/arm/translate.h @@ -314,4 +314,21 @@ typedef void GVecGen3Fn(unsigned, uint32_t, uint32_t, typedef void GVecGen4Fn(unsigned, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); =20 +/* Function prototype for gen_ functions for calling Neon helpers */ +typedef void NeonGenOneOpEnvFn(TCGv_i32, TCGv_ptr, TCGv_i32); +typedef void NeonGenTwoOpFn(TCGv_i32, TCGv_i32, TCGv_i32); +typedef void NeonGenTwoOpEnvFn(TCGv_i32, TCGv_ptr, TCGv_i32, TCGv_i32); +typedef void NeonGenTwo64OpFn(TCGv_i64, TCGv_i64, TCGv_i64); +typedef void NeonGenTwo64OpEnvFn(TCGv_i64, TCGv_ptr, TCGv_i64, TCGv_i64); +typedef void NeonGenNarrowFn(TCGv_i32, TCGv_i64); +typedef void NeonGenNarrowEnvFn(TCGv_i32, TCGv_ptr, TCGv_i64); +typedef void NeonGenWidenFn(TCGv_i64, TCGv_i32); +typedef void NeonGenTwoSingleOPFn(TCGv_i32, TCGv_i32, TCGv_i32, TCGv_ptr); +typedef void NeonGenTwoDoubleOPFn(TCGv_i64, TCGv_i64, TCGv_i64, TCGv_ptr); +typedef void NeonGenOneOpFn(TCGv_i64, TCGv_i64); +typedef void CryptoTwoOpFn(TCGv_ptr, TCGv_ptr); +typedef void CryptoThreeOpIntFn(TCGv_ptr, TCGv_ptr, TCGv_i32); +typedef void CryptoThreeOpFn(TCGv_ptr, TCGv_ptr, TCGv_ptr); +typedef void AtomicThreeOpFn(TCGv_i64, TCGv_i64, TCGv_i64, TCGArg, MemOp); + #endif /* TARGET_ARM_TRANSLATE_H */ diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index efb1c4adc4e..a896f9c4b83 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -70,23 +70,6 @@ typedef struct AArch64DecodeTable { AArch64DecodeFn *disas_fn; } AArch64DecodeTable; =20 -/* Function prototype for gen_ functions for calling Neon helpers */ -typedef void NeonGenOneOpEnvFn(TCGv_i32, TCGv_ptr, TCGv_i32); -typedef void NeonGenTwoOpFn(TCGv_i32, TCGv_i32, TCGv_i32); -typedef void NeonGenTwoOpEnvFn(TCGv_i32, TCGv_ptr, TCGv_i32, TCGv_i32); -typedef void NeonGenTwo64OpFn(TCGv_i64, TCGv_i64, TCGv_i64); -typedef void NeonGenTwo64OpEnvFn(TCGv_i64, TCGv_ptr, TCGv_i64, TCGv_i64); -typedef void NeonGenNarrowFn(TCGv_i32, TCGv_i64); -typedef void NeonGenNarrowEnvFn(TCGv_i32, TCGv_ptr, TCGv_i64); -typedef void NeonGenWidenFn(TCGv_i64, TCGv_i32); -typedef void NeonGenTwoSingleOPFn(TCGv_i32, TCGv_i32, TCGv_i32, TCGv_ptr); -typedef void NeonGenTwoDoubleOPFn(TCGv_i64, TCGv_i64, TCGv_i64, TCGv_ptr); -typedef void NeonGenOneOpFn(TCGv_i64, TCGv_i64); -typedef void CryptoTwoOpFn(TCGv_ptr, TCGv_ptr); -typedef void CryptoThreeOpIntFn(TCGv_ptr, TCGv_ptr, TCGv_i32); -typedef void CryptoThreeOpFn(TCGv_ptr, TCGv_ptr, TCGv_ptr); -typedef void AtomicThreeOpFn(TCGv_i64, TCGv_i64, TCGv_i64, TCGArg, MemOp); - /* initialize TCG globals. */ void a64_translate_init(void) { --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271393; cv=none; d=zohomail.com; s=zohoarc; b=ikt9g58z8JsdUONFv2xeCeoVACheGx6pCNz+6NaJYWlpzrVEyrv/7T2EN+yQfhVse3jDmiwgUeLrsq+0fQZoNZRZOTEm1bCcXqcYaGjuihlP7hsFll6pN31ATrDvA5YvGRRUL4TRxW/eAEbe1L9O2p9/uVQacRb7+/kKISRg3Os= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271393; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=BWZyfHEYrqWjJaA4NPsK0shM3MAJw9UJN6Xe8BGyE/Y=; b=Qot/ns5ea9IiTPDaG4ZA1Yvz0RkiXpQbmLAhAWqpi8cC3aM5SXyTMaRe+kcw1oQZVS1rPtLtqugxKoBgZWn7zBkDC7yjn7ALvQUVAJCKXKHRp/w7YH/d1qTRr0tlupE+UQgUmQP71NJ0azgt5ftLDhIZs/WH4MAn/i7048BikhM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271393763305.81058265644253; Thu, 30 Apr 2020 11:29:53 -0700 (PDT) Received: from localhost ([::1]:60552 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDwW-0005Zo-7p for importer@patchew.org; Thu, 30 Apr 2020 14:29:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36396) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeR-0002Dt-Om for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdv-0001Ic-Jc for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:11 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]:51681) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdt-0001HL-Cj for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:37 -0400 Received: by mail-wm1-x32a.google.com with SMTP id x4so2975473wmj.1 for ; Thu, 30 Apr 2020 11:10:36 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BWZyfHEYrqWjJaA4NPsK0shM3MAJw9UJN6Xe8BGyE/Y=; b=D+BjAqYF5IwLRV6IRNQhbbMc1FMQd90t3ycT/jPbsYj2f2vkX4r+pieKZR0fW/Y6J+ siLwz/1sz9aU0uhYeYrQ/Bxv25M3U8+U3CGr4PvXYLiqiCwu5Uyn+UUUver8ma2c7493 dAqPldu5OBp2fUkKa8agXVNF2m/7m4F+m2nu1HWu3rJwdFWoqJwI5JLDJjyepPMkPYCS DdqJz7YsXugdIud0T4XoV590fBf3+DnTDJ9OS6EtrjTKMvhE47grtnYVOYMEsHdupBWC /G/F1+a8e+DMfytZ9WA1ykqz+zZwxL6xFBchS01svDT22w+BtlF+I79VPozXquH0o7yL 54jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BWZyfHEYrqWjJaA4NPsK0shM3MAJw9UJN6Xe8BGyE/Y=; b=ILttlHmmPqU0gHCsp3Xea+RBQhMVLC/3DmSsRXbP+5+Udv0xQP6UBnUSq56hwJNAAV ZXOVnYns+LhYYunc8qY8ETnmBpp9eITrUHXGdVRe4KJZJm+KhNAC4kn0DkRiZnK0WJIw lhH+hLOFMkQswbZ8tpFSYmh4MIEvxdQ3KwHkV2hBAy6f4iJvufkPii5B1Nc4QQdCgeBJ 7GzVao8MVhAERweOHokq+Z+ruoQkBRMwEAXELdagTPLewJE1jGQ2s5eDVsYRieYgm3KW Y7NXhAvxDmcH7GIqd9UIt+5tCDaoLRADqSERY4LY+91JehYTHVjisO7qVCWwFNYZ574D lLIw== X-Gm-Message-State: AGi0PuZFzh+8ZOiyBTylRdAMXGhbs5XkxCiwnlcky5lykHhj2QBpq6tU W/ZEL8AqH9eMwMXDPszLr8u4MA== X-Google-Smtp-Source: APiQypK6Opk7HzqavlSafFLktp33uJi6eEeVkC/XccMKtH62EykZ5d0U8dSgM24919UItCKi5ah7oQ== X-Received: by 2002:a1c:a5c8:: with SMTP id o191mr4424901wme.77.1588270235893; Thu, 30 Apr 2020 11:10:35 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 23/36] target/arm: Convert Neon 64-bit element 3-reg-same insns Date: Thu, 30 Apr 2020 19:09:50 +0100 Message-Id: <20200430181003.21682-24-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32a; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32a.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::32a X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the 64-bit element insns in the 3-reg-same group to decodetree. This covers VQSHL, VRSHL and VQRSHL where size=3D=3D0b11. Signed-off-by: Peter Maydell --- target/arm/translate-neon.inc.c | 62 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 38 ++------------------ target/arm/neon-dp.decode | 11 ++++++ 3 files changed, 75 insertions(+), 36 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 161313ad879..bc5afb368e3 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -908,3 +908,65 @@ static bool trans_SHA256SU1_3s(DisasContext *s, arg_SH= A256SU1_3s *a) =20 return true; } + +static bool do_3same_64(DisasContext *s, arg_3same *a, NeonGenTwo64OpFn *f= n) +{ + /* Handle 3-reg-same operations to be performed 64 bits at a time */ + TCGv_i64 rn, rm, rd; + int pass; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if ((a->vn | a->vm | a->vd) & a->q) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + rn =3D tcg_temp_new_i64(); + rm =3D tcg_temp_new_i64(); + rd =3D tcg_temp_new_i64(); + + for (pass =3D 0; pass < (a->q ? 2 : 1); pass++) { + neon_load_reg64(rn, a->vn + pass); + neon_load_reg64(rm, a->vm + pass); + fn(rd, rm, rn); + neon_store_reg64(rd, a->vd + pass); + } + + tcg_temp_free_i64(rn); + tcg_temp_free_i64(rm); + tcg_temp_free_i64(rd); + + return true; +} + +#define DO_3SAME_64(INSN, FUNC) \ + static bool trans_##INSN##_3s(DisasContext *s, arg_3same *a) \ + { \ + return do_3same_64(s, a, FUNC); \ + } + +#define DO_3SAME_64_ENV(INSN, FUNC) \ + static void gen_##INSN##_3s(TCGv_i64 d, TCGv_i64 n, TCGv_i64 m) \ + { \ + FUNC(d, cpu_env, n, m); \ + } \ + DO_3SAME_64(INSN, gen_##INSN##_3s) + +DO_3SAME_64(VRSHL_S64, gen_helper_neon_rshl_s64) +DO_3SAME_64(VRSHL_U64, gen_helper_neon_rshl_u64) +DO_3SAME_64_ENV(VQSHL_S64, gen_helper_neon_qshl_s64) +DO_3SAME_64_ENV(VQSHL_U64, gen_helper_neon_qshl_u64) +DO_3SAME_64_ENV(VQRSHL_S64, gen_helper_neon_qrshl_s64) +DO_3SAME_64_ENV(VQRSHL_U64, gen_helper_neon_qrshl_u64) diff --git a/target/arm/translate.c b/target/arm/translate.c index 160638e2a7c..fb64eb3a800 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4791,42 +4791,8 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) } =20 if (size =3D=3D 3) { - /* 64-bit element instructions. */ - for (pass =3D 0; pass < (q ? 2 : 1); pass++) { - neon_load_reg64(cpu_V0, rn + pass); - neon_load_reg64(cpu_V1, rm + pass); - switch (op) { - case NEON_3R_VQSHL: - if (u) { - gen_helper_neon_qshl_u64(cpu_V0, cpu_env, - cpu_V1, cpu_V0); - } else { - gen_helper_neon_qshl_s64(cpu_V0, cpu_env, - cpu_V1, cpu_V0); - } - break; - case NEON_3R_VRSHL: - if (u) { - gen_helper_neon_rshl_u64(cpu_V0, cpu_V1, cpu_V0); - } else { - gen_helper_neon_rshl_s64(cpu_V0, cpu_V1, cpu_V0); - } - break; - case NEON_3R_VQRSHL: - if (u) { - gen_helper_neon_qrshl_u64(cpu_V0, cpu_env, - cpu_V1, cpu_V0); - } else { - gen_helper_neon_qrshl_s64(cpu_V0, cpu_env, - cpu_V1, cpu_V0); - } - break; - default: - abort(); - } - neon_store_reg64(cpu_V0, rd + pass); - } - return 0; + /* 64-bit element instructions: handled by decodetree */ + return 1; } pairwise =3D 0; switch (op) { diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index f22606b2bd5..a4932e550ed 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -68,6 +68,17 @@ VCGE_U_3s 1111 001 1 0 . .. .... .... 0011 . . . = 1 .... @3same VSHL_S_3s 1111 001 0 0 . .. .... .... 0100 . . . 0 .... @3same VSHL_U_3s 1111 001 1 0 . .. .... .... 0100 . . . 0 .... @3same =20 +# Insns operating on 64-bit elements (size!=3D0b11 handled elsewhere) +@3same_64 .... ... . . . 11 .... .... .... . q:1 . . .... \ + &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp size=3D3 + +VQSHL_S64_3s 1111 001 0 0 . .. .... .... 0100 . . . 1 .... @3same_64 +VQSHL_U64_3s 1111 001 1 0 . .. .... .... 0100 . . . 1 .... @3same_64 +VRSHL_S64_3s 1111 001 0 0 . .. .... .... 0101 . . . 0 .... @3same_64 +VRSHL_U64_3s 1111 001 1 0 . .. .... .... 0101 . . . 0 .... @3same_64 +VQRSHL_S64_3s 1111 001 0 0 . .. .... .... 0101 . . . 1 .... @3same_64 +VQRSHL_U64_3s 1111 001 1 0 . .. .... .... 0101 . . . 1 .... @3same_64 + VMAX_S_3s 1111 001 0 0 . .. .... .... 0110 . . . 0 .... @3same VMAX_U_3s 1111 001 1 0 . .. .... .... 0110 . . . 0 .... @3same VMIN_S_3s 1111 001 0 0 . .. .... .... 0110 . . . 1 .... @3same --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271616; cv=none; d=zohomail.com; s=zohoarc; b=W8atYJKtWUgm3DTU9xDMRh5BdKfH5txEammzmf9NbFXmtCOpgadWI4h1Bp55Y+vmcytlzvBoKMkXW/XTmnOnodZtOfdt1Y5/jd84qcGZvOk1OXGmfI7wg+Xx+ahWWYcfAB66n8prOf9UIVSZeUfQXtwq+HMMIEs1p7iFrPNaJsk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271616; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=+LfsWU+1Yby3pwqmNZERr3r8EY6rerTNDvwO7ihyqeA=; b=UllkX5+eBWioZ+DO8Q5I8q00wE3cvEpLpKiYNH6rhrAMsrgXgfZEiAggmj2AzsSe5COc3DKFzyub0p2lthqI0B6hNvlrFyJF4VcRcEPsbAGpXf0PSwPY09tJ8oa/nDHbh0z+bNO1WwnjFExefGGk3QKFd5FJ7tyPFnaCfB/W1o0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271616417128.90443992213716; Thu, 30 Apr 2020 11:33:36 -0700 (PDT) Received: from localhost ([::1]:47058 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUE07-0004Wv-3U for importer@patchew.org; Thu, 30 Apr 2020 14:33:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36400) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeS-0002G9-CW for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdv-0001Ih-KI for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:12 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:34864) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdv-0001Hl-3c for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:39 -0400 Received: by mail-wm1-x344.google.com with SMTP id r26so3081839wmh.0 for ; Thu, 30 Apr 2020 11:10:37 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+LfsWU+1Yby3pwqmNZERr3r8EY6rerTNDvwO7ihyqeA=; b=Qqo2bP2ZNANMSIcYsPLVm2XdJMJlTbIe95tu3AumClelKNpijaAdwvr401XSQ3dqdx yNnh5lXKt1vNq5rhEucadFxIZSbfh7r/y4jMlCQwyfAZl5vFlYgFYTm4Ped08lpE8cn0 lVlEvPaqVos0hcFDCa/atNO5ZRE/Xn5I734nJH02zuepoOJnRQ7Y+PCcnHBDO84S8zoe 09npfmCfXH9Dvl7VuKycLXcxiWbsdnY6bIaZaKT14oWXwUg9w7d4Fz+mGn5ssORJPJmr fNINYZKSGLlPO0tNEHuQcpGGaX90GPjXPaCC0eU7Y7uzsekWAZWVmseekJwUzsQ5UzXS XLww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+LfsWU+1Yby3pwqmNZERr3r8EY6rerTNDvwO7ihyqeA=; b=UtJI36wpiGyTwu1JcymIbV0AHLrpD2HoZmKEEXwXIkCMoJZ9+Vyrqd7c2BvoMeWUzY Z89DS/2CoHlNCxszUgGo+5H9NdEpf4dHuc1j7FA8c+tuo4pX4l0SvKKPsqJz6YgG9JMp 6HQ8ZU7F/hG7h3ATI1OZEp6Oy7uVCQWNT+9wcYwloTJwnwf3k5M2zJcVy5lg5sNzkeNH YQLnSUsQ8TF02HS6Ybvo7d/GEh93ZkH5wJB/dM7KL+H5wZ9uVSm+IsRLBslvPU+14pbI gnbef99Q90IyokTnDo7UnyYisLux6UTnPRq64dJUJ3VwqT9p6gPyLzg2hTeSdJHg2n+E MV6Q== X-Gm-Message-State: AGi0PuYHzXy8Ci5vXdo/9wd1ZULbVU2sVju7QxWco86dSvuu77fDieF5 qs8bHtLJrLtvrQAxFpPxkrmGjQ== X-Google-Smtp-Source: APiQypJW9LW3lSdKZRGzpDopd61tX4BGI9P8mQXV8KakCrqV4ATR5uDF4etQp51xQ1ylF2oRZgc53A== X-Received: by 2002:a1c:bd8b:: with SMTP id n133mr4523836wmf.175.1588270236868; Thu, 30 Apr 2020 11:10:36 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 24/36] target/arm: Convert Neon VHADD 3-reg-same insns Date: Thu, 30 Apr 2020 19:09:51 +0100 Message-Id: <20200430181003.21682-25-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::344; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x344.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::344 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon VHADD insns in the 3-reg-same group to decodetree. Signed-off-by: Peter Maydell --- target/arm/translate-neon.inc.c | 62 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 4 +-- target/arm/neon-dp.decode | 2 ++ 3 files changed, 65 insertions(+), 3 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index bc5afb368e3..7a602d76566 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -970,3 +970,65 @@ DO_3SAME_64_ENV(VQSHL_S64, gen_helper_neon_qshl_s64) DO_3SAME_64_ENV(VQSHL_U64, gen_helper_neon_qshl_u64) DO_3SAME_64_ENV(VQRSHL_S64, gen_helper_neon_qrshl_s64) DO_3SAME_64_ENV(VQRSHL_U64, gen_helper_neon_qrshl_u64) + +static bool do_3same_32(DisasContext *s, arg_3same *a, NeonGenTwoOpFn *fn) +{ + /* Operations handled elementwise 32 bits at a time */ + TCGv_i32 tmp, tmp2; + int pass; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if ((a->vn | a->vm | a->vd) & a->q) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + for (pass =3D 0; pass < (a->q ? 4 : 2); pass++) { + tmp =3D neon_load_reg(a->vn, pass); + tmp2 =3D neon_load_reg(a->vm, pass); + fn(tmp, tmp, tmp2); + tcg_temp_free_i32(tmp2); + neon_store_reg(a->vd, pass, tmp); + } + return true; +} + +#define DO_3SAME_32(INSN, func) \ + static bool trans_##INSN##_S_3s(DisasContext *s, arg_3same *a) \ + { \ + static NeonGenTwoOpFn * const fns[] =3D { \ + gen_helper_neon_##func##_s8, \ + gen_helper_neon_##func##_s16, \ + gen_helper_neon_##func##_s32, \ + }; \ + if (a->size > 2) { \ + return false; \ + } \ + return do_3same_32(s, a, fns[a->size]); \ + } \ + static bool trans_##INSN##_U_3s(DisasContext *s, arg_3same *a) \ + { \ + static NeonGenTwoOpFn * const fns[] =3D { \ + gen_helper_neon_##func##_u8, \ + gen_helper_neon_##func##_u16, \ + gen_helper_neon_##func##_u32, \ + }; \ + if (a->size > 2) { \ + return false; \ + } \ + return do_3same_32(s, a, fns[a->size]); \ + } + +DO_3SAME_32(VHADD, hadd) diff --git a/target/arm/translate.c b/target/arm/translate.c index fb64eb3a800..67616fc218a 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4786,6 +4786,7 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_VML: case NEON_3R_VSHL: case NEON_3R_SHA: + case NEON_3R_VHADD: /* Already handled by decodetree */ return 1; } @@ -4866,9 +4867,6 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) tmp2 =3D neon_load_reg(rm, pass); } switch (op) { - case NEON_3R_VHADD: - GEN_NEON_INTEGER_OP(hadd); - break; case NEON_3R_VRHADD: GEN_NEON_INTEGER_OP(rhadd); break; diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index a4932e550ed..055004df4e8 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -42,6 +42,8 @@ @3same .... ... . . . size:2 .... .... .... . q:1 . . .... \ &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp =20 +VHADD_S_3s 1111 001 0 0 . .. .... .... 0000 . . . 0 .... @3same +VHADD_U_3s 1111 001 1 0 . .. .... .... 0000 . . . 0 .... @3same VQADD_S_3s 1111 001 0 0 . .. .... .... 0000 . . . 1 .... @3same VQADD_U_3s 1111 001 1 0 . .. .... .... 0000 . . . 1 .... @3same =20 --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271600; cv=none; d=zohomail.com; s=zohoarc; b=BSpBVqaQTWeRRTOUFapfAQZSZB5ZrpaldD+6ZmlVvNv6a+YcNreWtNDXEE2kwCPz2gx2tX7nSLqFWNdnqDcNArmHMcyBzGlDm6f2o7aKPWzFJPT3KBiLrbx31S50X7nCobW5697aD2xU3LQyRwAcFX6QGYXcbZSjsmIGARW1osU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271600; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=4Ydk5Bbg9ucmSMF8TUFcEzRTltMFyrq9kyl7LYvgv0o=; b=d/8Skjhz2TDTuP0sIgzNASkY/vTTU7ACuIUlCqEp46sUYbvNIy+TNVkn0nB8DB1cnzUIoOX5qDaod6kSG6Negjh08d8TryMsF+Pf+RlHXD7EdEwr50TYmrrvqGyizcSh+6oayCJZPKsGAUnrcYTW0pl1eaoGWvfBu7Liy/s3Le8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271600235542.5531035644044; Thu, 30 Apr 2020 11:33:20 -0700 (PDT) Received: from localhost ([::1]:45612 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDzq-0003tf-U3 for importer@patchew.org; Thu, 30 Apr 2020 14:33:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36414) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeV-0002O1-9M for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdx-0001JR-9L for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:15 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:40973) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdv-0001I1-BX for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:40 -0400 Received: by mail-wr1-x444.google.com with SMTP id g13so8159517wrb.8 for ; Thu, 30 Apr 2020 11:10:38 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4Ydk5Bbg9ucmSMF8TUFcEzRTltMFyrq9kyl7LYvgv0o=; b=qvuTMQAzrHTd1Rxab03/A8N4GOPCCBd9O35Kd4IDXR4qO/6p4bJroxbGPYv0XUn8wl baF7ghyewUvDoLkqRTSAniGx+bKc+Iv1xYhTuDfEkkow2G0Uy9YRX7GXdK8JHtBwfzv9 S3M7u16z/s3t0yYyLItIaQdlAxWyKL/t6m/78UVTqHKntgwEUSicnZOJEYm6vfDwAYhc +bjLsLpcE6mFbGSvnJ3CspP6MpXCMCQlJ2k93U5eaAMXKQQfrEPZmhGQa+6aTtmV85bA IF0i0Ovn/xPoxnKZKPuKwqpFnOPhPeM0808hWZddlhf+1Dsef6ZD5NyliqDJrXwZRWJ8 fWRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4Ydk5Bbg9ucmSMF8TUFcEzRTltMFyrq9kyl7LYvgv0o=; b=CwFvqPZz4RcIBq4h7uvfmU32cxilZoMRdAlMHt7cp5/Bu5riDkpsy0Qs9+ORxokpPC UaNNmn0uaB11F1ED0s/ZnZvZH/XiFSEakK1XXL6zIFlr3KQHFHABcX05gILQER4ZNsPM 2poMK+AHM1J5Qx09MDut60tvecraRSujc9193wak7LlIS2VpFJ6UxLR6wphCgaZp2KUx eJEPDELTPJc0Ectn2ij+6qLzquNN0JYEuU9CGVfivWoUV9a7HNi3LMLojvYjr9OTPFB2 KJ6l0Dhtxb1ConZBaZhwlMWOWz6X5FFcTGTJEtzYqqIA8VDq1+xC+jhgYPfWkx0cpDr9 IQVg== X-Gm-Message-State: AGi0Pubb98jb+g/zMeWKpdIYMTeWdij1RY9TlX0PedeD/l9vgW1Az24j 6eO5IZPfxvsL70Ax8SdlWxTWlg== X-Google-Smtp-Source: APiQypJOk4iV0FwzyQNkPRPj0PpKqDfdODaO+bd++3K6psaF2yc4o6HvgTsFLVyh3fsnNmqSn1WnuA== X-Received: by 2002:adf:9d85:: with SMTP id p5mr5505683wre.101.1588270237967; Thu, 30 Apr 2020 11:10:37 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 25/36] target/arm: Convert Neon VRHADD, VHSUB, VABD 3-reg-same insns to decodetree Date: Thu, 30 Apr 2020 19:09:52 +0100 Message-Id: <20200430181003.21682-26-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::444; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x444.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::444 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon VRHADD, VHSUB and VABD 3-reg-same insns to decodetree. (These are all the other insns in 3-reg-same which were using GEN_NEON_INTEGER_OP() and which are not pairwise or reversed-operands.) Signed-off-by: Peter Maydell --- target/arm/translate-neon.inc.c | 3 +++ target/arm/translate.c | 12 +++--------- target/arm/neon-dp.decode | 9 +++++++++ 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 7a602d76566..bdd5f33214e 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -1032,3 +1032,6 @@ static bool do_3same_32(DisasContext *s, arg_3same *a= , NeonGenTwoOpFn *fn) } =20 DO_3SAME_32(VHADD, hadd) +DO_3SAME_32(VHSUB, hsub) +DO_3SAME_32(VRHADD, rhadd) +DO_3SAME_32(VABD, abd) diff --git a/target/arm/translate.c b/target/arm/translate.c index 67616fc218a..29301061ca5 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4787,6 +4787,9 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_VSHL: case NEON_3R_SHA: case NEON_3R_VHADD: + case NEON_3R_VRHADD: + case NEON_3R_VHSUB: + case NEON_3R_VABD: /* Already handled by decodetree */ return 1; } @@ -4867,12 +4870,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) tmp2 =3D neon_load_reg(rm, pass); } switch (op) { - case NEON_3R_VRHADD: - GEN_NEON_INTEGER_OP(rhadd); - break; - case NEON_3R_VHSUB: - GEN_NEON_INTEGER_OP(hsub); - break; case NEON_3R_VQSHL: GEN_NEON_INTEGER_OP_ENV(qshl); break; @@ -4882,9 +4879,6 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_VQRSHL: GEN_NEON_INTEGER_OP_ENV(qrshl); break; - case NEON_3R_VABD: - GEN_NEON_INTEGER_OP(abd); - break; case NEON_3R_VABA: GEN_NEON_INTEGER_OP(abd); tcg_temp_free_i32(tmp2); diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index 055004df4e8..4b15e52221b 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -47,6 +47,9 @@ VHADD_U_3s 1111 001 1 0 . .. .... .... 0000 . . . 0= .... @3same VQADD_S_3s 1111 001 0 0 . .. .... .... 0000 . . . 1 .... @3same VQADD_U_3s 1111 001 1 0 . .. .... .... 0000 . . . 1 .... @3same =20 +VRHADD_S_3s 1111 001 0 0 . .. .... .... 0001 . . . 0 .... @3same +VRHADD_U_3s 1111 001 1 0 . .. .... .... 0001 . . . 0 .... @3same + @3same_logic .... ... . . . .. .... .... .... . q:1 .. .... \ &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp size=3D0 =20 @@ -59,6 +62,9 @@ VBSL_3s 1111 001 1 0 . 01 .... .... 0001 ... 1 .= ... @3same_logic VBIT_3s 1111 001 1 0 . 10 .... .... 0001 ... 1 .... @3same_logic VBIF_3s 1111 001 1 0 . 11 .... .... 0001 ... 1 .... @3same_logic =20 +VHSUB_S_3s 1111 001 0 0 . .. .... .... 0010 . . . 0 .... @3same +VHSUB_U_3s 1111 001 1 0 . .. .... .... 0010 . . . 0 .... @3same + VQSUB_S_3s 1111 001 0 0 . .. .... .... 0010 . . . 1 .... @3same VQSUB_U_3s 1111 001 1 0 . .. .... .... 0010 . . . 1 .... @3same =20 @@ -86,6 +92,9 @@ VMAX_U_3s 1111 001 1 0 . .. .... .... 0110 . . . 0= .... @3same VMIN_S_3s 1111 001 0 0 . .. .... .... 0110 . . . 1 .... @3same VMIN_U_3s 1111 001 1 0 . .. .... .... 0110 . . . 1 .... @3same =20 +VABD_S_3s 1111 001 0 0 . .. .... .... 0111 . . . 0 .... @3same +VABD_U_3s 1111 001 1 0 . .. .... .... 0111 . . . 0 .... @3same + VADD_3s 1111 001 0 0 . .. .... .... 1000 . . . 0 .... @3same VSUB_3s 1111 001 1 0 . .. .... .... 1000 . . . 0 .... @3same =20 --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271710; cv=none; d=zohomail.com; s=zohoarc; b=AJcFSyk9uDWqtQHZCzqrdWkNdqZAYEHZlXFxsrs2maJ9oH/Nr/0zy5bpLgb0Wkl5EJpF2d+D09FJP5ep+3dXdhqWKblbpqOG697WoyJJT3znzTKJVU2Lj/fd3t6z1vEFVRra+NjRLTAxUgRy75J5ZWPTST0j4D4LTuURhBEhUqk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271710; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=9oZilPgewRJ684vbSieo9Vj2e1homl+WLcJZxlPdvVo=; b=WYJCZFGpb3cSnvCAvWFr5ZPK53GTVVNsboeF0aRbCWG/iEvDZB+4A/2WD+lE6eN8/Yhx8rappTyH/raHe/kF9z+WkdSzG7TKjy9xmE0t6ims1nr4gOK//dSzMUuNGIHJ/oK7Tl6XY1xnM9h7ZDiRrind/gKabwMqX5RZTyBEfoU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271710899836.1948345280266; Thu, 30 Apr 2020 11:35:10 -0700 (PDT) Received: from localhost ([::1]:54060 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUE1d-0007Pq-9W for importer@patchew.org; Thu, 30 Apr 2020 14:35:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36418) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeW-0002Qk-77 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdx-0001Jh-CD for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:15 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]:36445) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdw-0001Ix-RL for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:40 -0400 Received: by mail-wr1-x429.google.com with SMTP id d15so8192679wrx.3 for ; Thu, 30 Apr 2020 11:10:40 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9oZilPgewRJ684vbSieo9Vj2e1homl+WLcJZxlPdvVo=; b=FKFlDNLHpj4vl4/sYIe/BGXnc70NInv6k0r+KHu7yRuph2O7Y2GssAaO028A08PEPC yUUOtAPb6rDYlBGYAbM2EA+ckQvNpEur19o1Vn/hs3t81oEr6Wcon3bi+enSLO5JC//E d6a5xAmg27sEhuEbbPLYj66AHGlGkhJY5Xphkx10ir+WDxOmW+E2wBmfemCT79gAvcpM afoUyRDBfxzmBTHsl7zQHGpNHGd/Qw+wkCgpZtUKfLhjO0/YB8kxaZoAmZPh8DZLUvJ1 x7TJlTHvgvxUrhQtMbG9le+6dxEgPVHvPZlS/+7AmLqNBfudfFw0VuLHxwUQ5osCG6Yi MOPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9oZilPgewRJ684vbSieo9Vj2e1homl+WLcJZxlPdvVo=; b=oMvxnQTcjAy7cjdpUk7KYqToboSaHyrq/4GHqvuVueNGMgye0BmQDTLO5+sBArWpnx QCs8+OwhhWn50FqTDD8QwJDJimqsqrZIBaDs0WQuAsPrJ/vEjnLArmBYd+xOr4k82o+L I/JifQz0DWiqYfCh+q7tLbWREWr0ZB8huHuwedEttEuOLH4OAGJocBqXuBX1m/mG4h+E HzkjHnREeZo7acdzOTF+h6wXVB/3Ibo1zh0K5HtYCiExtZKKj50eLMdhzW27kt1Kl5HJ BydvwSMxuWnCkZSgfFaRfZISJcE0RJ62Sg6rxjEU8RhUm8t1NeHhK2kCqkzaOHE/7a2r eGVA== X-Gm-Message-State: AGi0PubeQjTbw/YZr0wZISjyw8/wTpgQmzNWT39I+GHhUj9VbT427mRi 7uqUXZl0zRZKn7kBWlOEdQuoeQ== X-Google-Smtp-Source: APiQypKKh8QyMsuhWHA2pBUTZd2EDFhxUpqb2l9zrsXPr4fGvkzBWqFFbu/lrhtjVrm4D4X/TVtQCw== X-Received: by 2002:adf:df04:: with SMTP id y4mr5342394wrl.413.1588270239207; Thu, 30 Apr 2020 11:10:39 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 26/36] target/arm: Convert Neon VQSHL, VRSHL, VQRSHL 3-reg-same insns to decodetree Date: Thu, 30 Apr 2020 19:09:53 +0100 Message-Id: <20200430181003.21682-27-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::429; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x429.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::429 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the VQSHL, VRSHL and VQRSHL insns in the 3-reg-same group to decodetree. We have already implemented the size=3D=3D0b11 case of these insns; this commit handles the remaining sizes. TODO: find out from rth why decodetree insists on VSHL going into the group... Signed-off-by: Peter Maydell --- target/arm/translate-neon.inc.c | 93 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 23 ++------ target/arm/neon-dp.decode | 30 ++++++++--- 3 files changed, 120 insertions(+), 26 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index bdd5f33214e..084c78eea58 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -1035,3 +1035,96 @@ DO_3SAME_32(VHADD, hadd) DO_3SAME_32(VHSUB, hsub) DO_3SAME_32(VRHADD, rhadd) DO_3SAME_32(VABD, abd) + +static bool do_3same_qs32(DisasContext *s, arg_3same *a, NeonGenTwoOpEnvFn= *fn) +{ + /* + * Saturating shift operations handled elementwise 32 bits at a + * time which need to pass cpu_env to the helper and where the rn + * and rm operands are reversed from the usual do_3same() order. + */ + TCGv_i32 tmp, tmp2; + int pass; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if ((a->vn | a->vm | a->vd) & a->q) { + return false; + } + + if (a->size =3D=3D 3) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + for (pass =3D 0; pass < (a->q ? 4 : 2); pass++) { + /* Note reversal of operand order */ + tmp =3D neon_load_reg(a->vm, pass); + tmp2 =3D neon_load_reg(a->vn, pass); + fn(tmp, cpu_env, tmp, tmp2); + tcg_temp_free_i32(tmp2); + neon_store_reg(a->vd, pass, tmp); + } + return true; +} + +/* + * Handling for shifts with sizes 8/16/32 bits. 64-bit shifts are + * covered by the *_S64_3s and *_U64_3s patterns and the grouping in + * the decode file means those functions are called first for + * size=3D=3D0b11. Note that we must 'return false' here for the + * size=3D=3D0b11 case rather than asserting, because where the 64-bit + * function has an UNDEF case and returns false the decoder will fall + * through to trying these functions. + */ +#define DO_3SAME_QS32(INSN, func) \ + static bool trans_##INSN##_3s(DisasContext *s, arg_3same *a) \ + { \ + static NeonGenTwoOpEnvFn * const fns[] =3D { \ + gen_helper_neon_##func##8, \ + gen_helper_neon_##func##16, \ + gen_helper_neon_##func##32, \ + }; \ + if (a->size > 2) { \ + return false; \ + } \ + return do_3same_qs32(s, a, fns[a->size]); \ + } + +DO_3SAME_QS32(VQSHL_S,qshl_s) +DO_3SAME_QS32(VQSHL_U,qshl_u) +DO_3SAME_QS32(VQRSHL_S,qrshl_s) +DO_3SAME_QS32(VQRSHL_U,qrshl_u) + +#define DO_3SAME_SHIFT32(INSN, func) \ + static bool trans_##INSN##_3s(DisasContext *s, arg_3same *a) \ + { \ + static NeonGenTwoOpFn * const fns[] =3D { \ + gen_helper_neon_##func##8, \ + gen_helper_neon_##func##16, \ + gen_helper_neon_##func##32, \ + }; \ + int rtmp; \ + if (a->size > 2) { \ + return false; \ + } \ + /* Shift operand order is reversed */ \ + rtmp =3D a->vn; \ + a->vn =3D a->vm; \ + a->vm =3D rtmp; \ + return do_3same_32(s, a, fns[a->size]); \ + } + +DO_3SAME_SHIFT32(VRSHL_S, rshl_s) +DO_3SAME_SHIFT32(VRSHL_U, rshl_u) diff --git a/target/arm/translate.c b/target/arm/translate.c index 29301061ca5..4406fe54647 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4790,6 +4790,9 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_VRHADD: case NEON_3R_VHSUB: case NEON_3R_VABD: + case NEON_3R_VQSHL: + case NEON_3R_VRSHL: + case NEON_3R_VQRSHL: /* Already handled by decodetree */ return 1; } @@ -4800,17 +4803,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) } pairwise =3D 0; switch (op) { - case NEON_3R_VQSHL: - case NEON_3R_VRSHL: - case NEON_3R_VQRSHL: - { - int rtmp; - /* Shift instruction operands are reversed. */ - rtmp =3D rn; - rn =3D rm; - rm =3D rtmp; - } - break; case NEON_3R_VPADD_VQRDMLAH: case NEON_3R_VPMAX: case NEON_3R_VPMIN: @@ -4870,15 +4862,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) tmp2 =3D neon_load_reg(rm, pass); } switch (op) { - case NEON_3R_VQSHL: - GEN_NEON_INTEGER_OP_ENV(qshl); - break; - case NEON_3R_VRSHL: - GEN_NEON_INTEGER_OP(rshl); - break; - case NEON_3R_VQRSHL: - GEN_NEON_INTEGER_OP_ENV(qrshl); - break; case NEON_3R_VABA: GEN_NEON_INTEGER_OP(abd); tcg_temp_free_i32(tmp2); diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index 4b15e52221b..ae442071ef1 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -80,12 +80,30 @@ VSHL_U_3s 1111 001 1 0 . .. .... .... 0100 . . .= 0 .... @3same @3same_64 .... ... . . . 11 .... .... .... . q:1 . . .... \ &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp size=3D3 =20 -VQSHL_S64_3s 1111 001 0 0 . .. .... .... 0100 . . . 1 .... @3same_64 -VQSHL_U64_3s 1111 001 1 0 . .. .... .... 0100 . . . 1 .... @3same_64 -VRSHL_S64_3s 1111 001 0 0 . .. .... .... 0101 . . . 0 .... @3same_64 -VRSHL_U64_3s 1111 001 1 0 . .. .... .... 0101 . . . 0 .... @3same_64 -VQRSHL_S64_3s 1111 001 0 0 . .. .... .... 0101 . . . 1 .... @3same_64 -VQRSHL_U64_3s 1111 001 1 0 . .. .... .... 0101 . . . 1 .... @3same_64 +{ + VQSHL_S64_3s 1111 001 0 0 . .. .... .... 0100 . . . 1 .... @3same_64 + VQSHL_S_3s 1111 001 0 0 . .. .... .... 0100 . . . 1 .... @3same +} +{ + VQSHL_U64_3s 1111 001 1 0 . .. .... .... 0100 . . . 1 .... @3same_64 + VQSHL_U_3s 1111 001 1 0 . .. .... .... 0100 . . . 1 .... @3same +} +{ + VRSHL_S64_3s 1111 001 0 0 . .. .... .... 0101 . . . 0 .... @3same_64 + VRSHL_S_3s 1111 001 0 0 . .. .... .... 0101 . . . 0 .... @3same +} +{ + VRSHL_U64_3s 1111 001 1 0 . .. .... .... 0101 . . . 0 .... @3same_64 + VRSHL_U_3s 1111 001 1 0 . .. .... .... 0101 . . . 0 .... @3same +} +{ + VQRSHL_S64_3s 1111 001 0 0 . .. .... .... 0101 . . . 1 .... @3same_64 + VQRSHL_S_3s 1111 001 0 0 . .. .... .... 0101 . . . 1 .... @3same +} +{ + VQRSHL_U64_3s 1111 001 1 0 . .. .... .... 0101 . . . 1 .... @3same_64 + VQRSHL_U_3s 1111 001 1 0 . .. .... .... 0101 . . . 1 .... @3same +} =20 VMAX_S_3s 1111 001 0 0 . .. .... .... 0110 . . . 0 .... @3same VMAX_U_3s 1111 001 1 0 . .. .... .... 0110 . . . 0 .... @3same --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271532; cv=none; d=zohomail.com; s=zohoarc; b=PgEYCE2Rwbp9W0RwItZqlwqaINQEfriTHEZMkfebrWrilvMDzlLv2UTU8HeomgVBn/FwN7EB/h4z2gRnfrcvjCgZALYx92F61biRzYZ0fapippsfOIHs7w08eke6Vp2ihkXW7Vt55LZxWMIkAd+4tXlJocB41V+b9KUfZARFdg0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271532; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=JwbXqF77a6fQmoa2jYeTO1NO0SsDTG6KHF0nvVXllEU=; b=UPJrbWThxGFrSM7nqEKqEw7zdjOJAV1Ygw4ePD5oIW7++0HxUE9HQoijD+FNBCdYjgRf5BubN7tHs4tyqN2CTbfJRayC+pVgEPINo8tu/RHZGzFSTdwzIe63/TQEmhb7QQ/iTmo3CeVngDfyO9BgKSUV3NQj6Jfm7pYwln9q0P8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271532637735.7823917104375; Thu, 30 Apr 2020 11:32:12 -0700 (PDT) Received: from localhost ([::1]:40662 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDyl-0001eA-6z for importer@patchew.org; Thu, 30 Apr 2020 14:32:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36432) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeX-0002VV-Pk for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDdz-0001KJ-6Q for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:17 -0400 Received: from mail-wm1-x342.google.com ([2a00:1450:4864:20::342]:35895) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdy-0001J3-HU for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:42 -0400 Received: by mail-wm1-x342.google.com with SMTP id u127so3087387wmg.1 for ; Thu, 30 Apr 2020 11:10:41 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=JwbXqF77a6fQmoa2jYeTO1NO0SsDTG6KHF0nvVXllEU=; b=xQjBsTPIS+OilQStQBkWmxLItw1sfAOBa//TJst5E+8mDoT6JDQfm2NhJU8FOfwu23 wSrFuDHcS9Z1m/3wZIzHgXT8KBhFWRkQm6KkQA8AGu+n/aXKvIJtOr8BsysPG6Cm3G7v e5olbQ2gq5T5pKW3eRfKxoBxH21IZFc1CfgsRz+iNzBZv2KgYZLaRUt+Nb6/3ZymeRTL sIsQZ8Lw7ijYONUBOgP3hNXsiI6we8D/UDUm3j3M7YV/fts3aP6m+GVa8PyTDXtHbkdI btcwj2djMYLCZOZD5uaD5Z97hSYuCVkR5yTiuXbgkqojG+dpuvejHMikg08wdFolhKD/ H4Ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=JwbXqF77a6fQmoa2jYeTO1NO0SsDTG6KHF0nvVXllEU=; b=f06VsyOAfSRBBYg2BXgXLPffMym4AUOKzhw8uwK4CWCfvrFJ5eML+8rZ4vqnQkFyjQ lPwjh5odC5wcD2diFm3xfkmMNRwpr37hNKWyM7Wjf1Wponi/r4cctnFXOnT7eaIKOCSE xxUJZgFhalKNOepUuqCNMShkhBsQm2lS3abyK2rDfNrRjwqCPkFzWwMnWLUa2OCckpSy wP3ZC8xTPrzkOXrtKAC6jpswViYGqr10jAUh89jrikUVwlDHBxSdffuGR6JOEKPXpk0P pU6Ck+9JAwXQbfYFaFAdA9hXTAlOHZbV/fuhHWoLfWAB1RX77t4EBrqyFdKM1PQVgdHH dI8A== X-Gm-Message-State: AGi0PuZwbof40FeLJh288GKCw+vt4l+2nqoavHMPMOt9FyUNngh5gFG4 wYhlmqGilTLLHKwmYLWRUN2rUg== X-Google-Smtp-Source: APiQypI3Gyotrn9okAFjQJpRjsbsYPSd5LspFo/akPdY6parrTXOiTRCI3WlukJlJK5vtI6cQma5Ng== X-Received: by 2002:a7b:c1d4:: with SMTP id a20mr4429742wmj.111.1588270240326; Thu, 30 Apr 2020 11:10:40 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 27/36] target/arm: Convert Neon VABA 3-reg-same to decodetree Date: Thu, 30 Apr 2020 19:09:54 +0100 Message-Id: <20200430181003.21682-28-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::342; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x342.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::342 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the NEON VABA insn in the 3-reg-same group to decodetree. This is the only insn in this group which does an integer accumulate into the destination register. Signed-off-by: Peter Maydell --- target/arm/translate-neon.inc.c | 76 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 7 +-- target/arm/neon-dp.decode | 3 ++ 3 files changed, 80 insertions(+), 6 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 084c78eea58..4692448fc5f 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -1128,3 +1128,79 @@ DO_3SAME_QS32(VQRSHL_U,qrshl_u) =20 DO_3SAME_SHIFT32(VRSHL_S, rshl_s) DO_3SAME_SHIFT32(VRSHL_U, rshl_u) + +static bool do_vaba(DisasContext *s, arg_3same *a, + NeonGenTwoOpFn *abd_fn, NeonGenTwoOpFn *add_fn) +{ + /* VABA: handled elementwise 32 bits at a time, accumulating */ + TCGv_i32 tmp, tmp2; + int pass; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if ((a->vn | a->vm | a->vd) & a->q) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + for (pass =3D 0; pass < (a->q ? 4 : 2); pass++) { + tmp =3D neon_load_reg(a->vn, pass); + tmp2 =3D neon_load_reg(a->vm, pass); + abd_fn(tmp, tmp, tmp2); + tcg_temp_free_i32(tmp2); + tmp2 =3D neon_load_reg(a->vd, pass); + add_fn(tmp, tmp, tmp2); + tcg_temp_free_i32(tmp2); + neon_store_reg(a->vd, pass, tmp); + } + return true; +} + +static bool trans_VABA_S_3s(DisasContext *s, arg_3same *a) +{ + static NeonGenTwoOpFn * const abd_fns[] =3D { + gen_helper_neon_abd_s8, + gen_helper_neon_abd_s16, + gen_helper_neon_abd_s32, + }; + static NeonGenTwoOpFn * const add_fns[] =3D { + gen_helper_neon_add_u8, + gen_helper_neon_add_u16, + tcg_gen_add_i32, + }; + + if (a->size > 2) { + return false; + } + return do_vaba(s, a, abd_fns[a->size], add_fns[a->size]); +} + +static bool trans_VABA_U_3s(DisasContext *s, arg_3same *a) +{ + static NeonGenTwoOpFn * const abd_fns[] =3D { + gen_helper_neon_abd_u8, + gen_helper_neon_abd_u16, + gen_helper_neon_abd_u32, + }; + static NeonGenTwoOpFn * const add_fns[] =3D { + gen_helper_neon_add_u8, + gen_helper_neon_add_u16, + tcg_gen_add_i32, + }; + + if (a->size > 2) { + return false; + } + return do_vaba(s, a, abd_fns[a->size], add_fns[a->size]); +} diff --git a/target/arm/translate.c b/target/arm/translate.c index 4406fe54647..b04643cec9a 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4793,6 +4793,7 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_VQSHL: case NEON_3R_VRSHL: case NEON_3R_VQRSHL: + case NEON_3R_VABA: /* Already handled by decodetree */ return 1; } @@ -4862,12 +4863,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) tmp2 =3D neon_load_reg(rm, pass); } switch (op) { - case NEON_3R_VABA: - GEN_NEON_INTEGER_OP(abd); - tcg_temp_free_i32(tmp2); - tmp2 =3D neon_load_reg(rd, pass); - gen_neon_add(size, tmp, tmp2); - break; case NEON_3R_VPMAX: GEN_NEON_INTEGER_OP(pmax); break; diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index ae442071ef1..d91f944f84a 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -113,6 +113,9 @@ VMIN_U_3s 1111 001 1 0 . .. .... .... 0110 . . .= 1 .... @3same VABD_S_3s 1111 001 0 0 . .. .... .... 0111 . . . 0 .... @3same VABD_U_3s 1111 001 1 0 . .. .... .... 0111 . . . 0 .... @3same =20 +VABA_S_3s 1111 001 0 0 . .. .... .... 0111 . . . 1 .... @3same +VABA_U_3s 1111 001 1 0 . .. .... .... 0111 . . . 1 .... @3same + VADD_3s 1111 001 0 0 . .. .... .... 1000 . . . 0 .... @3same VSUB_3s 1111 001 1 0 . .. .... .... 1000 . . . 0 .... @3same =20 --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271421; cv=none; d=zohomail.com; s=zohoarc; b=JueUDdf00Z3Fhiftj9c4QB0ttW4mgdKYuWzT2YwF3uQoRMIpV7oCI6z2MbwC44/gWL6jyzujSIhrMdQu/etL9JwZ/pUvVovaT7Sl8bsHdUR6VazVMRcGC14EkYzndvfO8ysPWpz355ZBiglJnpJI0amUMsyiM2tSnzfJmozWHmI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271421; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ZfEz2YMeL9tkSikXJxczdohyg0MDh5B8nybWX2FfwKQ=; b=Z2CsldQ9aEESvFmXfhZsPzA6nQW9zO3Wg6RDFjm3Kl7w2KafKnoXusqmkV38YqsWZM8WlSQFeV4O8XipZfH4i4I3NcrXgANTZtbPDJxu+gHv4NwzLClbdGBY8m0kL49amENA+M88EagszogxX/+3b6cchJb81so9Wmo02xMyIRk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271421548361.03182089597544; Thu, 30 Apr 2020 11:30:21 -0700 (PDT) Received: from localhost ([::1]:34562 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDwy-0006Wi-65 for importer@patchew.org; Thu, 30 Apr 2020 14:30:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36444) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeZ-0002Zz-9n for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDe1-0001Ky-6K for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:19 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:33250) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDdz-0001Jq-27 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:44 -0400 Received: by mail-wr1-x442.google.com with SMTP id c12so3038324wrp.0 for ; Thu, 30 Apr 2020 11:10:42 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ZfEz2YMeL9tkSikXJxczdohyg0MDh5B8nybWX2FfwKQ=; b=VvVfMi5uaq7eTbFSnt4nBQ1SAxE1Uh3T7rqnAdTeaRFazPBE8kdUnsVpFA9nECKNGZ 4V9NlxnO4yAK9pYX6I19mJqDfjx1XtpjNo5X0HWvZyDp6tS8ADIpCbdqKfMjDvfeLyxo yustmqT9L5wgQmMXZeQMDfOPFtdGDMpUqiRZf2FfL9yQwawqYAMoeucUbPyPBseq2WbN FzzmaPgGEBJxThwo4zoGFDnOg3hUTnQuRtKpQcOlgBkIerS0PKVJ2FA88PLitCi1NbBC zoOM/OUbUclHkUzehd5e2mZ7BanXJ6ESdi1YuF6KTuSjvbGoL7NXZ/5DmSGbWO/LQMQJ BeKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ZfEz2YMeL9tkSikXJxczdohyg0MDh5B8nybWX2FfwKQ=; b=H9k8syzah2XFEsE27uAIIX4tly+ZI5G3mAdsO8M6JXGWCJBO6VKoKN4Z/2+V9taPrH 6F62+p2rMnFjojLdeu6hT1cmaxXv/NGyBwObkyRS91ToZ9HYY7RG4r0JO3atExaq7gdM jrSuXxfEA2jZ+8ypMqjgZulVREoSuHqI8N7kj+Ua0TX7AV1jclIUqMAAJfwWfQq7hL94 gtHfKd+GG2k4CCn4MKRm4PbJp7ppCN6aQxQWYaK04UQnOoGrI9mmfPRyUg6BOtGkfKuP bjXGL8J3WVFw39Iy1c6mp7x9I4PzFlx3PsiAwbJzw1hiWxUPG0QoApLAnAxi7JS3cKy4 70Cg== X-Gm-Message-State: AGi0PuaDpd7RUZ1gs+ALDqW6mtdnXfqUpxMNsAY+Axm9jysqRnTccy+2 mEMpMYYEYxht4TbY1tm77uqTlklxoKahiQ== X-Google-Smtp-Source: APiQypJhL4Ok+2XqWRXDIfGkDrjC5g7O0/ZS5yP6DbP9Y5//6VYqrPtKxDEZW0Wwq+fGac9ebYmbPA== X-Received: by 2002:a5d:4f10:: with SMTP id c16mr1819620wru.243.1588270241718; Thu, 30 Apr 2020 11:10:41 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 28/36] target/arm: Convert Neon VPMAX/VPMIN 3-reg-same insns to decodetree Date: Thu, 30 Apr 2020 19:09:55 +0100 Message-Id: <20200430181003.21682-29-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::442; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x442.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::442 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon integer VPMAX and VPMIN 3-reg-same insns to decodetree. These are 'pairwise' operations. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 71 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 16 +------- target/arm/neon-dp.decode | 9 +++++ 3 files changed, 82 insertions(+), 14 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 4692448fc5f..cd4c9dd6f28 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -1204,3 +1204,74 @@ static bool trans_VABA_U_3s(DisasContext *s, arg_3sa= me *a) } return do_vaba(s, a, abd_fns[a->size], add_fns[a->size]); } + +static bool do_3same_pair(DisasContext *s, arg_3same *a, NeonGenTwoOpFn *f= n) +{ + /* Operations handled pairwise 32 bits at a time */ + TCGv_i32 tmp, tmp2, tmp3; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if (a->size =3D=3D 3) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + assert(a->q =3D=3D 0); /* enforced by decode patterns */ + + /* + * Note that we have to be careful not to clobber the source operands + * in the "vm =3D=3D vd" case by storing the result of the first pass = too + * early. Since Q is 0 there are always just two passes, so instead + * of a complicated loop over each pass we just unroll. + */ + tmp =3D neon_load_reg(a->vn, 0); + tmp2 =3D neon_load_reg(a->vn, 1); + fn(tmp, tmp, tmp2); + tcg_temp_free_i32(tmp2); + + tmp3 =3D neon_load_reg(a->vm, 0); + tmp2 =3D neon_load_reg(a->vm, 1); + fn(tmp3, tmp3, tmp2); + tcg_temp_free_i32(tmp2); + + neon_store_reg(a->vd, 0, tmp); + neon_store_reg(a->vd, 1, tmp3); + return true; +} + +#define DO_3SAME_PAIR(INSN, func) \ + static bool trans_##INSN##_3s(DisasContext *s, arg_3same *a) \ + { \ + static NeonGenTwoOpFn * const fns[] =3D { \ + gen_helper_neon_##func##8, \ + gen_helper_neon_##func##16, \ + gen_helper_neon_##func##32, \ + }; \ + if (a->size > 2) { \ + return false; \ + } \ + return do_3same_pair(s, a, fns[a->size]); \ + } + +/* 32-bit pairwise ops end up the same as the elementwise versions. */ +#define gen_helper_neon_pmax_s32 tcg_gen_smax_i32 +#define gen_helper_neon_pmax_u32 tcg_gen_umax_i32 +#define gen_helper_neon_pmin_s32 tcg_gen_smin_i32 +#define gen_helper_neon_pmin_u32 tcg_gen_umin_i32 + +DO_3SAME_PAIR(VPMAX_S, pmax_s) +DO_3SAME_PAIR(VPMIN_S, pmin_s) +DO_3SAME_PAIR(VPMAX_U, pmax_u) +DO_3SAME_PAIR(VPMIN_U, pmin_u) diff --git a/target/arm/translate.c b/target/arm/translate.c index b04643cec9a..4bbdddaa30c 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -3011,12 +3011,6 @@ static inline void gen_neon_rsb(int size, TCGv_i32 t= 0, TCGv_i32 t1) } } =20 -/* 32-bit pairwise ops end up the same as the elementwise versions. */ -#define gen_helper_neon_pmax_s32 tcg_gen_smax_i32 -#define gen_helper_neon_pmax_u32 tcg_gen_umax_i32 -#define gen_helper_neon_pmin_s32 tcg_gen_smin_i32 -#define gen_helper_neon_pmin_u32 tcg_gen_umin_i32 - #define GEN_NEON_INTEGER_OP_ENV(name) do { \ switch ((size << 1) | u) { \ case 0: \ @@ -4794,6 +4788,8 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_VRSHL: case NEON_3R_VQRSHL: case NEON_3R_VABA: + case NEON_3R_VPMAX: + case NEON_3R_VPMIN: /* Already handled by decodetree */ return 1; } @@ -4805,8 +4801,6 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) pairwise =3D 0; switch (op) { case NEON_3R_VPADD_VQRDMLAH: - case NEON_3R_VPMAX: - case NEON_3R_VPMIN: pairwise =3D 1; break; case NEON_3R_FLOAT_ARITH: @@ -4863,12 +4857,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) tmp2 =3D neon_load_reg(rm, pass); } switch (op) { - case NEON_3R_VPMAX: - GEN_NEON_INTEGER_OP(pmax); - break; - case NEON_3R_VPMIN: - GEN_NEON_INTEGER_OP(pmin); - break; case NEON_3R_VQDMULH_VQRDMULH: /* Multiply high. */ if (!u) { /* VQDMULH */ switch (size) { diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index d91f944f84a..e47998899ce 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -42,6 +42,9 @@ @3same .... ... . . . size:2 .... .... .... . q:1 . . .... \ &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp =20 +@3same_q0 .... ... . . . size:2 .... .... .... . 0 . . .... \ + &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp q=3D0 + VHADD_S_3s 1111 001 0 0 . .. .... .... 0000 . . . 0 .... @3same VHADD_U_3s 1111 001 1 0 . .. .... .... 0000 . . . 0 .... @3same VQADD_S_3s 1111 001 0 0 . .. .... .... 0000 . . . 1 .... @3same @@ -128,6 +131,12 @@ VMLS_3s 1111 001 1 0 . .. .... .... 1001 . . = . 0 .... @3same VMUL_3s 1111 001 0 0 . .. .... .... 1001 . . . 1 .... @3same VMUL_p_3s 1111 001 1 0 . .. .... .... 1001 . . . 1 .... @3same =20 +VPMAX_S_3s 1111 001 0 0 . .. .... .... 1010 . . . 0 .... @3same_q0 +VPMAX_U_3s 1111 001 1 0 . .. .... .... 1010 . . . 0 .... @3same_q0 + +VPMIN_S_3s 1111 001 0 0 . .. .... .... 1010 . . . 1 .... @3same_q0 +VPMIN_U_3s 1111 001 1 0 . .. .... .... 1010 . . . 1 .... @3same_q0 + VQRDMLAH_3s 1111 001 1 0 . .. .... .... 1011 ... 1 .... @3same =20 SHA1_3s 1111 001 0 0 . optype:2 .... .... 1100 . 1 . 0 .... \ --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271557; cv=none; d=zohomail.com; s=zohoarc; b=XEYVvfvNyKNiyxRV3Mq/MS73jfK/nw45vi3tHFr5X9fK5dlZA5V9OZkLF+IAOcQIPO9H7Xrr4Kf/XQwlBsfLgG2BbtLqqGL/2xhiTne3DoNJ4Jl7lVurSPc38kLmSj1IMkthXmzGLMdZaMk7KMbqkvkQmO4uUB+tPzMGMnZ5UPI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271557; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=GFlmtmtGwB0Z1c1xqmmNwpuF0kF4/GSmZyxkEc1uP1E=; b=kRu2a/VKgcVr8mNqNlYHfkoEVHNpiEVyLRlH24HTspjS/CNQ5/SWIWVQubRgZAufkn3qmx2ejY89Y17lHaIsLNBg1mQX2hpz7UfevPW0DJdPUvuFmgpP3WNZ0OSzipY4LwAbA8umeTK4HGe3m4H9SV81scIf19IETkf9Fzw8GRI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271557855223.2674117801812; Thu, 30 Apr 2020 11:32:37 -0700 (PDT) Received: from localhost ([::1]:42968 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDzA-0002kB-Eu for importer@patchew.org; Thu, 30 Apr 2020 14:32:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36450) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDea-0002bc-1a for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDe1-0001L6-5r for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:19 -0400 Received: from mail-wm1-x344.google.com ([2a00:1450:4864:20::344]:34866) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDe0-0001KT-Mp for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:44 -0400 Received: by mail-wm1-x344.google.com with SMTP id r26so3082485wmh.0 for ; Thu, 30 Apr 2020 11:10:43 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GFlmtmtGwB0Z1c1xqmmNwpuF0kF4/GSmZyxkEc1uP1E=; b=VsRAUXUxsObvdX4ev6dvcPVS0LM7W22Vq1kV8pRgJXo5L2JpmsH7JAt1gQ9rH69Diq jYCnzt/y2jtICUDLEMWc1U8MYq704j8BSLw2+bi6dSKcKfWMuc5HG0lAKi6huqDJLVXq 2aiRdpB/D4mKOdrjiQjwDYa2xSUS1wuZr6TsNy3DA7CAk5upTf2xpeLYwcOzmLBtCaxv FtsFttKDInOjZjRD8MfU4QpKLAyBZ8XhlR6cvsDNCRqsNklgWYStfQBekoArfzHT3mPv w0BxyxxhwlGi/f+vegKCaJbgpQ+6G79Cbra8HrIaA7K9f5d1aAyH47Ij54Q2MfRfOb/2 lONw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GFlmtmtGwB0Z1c1xqmmNwpuF0kF4/GSmZyxkEc1uP1E=; b=nFzWQDMJmwIcAziKZRTnxLcFQMJ1XZSCta1phqJD3hKoFzAZxWYtKPOTiHyH5e0y+B 44CBQx8v7zfSKAs8RC5TbtrE548YZ0pnq3KP58bquuKM+4ViIOzkgczGOwJ1jfr6a3mu guBAKE04xFdVTg5XqtZyjO6/wIdPV9Hvv5BCP/XLkyX6Jn0Q2DN/GA660+lzWE91JoJf /4JBARRy0KLsSOUsriMU0NdxR/GR67nr+7RwmmrGRMQSjfLi9+0d1qZYMdUrNlxnwNoC hoUxjWXmQuZf12ieBuFfDWtUvf6P8jVJdJfKKnTWk8Ab693Crew8V0QSYgeCQwcpe9RV BVpw== X-Gm-Message-State: AGi0PubdftUDoKm0cdjX24z3T7oZzjV+8ojY4AEIkfj/cRm97WsiVdv2 IvoIzOMbEQJXyzXd0hOHKADJaA== X-Google-Smtp-Source: APiQypJNkwvRlSDhlOdPT1hgSeObXCJijhNSjMO5phxQOnn+eYlWeqM/d93eZ6gWHv9+Epau/BExdA== X-Received: by 2002:a1c:1f8e:: with SMTP id f136mr4189750wmf.166.1588270242753; Thu, 30 Apr 2020 11:10:42 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 29/36] target/arm: Convert Neon VPADD 3-reg-same insns to decodetree Date: Thu, 30 Apr 2020 19:09:56 +0100 Message-Id: <20200430181003.21682-30-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::344; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x344.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::344 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon integer VPADD 3-reg-same insns to decodetree. These are 'pairwise' operations. (Note that VQRDMLAH, which shares the same primary opcode but has U=3D1, has already been converted.) Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 2 ++ target/arm/translate.c | 19 +------------------ target/arm/neon-dp.decode | 2 ++ 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index cd4c9dd6f28..31a8e4ef486 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -1270,8 +1270,10 @@ static bool do_3same_pair(DisasContext *s, arg_3same= *a, NeonGenTwoOpFn *fn) #define gen_helper_neon_pmax_u32 tcg_gen_umax_i32 #define gen_helper_neon_pmin_s32 tcg_gen_smin_i32 #define gen_helper_neon_pmin_u32 tcg_gen_umin_i32 +#define gen_helper_neon_padd_u32 tcg_gen_add_i32 =20 DO_3SAME_PAIR(VPMAX_S, pmax_s) DO_3SAME_PAIR(VPMIN_S, pmin_s) DO_3SAME_PAIR(VPMAX_U, pmax_u) DO_3SAME_PAIR(VPMIN_U, pmin_u) +DO_3SAME_PAIR(VPADD, padd_u) diff --git a/target/arm/translate.c b/target/arm/translate.c index 4bbdddaa30c..f583cc900e1 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4749,13 +4749,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) return 1; } switch (op) { - case NEON_3R_VPADD_VQRDMLAH: - if (!u) { - break; /* VPADD */ - } - /* VQRDMLAH : handled by decodetree */ - return 1; - case NEON_3R_VFM_VQRDMLSH: if (!u) { /* VFM, VFMS */ @@ -4790,6 +4783,7 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_VABA: case NEON_3R_VPMAX: case NEON_3R_VPMIN: + case NEON_3R_VPADD_VQRDMLAH: /* Already handled by decodetree */ return 1; } @@ -4800,9 +4794,6 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) } pairwise =3D 0; switch (op) { - case NEON_3R_VPADD_VQRDMLAH: - pairwise =3D 1; - break; case NEON_3R_FLOAT_ARITH: pairwise =3D (u && size < 2); /* if VPADD (float) */ break; @@ -4880,14 +4871,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) } } break; - case NEON_3R_VPADD_VQRDMLAH: - switch (size) { - case 0: gen_helper_neon_padd_u8(tmp, tmp, tmp2); break; - case 1: gen_helper_neon_padd_u16(tmp, tmp, tmp2); break; - case 2: tcg_gen_add_i32(tmp, tmp, tmp2); break; - default: abort(); - } - break; case NEON_3R_FLOAT_ARITH: /* Floating point arithmetic. */ { TCGv_ptr fpstatus =3D get_fpstatus_ptr(1); diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index e47998899ce..acaf278cc8d 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -137,6 +137,8 @@ VPMAX_U_3s 1111 001 1 0 . .. .... .... 1010 . . .= 0 .... @3same_q0 VPMIN_S_3s 1111 001 0 0 . .. .... .... 1010 . . . 1 .... @3same_q0 VPMIN_U_3s 1111 001 1 0 . .. .... .... 1010 . . . 1 .... @3same_q0 =20 +VPADD_3s 1111 001 0 0 . .. .... .... 1011 . . . 1 .... @3same_q0 + VQRDMLAH_3s 1111 001 1 0 . .. .... .... 1011 ... 1 .... @3same =20 SHA1_3s 1111 001 0 0 . optype:2 .... .... 1100 . 1 . 0 .... \ --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271750; cv=none; d=zohomail.com; s=zohoarc; b=AwsiZQt74k9kL3qe8FsBQ3ysHGstKZ8beHsP5Nf5S/58zu1bLCPfdOVB1XeJ0SdTBNkOiWexiysFeU8IJIjsb4w5QHcqA14TzYEJPuAV6fPyAQ7T4BDmF1HLYQxAMW7thYkYIRAHTA4aN/kDSc9TFkRQACcI5uipKQyFtoWlnyo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271750; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=AJuDhNMKtFHxolGAXK2BQLCZ7xRlxZx8fU3lkQGYeGk=; b=Oi241WL1ObChuywaRr+fz1N5cbiG70JfIhQPe7RF0g7KXV7FO1Xf6VAn/JP++wMPkW+C6w7V5ZoySqQ1BM6Fvo4vOHzG7VpLgeIRmr0g12vJOHdD3fba+bqLDAPCF3vh/mhQT61zkh6rCPU3h08b6SkIh8bb7ocbIaeIc6Boj1s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271750325941.5069451836314; Thu, 30 Apr 2020 11:35:50 -0700 (PDT) Received: from localhost ([::1]:56446 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUE2H-0008O8-0v for importer@patchew.org; Thu, 30 Apr 2020 14:35:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36464) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeb-0002fm-HJ for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDe4-0001M5-VA for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:21 -0400 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:33252) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDe2-0001Ke-Hp for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:47 -0400 Received: by mail-wr1-x444.google.com with SMTP id c12so3038496wrp.0 for ; Thu, 30 Apr 2020 11:10:44 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=AJuDhNMKtFHxolGAXK2BQLCZ7xRlxZx8fU3lkQGYeGk=; b=EPUvXuIJ8oyRZcQqPwItEzbYaRWnPB2oFTqu+9nHKI2BoEXu4zPbv4uaVjfbmm/kIB uaeYbxYFxUGNMHiHZ4lifD3MK6LnWNjtxs5rqh3/ElW9Y/IHNyyOA6sTOONw+AzWZg0K GECtv553SGXGWSwp7eE9cl0hpqh1XlJ34yFrk/nPF+G+QVtZicZjiQXpFiULD54eERi8 v1H7nFqNyKvSolj4IC0BnIpr29mvgvkVM8kC/emUzLlUT8FAg8hNlDt4yOaqjeqbZcsP mBFoLysDfU4chRmWqUjzGOT2beupkuecP4LrWnCiW/EvLWXzOBRltqztv7CNW1ljFmOd Ujww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=AJuDhNMKtFHxolGAXK2BQLCZ7xRlxZx8fU3lkQGYeGk=; b=B34boaMWomdEkxutuY+1LXmcYzSFK306ZkrLtEZTlbdbeBKcovC0ZwPcbhKggLl6sy g2ITg7Jt/SyQH7j3nS4GVHMp0ghiQYO3mqeL3oKNY9z6YjIu8rScw0pJNsIoD3GNoQxG 18wNHC1j715i7+47sgyucZoQChprgVo49P0svLCMzlUDlu88dtLdqycNV1uAplMp1O2Z fP6q1MfkjCNL9bfTDBhkY/XaDdWiEWXc6wY8DEOT6dRKgL5MpV5CK0jRvz9CVL/973yV 2logoesyJXin3uILUxfozgErrjjWaNtkZEylCJSfXhHwTln2qDzj7VJ9JM5iyqrlXTY4 mG2A== X-Gm-Message-State: AGi0Puaw7YIOAlkM1+U5x8dDPTi/Ye1Dft/ppJ4hz38vrdya+DL+xwmX +VXct0RCgMu1Wih9hx4M8wXQRw== X-Google-Smtp-Source: APiQypJ1F13/QGoucm1ONRtftoqAnF3A66cAlgNdUaCymoADT5IHeD+lACwbc715UiMSfahzK36n/w== X-Received: by 2002:adf:eec8:: with SMTP id a8mr5237716wrp.28.1588270243823; Thu, 30 Apr 2020 11:10:43 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 30/36] target/arm: Convert Neon VQDMULH/VQRDMULH 3-reg-same to decodetree Date: Thu, 30 Apr 2020 19:09:57 +0100 Message-Id: <20200430181003.21682-31-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::444; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x444.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::444 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon VQDMULH and VQRDMULH 3-reg-same insns to decodetree. These are the last integer operations in the 3-reg-same group. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 44 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 24 +----------------- target/arm/neon-dp.decode | 3 +++ 3 files changed, 48 insertions(+), 23 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 31a8e4ef486..2fab547840d 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -1277,3 +1277,47 @@ DO_3SAME_PAIR(VPMIN_S, pmin_s) DO_3SAME_PAIR(VPMAX_U, pmax_u) DO_3SAME_PAIR(VPMIN_U, pmin_u) DO_3SAME_PAIR(VPADD, padd_u) + +static void gen_VQDMULH_s16(TCGv_i32 rd, TCGv_i32 rn, TCGv_i32 rm) +{ + gen_helper_neon_qdmulh_s16(rd, cpu_env, rn, rm); +} + +static void gen_VQDMULH_s32(TCGv_i32 rd, TCGv_i32 rn, TCGv_i32 rm) +{ + gen_helper_neon_qdmulh_s32(rd, cpu_env, rn, rm); +} + +static bool trans_VQDMULH_3s(DisasContext *s, arg_3same *a) +{ + static NeonGenTwoOpFn * const fns[] =3D { + gen_VQDMULH_s16, gen_VQDMULH_s32, + }; + + if (a->size !=3D 1 && a->size !=3D 2) { + return false; + } + return do_3same_32(s, a, fns[a->size - 1]); +} + +static void gen_VQRDMULH_s16(TCGv_i32 rd, TCGv_i32 rn, TCGv_i32 rm) +{ + gen_helper_neon_qrdmulh_s16(rd, cpu_env, rn, rm); +} + +static void gen_VQRDMULH_s32(TCGv_i32 rd, TCGv_i32 rn, TCGv_i32 rm) +{ + gen_helper_neon_qrdmulh_s32(rd, cpu_env, rn, rm); +} + +static bool trans_VQRDMULH_3s(DisasContext *s, arg_3same *a) +{ + static NeonGenTwoOpFn * const fns[] =3D { + gen_VQRDMULH_s16, gen_VQRDMULH_s32, + }; + + if (a->size !=3D 1 && a->size !=3D 2) { + return false; + } + return do_3same_32(s, a, fns[a->size - 1]); +} diff --git a/target/arm/translate.c b/target/arm/translate.c index f583cc900e1..9fec1889613 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4784,6 +4784,7 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_VPMAX: case NEON_3R_VPMIN: case NEON_3R_VPADD_VQRDMLAH: + case NEON_3R_VQDMULH_VQRDMULH: /* Already handled by decodetree */ return 1; } @@ -4848,29 +4849,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) tmp2 =3D neon_load_reg(rm, pass); } switch (op) { - case NEON_3R_VQDMULH_VQRDMULH: /* Multiply high. */ - if (!u) { /* VQDMULH */ - switch (size) { - case 1: - gen_helper_neon_qdmulh_s16(tmp, cpu_env, tmp, tmp2); - break; - case 2: - gen_helper_neon_qdmulh_s32(tmp, cpu_env, tmp, tmp2); - break; - default: abort(); - } - } else { /* VQRDMULH */ - switch (size) { - case 1: - gen_helper_neon_qrdmulh_s16(tmp, cpu_env, tmp, tmp2); - break; - case 2: - gen_helper_neon_qrdmulh_s32(tmp, cpu_env, tmp, tmp2); - break; - default: abort(); - } - } - break; case NEON_3R_FLOAT_ARITH: /* Floating point arithmetic. */ { TCGv_ptr fpstatus =3D get_fpstatus_ptr(1); diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index acaf278cc8d..8ceedd8b8d8 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -137,6 +137,9 @@ VPMAX_U_3s 1111 001 1 0 . .. .... .... 1010 . . .= 0 .... @3same_q0 VPMIN_S_3s 1111 001 0 0 . .. .... .... 1010 . . . 1 .... @3same_q0 VPMIN_U_3s 1111 001 1 0 . .. .... .... 1010 . . . 1 .... @3same_q0 =20 +VQDMULH_3s 1111 001 0 0 . .. .... .... 1011 . . . 0 .... @3same +VQRDMULH_3s 1111 001 1 0 . .. .... .... 1011 . . . 0 .... @3same + VPADD_3s 1111 001 0 0 . .. .... .... 1011 . . . 1 .... @3same_q0 =20 VQRDMLAH_3s 1111 001 1 0 . .. .... .... 1011 ... 1 .... @3same --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271904; cv=none; d=zohomail.com; s=zohoarc; b=TeP4AdC2N+EkwQ6w+gjo6puJlvwNTDJbJFtAPqjKd7aA3u9WBgDR7XWKrzVrSxEOKk+B6fMPeA5JHl+X5t7NPSEl8LVb4n+icmVTDcfbumgwaaCt4F3B/4huL5YsizN8K1cyMBJ3E0bPPoJlsrlRl/HIA0wYIZ8M+voarBVb46s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271904; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ZIjWH/BMWn1aPzoUWlcba5rXgD9JHAHjoL2L71Jcs1E=; b=NenDkO2dkvlQiSqiMN11GwoVsPEmUikaY0mzj/2LQRSezYCPXbnti71ndjNNsFCIdnr3kkNg1b5ANbmS3v3mS3KSq8YJsUDG7FXQ2rB+x/+2/cXYtyYF/WFnzcq/rlDqvzJEh8YdWo+FeP8Rd7P2PRRt1xpFx1FAk4XdqdqPFr0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271904211361.8112468375417; Thu, 30 Apr 2020 11:38:24 -0700 (PDT) Received: from localhost ([::1]:37490 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUE4k-0003nA-Pt for importer@patchew.org; Thu, 30 Apr 2020 14:38:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36470) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDec-0002iR-Cp for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDe5-0001MC-0g for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:22 -0400 Received: from mail-wm1-x343.google.com ([2a00:1450:4864:20::343]:53102) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDe4-0001LN-Du for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:48 -0400 Received: by mail-wm1-x343.google.com with SMTP id 188so2972776wmc.2 for ; Thu, 30 Apr 2020 11:10:45 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ZIjWH/BMWn1aPzoUWlcba5rXgD9JHAHjoL2L71Jcs1E=; b=cYPoP52PhNL2As4lE55S+uUDA0T1Xtifgl6+37FDoRNCHP1rulxDpHotQ2UseUU1Cp ejxC1+hvS+pSJXYwBqZEOAXxQDC02TtekQs5tB4ctl/qNviBXsVjykLDgRDdejg24jsO qxa/jrzilA40w3QobOpowc/co3oKoGTpkdRsZVjdqBsaMxKjJDQDr2803Htc1dRS6+8B O3LK4LQXXql+JdTQqwO4rBDewJvJi6pSAgT84/P3zvl9SOH9aXUJ386JOkmlovRX/sOT Jq6xpt35ahygrJKdJOE9eVIg4xRWIMHazk9AHw8Al+VMUiy7SAilgCLCJzx3G/DgY+95 23gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ZIjWH/BMWn1aPzoUWlcba5rXgD9JHAHjoL2L71Jcs1E=; b=oxaOln2syvN3JiDE9qrrGD++knvCNXF1G4pc8TwWC30PISHsIE3pj6pXLfWY6NdNnv K0O7mtGVhOg8jGdwqTJV3nYoR0bopAbjQsPVCphm6QJOb5rYBhTQA2EVyIbzl/GOeBqt /RtMAafIGZuA9ZwqyUkr/JXdfaz5klFfCZapYNGozh9ZEIWPnF58NFoRVXg0Z7IRyBvM xAyrkmoC8HuMNUhyZ3siIH1KCYUWEcTb5Ai+iz516r8d0LFQ9Y5ZCK8/vwbb6JIQmCT3 T9qbyspGriutG0uO/wz/Wz5uQ0HuGEQUW+DiRSBSrurlDks2YJcrBuHXScvnTbd9Pos3 hxKQ== X-Gm-Message-State: AGi0PuYTdaidllsdtkJ+pAtpPBAIDSosxmusJahdu0lpSRi6IEdI3Pdx 52Nz+Ghb+2TJQTgTydwEUqonaw== X-Google-Smtp-Source: APiQypKnlqqUZDhMWjP9uvHNsjCbDbUrbm//haxl1ZibFgz04hoOSlSKBFCvJ9ILj/K+QErCcl3X9A== X-Received: by 2002:a05:600c:210:: with SMTP id 16mr4148549wmi.57.1588270244911; Thu, 30 Apr 2020 11:10:44 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 31/36] target/arm: Convert Neon VADD, VSUB, VABD 3-reg-same insns to decodetree Date: Thu, 30 Apr 2020 19:09:58 +0100 Message-Id: <20200430181003.21682-32-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::343; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x343.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::343 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon VADD, VSUB, VABD 3-reg-same insns to decodetree. Signed-off-by: Peter Maydell --- target/arm/translate-neon.inc.c | 54 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 10 ++---- target/arm/neon-dp.decode | 8 +++++ 3 files changed, 65 insertions(+), 7 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 2fab547840d..6a27b7673c2 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -1321,3 +1321,57 @@ static bool trans_VQRDMULH_3s(DisasContext *s, arg_3= same *a) } return do_3same_32(s, a, fns[a->size - 1]); } + +static bool do_3same_fp(DisasContext *s, arg_3same *a, VFPGen3OpSPFn *fn) +{ + /* FP operations handled elementwise 32 bits at a time */ + TCGv_i32 tmp, tmp2; + int pass; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if ((a->vn | a->vm | a->vd) & a->q) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + TCGv_ptr fpstatus =3D get_fpstatus_ptr(1); + for (pass =3D 0; pass < (a->q ? 4 : 2); pass++) { + tmp =3D neon_load_reg(a->vn, pass); + tmp2 =3D neon_load_reg(a->vm, pass); + fn(tmp, tmp, tmp2, fpstatus); + tcg_temp_free_i32(tmp2); + neon_store_reg(a->vd, pass, tmp); + } + tcg_temp_free_ptr(fpstatus); + return true; +} + +/* + * For all the functions using this macro, size =3D=3D 1 means fp16, + * which is an architecture extension we don't implement yet. + */ +#define DO_3S_FP(INSN,FUNC) \ + static bool trans_##INSN##_fp_3s(DisasContext *s, arg_3same *a) \ + { \ + if (a->size !=3D 0) { \ + /* TODO fp16 support */ \ + return false; \ + } \ + return do_3same_fp(s, a, FUNC); \ + } + +DO_3S_FP(VADD, gen_helper_vfp_adds) +DO_3S_FP(VSUB, gen_helper_vfp_subs) +DO_3S_FP(VABD, gen_helper_neon_abd_f32) diff --git a/target/arm/translate.c b/target/arm/translate.c index 9fec1889613..c944cbf20af 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4797,6 +4797,9 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) switch (op) { case NEON_3R_FLOAT_ARITH: pairwise =3D (u && size < 2); /* if VPADD (float) */ + if (!pairwise) { + return 1; /* handled by decodetree */ + } break; case NEON_3R_FLOAT_MINMAX: pairwise =3D u; /* if VPMIN/VPMAX (float) */ @@ -4853,16 +4856,9 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) { TCGv_ptr fpstatus =3D get_fpstatus_ptr(1); switch ((u << 2) | size) { - case 0: /* VADD */ case 4: /* VPADD */ gen_helper_vfp_adds(tmp, tmp, tmp2, fpstatus); break; - case 2: /* VSUB */ - gen_helper_vfp_subs(tmp, tmp, tmp2, fpstatus); - break; - case 6: /* VABD */ - gen_helper_neon_abd_f32(tmp, tmp, tmp2, fpstatus); - break; default: abort(); } diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index 8ceedd8b8d8..9d6a17d6f04 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -45,6 +45,10 @@ @3same_q0 .... ... . . . size:2 .... .... .... . 0 . . .... \ &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp q=3D0 =20 +# For FP insns the high bit of 'size' is used as part of opcode decode +@3same_fp .... ... . . . . size:1 .... .... .... . q:1 . . .... \ + &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp + VHADD_S_3s 1111 001 0 0 . .. .... .... 0000 . . . 0 .... @3same VHADD_U_3s 1111 001 1 0 . .. .... .... 0000 . . . 0 .... @3same VQADD_S_3s 1111 001 0 0 . .. .... .... 0000 . . . 1 .... @3same @@ -154,3 +158,7 @@ SHA256SU1_3s 1111 001 1 0 . 10 .... .... 1100 . 1 .= 0 .... \ vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp =20 VQRDMLSH_3s 1111 001 1 0 . .. .... .... 1100 ... 1 .... @3same + +VADD_fp_3s 1111 001 0 0 . 0 . .... .... 1101 ... 0 .... @3same_fp +VSUB_fp_3s 1111 001 0 0 . 1 . .... .... 1101 ... 0 .... @3same_fp +VABD_fp_3s 1111 001 1 0 . 1 . .... .... 1101 ... 0 .... @3same_fp --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588272025; cv=none; d=zohomail.com; s=zohoarc; b=Jv1LXgkGQMPcM9t1d28QhdztNr4vX8ZPednQetsUHYEGZ+HVv1dgERgZkuezdHSc67BAJhNzP29U1rAmFEiktUH6dHZpyoWNL6YaAsd5EZSarzyvdGhGJicZMoGJK8qZTYfbWMfGlk2uvk9sspFm7hyE0CAxONQ1132VqE8lksM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588272025; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=uShlUsC/z76KQv14R09xTWGtsptGuGstuNKNs/FRUag=; b=Ony5Og7l/PIV1fxz/vm7lqX8voPvKrgLZUHNLmfoCVsC4b7vq4TI7cu4dyZmT9Vrb5mjqX+cl6p3BWSJfLuqRgYL22yWJDr9TedktcDHx0fn967/umwXj71phDpuLutynraakuXeoWev1ri36KsgPEkkRchYXx5vocBJ3VTL2Q8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588272025042821.943259136668; Thu, 30 Apr 2020 11:40:25 -0700 (PDT) Received: from localhost ([::1]:46294 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUE6h-0007TE-Cl for importer@patchew.org; Thu, 30 Apr 2020 14:40:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36486) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDee-0002nq-HH for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDe5-0001Mf-5b for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:24 -0400 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]:35895) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDe4-0001LY-I2 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:48 -0400 Received: by mail-wm1-x341.google.com with SMTP id u127so3087970wmg.1 for ; Thu, 30 Apr 2020 11:10:47 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=uShlUsC/z76KQv14R09xTWGtsptGuGstuNKNs/FRUag=; b=AkXYyGcc4XtG7kMQpj76prB8TF6AaTxJUdTXib5uyB8euWOSGeVfj+RBNUO55zf25R 0cpbG1Xd/YLgdER3jCkM1m9jnVPSJAIhVPq/HV0Ng5pLnPokoSo4bhueYeSaZkwI//AG OWHyk45Cd6/dJ2onFerRB9taI8kroWrKMbXmwkM6Nt60C8QvI9fcRNNsBBTlQnbm2npr z46d7LEwlq72ytt/CAsXkrTdWsAXFzyHCD8eRiiQUPd5MQP/O8gdt6zfntDlENYRwBTH 7oUb6oaprUMBc/aSpvAoxaI/mPU2UiQL1awUz8tywtK63E7kPuo/8n/JW2H/ZNNL2g2M zwzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uShlUsC/z76KQv14R09xTWGtsptGuGstuNKNs/FRUag=; b=uhG1dXuvVjJScJcJNlxdWLbaOwbVPFgWizUN5naM5cSr8sKW2cMcUKdK/AyM8DStvw tSfdalhytQZSQX6DFUit9KbnR/0MD4uXjkoidQrEPTnxWTaAm4J9X4EP4QFYKVvcipW+ tGvZIvHFUuB5cmluhWdmhEr8997HFxjmq2pGrgY/VibF5zl48THA1T+hupdbqugxlT0a et+cf66FE/NXmE/Mrxe63SJ7P1V6PXTnEGmL0lSNkQfkI7ZO2WR1Gx1/50zJuXDxqxbf fa/zMuKNVRAqdrr1HJRAZ9n/c8Z4NvQ53uzqGwGLudlXl/vDNdokLjk4S0ZTw2PbHQpd vN+A== X-Gm-Message-State: AGi0PuYLXj5CsUrJDgSIcvphjKCzdQfqRFQ+avC54IiKMWAsM3/jBGLY 5Dxb7gitlZZrr4JdVWQmqodakw== X-Google-Smtp-Source: APiQypJtUeojsNRR+wDNgC54ImLPCTUXXwsIGJsi1MSkHMUvKvv9D2Yit55pM7FSNi8BX8kkP15b5Q== X-Received: by 2002:a1c:3884:: with SMTP id f126mr4494231wma.91.1588270246167; Thu, 30 Apr 2020 11:10:46 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 32/36] target/arm: Convert Neon VPMIN/VPMAX/VPADD float 3-reg-same insns to decodetree Date: Thu, 30 Apr 2020 19:09:59 +0100 Message-Id: <20200430181003.21682-33-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::341; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x341.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::341 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon float VPMIN, VPMAX and VPADD 3-reg-same insns to decodetree. These are the only remaining 'pairwise' operations, so we can delete the pairwise-specific bits of the old decoder's for-each-element loop now. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 63 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 63 +++++---------------------------- target/arm/neon-dp.decode | 5 +++ 3 files changed, 76 insertions(+), 55 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 6a27b7673c2..30832309924 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -1375,3 +1375,66 @@ static bool do_3same_fp(DisasContext *s, arg_3same *= a, VFPGen3OpSPFn *fn) DO_3S_FP(VADD, gen_helper_vfp_adds) DO_3S_FP(VSUB, gen_helper_vfp_subs) DO_3S_FP(VABD, gen_helper_neon_abd_f32) + +static bool do_3same_fp_pair(DisasContext *s, arg_3same *a, VFPGen3OpSPFn = *fn) +{ + /* FP operations handled pairwise 32 bits at a time */ + TCGv_i32 tmp, tmp2, tmp3; + TCGv_ptr fpstatus; + + if (!arm_dc_feature(s, ARM_FEATURE_NEON)) { + return false; + } + + /* UNDEF accesses to D16-D31 if they don't exist. */ + if (!dc_isar_feature(aa32_simd_r32, s) && + ((a->vd | a->vn | a->vm) & 0x10)) { + return false; + } + + if (!vfp_access_check(s)) { + return true; + } + + assert(a->q =3D=3D 0); /* enforced by decode patterns */ + + /* + * Note that we have to be careful not to clobber the source operands + * in the "vm =3D=3D vd" case by storing the result of the first pass = too + * early. Since Q is 0 there are always just two passes, so instead + * of a complicated loop over each pass we just unroll. + */ + fpstatus =3D get_fpstatus_ptr(1); + tmp =3D neon_load_reg(a->vn, 0); + tmp2 =3D neon_load_reg(a->vn, 1); + fn(tmp, tmp, tmp2, fpstatus); + tcg_temp_free_i32(tmp2); + + tmp3 =3D neon_load_reg(a->vm, 0); + tmp2 =3D neon_load_reg(a->vm, 1); + fn(tmp3, tmp3, tmp2, fpstatus); + tcg_temp_free_i32(tmp2); + tcg_temp_free_ptr(fpstatus); + + neon_store_reg(a->vd, 0, tmp); + neon_store_reg(a->vd, 1, tmp3); + return true; +} + +/* + * For all the functions using this macro, size =3D=3D 1 means fp16, + * which is an architecture extension we don't implement yet. + */ +#define DO_3S_FP_PAIR(INSN,FUNC) \ + static bool trans_##INSN##_fp_3s(DisasContext *s, arg_3same *a) \ + { \ + if (a->size !=3D 0) { \ + /* TODO fp16 support */ \ + return false; \ + } \ + return do_3same_fp_pair(s, a, FUNC); \ + } + +DO_3S_FP_PAIR(VPADD, gen_helper_vfp_adds) +DO_3S_FP_PAIR(VPMAX, gen_helper_vfp_maxs) +DO_3S_FP_PAIR(VPMIN, gen_helper_vfp_mins) diff --git a/target/arm/translate.c b/target/arm/translate.c index c944cbf20af..5ae982ee253 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4700,7 +4700,6 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) int shift; int pass; int count; - int pairwise; int u; int vec_size; uint32_t imm; @@ -4785,6 +4784,7 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_VPMIN: case NEON_3R_VPADD_VQRDMLAH: case NEON_3R_VQDMULH_VQRDMULH: + case NEON_3R_FLOAT_ARITH: /* Already handled by decodetree */ return 1; } @@ -4793,16 +4793,11 @@ static int disas_neon_data_insn(DisasContext *s, ui= nt32_t insn) /* 64-bit element instructions: handled by decodetree */ return 1; } - pairwise =3D 0; switch (op) { - case NEON_3R_FLOAT_ARITH: - pairwise =3D (u && size < 2); /* if VPADD (float) */ - if (!pairwise) { - return 1; /* handled by decodetree */ - } - break; case NEON_3R_FLOAT_MINMAX: - pairwise =3D u; /* if VPMIN/VPMAX (float) */ + if (u) { + return 1; /* VPMIN/VPMAX handled by decodetree */ + } break; case NEON_3R_FLOAT_CMP: if (!u && size) { @@ -4830,41 +4825,12 @@ static int disas_neon_data_insn(DisasContext *s, ui= nt32_t insn) break; } =20 - if (pairwise && q) { - /* All the pairwise insns UNDEF if Q is set */ - return 1; - } - for (pass =3D 0; pass < (q ? 4 : 2); pass++) { =20 - if (pairwise) { - /* Pairwise. */ - if (pass < 1) { - tmp =3D neon_load_reg(rn, 0); - tmp2 =3D neon_load_reg(rn, 1); - } else { - tmp =3D neon_load_reg(rm, 0); - tmp2 =3D neon_load_reg(rm, 1); - } - } else { - /* Elementwise. */ - tmp =3D neon_load_reg(rn, pass); - tmp2 =3D neon_load_reg(rm, pass); - } + /* Elementwise. */ + tmp =3D neon_load_reg(rn, pass); + tmp2 =3D neon_load_reg(rm, pass); switch (op) { - case NEON_3R_FLOAT_ARITH: /* Floating point arithmetic. */ - { - TCGv_ptr fpstatus =3D get_fpstatus_ptr(1); - switch ((u << 2) | size) { - case 4: /* VPADD */ - gen_helper_vfp_adds(tmp, tmp, tmp2, fpstatus); - break; - default: - abort(); - } - tcg_temp_free_ptr(fpstatus); - break; - } case NEON_3R_FLOAT_MULTIPLY: { TCGv_ptr fpstatus =3D get_fpstatus_ptr(1); @@ -4955,22 +4921,9 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) } tcg_temp_free_i32(tmp2); =20 - /* Save the result. For elementwise operations we can put it - straight into the destination register. For pairwise operations - we have to be careful to avoid clobbering the source operands. = */ - if (pairwise && rd =3D=3D rm) { - neon_store_scratch(pass, tmp); - } else { - neon_store_reg(rd, pass, tmp); - } + neon_store_reg(rd, pass, tmp); =20 } /* for pass */ - if (pairwise && rd =3D=3D rm) { - for (pass =3D 0; pass < (q ? 4 : 2); pass++) { - tmp =3D neon_load_scratch(pass); - neon_store_reg(rd, pass, tmp); - } - } /* End of 3 register same size operations. */ } else if (insn & (1 << 4)) { if ((insn & 0x00380080) !=3D 0) { diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index 9d6a17d6f04..378c2dd5105 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -48,6 +48,8 @@ # For FP insns the high bit of 'size' is used as part of opcode decode @3same_fp .... ... . . . . size:1 .... .... .... . q:1 . . .... \ &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp +@3same_fp_q0 .... ... . . . . size:1 .... .... .... . 0 . . .... \ + &3same vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp q=3D0 =20 VHADD_S_3s 1111 001 0 0 . .. .... .... 0000 . . . 0 .... @3same VHADD_U_3s 1111 001 1 0 . .. .... .... 0000 . . . 0 .... @3same @@ -161,4 +163,7 @@ VQRDMLSH_3s 1111 001 1 0 . .. .... .... 1100 ... 1= .... @3same =20 VADD_fp_3s 1111 001 0 0 . 0 . .... .... 1101 ... 0 .... @3same_fp VSUB_fp_3s 1111 001 0 0 . 1 . .... .... 1101 ... 0 .... @3same_fp +VPADD_fp_3s 1111 001 1 0 . 0 . .... .... 1101 ... 0 .... @3same_fp_q0 VABD_fp_3s 1111 001 1 0 . 1 . .... .... 1101 ... 0 .... @3same_fp +VPMAX_fp_3s 1111 001 1 0 . 0 . .... .... 1111 ... 0 .... @3same_fp_q0 +VPMIN_fp_3s 1111 001 1 0 . 1 . .... .... 1111 ... 0 .... @3same_fp_q0 --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271677; cv=none; d=zohomail.com; s=zohoarc; b=W+JM2llgRAHYhfMzYIE7xpkSrtDf2+KwKovlXdNwpknJ4SMqKl4aPRhQxwUEBQw+dzETzLnVvv9PYy43gE7GUzvuRJvgyDiSdhTrdP/jY7iBJEQtwWJuufwQLxOF1VbYYCY3loEK3raWq7Cj5MjjamVlmFG78ahFHrhtIlISOQc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271677; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=+Fs4PAxS9dtCpCFLIxob1CFFrrH7DolbHDsxKsK9olg=; b=PpFNtmCM+jP8KSnUySPLd9YiecvgpLzuTbaCu5aIEOPgvLSUqzEAOOj9SyKnv08MjihwSM3q0CGYOQNb7Q0S8RKDYTNUMvkZscVviLvBkyG1Gper3WiZXSZ4KRDBo92HYweEWUiFTmXFFTF5eGBtX/EPZTOL9RBiRX4g/So4VBU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271677805933.2466748137801; Thu, 30 Apr 2020 11:34:37 -0700 (PDT) Received: from localhost ([::1]:51340 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUE16-0006IE-G1 for importer@patchew.org; Thu, 30 Apr 2020 14:34:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36490) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDef-0002rv-W0 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDe8-0001Uo-Em for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:25 -0400 Received: from mail-wr1-x443.google.com ([2a00:1450:4864:20::443]:42330) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDe5-0001Lh-Bx for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:50 -0400 Received: by mail-wr1-x443.google.com with SMTP id j2so8182729wrs.9 for ; Thu, 30 Apr 2020 11:10:48 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+Fs4PAxS9dtCpCFLIxob1CFFrrH7DolbHDsxKsK9olg=; b=vSmHwkAWmXhR/Z4EKoX+jfwJ8EfXjGQxAlrWZyCCTW+pkjVuwgfU+Uwc3OH+rTnJeY 7JFvf9YwH7q5pbvY5fmc0H6OcnSGu3e2Z4HLspRfqvTkv21h0aQfGb27rHaaFqmwuSBT CrPsvHhBywEwW6QBOI3xJLP9yqNhKmhiWmZAjXOZTGWlWWcr3WZvhNYkoH11oky7muXl 5IbDcbV7j1lpbNphUuBQyYBVkjAWvjq7VTtvAFfreyS4MYAqMUDLNyzosMAfIoxxk8AM BCXSBgvUfH1wwYZ5uMbxeJjd6DRq8z+GCPpAWglD0Vjkt9xxyceLahTMbm2pdNbZvOGG /rTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+Fs4PAxS9dtCpCFLIxob1CFFrrH7DolbHDsxKsK9olg=; b=fUlNiks7jNyPpQ/zCHZwR5rJUn9OJqWZydVJB9H37uxiAnGTwshZIz/d98XFMxknUb z+cfMVr0tFE4Nsm50cyS51xVezDzfscM2NAYuj8crPZ5qM8sYR0N7q+6yiEJuKmpS6tZ hoRQmkJUaWgu3l5PysLpibqhyGUbWlSVH7qp7eL94ASKBnYg9g0WliJv5rQkj3zp3GWN NleRKHlXIqwcp5w+X/Iq1VRe6oMmiWxyO9j9lBmZSdDz6WkTpmk20//E4+wwsoGIGB0R TgnwdJvAazTdLTzUJ5intR6LDUXgN8iH3JBNe1KZiHbDBmB1uIdiIXaYPU8w8sydcajT QAuA== X-Gm-Message-State: AGi0PuaXZBi2OINaPSpPfXMPX41Q8qS8B44VOVTDuaMWZZ1HFk4kNpp1 0FFThVo+XGOooVRP5OOzrALDoAa4WuIPgg== X-Google-Smtp-Source: APiQypKb7LGDoxXWCOOQPQy5VL+ZGQF531zGJRHLoStmgChtkSvIr5y2/eyNzFTufbw8YWiPjh+gcg== X-Received: by 2002:a5d:6946:: with SMTP id r6mr4938260wrw.291.1588270247892; Thu, 30 Apr 2020 11:10:47 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 33/36] target/arm: Convert Neon fp VMUL, VMLA, VMLS 3-reg-same insns to decodetree Date: Thu, 30 Apr 2020 19:10:00 +0100 Message-Id: <20200430181003.21682-34-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::443; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x443.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::443 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon integer VMUL, VMLA, and VMLS 3-reg-same inssn to decodetree. Since VMLA and VMLS accumulate into the destination register, we add a reads_vd parameter to do_3same_fp() which tells it to load the old value into vd before calling the callback function, in the same way that the translate-vfp.inc.c do_vfp_3op_sp() and do_vfp_3op_dp() functions work. This conversion fixes in passing an underdecoding for VMUL (originally reported by Fredrik Strupe ): bit 1 of the 'size' field must be 0. The old decoder didn't enforce this, but the decodetree pattern does. The gen_VMLA_fp_reg() function performs the addition operation with the operands in the opposite order to the old decoder: since Neon sets 'default NaN mode' float32_add operations are commutative so there is no behaviour difference, but putting them this way around matches the Arm ARM pseudocode and the required operation order for the subtraction in gen_VMLS_fp_reg(). Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 49 +++++++++++++++++++++++++++------ target/arm/translate.c | 17 +----------- target/arm/neon-dp.decode | 3 ++ 3 files changed, 44 insertions(+), 25 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 30832309924..47879bbb6c9 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -1322,9 +1322,15 @@ static bool trans_VQRDMULH_3s(DisasContext *s, arg_3= same *a) return do_3same_32(s, a, fns[a->size - 1]); } =20 -static bool do_3same_fp(DisasContext *s, arg_3same *a, VFPGen3OpSPFn *fn) +static bool do_3same_fp(DisasContext *s, arg_3same *a, VFPGen3OpSPFn *fn, + bool reads_vd) { - /* FP operations handled elementwise 32 bits at a time */ + /* + * FP operations handled elementwise 32 bits at a time. + * If reads_vd is true then the old value of Vd will be + * loaded before calling the callback function. This is + * used for multiply-accumulate type operations. + */ TCGv_i32 tmp, tmp2; int pass; =20 @@ -1350,9 +1356,16 @@ static bool do_3same_fp(DisasContext *s, arg_3same *= a, VFPGen3OpSPFn *fn) for (pass =3D 0; pass < (a->q ? 4 : 2); pass++) { tmp =3D neon_load_reg(a->vn, pass); tmp2 =3D neon_load_reg(a->vm, pass); - fn(tmp, tmp, tmp2, fpstatus); + if (reads_vd) { + TCGv_i32 tmp_rd =3D neon_load_reg(a->vd, pass); + fn(tmp_rd, tmp, tmp2, fpstatus); + neon_store_reg(a->vd, pass, tmp_rd); + tcg_temp_free_i32(tmp); + } else { + fn(tmp, tmp, tmp2, fpstatus); + neon_store_reg(a->vd, pass, tmp); + } tcg_temp_free_i32(tmp2); - neon_store_reg(a->vd, pass, tmp); } tcg_temp_free_ptr(fpstatus); return true; @@ -1362,19 +1375,37 @@ static bool do_3same_fp(DisasContext *s, arg_3same = *a, VFPGen3OpSPFn *fn) * For all the functions using this macro, size =3D=3D 1 means fp16, * which is an architecture extension we don't implement yet. */ -#define DO_3S_FP(INSN,FUNC) \ +#define DO_3S_FP(INSN,FUNC,READS_VD) \ static bool trans_##INSN##_fp_3s(DisasContext *s, arg_3same *a) \ { \ if (a->size !=3D 0) { \ /* TODO fp16 support */ \ return false; \ } \ - return do_3same_fp(s, a, FUNC); \ + return do_3same_fp(s, a, FUNC, READS_VD); \ } =20 -DO_3S_FP(VADD, gen_helper_vfp_adds) -DO_3S_FP(VSUB, gen_helper_vfp_subs) -DO_3S_FP(VABD, gen_helper_neon_abd_f32) +DO_3S_FP(VADD, gen_helper_vfp_adds, false) +DO_3S_FP(VSUB, gen_helper_vfp_subs, false) +DO_3S_FP(VABD, gen_helper_neon_abd_f32, false) +DO_3S_FP(VMUL, gen_helper_vfp_muls, false) + +static void gen_VMLA_fp_3s(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, + TCGv_ptr fpstatus) +{ + gen_helper_vfp_muls(vn, vn, vm, fpstatus); + gen_helper_vfp_adds(vd, vd, vn, fpstatus); +} + +static void gen_VMLS_fp_3s(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, + TCGv_ptr fpstatus) +{ + gen_helper_vfp_muls(vn, vn, vm, fpstatus); + gen_helper_vfp_subs(vd, vd, vn, fpstatus); +} + +DO_3S_FP(VMLA, gen_VMLA_fp_3s, true) +DO_3S_FP(VMLS, gen_VMLS_fp_3s, true) =20 static bool do_3same_fp_pair(DisasContext *s, arg_3same *a, VFPGen3OpSPFn = *fn) { diff --git a/target/arm/translate.c b/target/arm/translate.c index 5ae982ee253..57343daa10a 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4785,6 +4785,7 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_VPADD_VQRDMLAH: case NEON_3R_VQDMULH_VQRDMULH: case NEON_3R_FLOAT_ARITH: + case NEON_3R_FLOAT_MULTIPLY: /* Already handled by decodetree */ return 1; } @@ -4831,22 +4832,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) tmp =3D neon_load_reg(rn, pass); tmp2 =3D neon_load_reg(rm, pass); switch (op) { - case NEON_3R_FLOAT_MULTIPLY: - { - TCGv_ptr fpstatus =3D get_fpstatus_ptr(1); - gen_helper_vfp_muls(tmp, tmp, tmp2, fpstatus); - if (!u) { - tcg_temp_free_i32(tmp2); - tmp2 =3D neon_load_reg(rd, pass); - if (size =3D=3D 0) { - gen_helper_vfp_adds(tmp, tmp, tmp2, fpstatus); - } else { - gen_helper_vfp_subs(tmp, tmp2, tmp, fpstatus); - } - } - tcg_temp_free_ptr(fpstatus); - break; - } case NEON_3R_FLOAT_CMP: { TCGv_ptr fpstatus =3D get_fpstatus_ptr(1); diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index 378c2dd5105..96866c03db4 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -165,5 +165,8 @@ VADD_fp_3s 1111 001 0 0 . 0 . .... .... 1101 ... = 0 .... @3same_fp VSUB_fp_3s 1111 001 0 0 . 1 . .... .... 1101 ... 0 .... @3same_fp VPADD_fp_3s 1111 001 1 0 . 0 . .... .... 1101 ... 0 .... @3same_fp_q0 VABD_fp_3s 1111 001 1 0 . 1 . .... .... 1101 ... 0 .... @3same_fp +VMLA_fp_3s 1111 001 0 0 . 0 . .... .... 1101 ... 1 .... @3same_fp +VMLS_fp_3s 1111 001 0 0 . 1 . .... .... 1101 ... 1 .... @3same_fp +VMUL_fp_3s 1111 001 1 0 . 0 . .... .... 1101 ... 1 .... @3same_fp VPMAX_fp_3s 1111 001 1 0 . 0 . .... .... 1111 ... 0 .... @3same_fp_q0 VPMIN_fp_3s 1111 001 1 0 . 1 . .... .... 1111 ... 0 .... @3same_fp_q0 --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588271909; cv=none; d=zohomail.com; s=zohoarc; b=lZbv49AiLREd8yFkGT58TnjN+7tqsapu0PAwWkcgwYlR4dvLM88fyOyP2oRfMFqjz2rZ6AJx2wuy7HdO25E9HcSc69ictS5zr0VNYKvSHn9NReZzerQJ0E5N1MfUmChQdg8Z/iwZRRAVBjLfMJ8J1PDT2Z9xmukQaHSCYBp5ULI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588271909; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=br31+94xk2iuX4LX0dtLuZ7yS2HpgC0VmUDIcN1CJ/Y=; b=FncBVKXrBM6sWhqIbu/jJqIdMfTdn3dCpLK/hcY58ColkM+b6qq7y6Pd0EF3F88pcPOqF+GP95kCITyT6SOqKzZMiDOMc5NkHP9PbFX6QVEmA41mXQ7boh1XiWJzmevi23jITDCgUxHCm2kP++E93xSDkmOP37LmOXXeKOUClIo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588271909556928.6815287518453; Thu, 30 Apr 2020 11:38:29 -0700 (PDT) Received: from localhost ([::1]:37908 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUE4q-0003yQ-6N for importer@patchew.org; Thu, 30 Apr 2020 14:38:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36498) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDeg-0002th-QE for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDe9-0001XS-4y for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:26 -0400 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]:46980) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDe8-0001N0-DI for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:52 -0400 Received: by mail-wr1-x441.google.com with SMTP id f13so8126669wrm.13 for ; Thu, 30 Apr 2020 11:10:50 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=br31+94xk2iuX4LX0dtLuZ7yS2HpgC0VmUDIcN1CJ/Y=; b=ji4g1vmCR8QuaWebesXMZpqQ871NJ5xgAmdcGzknTpelxOI0T+f0VfnSto87l2OsFk Sa+txs9AYmhaV+BLK/jRpfBcK/J49jGpkxr21/fAK27DPkXK4PHPUJvwvqV/f7hDQ5mg Xg601r4kdhvibKsg0rFt08GcEpZwwL4b0QMydMrEx7tClxzq+zepKSaU98ilxA3jjF4u BmgPvItDLHauhmtMaqCzpYgT9YOL2AASrB9Q58wFqA3D4sHmKLWezZ34HDMDAk29iWbe 4qm1mP9tXmeudEU6txjRB9l4IeTLPbsXWvU5sG5g2QQoOzKU0PMbDP0/iFnDmeV1DgD7 akSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=br31+94xk2iuX4LX0dtLuZ7yS2HpgC0VmUDIcN1CJ/Y=; b=KFVMerFEzJUsiiC27CW5gg4+yc25YOWY0CBvxgBLpk/5RU5HWcWhtwdrpFBCwVCSQ+ Gk60PQK1kgR7Zs+XofcVscU2nIpTLJABNVh9PpiI1k4njp7RD06OHSKpMNnACT6wOLs7 IGkeYWKl3YHOeyPcJ7RNLgkIqL6G+sPyLDV60u13jaDvnA+1ixQB0Myw4w87qZ1uHWGn KDW6h/8V0WmCNsvFRQG+lQqEecIBlbFP0rnNmyoNhXz9x9S7V+ksI/yBVqLALdpKz/gq 58wZlneU1ueJOkfj5Kq2viZgB9NF+zJmCOEgGbB4w33R14H3rsxgZHirz4yLdcDk/sqg 5s9w== X-Gm-Message-State: AGi0PuZ2fgfrDtbpzo6aDY1crz66I0EsCLcEHuk6x/VI3dRFD3LOVeTO HrWFGG+ZrbDo8SOwXfI3Xh+LSw== X-Google-Smtp-Source: APiQypIAHBvHAX4l/cXDUKGUhezLEUSttmnhNBGrndRsup+CwW9pudBikzjvU+9lxadN0cuYiLFPQw== X-Received: by 2002:a5d:61c5:: with SMTP id q5mr5388182wrv.260.1588270249194; Thu, 30 Apr 2020 11:10:49 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 34/36] target/arm: Convert Neon 3-reg-same compare insns to decodetree Date: Thu, 30 Apr 2020 19:10:01 +0100 Message-Id: <20200430181003.21682-35-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::441; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x441.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::441 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon integer 3-reg-same compare insns VCGE, VCGT, VCEQ, VACGE and VACGT to decodetree. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 5 +++++ target/arm/translate.c | 39 ++------------------------------- target/arm/neon-dp.decode | 5 +++++ 3 files changed, 12 insertions(+), 37 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 47879bbb6c9..29a3f7677c7 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -1389,6 +1389,11 @@ DO_3S_FP(VADD, gen_helper_vfp_adds, false) DO_3S_FP(VSUB, gen_helper_vfp_subs, false) DO_3S_FP(VABD, gen_helper_neon_abd_f32, false) DO_3S_FP(VMUL, gen_helper_vfp_muls, false) +DO_3S_FP(VCEQ, gen_helper_neon_ceq_f32, false) +DO_3S_FP(VCGE, gen_helper_neon_cge_f32, false) +DO_3S_FP(VCGT, gen_helper_neon_cgt_f32, false) +DO_3S_FP(VACGE, gen_helper_neon_acge_f32, false) +DO_3S_FP(VACGT, gen_helper_neon_acgt_f32, false) =20 static void gen_VMLA_fp_3s(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fpstatus) diff --git a/target/arm/translate.c b/target/arm/translate.c index 57343daa10a..c68dbe126eb 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4786,6 +4786,8 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_VQDMULH_VQRDMULH: case NEON_3R_FLOAT_ARITH: case NEON_3R_FLOAT_MULTIPLY: + case NEON_3R_FLOAT_CMP: + case NEON_3R_FLOAT_ACMP: /* Already handled by decodetree */ return 1; } @@ -4800,17 +4802,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) return 1; /* VPMIN/VPMAX handled by decodetree */ } break; - case NEON_3R_FLOAT_CMP: - if (!u && size) { - /* no encoding for U=3D0 C=3D1x */ - return 1; - } - break; - case NEON_3R_FLOAT_ACMP: - if (!u) { - return 1; - } - break; case NEON_3R_FLOAT_MISC: /* VMAXNM/VMINNM in ARMv8 */ if (u && !arm_dc_feature(s, ARM_FEATURE_V8)) { @@ -4832,32 +4823,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) tmp =3D neon_load_reg(rn, pass); tmp2 =3D neon_load_reg(rm, pass); switch (op) { - case NEON_3R_FLOAT_CMP: - { - TCGv_ptr fpstatus =3D get_fpstatus_ptr(1); - if (!u) { - gen_helper_neon_ceq_f32(tmp, tmp, tmp2, fpstatus); - } else { - if (size =3D=3D 0) { - gen_helper_neon_cge_f32(tmp, tmp, tmp2, fpstatus); - } else { - gen_helper_neon_cgt_f32(tmp, tmp, tmp2, fpstatus); - } - } - tcg_temp_free_ptr(fpstatus); - break; - } - case NEON_3R_FLOAT_ACMP: - { - TCGv_ptr fpstatus =3D get_fpstatus_ptr(1); - if (size =3D=3D 0) { - gen_helper_neon_acge_f32(tmp, tmp, tmp2, fpstatus); - } else { - gen_helper_neon_acgt_f32(tmp, tmp, tmp2, fpstatus); - } - tcg_temp_free_ptr(fpstatus); - break; - } case NEON_3R_FLOAT_MINMAX: { TCGv_ptr fpstatus =3D get_fpstatus_ptr(1); diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index 96866c03db4..e90c7a9afe9 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -168,5 +168,10 @@ VABD_fp_3s 1111 001 1 0 . 1 . .... .... 1101 ...= 0 .... @3same_fp VMLA_fp_3s 1111 001 0 0 . 0 . .... .... 1101 ... 1 .... @3same_fp VMLS_fp_3s 1111 001 0 0 . 1 . .... .... 1101 ... 1 .... @3same_fp VMUL_fp_3s 1111 001 1 0 . 0 . .... .... 1101 ... 1 .... @3same_fp +VCEQ_fp_3s 1111 001 0 0 . 0 . .... .... 1110 ... 0 .... @3same_fp +VCGE_fp_3s 1111 001 1 0 . 0 . .... .... 1110 ... 0 .... @3same_fp +VACGE_fp_3s 1111 001 1 0 . 0 . .... .... 1110 ... 1 .... @3same_fp +VCGT_fp_3s 1111 001 1 0 . 1 . .... .... 1110 ... 0 .... @3same_fp +VACGT_fp_3s 1111 001 1 0 . 1 . .... .... 1110 ... 1 .... @3same_fp VPMAX_fp_3s 1111 001 1 0 . 0 . .... .... 1111 ... 0 .... @3same_fp_q0 VPMIN_fp_3s 1111 001 1 0 . 1 . .... .... 1111 ... 0 .... @3same_fp_q0 --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588272196; cv=none; d=zohomail.com; s=zohoarc; b=jaCDwmH9nH3DlN2BYpKwE/VuHjgmUrhgJdjwb121ZiJzrlM4hzIX3WS8BLt6eBTMYkrI6408BBp0OFkuWd26DrL48AIX/8t5LC3iV5AbYnt+B7jT1d+K5ZGeh5MJeFMOetzF1cRHqE64Df9qCdmc6yqX0Cb4EA0uqG47anqPWOE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588272196; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=5klmBHdlClTeVpJIdEUrHQO54WVC2YmubdzvqAQfLWA=; b=oBaRgyV4+BGN/yriYZali4c/dErEtXiihWJDxXbRuPLBj75ZW1LX9Dag/aX8X7SIsn/jIDo8uyFBA/samQRNTq1u3gheszbRU28USmWRTZooYo6EPGm6DDqauTVTc4XBc/jQKyaVl0e+e8DlYkQZ08TUbfn1/kFNUfQW5oLuKkE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 158827219683049.79603979246872; Thu, 30 Apr 2020 11:43:16 -0700 (PDT) Received: from localhost ([::1]:54724 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUE9T-0002ro-Cy for importer@patchew.org; Thu, 30 Apr 2020 14:43:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36512) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDei-0002wW-AN for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:12:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDe9-0001Xw-70 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:28 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:39523) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDe8-0001Pf-KC for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:52 -0400 Received: by mail-wr1-x442.google.com with SMTP id b11so8175767wrs.6 for ; Thu, 30 Apr 2020 11:10:51 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5klmBHdlClTeVpJIdEUrHQO54WVC2YmubdzvqAQfLWA=; b=GpzFXvZjcwH76ow0++1XCsz8p1z2bAvghtPIITnFHaRqYADPT4xqVDS5x3VyiKD0fw cdt8Bi6E8qA2CrCgurzthgZG+4LvOmqcmI0rHzQgsQifWWA8w0T7k7lTurHbXA8fqO24 8HMJPxcGsgODMTF/8IZDeHQyNhC6PNZlIMuSyXcID+9heUYJbyy7AFT19P5ypPQfnasc MP9nzIGLBs83KAaEZXOb5aFtP0b2CqFGW/etR5g1P4I960D2FBdVJ7C9SNrQTKVhVoZj yIZFm0YfaUYAztulDGtqGBxoy+w/g0kcqthtyuCWHYF3CAHLaOTetUtBpMkPHAW/Qemk kM2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5klmBHdlClTeVpJIdEUrHQO54WVC2YmubdzvqAQfLWA=; b=kBnnVOivwl31osA40CZWn4OzJmBa76jv5WXve+MPFpGmyzLlCdb9QzaXXXjWqQPyB/ DjuzonrsZWfLMjEh6Xhe94F4QZkX4/inzhFJYW7OrcmuGyf/zbnKRHoFCm0v3DmfMDK5 7jXfp5Xq/1sln9V+lO++1bVh76Sif/zem0vbshZtvGOJY4/da9PKeGS8yIixI5GcU1MZ gcHYiszfDKuVQRrZybpKeaIyBAJsRRNvMO+m9PS0JveIHHzVvlSFnQAScJ40AO+zU+oc Nisrs8QNZGfCqEC9EkcddmWW1mdW9emGCbQgzGQYoqJMc5k8LAOLmGt+r4U9qrJ5ifiI p47A== X-Gm-Message-State: AGi0PuabVpHS/RFDdihmjnbTQEeefkRWRgwr7PIecfLiviM5KAVqpo95 SjsNNUak4PoUVIIhjW+Azjidlg== X-Google-Smtp-Source: APiQypKawx0f9UTpXG5h7fHXH70ktMll3dFViU/2w726hVv4bo9wFUoBBvfSOlFM5R+SmFantA4lwQ== X-Received: by 2002:adf:fd0a:: with SMTP id e10mr5446452wrr.160.1588270250619; Thu, 30 Apr 2020 11:10:50 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 35/36] target/arm: Convert Neon fp VMAX/VMIN/VMAXNM/VMINNM/VRECPS/VRSQRTS to decodetree Date: Thu, 30 Apr 2020 19:10:02 +0100 Message-Id: <20200430181003.21682-36-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::442; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x442.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::442 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon fp VMAX/VMIN/VMAXNM/VMINNM/VRECPS/VRSQRTS 3-reg-same insns to decodetree. (These are all the remaining non-accumulation instructions in this group.) Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 60 +++++++++++++++++++++++++++++++++ target/arm/translate.c | 42 ++--------------------- target/arm/neon-dp.decode | 6 ++++ 3 files changed, 68 insertions(+), 40 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 29a3f7677c7..00b0b252e13 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -1394,6 +1394,8 @@ DO_3S_FP(VCGE, gen_helper_neon_cge_f32, false) DO_3S_FP(VCGT, gen_helper_neon_cgt_f32, false) DO_3S_FP(VACGE, gen_helper_neon_acge_f32, false) DO_3S_FP(VACGT, gen_helper_neon_acgt_f32, false) +DO_3S_FP(VMAX, gen_helper_vfp_maxs, false) +DO_3S_FP(VMIN, gen_helper_vfp_mins, false) =20 static void gen_VMLA_fp_3s(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fpstatus) @@ -1412,6 +1414,64 @@ static void gen_VMLS_fp_3s(TCGv_i32 vd, TCGv_i32 vn,= TCGv_i32 vm, DO_3S_FP(VMLA, gen_VMLA_fp_3s, true) DO_3S_FP(VMLS, gen_VMLS_fp_3s, true) =20 +static bool trans_VMAXNM_fp_3s(DisasContext *s, arg_3same *a) +{ + if (!arm_dc_feature(s, ARM_FEATURE_V8)) { + return false; + } + + if (a->size !=3D 0) { + /* TODO fp16 support */ + return false; + } + + return do_3same_fp(s, a, gen_helper_vfp_maxnums, false); +} + +static bool trans_VMINNM_fp_3s(DisasContext *s, arg_3same *a) +{ + if (!arm_dc_feature(s, ARM_FEATURE_V8)) { + return false; + } + + if (a->size !=3D 0) { + /* TODO fp16 support */ + return false; + } + + return do_3same_fp(s, a, gen_helper_vfp_minnums, false); +} + +static void gen_VRECPS_fp_3s(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm) +{ + gen_helper_recps_f32(vd, vn, vm, cpu_env); +} + +static bool trans_VRECPS_fp_3s(DisasContext *s, arg_3same *a) +{ + if (a->size !=3D 0) { + /* TODO fp16 support */ + return false; + } + + return do_3same_32(s, a, gen_VRECPS_fp_3s); +} + +static void gen_VRSQRTS_fp_3s(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm) +{ + gen_helper_rsqrts_f32(vd, vn, vm, cpu_env); +} + +static bool trans_VRSQRTS_fp_3s(DisasContext *s, arg_3same *a) +{ + if (a->size !=3D 0) { + /* TODO fp16 support */ + return false; + } + + return do_3same_32(s, a, gen_VRSQRTS_fp_3s); +} + static bool do_3same_fp_pair(DisasContext *s, arg_3same *a, VFPGen3OpSPFn = *fn) { /* FP operations handled pairwise 32 bits at a time */ diff --git a/target/arm/translate.c b/target/arm/translate.c index c68dbe126eb..d34a96e9018 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -4788,6 +4788,8 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) case NEON_3R_FLOAT_MULTIPLY: case NEON_3R_FLOAT_CMP: case NEON_3R_FLOAT_ACMP: + case NEON_3R_FLOAT_MINMAX: + case NEON_3R_FLOAT_MISC: /* Already handled by decodetree */ return 1; } @@ -4797,17 +4799,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) return 1; } switch (op) { - case NEON_3R_FLOAT_MINMAX: - if (u) { - return 1; /* VPMIN/VPMAX handled by decodetree */ - } - break; - case NEON_3R_FLOAT_MISC: - /* VMAXNM/VMINNM in ARMv8 */ - if (u && !arm_dc_feature(s, ARM_FEATURE_V8)) { - return 1; - } - break; case NEON_3R_VFM_VQRDMLSH: if (!dc_isar_feature(aa32_simdfmac, s)) { return 1; @@ -4823,35 +4814,6 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) tmp =3D neon_load_reg(rn, pass); tmp2 =3D neon_load_reg(rm, pass); switch (op) { - case NEON_3R_FLOAT_MINMAX: - { - TCGv_ptr fpstatus =3D get_fpstatus_ptr(1); - if (size =3D=3D 0) { - gen_helper_vfp_maxs(tmp, tmp, tmp2, fpstatus); - } else { - gen_helper_vfp_mins(tmp, tmp, tmp2, fpstatus); - } - tcg_temp_free_ptr(fpstatus); - break; - } - case NEON_3R_FLOAT_MISC: - if (u) { - /* VMAXNM/VMINNM */ - TCGv_ptr fpstatus =3D get_fpstatus_ptr(1); - if (size =3D=3D 0) { - gen_helper_vfp_maxnums(tmp, tmp, tmp2, fpstatus); - } else { - gen_helper_vfp_minnums(tmp, tmp, tmp2, fpstatus); - } - tcg_temp_free_ptr(fpstatus); - } else { - if (size =3D=3D 0) { - gen_helper_recps_f32(tmp, tmp, tmp2, cpu_env); - } else { - gen_helper_rsqrts_f32(tmp, tmp, tmp2, cpu_env); - } - } - break; case NEON_3R_VFM_VQRDMLSH: { /* VFMA, VFMS: fused multiply-add */ diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index e90c7a9afe9..c4a90e70753 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -173,5 +173,11 @@ VCGE_fp_3s 1111 001 1 0 . 0 . .... .... 1110 ...= 0 .... @3same_fp VACGE_fp_3s 1111 001 1 0 . 0 . .... .... 1110 ... 1 .... @3same_fp VCGT_fp_3s 1111 001 1 0 . 1 . .... .... 1110 ... 0 .... @3same_fp VACGT_fp_3s 1111 001 1 0 . 1 . .... .... 1110 ... 1 .... @3same_fp +VMAX_fp_3s 1111 001 0 0 . 0 . .... .... 1111 ... 0 .... @3same_fp +VMIN_fp_3s 1111 001 0 0 . 1 . .... .... 1111 ... 0 .... @3same_fp VPMAX_fp_3s 1111 001 1 0 . 0 . .... .... 1111 ... 0 .... @3same_fp_q0 VPMIN_fp_3s 1111 001 1 0 . 1 . .... .... 1111 ... 0 .... @3same_fp_q0 +VRECPS_fp_3s 1111 001 0 0 . 0 . .... .... 1111 ... 1 .... @3same_fp +VRSQRTS_fp_3s 1111 001 0 0 . 1 . .... .... 1111 ... 1 .... @3same_fp +VMAXNM_fp_3s 1111 001 1 0 . 0 . .... .... 1111 ... 1 .... @3same_fp +VMINNM_fp_3s 1111 001 1 0 . 1 . .... .... 1111 ... 1 .... @3same_fp --=20 2.20.1 From nobody Sun May 19 17:58:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588272028; cv=none; d=zohomail.com; s=zohoarc; b=LopqqmV52DZdj9LvPgh3M7OkLYIuXVZsdKH0VPwm2FR9FlQWW36a1f98QcxZfQDK03WKshOLVGJU8jEKeeVQjtOQf5TVCRzJUI8rq+F9H7X9ieLjeOzk+l8MErU+dQZNmaX2d/qvtMT68NPZSmT8trOXOw9xNQKSiqgkknGcfAM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588272028; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=nI78GZPyk+B5QIwTZamednLfdRTLzLuYILS3epMYRRg=; b=aanjQi7Rh12H3OoIVvyXZUDmEksL73pZLCkpjhHIKNXSVVPBCsM3xkGrltVC5UmYloLun7FFbPGdLE2FgwiJh74vVqPqaZCLwNoY4r7aFKnIcPd9f/2ZRbN9IsAXWc1Wflub4MJKqjlsMCjhg9FTZrSzrwy0l4zUKTY7S+lxqy0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588272028258704.2307099674402; Thu, 30 Apr 2020 11:40:28 -0700 (PDT) Received: from localhost ([::1]:46582 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUE6k-0007b3-So for importer@patchew.org; Thu, 30 Apr 2020 14:40:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36520) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jUDej-0002yn-EV for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:12:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jUDe9-0001ZM-O1 for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:11:29 -0400 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:46981) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jUDe9-0001V5-8r for qemu-devel@nongnu.org; Thu, 30 Apr 2020 14:10:53 -0400 Received: by mail-wr1-x442.google.com with SMTP id f13so8126881wrm.13 for ; Thu, 30 Apr 2020 11:10:52 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id t8sm652421wrq.88.2020.04.30.11.10.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2020 11:10:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=nI78GZPyk+B5QIwTZamednLfdRTLzLuYILS3epMYRRg=; b=Yx7J/pNYYw5oB3lhfRlCkKjj2GX1FzQd+hwsKmxk5lOu0ISbVsI1bJa17rDO/Xtgnv xdcCDiFJexrB9DghMiGbMirwAjyoUp064glXlZPvIwxRrOs9OrIgx0js9KdbhEFExeyK v8b8C+KFrQF5oVisW6LfqIxI+sUEEVagDjFoh46Q0+PrAyU6PNIth+SwzbO1NejJMOdx Em/EmJa/LzTCg0xPwAST7qDVATHfmALNT+Li8Ekg0sBajUAHfL9702GBWQMrMo5KoXue YWkwpioZa8w3sDJa6RB7rktjjiArFi2Q8RA8cQCsPBOtIEhGA86B1salq93UqZKa0Rz2 CDZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=nI78GZPyk+B5QIwTZamednLfdRTLzLuYILS3epMYRRg=; b=Sbfg9Jt5MHZhffqazKln8XD+6AYUI+UB27vqaA7ytL7E7CbAlQTG/2z8r/s3NoDWE1 b3zcLWOPrfQ7k0dfBJerU50cz2OuhoSnwqeguOqK+guhy9PjGHd3swMBmX30etHyfcCB 69wMT8O9DkvvM9htfG8LUpxqw/vWeQY3EjOLigpy8nh+6OR3zw/WhaoLi8FnKtTb58Nq DrMDRViTxLukPOn4YJeGCfzszQA3RDNT+SB9Lk4TPJz9Dx2ildEoxSt1C2hoa412X646 bLTTpJrdTghmS5Dfr8Zdy4yq77IZ0oSuW09oFbITSNhg3KbhG5SvoY/4IcI+cg+K4DdE KfUA== X-Gm-Message-State: AGi0PubE5RyJNoMxzEVCKd89ddLglRYl2LKpR5dMC5tBnsk9AIPUScjc /IrVWHsv9rXgEUULfpICCyTb1A== X-Google-Smtp-Source: APiQypKFZJSWRHk4s9BPFOuG8wcCw9dthG9oqSAoraIiphnULXnvPEOfX4h/+6fr/2bHn8c0C/T6vQ== X-Received: by 2002:adf:a309:: with SMTP id c9mr4973668wrb.97.1588270251823; Thu, 30 Apr 2020 11:10:51 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 36/36] target/arm: Convert NEON VFMA, VFMS 3-reg-same insns to decodetree Date: Thu, 30 Apr 2020 19:10:03 +0100 Message-Id: <20200430181003.21682-37-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430181003.21682-1-peter.maydell@linaro.org> References: <20200430181003.21682-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::442; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x442.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2a00:1450:4864:20::442 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Convert the Neon floating point VFMA and VFMS insn to decodetree. These are the last insns in the 3-reg-same group so we can remove all the support/loop code from the old decoder. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/translate-neon.inc.c | 41 ++++++++ target/arm/translate.c | 176 +------------------------------- target/arm/neon-dp.decode | 3 + 3 files changed, 46 insertions(+), 174 deletions(-) diff --git a/target/arm/translate-neon.inc.c b/target/arm/translate-neon.in= c.c index 00b0b252e13..1a4c718b6e4 100644 --- a/target/arm/translate-neon.inc.c +++ b/target/arm/translate-neon.inc.c @@ -1472,6 +1472,47 @@ static bool trans_VRSQRTS_fp_3s(DisasContext *s, arg= _3same *a) return do_3same_32(s, a, gen_VRSQRTS_fp_3s); } =20 +static void gen_VFMA_fp_3s(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, + TCGv_ptr fpstatus) +{ + gen_helper_vfp_muladds(vd, vn, vm, vd, fpstatus); +} + +static bool trans_VFMA_fp_3s(DisasContext *s, arg_3same *a) +{ + if (!dc_isar_feature(aa32_simdfmac, s)) { + return false; + } + + if (a->size !=3D 0) { + /* TODO fp16 support */ + return false; + } + + return do_3same_fp(s, a, gen_VFMA_fp_3s, true); +} + +static void gen_VFMS_fp_3s(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, + TCGv_ptr fpstatus) +{ + gen_helper_vfp_negs(vn, vn); + gen_helper_vfp_muladds(vd, vn, vm, vd, fpstatus); +} + +static bool trans_VFMS_fp_3s(DisasContext *s, arg_3same *a) +{ + if (!dc_isar_feature(aa32_simdfmac, s)) { + return false; + } + + if (a->size !=3D 0) { + /* TODO fp16 support */ + return false; + } + + return do_3same_fp(s, a, gen_VFMS_fp_3s, true); +} + static bool do_3same_fp_pair(DisasContext *s, arg_3same *a, VFPGen3OpSPFn = *fn) { /* FP operations handled pairwise 32 bits at a time */ diff --git a/target/arm/translate.c b/target/arm/translate.c index d34a96e9018..f392a15ffbf 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -3391,78 +3391,6 @@ static void gen_neon_narrow_op(int op, int u, int si= ze, } } =20 -/* Symbolic constants for op fields for Neon 3-register same-length. - * The values correspond to bits [11:8,4]; see the ARM ARM DDI0406B - * table A7-9. - */ -#define NEON_3R_VHADD 0 -#define NEON_3R_VQADD 1 -#define NEON_3R_VRHADD 2 -#define NEON_3R_LOGIC 3 /* VAND,VBIC,VORR,VMOV,VORN,VEOR,VBIF,VBIT,VBSL */ -#define NEON_3R_VHSUB 4 -#define NEON_3R_VQSUB 5 -#define NEON_3R_VCGT 6 -#define NEON_3R_VCGE 7 -#define NEON_3R_VSHL 8 -#define NEON_3R_VQSHL 9 -#define NEON_3R_VRSHL 10 -#define NEON_3R_VQRSHL 11 -#define NEON_3R_VMAX 12 -#define NEON_3R_VMIN 13 -#define NEON_3R_VABD 14 -#define NEON_3R_VABA 15 -#define NEON_3R_VADD_VSUB 16 -#define NEON_3R_VTST_VCEQ 17 -#define NEON_3R_VML 18 /* VMLA, VMLS */ -#define NEON_3R_VMUL 19 -#define NEON_3R_VPMAX 20 -#define NEON_3R_VPMIN 21 -#define NEON_3R_VQDMULH_VQRDMULH 22 -#define NEON_3R_VPADD_VQRDMLAH 23 -#define NEON_3R_SHA 24 /* SHA1C,SHA1P,SHA1M,SHA1SU0,SHA256H{2},SHA256SU1 */ -#define NEON_3R_VFM_VQRDMLSH 25 /* VFMA, VFMS, VQRDMLSH */ -#define NEON_3R_FLOAT_ARITH 26 /* float VADD, VSUB, VPADD, VABD */ -#define NEON_3R_FLOAT_MULTIPLY 27 /* float VMLA, VMLS, VMUL */ -#define NEON_3R_FLOAT_CMP 28 /* float VCEQ, VCGE, VCGT */ -#define NEON_3R_FLOAT_ACMP 29 /* float VACGE, VACGT, VACLE, VACLT */ -#define NEON_3R_FLOAT_MINMAX 30 /* float VMIN, VMAX */ -#define NEON_3R_FLOAT_MISC 31 /* float VRECPS, VRSQRTS, VMAXNM/MINNM */ - -static const uint8_t neon_3r_sizes[] =3D { - [NEON_3R_VHADD] =3D 0x7, - [NEON_3R_VQADD] =3D 0xf, - [NEON_3R_VRHADD] =3D 0x7, - [NEON_3R_LOGIC] =3D 0xf, /* size field encodes op type */ - [NEON_3R_VHSUB] =3D 0x7, - [NEON_3R_VQSUB] =3D 0xf, - [NEON_3R_VCGT] =3D 0x7, - [NEON_3R_VCGE] =3D 0x7, - [NEON_3R_VSHL] =3D 0xf, - [NEON_3R_VQSHL] =3D 0xf, - [NEON_3R_VRSHL] =3D 0xf, - [NEON_3R_VQRSHL] =3D 0xf, - [NEON_3R_VMAX] =3D 0x7, - [NEON_3R_VMIN] =3D 0x7, - [NEON_3R_VABD] =3D 0x7, - [NEON_3R_VABA] =3D 0x7, - [NEON_3R_VADD_VSUB] =3D 0xf, - [NEON_3R_VTST_VCEQ] =3D 0x7, - [NEON_3R_VML] =3D 0x7, - [NEON_3R_VMUL] =3D 0x7, - [NEON_3R_VPMAX] =3D 0x7, - [NEON_3R_VPMIN] =3D 0x7, - [NEON_3R_VQDMULH_VQRDMULH] =3D 0x6, - [NEON_3R_VPADD_VQRDMLAH] =3D 0x7, - [NEON_3R_SHA] =3D 0xf, /* size field encodes op type */ - [NEON_3R_VFM_VQRDMLSH] =3D 0x7, /* For VFM, size bit 1 encodes op */ - [NEON_3R_FLOAT_ARITH] =3D 0x5, /* size bit 1 encodes op */ - [NEON_3R_FLOAT_MULTIPLY] =3D 0x5, /* size bit 1 encodes op */ - [NEON_3R_FLOAT_CMP] =3D 0x5, /* size bit 1 encodes op */ - [NEON_3R_FLOAT_ACMP] =3D 0x5, /* size bit 1 encodes op */ - [NEON_3R_FLOAT_MINMAX] =3D 0x5, /* size bit 1 encodes op */ - [NEON_3R_FLOAT_MISC] =3D 0x5, /* size bit 1 encodes op */ -}; - /* Symbolic constants for op fields for Neon 2-register miscellaneous. * The values correspond to bits [17:16,10:7]; see the ARM ARM DDI0406B * table A7-13. @@ -4735,108 +4663,8 @@ static int disas_neon_data_insn(DisasContext *s, ui= nt32_t insn) rm_ofs =3D neon_reg_offset(rm, 0); =20 if ((insn & (1 << 23)) =3D=3D 0) { - /* Three register same length. */ - op =3D ((insn >> 7) & 0x1e) | ((insn >> 4) & 1); - /* Catch invalid op and bad size combinations: UNDEF */ - if ((neon_3r_sizes[op] & (1 << size)) =3D=3D 0) { - return 1; - } - /* All insns of this form UNDEF for either this condition or the - * superset of cases "Q=3D=3D1"; we catch the latter later. - */ - if (q && ((rd | rn | rm) & 1)) { - return 1; - } - switch (op) { - case NEON_3R_VFM_VQRDMLSH: - if (!u) { - /* VFM, VFMS */ - if (size =3D=3D 1) { - return 1; - } - break; - } - /* VQRDMLSH : handled by decodetree */ - return 1; - - case NEON_3R_VADD_VSUB: - case NEON_3R_LOGIC: - case NEON_3R_VMAX: - case NEON_3R_VMIN: - case NEON_3R_VTST_VCEQ: - case NEON_3R_VCGT: - case NEON_3R_VCGE: - case NEON_3R_VQADD: - case NEON_3R_VQSUB: - case NEON_3R_VMUL: - case NEON_3R_VML: - case NEON_3R_VSHL: - case NEON_3R_SHA: - case NEON_3R_VHADD: - case NEON_3R_VRHADD: - case NEON_3R_VHSUB: - case NEON_3R_VABD: - case NEON_3R_VQSHL: - case NEON_3R_VRSHL: - case NEON_3R_VQRSHL: - case NEON_3R_VABA: - case NEON_3R_VPMAX: - case NEON_3R_VPMIN: - case NEON_3R_VPADD_VQRDMLAH: - case NEON_3R_VQDMULH_VQRDMULH: - case NEON_3R_FLOAT_ARITH: - case NEON_3R_FLOAT_MULTIPLY: - case NEON_3R_FLOAT_CMP: - case NEON_3R_FLOAT_ACMP: - case NEON_3R_FLOAT_MINMAX: - case NEON_3R_FLOAT_MISC: - /* Already handled by decodetree */ - return 1; - } - - if (size =3D=3D 3) { - /* 64-bit element instructions: handled by decodetree */ - return 1; - } - switch (op) { - case NEON_3R_VFM_VQRDMLSH: - if (!dc_isar_feature(aa32_simdfmac, s)) { - return 1; - } - break; - default: - break; - } - - for (pass =3D 0; pass < (q ? 4 : 2); pass++) { - - /* Elementwise. */ - tmp =3D neon_load_reg(rn, pass); - tmp2 =3D neon_load_reg(rm, pass); - switch (op) { - case NEON_3R_VFM_VQRDMLSH: - { - /* VFMA, VFMS: fused multiply-add */ - TCGv_ptr fpstatus =3D get_fpstatus_ptr(1); - TCGv_i32 tmp3 =3D neon_load_reg(rd, pass); - if (size) { - /* VFMS */ - gen_helper_vfp_negs(tmp, tmp); - } - gen_helper_vfp_muladds(tmp, tmp, tmp2, tmp3, fpstatus); - tcg_temp_free_i32(tmp3); - tcg_temp_free_ptr(fpstatus); - break; - } - default: - abort(); - } - tcg_temp_free_i32(tmp2); - - neon_store_reg(rd, pass, tmp); - - } /* for pass */ - /* End of 3 register same size operations. */ + /* Three register same length: handled by decodetree */ + return 1; } else if (insn & (1 << 4)) { if ((insn & 0x00380080) !=3D 0) { /* Two registers and shift. */ diff --git a/target/arm/neon-dp.decode b/target/arm/neon-dp.decode index c4a90e70753..3c5a9f0d0e0 100644 --- a/target/arm/neon-dp.decode +++ b/target/arm/neon-dp.decode @@ -159,6 +159,9 @@ SHA256H2_3s 1111 001 1 0 . 01 .... .... 1100 . 1 .= 0 .... \ SHA256SU1_3s 1111 001 1 0 . 10 .... .... 1100 . 1 . 0 .... \ vm=3D%vm_dp vn=3D%vn_dp vd=3D%vd_dp =20 +VFMA_fp_3s 1111 001 0 0 . 0 . .... .... 1100 ... 1 .... @3same_fp +VFMS_fp_3s 1111 001 0 0 . 1 . .... .... 1100 ... 1 .... @3same_fp + VQRDMLSH_3s 1111 001 1 0 . .. .... .... 1100 ... 1 .... @3same =20 VADD_fp_3s 1111 001 0 0 . 0 . .... .... 1101 ... 0 .... @3same_fp --=20 2.20.1