From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558207035; cv=none; d=zoho.com; s=zohoarc; b=SgsPLr3EffUQQVLZu+xPx6gKUbzsYf713L5KliVChAf3cLalhoX9+3JIrYKP2hdz1MAUZF1YjoV9bxndx5G/ntd95shRsd4S6/WbfGe5FHTGxds1Uyg9o0FvEoZg2shxS0LRbTeDtiwvN6/w+eGZFdnv8t8L3+QAkHVzjG9Bwcs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558207035; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=CNtLSsppNDq+qCEdta/UyzFB0xSoIc+vMFY+eO0LpIo=; b=j6NfOCbkixmkCBkSdrOMCI1UX60+AC6b/3irilqfHFI6zkIPGkSUVHmz++ObkSp8cdyBUuGHXbE35AEuL/BxCpHkUejXKgB47C/8QuinB6SKMh5bZEWoW0qgoQ4LKgC5RkmTjXiQvaSUomZ8kyIrvdwV3BYDw927V6i6QZrsroM= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail 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 1558207035464110.35320858660475; Sat, 18 May 2019 12:17:15 -0700 (PDT) Received: from localhost ([127.0.0.1]:37767 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4pW-0005Cs-8c for importer@patchew.org; Sat, 18 May 2019 15:17:14 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59166) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dV-0002lS-G7 for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4ap-0002Vt-U3 for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:04 -0400 Received: from mail-pg1-x544.google.com ([2607:f8b0:4864:20::544]:42739) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4ap-0002Uu-NA for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:03 -0400 Received: by mail-pg1-x544.google.com with SMTP id 145so4821612pgg.9 for ; Sat, 18 May 2019 12:02:03 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.01 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=CNtLSsppNDq+qCEdta/UyzFB0xSoIc+vMFY+eO0LpIo=; b=hLGl9GIvAqE3EuUUjA3yuves4T/8nvL2eDXBxfXOg/++HaH9XUvebkvmjQGSkWwDlH yw3jrtdHKTUR9IgLVANIk5HlVSYdQf2+jOiD+CnKufPnfBX7WfUDBmaVdvcod1vVteZA gc7n3naHXT01k1Eg8nkS8Y84H+dOXdlCcI8akFasbl18AiIDt0HjsQXNudZ4+NMqnBk/ ezde8d7tPL+n0nGn2X2ljhanjAr/IUZxvf1fHnyvR41hJOUfCuZp77GvIlp6zsRwz7EH nhk8yHjIB8Q1pFv0cxR3KFsIPqsvnGiMDAsuOXTM0lK9l0ok0aZtkib8e48fIF9O8yB4 6AHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=CNtLSsppNDq+qCEdta/UyzFB0xSoIc+vMFY+eO0LpIo=; b=lr8J0JlhagD8uPH498Nrp2/ZINjqZ9JTdQRFiu5DtwHuAIfDRyXN+y1WEiIGs5OPCk iw6tEoM8gdHQo0ZF01FvKH2wGTBb5gZI0ft2dj1PAeMqUL47ttTiDl/uIfwB6XUXNA2B ZJ9HcNqzlk3qSP165gBJblaKqcdOORyZU5bpbr+ssnj06/G/TIK66Bb0n3GmPbbWiJ8M y0ewBBY01K09bVXrDTkUYnb7WAwnYkT2Qe1XbhfqB2BZAs4p9NQykU4hXptQrbY93A+7 UDtrkCD2qSbTKPlb6MwctKRdD+gSbnDPFmd0sgT60MixOBCu944kQ1QwgwgkqtZd54Hk bJfw== X-Gm-Message-State: APjAAAXG/JJzn38khpHcKe08OmKProX1eYuoIdsCziVMjcTQGpkJ+UcM UCg+dbwLTIIt6cUYQ0tudOpnuXOaK4A= X-Google-Smtp-Source: APXvYqyuCZXAf/BlKdq2ke7e/fI/IhaQdPTTfHcyW5ewlD9KRua8EoBX6AAK3IzbOtMG0jpuwLJpGA== X-Received: by 2002:a63:e52:: with SMTP id 18mr65624292pgo.3.1558206122332; Sat, 18 May 2019 12:02:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:42 -0700 Message-Id: <20190518190157.21255-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::544 Subject: [Qemu-devel] [PATCH 01/16] tcg/i386: Fix dupi/dupm for avx1 and 32-bit hosts X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The VBROADCASTSD instruction only allows %ymm registers as destination. Rather than forcing VEX.L and writing to the entire 256-bit register, revert to using MOVDDUP with an %xmm register. This is sufficient for an avx1 host since we do not support TCG_TYPE_V256 for that case. Also fix the 32-bit avx2, which should have used VPBROADCASTW. Fixes: 1e262b49b533 Tested-by: Mark Cave-Ayland Reported-by: Mark Cave-Ayland Signed-off-by: Richard Henderson --- tcg/i386/tcg-target.inc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c index aafd01cb49..b3601446cd 100644 --- a/tcg/i386/tcg-target.inc.c +++ b/tcg/i386/tcg-target.inc.c @@ -358,6 +358,7 @@ static inline int tcg_target_const_match(tcg_target_lon= g val, TCGType type, #define OPC_MOVBE_MyGy (0xf1 | P_EXT38) #define OPC_MOVD_VyEy (0x6e | P_EXT | P_DATA16) #define OPC_MOVD_EyVy (0x7e | P_EXT | P_DATA16) +#define OPC_MOVDDUP (0x12 | P_EXT | P_SIMDF2) #define OPC_MOVDQA_VxWx (0x6f | P_EXT | P_DATA16) #define OPC_MOVDQA_WxVx (0x7f | P_EXT | P_DATA16) #define OPC_MOVDQU_VxWx (0x6f | P_EXT | P_SIMDF3) @@ -921,7 +922,7 @@ static bool tcg_out_dupm_vec(TCGContext *s, TCGType typ= e, unsigned vece, } else { switch (vece) { case MO_64: - tcg_out_vex_modrm_offset(s, OPC_VBROADCASTSD, r, 0, base, offs= et); + tcg_out_vex_modrm_offset(s, OPC_MOVDDUP, r, 0, base, offset); break; case MO_32: tcg_out_vex_modrm_offset(s, OPC_VBROADCASTSS, r, 0, base, offs= et); @@ -963,12 +964,12 @@ static void tcg_out_dupi_vec(TCGContext *s, TCGType t= ype, } else if (have_avx2) { tcg_out_vex_modrm_pool(s, OPC_VPBROADCASTQ + vex_l, ret); } else { - tcg_out_vex_modrm_pool(s, OPC_VBROADCASTSD, ret); + tcg_out_vex_modrm_pool(s, OPC_MOVDDUP, ret); } new_pool_label(s, arg, R_386_PC32, s->code_ptr - 4, -4); } else { if (have_avx2) { - tcg_out_vex_modrm_pool(s, OPC_VBROADCASTSD + vex_l, ret); + tcg_out_vex_modrm_pool(s, OPC_VPBROADCASTW + vex_l, ret); } else { tcg_out_vex_modrm_pool(s, OPC_VBROADCASTSS, ret); } --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558207194; cv=none; d=zoho.com; s=zohoarc; b=Dv9S7RAor+lSbn19FnOtvarJLv2qCDWNPzMJDDZBOrPeBppfu4zRV9w6mUuDIZ0Gmo8aS8JMnOc+SX58ELmpNHWKL0h1quZ98VgaRdcZGEnrW6Rhkvi28X+FmY8V/caYxMMMlSnnFSRQS7vmS9GaZS546sNlzFXMTiMAVIGsTCI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558207194; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=oqAGJXCcrmzUdmSG3sZCijkOSbKbEdDFHwT2UnQhICM=; b=aMPnvrhR1JsefJv1q9MtXmBCxXJBsuPHQREeul7v12jJkB/7t1nOvLSK05GP0HAMFqhA4pR7riFNfKT0HQR32mz5NBN9v4L5SgwPlmLGTNRWCSqGPxfNk6Rmkd+nxqocNrsWop4mS6UKISGhxherEM3htQQgiSxuogkpe32g1N8= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558207194497890.6047135743911; Sat, 18 May 2019 12:19:54 -0700 (PDT) Received: from localhost ([127.0.0.1]:37789 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4rx-0006vJ-8x for importer@patchew.org; Sat, 18 May 2019 15:19:45 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59195) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dV-0002qF-Fk for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4ar-0002Xs-7x for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:06 -0400 Received: from mail-pg1-x542.google.com ([2607:f8b0:4864:20::542]:44102) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4ar-0002Wb-1N for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:05 -0400 Received: by mail-pg1-x542.google.com with SMTP id z16so4815668pgv.11 for ; Sat, 18 May 2019 12:02:04 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.02 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=oqAGJXCcrmzUdmSG3sZCijkOSbKbEdDFHwT2UnQhICM=; b=UhEPtYKeH5fq9a+ZB+yE+cTcz+u6NMq4KOnYjrgfpRBs1lPp9X5WnCKtdbQvcXPken T6EIPSM2XXet021UOC942f2EpbBTc7GweprHrSMdHOgKcdjwYWF1T3oq1Af9ALtDPig+ TT7w/wN89/lr7L1f92FBgvBZ0t2DQVPE4MEtpuI/oAienRz72K9dzd0bl0jysx/YB0QR o4cWuIgsxrDPtqu5u9xIGiXQiyrx9zFkMxeyWGnxv2Byb6QBgZW8J5oaylZcuCb7Xi1G C036Y7vldaem901bNhIetsvzXYdnogqA5PaMHt1hqusg7kKZ7ZFucL/UrwxGS5KQ4SSx BIHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=oqAGJXCcrmzUdmSG3sZCijkOSbKbEdDFHwT2UnQhICM=; b=m8BJQdh/UijBeYgkI7UZQew5VuEK+RXFoxZWZQ7K79lfuFMRN3NZ7Ho/4cOiEqW7oD 4ic5tuBj5hK7MgfxEaT+V07lWQcuV+FGNjOclGmSNSIzyaxCBp7jBcKjOlBwBL56bFjj UJYpfdHE+j3Yborta4K1rRTuZ55t6gb31nnj8BFNbRE0uaM3x6nVApAe0KjvF/vPGQze lMkzwnHPQBUZtkqLamYSsmucoySitUzXXFOOPpp1pv9302RjbNMCOFJVfCHsg6uS5vzr Wi2/xOoa1waSxt+Xs0uvIabB+L5wKjJYmb61gHPG4ypJIA53B53AyGVDhyhheWj46ikL +ynw== X-Gm-Message-State: APjAAAXH6PFcX9SX/KuVvgyrs4uFGhakU0OSlxFJiW//d7NI0pWNdZwj UJYbiY0EqRTOTyy+UHQzZU+ZkqdO31g= X-Google-Smtp-Source: APXvYqw1PlscMq7R+CTkBnCU+haUGclqqikLOmMumTHGPmqFh2lWw5nPloGMG6RAXE3FBEU8nGNb4g== X-Received: by 2002:aa7:8c12:: with SMTP id c18mr71305950pfd.194.1558206123711; Sat, 18 May 2019 12:02:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:43 -0700 Message-Id: <20190518190157.21255-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::542 Subject: [Qemu-devel] [PATCH 02/16] tcg: Fix missing checks and clears in tcg_gen_gvec_dup_mem X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The paths through tcg_gen_dup_mem_vec and through MO_128 were missing the check_size_align. The path through MO_128 was also missing the expand_clr. This last was not visible because the only user is ARM SVE, which would set oprsz =3D=3D maxsz, and not require the clear. Fix by adding the check_size_align and using do_dup directly instead of duplicating the check in tcg_gen_gvec_dup_{i32,i64}. Signed-off-by: Richard Henderson --- tcg/tcg-op-gvec.c | 48 ++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/tcg/tcg-op-gvec.c b/tcg/tcg-op-gvec.c index 338ddd9d9e..bbf70e3cd9 100644 --- a/tcg/tcg-op-gvec.c +++ b/tcg/tcg-op-gvec.c @@ -1446,36 +1446,35 @@ void tcg_gen_gvec_dup_i64(unsigned vece, uint32_t d= ofs, uint32_t oprsz, void tcg_gen_gvec_dup_mem(unsigned vece, uint32_t dofs, uint32_t aofs, uint32_t oprsz, uint32_t maxsz) { + check_size_align(oprsz, maxsz, dofs); if (vece <=3D MO_64) { - TCGType type =3D choose_vector_type(0, vece, oprsz, 0); + TCGType type =3D choose_vector_type(NULL, vece, oprsz, 0); if (type !=3D 0) { TCGv_vec t_vec =3D tcg_temp_new_vec(type); tcg_gen_dup_mem_vec(vece, t_vec, cpu_env, aofs); do_dup_store(type, dofs, oprsz, maxsz, t_vec); tcg_temp_free_vec(t_vec); - return; + } else if (vece <=3D MO_32) { + TCGv_i32 in =3D tcg_temp_new_i32(); + switch (vece) { + case MO_8: + tcg_gen_ld8u_i32(in, cpu_env, aofs); + break; + case MO_16: + tcg_gen_ld16u_i32(in, cpu_env, aofs); + break; + default: + tcg_gen_ld_i32(in, cpu_env, aofs); + break; + } + do_dup(vece, dofs, oprsz, maxsz, in, NULL, 0); + tcg_temp_free_i32(in); + } else { + TCGv_i64 in =3D tcg_temp_new_i64(); + tcg_gen_ld_i64(in, cpu_env, aofs); + do_dup(vece, dofs, oprsz, maxsz, NULL, in, 0); + tcg_temp_free_i64(in); } - } - if (vece <=3D MO_32) { - TCGv_i32 in =3D tcg_temp_new_i32(); - switch (vece) { - case MO_8: - tcg_gen_ld8u_i32(in, cpu_env, aofs); - break; - case MO_16: - tcg_gen_ld16u_i32(in, cpu_env, aofs); - break; - case MO_32: - tcg_gen_ld_i32(in, cpu_env, aofs); - break; - } - tcg_gen_gvec_dup_i32(vece, dofs, oprsz, maxsz, in); - tcg_temp_free_i32(in); - } else if (vece =3D=3D MO_64) { - TCGv_i64 in =3D tcg_temp_new_i64(); - tcg_gen_ld_i64(in, cpu_env, aofs); - tcg_gen_gvec_dup_i64(MO_64, dofs, oprsz, maxsz, in); - tcg_temp_free_i64(in); } else { /* 128-bit duplicate. */ /* ??? Dup to 256-bit vector. */ @@ -1504,6 +1503,9 @@ void tcg_gen_gvec_dup_mem(unsigned vece, uint32_t dof= s, uint32_t aofs, tcg_temp_free_i64(in0); tcg_temp_free_i64(in1); } + if (oprsz < maxsz) { + expand_clr(dofs + oprsz, maxsz - oprsz); + } } } =20 --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558207016; cv=none; d=zoho.com; s=zohoarc; b=KHYZRf0NuUBLXtzcp276SpTciTNtlT2cAbQ9dq6oEbaLXQOP5slL8X84mb84qPClR9/W1wbwiOjt6kHIWipCj0rtQvIiWWOefrRdyDl6EWijG7z2KDUrdqspXz4DqespVjATYSrCIGeBDN+r2tJ0RXReviQ3Y5VnGVdz1kVK158= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558207016; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=LKqluvSgNgObFg/5PCh55olLBZ6qvjIouGnoyC1zOlQ=; b=M6S4bu/GHc8QxTOWo80zydLkUmnwioAybpLGpQyTwhB4x9cbTWHQw0EhF+vGqLRhq7C+gqutPnDNVKKRE7caYGulAbUsGQEXmyqIdO+7PWIKlxOCz0jECEJazi5BH5CE8VszBfbDRXDDnOjueiST7a7dUtUYHskcVdXEGPMYbE8= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail 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 1558207016308399.4182379312915; Sat, 18 May 2019 12:16:56 -0700 (PDT) Received: from localhost ([127.0.0.1]:37763 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4p7-00050s-63 for importer@patchew.org; Sat, 18 May 2019 15:16:49 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59166) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dT-0002lS-7y for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4as-0002Zf-Jy for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:08 -0400 Received: from mail-pl1-x642.google.com ([2607:f8b0:4864:20::642]:37148) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4as-0002YZ-BC for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:06 -0400 Received: by mail-pl1-x642.google.com with SMTP id p15so4845994pll.4 for ; Sat, 18 May 2019 12:02:06 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.03 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=LKqluvSgNgObFg/5PCh55olLBZ6qvjIouGnoyC1zOlQ=; b=oBF1X1H3+Yeeahd7kGvKew158GbgP814Q68p5HvFAZj/X/fUWdBwc8fylGMJ4G7jF8 A9ZxXwzurQZSf3D7/8fVB/69pR1DXsF0Z+pg4VWE7k55L0xOdDcPgOdTE89irlJC2KPg BuVMj8JY7xQ0aEsM+I7DU6WbZlNRJyoC8l6viy6HpCPoAuD/n/NQFQhCJNeC5pwV0FTt vNpqoT4Y+ML4ew5gqIVCG5rY6UtomxSjjrRD4JiudNR7dA49UP+OfqbjE6J/n2A0HHjF UpZEcdOmufqc+RN8Hkb0WIzH0c6+GJ/79lGaxlRU/OUhzzEu25nY6g2+N2upbWoXdf14 TsxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=LKqluvSgNgObFg/5PCh55olLBZ6qvjIouGnoyC1zOlQ=; b=sMR2O/y5wjWGbblzBRNZEGr7ATyVla45M/4wNeUGkl6DGN+4ozrk+iioqQPstM57Ux n3u5a2Et1huT0VMmsyYSFYMdrYKaHZvOJjuE5KjL4zNFSdAMt2VB78DvMZfk90W9QQxf OjoCnpezO94gYvRE0PV6YNcdwJC9g5h7NeJzPBG8svmfk6B7p8qn7Mm+7TfYu4YbYjTs R44syFZK68ZYFn3gFPDUGg82gwgZLCfKexEplgXaXvKnYl+TVhZY7fhtB9HthvdipJaK OiKAHlBEvDMABhncr/QHLWcPm+9P0izgOpxxXfQfcSSLtd3LzyHupMDh06rqAEXWnI9E jgxQ== X-Gm-Message-State: APjAAAW3DX38sTm/8rbV2ZxTmU+1LdpEGJmLfQdQqAUVM9o1JJP2S1O3 Mdt1BgkFgLBVPoWec1QEGO0voAf+cXU= X-Google-Smtp-Source: APXvYqyE5ZEBav1bLQLjTa0Ul7bMXTWDp9kUp7uY5Z5KftxiG0bPZNjq/opm6OMzYIalMkJcx1m0Qw== X-Received: by 2002:a17:902:2a2b:: with SMTP id i40mr65357460plb.170.1558206124814; Sat, 18 May 2019 12:02:04 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:44 -0700 Message-Id: <20190518190157.21255-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::642 Subject: [Qemu-devel] [PATCH 03/16] tcg: Add support for vector bitwise select X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This operation performs d =3D (b & a) | (c & ~a), and is present on a majority of host vector units. Include gvec expanders. Signed-off-by: Richard Henderson --- accel/tcg/tcg-runtime.h | 2 ++ tcg/aarch64/tcg-target.h | 1 + tcg/i386/tcg-target.h | 1 + tcg/tcg-op-gvec.h | 7 +++++++ tcg/tcg-op.h | 3 +++ tcg/tcg-opc.h | 2 ++ tcg/tcg.h | 1 + accel/tcg/tcg-runtime-gvec.c | 14 ++++++++++++++ tcg/tcg-op-gvec.c | 23 +++++++++++++++++++++++ tcg/tcg-op-vec.c | 26 ++++++++++++++++++++++++++ tcg/tcg.c | 2 ++ tcg/README | 4 ++++ 12 files changed, 86 insertions(+) diff --git a/accel/tcg/tcg-runtime.h b/accel/tcg/tcg-runtime.h index 6d73dc2d65..4fa61b49b4 100644 --- a/accel/tcg/tcg-runtime.h +++ b/accel/tcg/tcg-runtime.h @@ -303,3 +303,5 @@ DEF_HELPER_FLAGS_4(gvec_leu8, TCG_CALL_NO_RWG, void, pt= r, ptr, ptr, i32) DEF_HELPER_FLAGS_4(gvec_leu16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(gvec_leu32, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(gvec_leu64, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) + +DEF_HELPER_FLAGS_5(gvec_bitsel, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) diff --git a/tcg/aarch64/tcg-target.h b/tcg/aarch64/tcg-target.h index e43554c3c7..52ee66424f 100644 --- a/tcg/aarch64/tcg-target.h +++ b/tcg/aarch64/tcg-target.h @@ -140,6 +140,7 @@ typedef enum { #define TCG_TARGET_HAS_mul_vec 1 #define TCG_TARGET_HAS_sat_vec 1 #define TCG_TARGET_HAS_minmax_vec 1 +#define TCG_TARGET_HAS_bitsel_vec 0 =20 #define TCG_TARGET_DEFAULT_MO (0) #define TCG_TARGET_HAS_MEMORY_BSWAP 1 diff --git a/tcg/i386/tcg-target.h b/tcg/i386/tcg-target.h index 66f16fbe3c..08a0386433 100644 --- a/tcg/i386/tcg-target.h +++ b/tcg/i386/tcg-target.h @@ -190,6 +190,7 @@ extern bool have_avx2; #define TCG_TARGET_HAS_mul_vec 1 #define TCG_TARGET_HAS_sat_vec 1 #define TCG_TARGET_HAS_minmax_vec 1 +#define TCG_TARGET_HAS_bitsel_vec 0 =20 #define TCG_TARGET_deposit_i32_valid(ofs, len) \ (((ofs) =3D=3D 0 && (len) =3D=3D 8) || ((ofs) =3D=3D 8 && (len) =3D=3D= 8) || \ diff --git a/tcg/tcg-op-gvec.h b/tcg/tcg-op-gvec.h index 52a398c190..2a9e0c7c0a 100644 --- a/tcg/tcg-op-gvec.h +++ b/tcg/tcg-op-gvec.h @@ -342,6 +342,13 @@ void tcg_gen_gvec_cmp(TCGCond cond, unsigned vece, uin= t32_t dofs, uint32_t aofs, uint32_t bofs, uint32_t oprsz, uint32_t maxsz); =20 +/* + * Perform vector bit select: d =3D (b & a) | (c & ~a). + */ +void tcg_gen_gvec_bitsel(unsigned vece, uint32_t dofs, uint32_t aofs, + uint32_t bofs, uint32_t cofs, + uint32_t oprsz, uint32_t maxsz); + /* * 64-bit vector operations. Use these when the register has been allocat= ed * with tcg_global_mem_new_i64, and so we cannot also address it via point= er. diff --git a/tcg/tcg-op.h b/tcg/tcg-op.h index 660fe205d0..268860ed2f 100644 --- a/tcg/tcg-op.h +++ b/tcg/tcg-op.h @@ -1000,6 +1000,9 @@ void tcg_gen_sarv_vec(unsigned vece, TCGv_vec r, TCGv= _vec a, TCGv_vec s); void tcg_gen_cmp_vec(TCGCond cond, unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b); =20 +void tcg_gen_bitsel_vec(unsigned vece, TCGv_vec r, TCGv_vec a, + TCGv_vec b, TCGv_vec c); + void tcg_gen_ld_vec(TCGv_vec r, TCGv_ptr base, TCGArg offset); void tcg_gen_st_vec(TCGv_vec r, TCGv_ptr base, TCGArg offset); void tcg_gen_stl_vec(TCGv_vec r, TCGv_ptr base, TCGArg offset, TCGType t); diff --git a/tcg/tcg-opc.h b/tcg/tcg-opc.h index 4a2dd116eb..c05b71427c 100644 --- a/tcg/tcg-opc.h +++ b/tcg/tcg-opc.h @@ -256,6 +256,8 @@ DEF(sarv_vec, 1, 2, 0, IMPLVEC | IMPL(TCG_TARGET_HAS_sh= v_vec)) =20 DEF(cmp_vec, 1, 2, 1, IMPLVEC) =20 +DEF(bitsel_vec, 1, 3, 0, IMPLVEC | IMPL(TCG_TARGET_HAS_bitsel_vec)) + DEF(last_generic, 0, 0, 0, TCG_OPF_NOT_PRESENT) =20 #if TCG_TARGET_MAYBE_vec diff --git a/tcg/tcg.h b/tcg/tcg.h index 0e01a70d66..72f9f6c70b 100644 --- a/tcg/tcg.h +++ b/tcg/tcg.h @@ -187,6 +187,7 @@ typedef uint64_t TCGRegSet; #define TCG_TARGET_HAS_mul_vec 0 #define TCG_TARGET_HAS_sat_vec 0 #define TCG_TARGET_HAS_minmax_vec 0 +#define TCG_TARGET_HAS_bitsel_vec 0 #else #define TCG_TARGET_MAYBE_vec 1 #endif diff --git a/accel/tcg/tcg-runtime-gvec.c b/accel/tcg/tcg-runtime-gvec.c index 0f09e0ef38..3b6052fe97 100644 --- a/accel/tcg/tcg-runtime-gvec.c +++ b/accel/tcg/tcg-runtime-gvec.c @@ -1444,3 +1444,17 @@ void HELPER(gvec_umax64)(void *d, void *a, void *b, = uint32_t desc) } clear_high(d, oprsz, desc); } + +void HELPER(gvec_bitsel)(void *d, void *a, void *b, void *c, uint32_t desc) +{ + intptr_t oprsz =3D simd_oprsz(desc); + intptr_t i; + + for (i =3D 0; i < oprsz; i +=3D sizeof(vec64)) { + vec64 aa =3D *(vec64 *)(a + i); + vec64 bb =3D *(vec64 *)(b + i); + vec64 cc =3D *(vec64 *)(c + i); + *(vec64 *)(d + i) =3D (bb & aa) | (cc & ~aa); + } + clear_high(d, oprsz, desc); +} diff --git a/tcg/tcg-op-gvec.c b/tcg/tcg-op-gvec.c index bbf70e3cd9..f18464cf07 100644 --- a/tcg/tcg-op-gvec.c +++ b/tcg/tcg-op-gvec.c @@ -3195,3 +3195,26 @@ void tcg_gen_gvec_cmp(TCGCond cond, unsigned vece, u= int32_t dofs, expand_clr(dofs + oprsz, maxsz - oprsz); } } + +static void tcg_gen_bitsel_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b, TCGv_i6= 4 c) +{ + TCGv_i64 t =3D tcg_temp_new_i64(); + + tcg_gen_and_i64(t, b, a); + tcg_gen_andc_i64(d, c, a); + tcg_gen_or_i64(d, d, t); + tcg_temp_free_i64(t); +} + +void tcg_gen_gvec_bitsel(unsigned vece, uint32_t dofs, uint32_t aofs, + uint32_t bofs, uint32_t cofs, + uint32_t oprsz, uint32_t maxsz) +{ + static const GVecGen4 g =3D { + .fni8 =3D tcg_gen_bitsel_i64, + .fniv =3D tcg_gen_bitsel_vec, + .fno =3D gen_helper_gvec_bitsel, + }; + + tcg_gen_gvec_4(dofs, aofs, bofs, cofs, oprsz, maxsz, &g); +} diff --git a/tcg/tcg-op-vec.c b/tcg/tcg-op-vec.c index 543508d545..99cbf29e0b 100644 --- a/tcg/tcg-op-vec.c +++ b/tcg/tcg-op-vec.c @@ -88,6 +88,7 @@ bool tcg_can_emit_vecop_list(const TCGOpcode *list, case INDEX_op_dup2_vec: case INDEX_op_ld_vec: case INDEX_op_st_vec: + case INDEX_op_bitsel_vec: /* These opcodes are mandatory and should not be listed. */ g_assert_not_reached(); default: @@ -691,3 +692,28 @@ void tcg_gen_sars_vec(unsigned vece, TCGv_vec r, TCGv_= vec a, TCGv_i32 b) { do_shifts(vece, r, a, b, INDEX_op_sars_vec, INDEX_op_sarv_vec); } + +void tcg_gen_bitsel_vec(unsigned vece, TCGv_vec r, TCGv_vec a, + TCGv_vec b, TCGv_vec c) +{ + TCGTemp *rt =3D tcgv_vec_temp(r); + TCGTemp *at =3D tcgv_vec_temp(a); + TCGTemp *bt =3D tcgv_vec_temp(b); + TCGTemp *ct =3D tcgv_vec_temp(c); + TCGType type =3D rt->base_type; + + tcg_debug_assert(at->base_type >=3D type); + tcg_debug_assert(bt->base_type >=3D type); + tcg_debug_assert(ct->base_type >=3D type); + + if (TCG_TARGET_HAS_bitsel_vec) { + vec_gen_4(INDEX_op_bitsel_vec, type, MO_8, + temp_arg(rt), temp_arg(at), temp_arg(bt), temp_arg(ct)); + } else { + TCGv_vec t =3D tcg_temp_new_vec(type); + tcg_gen_and_vec(MO_8, t, a, b); + tcg_gen_andc_vec(MO_8, r, c, a); + tcg_gen_or_vec(MO_8, r, r, t); + tcg_temp_free_vec(t); + } +} diff --git a/tcg/tcg.c b/tcg/tcg.c index 24083b8c00..5d947dbcb0 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -1646,6 +1646,8 @@ bool tcg_op_supported(TCGOpcode op) case INDEX_op_smax_vec: case INDEX_op_umax_vec: return have_vec && TCG_TARGET_HAS_minmax_vec; + case INDEX_op_bitsel_vec: + return have_vec && TCG_TARGET_HAS_bitsel_vec; =20 default: tcg_debug_assert(op > INDEX_op_last_generic && op < NB_OPS); diff --git a/tcg/README b/tcg/README index cbdfd3b6bc..76057ab59f 100644 --- a/tcg/README +++ b/tcg/README @@ -627,6 +627,10 @@ E.g. VECL=3D1 -> 64 << 1 -> v128, and VECE=3D2 -> 1 <<= 2 -> i32. =20 Compare vectors by element, storing -1 for true and 0 for false. =20 +* bitsel_vec v0, v1, v2, v3 + + Bitwise select, v0 =3D (v2 & v1) | (v3 & ~v1), across the entire vector. + ********* =20 Note 1: Some shortcuts are defined when the last operand is known to be --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558206872; cv=none; d=zoho.com; s=zohoarc; b=kNZQopqSspB1N18JPYdjZpjIDC7aKQkEnZns9nKQVIEOccJebTr8gZrMlXDPpT9xKx9GFHhBnUFm23W1Sb8n2ZbwJnIS/Enn5BeIrmcByzK/tIFAlm0/ym2woN99CPcAvbcxwNpHkgBSlSqgJ1c+UoYFlDwx3LGsUVdpzZGOVhg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558206872; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=dIrUBx1AozwSRTf1CstcHoUDbRuw3JV0rC9AxpXdw/A=; b=AFOM651vALGLTZo0jfxHkgYESR8by4rC1K32BJXBFE6zXjcKiq+ip0HJDQ6aR00ZDAW5i45NYG0WUgS/j3+OAJ7lGqNenDfhB25GJOthg5LWHEt7sv8RRs4HH96FN2T1EUC+ZgzpGyJR6EYprWlgkDcvsrJvpTnKzSdFcqLcu+8= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail 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 1558206872429900.5753913136446; Sat, 18 May 2019 12:14:32 -0700 (PDT) Received: from localhost ([127.0.0.1]:37697 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4mn-0002fu-4d for importer@patchew.org; Sat, 18 May 2019 15:14:25 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59178) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dT-0002nw-5n for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4at-0002bD-GY for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:08 -0400 Received: from mail-pg1-x542.google.com ([2607:f8b0:4864:20::542]:35635) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4at-0002aC-A7 for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:07 -0400 Received: by mail-pg1-x542.google.com with SMTP id t1so3413061pgc.2 for ; Sat, 18 May 2019 12:02:07 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.04 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=dIrUBx1AozwSRTf1CstcHoUDbRuw3JV0rC9AxpXdw/A=; b=HbYzrvJFD7lLFYnQLN96DI7UB7yOIJaiDHgcX0tXIY4SOLJwxQ6Ruj/NfpH00cMb6r ki6wG24bI+sFlr+yOaVkR77BrlYD/wjEfpqr4soAhUtxZuql1HqRAv2tn5gYreXEV8HA Z93pDLzqn9vo4gAXqH4606m3oOJAbpLxoRs3RrB+/hN+vWoBMDvFuHZeshQawRXAQ7ii j0Jazb/Ghi+5EYVbCY0x6Va9Pv5Acn9LdvkhTOZJgySOlPjjUdbUQwSzfTWK8rzB/5dl mIKFirzuYmB7YqbDOZs61672zvlPFNWReW6+huJYYft+CUE+x/y8UJUPN2vVPDvk61oN E3xQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=dIrUBx1AozwSRTf1CstcHoUDbRuw3JV0rC9AxpXdw/A=; b=l0dUH68CrcVZyG15Tyom9K6qTQ/w7kFT/nQ1JWrTqUWASJG+zBkFixKG34/3F1FGAd y4XBWAgtsJhu0EXAFuzqQM7BzRlNxXpq+hOc+5DtQADjfD3Y9Y7/MsHsZEUj8Mk4bkl6 jrwEgN0O8the8+ZziAwfUFQWre65OAouaszvEhwBzb4KEg06SqZ9ZdLC3t9eY1I0VHep pR4NZvI/lbwfdlKffaoHDiI+RP7uB8p1IPnAlssCU3WB57Y64wQEPlc/FCLFtdePKZ8W uiGWo75dKRSva/MUtyHZiGMwPEmXShNvl0CLEZtOsWhfrvRWYHyaxeWKn7JUa2M5oDrQ TGzQ== X-Gm-Message-State: APjAAAWZt68T5fYCZLdxFP/PzEL9GtfT0RyWePVfjWNaQetsG1Jf26+h dF2RvGf5FAW+2C8z8+mf5/0BUh73khw= X-Google-Smtp-Source: APXvYqzgUaZA6apoHI0bqw1cqGN/FRASpYzdhiMTTLNkq8qoIUwPr7Pqvh9wJSTx0X37VOD1taVvXw== X-Received: by 2002:a62:116:: with SMTP id 22mr30861702pfb.119.1558206126050; Sat, 18 May 2019 12:02:06 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:45 -0700 Message-Id: <20190518190157.21255-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::542 Subject: [Qemu-devel] [PATCH 04/16] tcg: Add support for vector compare select X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Perform a per-element conditional move. This combination operation is easier to implement on some host vector units than plain cmp+bitsel. Omit the usual gvec interface, as this is intended to be used by target-specific gvec expansion call-backs. Signed-off-by: Richard Henderson --- tcg/aarch64/tcg-target.h | 1 + tcg/i386/tcg-target.h | 1 + tcg/tcg-op.h | 2 ++ tcg/tcg-opc.h | 1 + tcg/tcg.h | 1 + tcg/tcg-op-vec.c | 59 ++++++++++++++++++++++++++++++++++++++++ tcg/tcg.c | 3 ++ tcg/README | 7 +++++ 8 files changed, 75 insertions(+) diff --git a/tcg/aarch64/tcg-target.h b/tcg/aarch64/tcg-target.h index 52ee66424f..b4a9d36bbc 100644 --- a/tcg/aarch64/tcg-target.h +++ b/tcg/aarch64/tcg-target.h @@ -141,6 +141,7 @@ typedef enum { #define TCG_TARGET_HAS_sat_vec 1 #define TCG_TARGET_HAS_minmax_vec 1 #define TCG_TARGET_HAS_bitsel_vec 0 +#define TCG_TARGET_HAS_cmpsel_vec 0 =20 #define TCG_TARGET_DEFAULT_MO (0) #define TCG_TARGET_HAS_MEMORY_BSWAP 1 diff --git a/tcg/i386/tcg-target.h b/tcg/i386/tcg-target.h index 08a0386433..16a83a7f7b 100644 --- a/tcg/i386/tcg-target.h +++ b/tcg/i386/tcg-target.h @@ -191,6 +191,7 @@ extern bool have_avx2; #define TCG_TARGET_HAS_sat_vec 1 #define TCG_TARGET_HAS_minmax_vec 1 #define TCG_TARGET_HAS_bitsel_vec 0 +#define TCG_TARGET_HAS_cmpsel_vec 0 =20 #define TCG_TARGET_deposit_i32_valid(ofs, len) \ (((ofs) =3D=3D 0 && (len) =3D=3D 8) || ((ofs) =3D=3D 8 && (len) =3D=3D= 8) || \ diff --git a/tcg/tcg-op.h b/tcg/tcg-op.h index 268860ed2f..2d4dd5cd7d 100644 --- a/tcg/tcg-op.h +++ b/tcg/tcg-op.h @@ -1002,6 +1002,8 @@ void tcg_gen_cmp_vec(TCGCond cond, unsigned vece, TCG= v_vec r, =20 void tcg_gen_bitsel_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b, TCGv_vec c); +void tcg_gen_cmpsel_vec(TCGCond cond, unsigned vece, TCGv_vec r, + TCGv_vec a, TCGv_vec b, TCGv_vec c, TCGv_vec d); =20 void tcg_gen_ld_vec(TCGv_vec r, TCGv_ptr base, TCGArg offset); void tcg_gen_st_vec(TCGv_vec r, TCGv_ptr base, TCGArg offset); diff --git a/tcg/tcg-opc.h b/tcg/tcg-opc.h index c05b71427c..c7d971fa3d 100644 --- a/tcg/tcg-opc.h +++ b/tcg/tcg-opc.h @@ -257,6 +257,7 @@ DEF(sarv_vec, 1, 2, 0, IMPLVEC | IMPL(TCG_TARGET_HAS_sh= v_vec)) DEF(cmp_vec, 1, 2, 1, IMPLVEC) =20 DEF(bitsel_vec, 1, 3, 0, IMPLVEC | IMPL(TCG_TARGET_HAS_bitsel_vec)) +DEF(cmpsel_vec, 1, 4, 1, IMPLVEC | IMPL(TCG_TARGET_HAS_cmpsel_vec)) =20 DEF(last_generic, 0, 0, 0, TCG_OPF_NOT_PRESENT) =20 diff --git a/tcg/tcg.h b/tcg/tcg.h index 72f9f6c70b..21cd6f1249 100644 --- a/tcg/tcg.h +++ b/tcg/tcg.h @@ -188,6 +188,7 @@ typedef uint64_t TCGRegSet; #define TCG_TARGET_HAS_sat_vec 0 #define TCG_TARGET_HAS_minmax_vec 0 #define TCG_TARGET_HAS_bitsel_vec 0 +#define TCG_TARGET_HAS_cmpsel_vec 0 #else #define TCG_TARGET_MAYBE_vec 1 #endif diff --git a/tcg/tcg-op-vec.c b/tcg/tcg-op-vec.c index 99cbf29e0b..a888c02df8 100644 --- a/tcg/tcg-op-vec.c +++ b/tcg/tcg-op-vec.c @@ -119,6 +119,11 @@ bool tcg_can_emit_vecop_list(const TCGOpcode *list, continue; } break; + case INDEX_op_cmpsel_vec: + if (tcg_can_emit_vec_op(INDEX_op_cmp_vec, type, vece)) { + continue; + } + break; default: break; } @@ -159,6 +164,20 @@ void vec_gen_4(TCGOpcode opc, TCGType type, unsigned v= ece, op->args[3] =3D c; } =20 +static void vec_gen_6(TCGOpcode opc, TCGType type, unsigned vece, TCGArg r, + TCGArg a, TCGArg b, TCGArg c, TCGArg d, TCGArg e) +{ + TCGOp *op =3D tcg_emit_op(opc); + TCGOP_VECL(op) =3D type - TCG_TYPE_V64; + TCGOP_VECE(op) =3D vece; + op->args[0] =3D r; + op->args[1] =3D a; + op->args[2] =3D b; + op->args[3] =3D c; + op->args[4] =3D d; + op->args[5] =3D e; +} + static void vec_gen_op2(TCGOpcode opc, unsigned vece, TCGv_vec r, TCGv_vec= a) { TCGTemp *rt =3D tcgv_vec_temp(r); @@ -717,3 +736,43 @@ void tcg_gen_bitsel_vec(unsigned vece, TCGv_vec r, TCG= v_vec a, tcg_temp_free_vec(t); } } + +void tcg_gen_cmpsel_vec(TCGCond cond, unsigned vece, TCGv_vec r, + TCGv_vec a, TCGv_vec b, TCGv_vec c, TCGv_vec d) +{ + TCGTemp *rt =3D tcgv_vec_temp(r); + TCGTemp *at =3D tcgv_vec_temp(a); + TCGTemp *bt =3D tcgv_vec_temp(b); + TCGTemp *ct =3D tcgv_vec_temp(c); + TCGTemp *dt =3D tcgv_vec_temp(d); + TCGArg ri =3D temp_arg(rt); + TCGArg ai =3D temp_arg(at); + TCGArg bi =3D temp_arg(bt); + TCGArg ci =3D temp_arg(ct); + TCGArg di =3D temp_arg(dt); + TCGType type =3D rt->base_type; + const TCGOpcode *hold_list; + int can; + + tcg_debug_assert(at->base_type >=3D type); + tcg_debug_assert(bt->base_type >=3D type); + tcg_debug_assert(ct->base_type >=3D type); + tcg_debug_assert(dt->base_type >=3D type); + + tcg_assert_listed_vecop(INDEX_op_cmpsel_vec); + hold_list =3D tcg_swap_vecop_list(NULL); + can =3D tcg_can_emit_vec_op(INDEX_op_cmpsel_vec, type, vece); + + if (can > 0) { + vec_gen_6(INDEX_op_cmpsel_vec, type, vece, ri, ai, bi, ci, di, con= d); + } else if (can < 0) { + tcg_expand_vec_op(INDEX_op_cmpsel_vec, type, vece, + ri, ai, bi, ci, di, cond); + } else { + TCGv_vec t =3D tcg_temp_new_vec(type); + tcg_gen_cmp_vec(cond, vece, t, a, b); + tcg_gen_bitsel_vec(vece, r, t, c, d); + tcg_temp_free_vec(t); + } + tcg_swap_vecop_list(hold_list); +} diff --git a/tcg/tcg.c b/tcg/tcg.c index 5d947dbcb0..02a2680169 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -1648,6 +1648,8 @@ bool tcg_op_supported(TCGOpcode op) return have_vec && TCG_TARGET_HAS_minmax_vec; case INDEX_op_bitsel_vec: return have_vec && TCG_TARGET_HAS_bitsel_vec; + case INDEX_op_cmpsel_vec: + return have_vec && TCG_TARGET_HAS_cmpsel_vec; =20 default: tcg_debug_assert(op > INDEX_op_last_generic && op < NB_OPS); @@ -2028,6 +2030,7 @@ static void tcg_dump_ops(TCGContext *s, bool have_pre= fs) case INDEX_op_setcond_i64: case INDEX_op_movcond_i64: case INDEX_op_cmp_vec: + case INDEX_op_cmpsel_vec: if (op->args[k] < ARRAY_SIZE(cond_name) && cond_name[op->args[k]]) { col +=3D qemu_log(",%s", cond_name[op->args[k++]]); diff --git a/tcg/README b/tcg/README index 76057ab59f..21fcdf737f 100644 --- a/tcg/README +++ b/tcg/README @@ -631,6 +631,13 @@ E.g. VECL=3D1 -> 64 << 1 -> v128, and VECE=3D2 -> 1 <<= 2 -> i32. =20 Bitwise select, v0 =3D (v2 & v1) | (v3 & ~v1), across the entire vector. =20 +* cmpsel_vec v0, c1, c2, v3, v4, cond + + Select elements based on comparison results: + for (i =3D 0; i < n; ++i) { + v0[i] =3D (c1[i] cond c2[i]) ? v3[i] : v4[i]. + } + ********* =20 Note 1: Some shortcuts are defined when the last operand is known to be --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558206759; cv=none; d=zoho.com; s=zohoarc; b=eYGzt5NISaKYkUFXrrxKGdZY4+2hj+sMLlfHHzrVTc4Du9cDE4+ZohfPdT+EwzX5OB2hlp8avXGZz3XD1SgZvBkuhZaax/H2kmpbUf+1wt4KoS9rqHCTEfPGiv31ksDVbE+7bdA3Ai8IL/+2iJpoSzqnulpq2EFnBOUdG4NWGAA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558206759; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=IHzD/cFhgds3vlWGOoqI0eCnewZUJpWI1Gh0PD14SRs=; b=V5ppUGOd01lyy00NImISrnTsMF8i2OUxKFL1LKZ3VioXGCyyZulYUx0wN1j7I0UYcCwTb9FkIV7g1FcRhQJLtnRvBqXenGL2vgpOiYyWtP6aD7r5OLFMlsWDFxo9BG0+ijqo+w3n0ZDfKNeMDaU4BWdKJwxpMoUQqSd52PgYF9k= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558206759626641.1744370480335; Sat, 18 May 2019 12:12:39 -0700 (PDT) Received: from localhost ([127.0.0.1]:37683 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4kx-00017y-8L for importer@patchew.org; Sat, 18 May 2019 15:12:31 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59195) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dT-0002qF-3f for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4au-0002cY-ON for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:09 -0400 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]:36039) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4au-0002c3-Ic for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:08 -0400 Received: by mail-pl1-x641.google.com with SMTP id d21so4845499plr.3 for ; Sat, 18 May 2019 12:02:08 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.06 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=IHzD/cFhgds3vlWGOoqI0eCnewZUJpWI1Gh0PD14SRs=; b=HVuQsC8XioIdkqzl++KY5DDIhwSzp0gt2VFiod5/uuzQwlO/KSs8XXQMt5KQ8/LLQG e+29egElL+VfsYpq/jFghEae7CcYDtHHsBt+f2/JvfmJjWtKn+s4Pomxt3YqIxptnQ+N nEBAU9kdlni+5SDdbfD2u6AOOoSH63HivAKleDvSW+JmQqQfUd0jEDY5G/rl+PBKdstw maKzy2rsarxG6RTY1U2eMl7yMzJoJos/waik5OLOszwl9pwOfCGAUaaIJol0qn5kGte2 QOJx8qzuwzj231McQB0VvaKDbb1HfPz9Vpu7/ALTNxsz5K1bbutpTPjU1VSpwoihNa2B FoZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=IHzD/cFhgds3vlWGOoqI0eCnewZUJpWI1Gh0PD14SRs=; b=gJF+qwr5Z/kmhhyx9vFOLy7Kj5nefykdoE5aVp3EsrXmX7x/L11cidJe1LJHXfiVvO /gD3o1UrCygCJIeYMfzs/ZjbjeqVpWoSiGIXwm9cQvZCxNzQaGh9Gd21KfsmQooWeVC9 hCC2tz6Ci7xNUMaDalFOBnmpHw5GSW1kjkP80P4USPzUQqyKstuS1WeBcXitV11+srCe C6z83yDunDWdfEqM1S2U3tGGK3ORki+dFFLgt8rzBY8UXD49VlIXRww5341IK+bpCofF K4NZkYfD2EMus275P9YaOGWP6QAnW+DR13XcMMKetRFRilBSxjoiW5/LkK/P0sQXTDRE jYPQ== X-Gm-Message-State: APjAAAWFTDManvDSkl/aLkqEkG7HjSgaMvvohUNvhVJy/4vH9vjdQ1CR 3DKLctGkY5zqO1kPLccykTYChxEKkUg= X-Google-Smtp-Source: APXvYqy8XIHDrNflYwZwJ0yQBtb1boyGHMd5/1K4V5qvcvhXKRLP+lsi8tpYKRmpA/TzkuhQqRF8yQ== X-Received: by 2002:a17:902:d917:: with SMTP id c23mr63258017plz.14.1558206127251; Sat, 18 May 2019 12:02:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:46 -0700 Message-Id: <20190518190157.21255-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::641 Subject: [Qemu-devel] [PATCH 05/16] tcg: Introduce do_op3_nofail for vector expansion X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This makes do_op3 match do_op2 in allowing for failure, and thus fall back expansions. Signed-off-by: Richard Henderson --- tcg/tcg-op-vec.c | 45 +++++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/tcg/tcg-op-vec.c b/tcg/tcg-op-vec.c index a888c02df8..004a34935b 100644 --- a/tcg/tcg-op-vec.c +++ b/tcg/tcg-op-vec.c @@ -562,7 +562,7 @@ void tcg_gen_cmp_vec(TCGCond cond, unsigned vece, } } =20 -static void do_op3(unsigned vece, TCGv_vec r, TCGv_vec a, +static bool do_op3(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b, TCGOpcode opc) { TCGTemp *rt =3D tcgv_vec_temp(r); @@ -580,82 +580,91 @@ static void do_op3(unsigned vece, TCGv_vec r, TCGv_ve= c a, can =3D tcg_can_emit_vec_op(opc, type, vece); if (can > 0) { vec_gen_3(opc, type, vece, ri, ai, bi); - } else { + } else if (can < 0) { const TCGOpcode *hold_list =3D tcg_swap_vecop_list(NULL); - tcg_debug_assert(can < 0); tcg_expand_vec_op(opc, type, vece, ri, ai, bi); tcg_swap_vecop_list(hold_list); + } else { + return false; } + return true; +} + +static void do_op3_nofail(unsigned vece, TCGv_vec r, TCGv_vec a, + TCGv_vec b, TCGOpcode opc) +{ + bool ok =3D do_op3(vece, r, a, b, opc); + tcg_debug_assert(ok); } =20 void tcg_gen_add_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_add_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_add_vec); } =20 void tcg_gen_sub_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_sub_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_sub_vec); } =20 void tcg_gen_mul_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_mul_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_mul_vec); } =20 void tcg_gen_ssadd_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_ssadd_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_ssadd_vec); } =20 void tcg_gen_usadd_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_usadd_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_usadd_vec); } =20 void tcg_gen_sssub_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_sssub_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_sssub_vec); } =20 void tcg_gen_ussub_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_ussub_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_ussub_vec); } =20 void tcg_gen_smin_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_smin_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_smin_vec); } =20 void tcg_gen_umin_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_umin_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_umin_vec); } =20 void tcg_gen_smax_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_smax_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_smax_vec); } =20 void tcg_gen_umax_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_umax_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_umax_vec); } =20 void tcg_gen_shlv_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_shlv_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_shlv_vec); } =20 void tcg_gen_shrv_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_shrv_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_shrv_vec); } =20 void tcg_gen_sarv_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3(vece, r, a, b, INDEX_op_sarv_vec); + do_op3_nofail(vece, r, a, b, INDEX_op_sarv_vec); } =20 static void do_shifts(unsigned vece, TCGv_vec r, TCGv_vec a, @@ -691,7 +700,7 @@ static void do_shifts(unsigned vece, TCGv_vec r, TCGv_v= ec a, } else { tcg_gen_dup_i32_vec(vece, vec_s, s); } - do_op3(vece, r, a, vec_s, opc_v); + do_op3_nofail(vece, r, a, vec_s, opc_v); tcg_temp_free_vec(vec_s); } tcg_swap_vecop_list(hold_list); --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558206592; cv=none; d=zoho.com; s=zohoarc; b=Yrm8KR8dzYLMGF84Dz5ZRvnwkheHIIaKYq7bSllkrL6eZkZDoFULgYoKHUwSKm6DMPPEU1Lr2IYNo2nlKuAkaIRiixxNBAQViVbg89NpgFiclqHDF537vZH4xVJkm02u50+3Goo2VFNsLVRjP5k4Kuo6z71E9iMAp9CjUnebDqs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558206592; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=Dp2wE06ppFvr7SDc7+wjEouETDXh/6Jd86FUlkd8ziE=; b=fX5uA/8pocNyUXJjg87GPWMxRNdFnNIAFOyjiApNh9BNXX10CYRwMBn+ecLKM+oZkdqNkSFg2UnE9ROsdr0ffbNsrZaj1akmYjVxKGONx+rEu9XTzKroy635hSmxNsk4bXPi/25FlIzQhMd/F/0lSef/fzS1vNQ8uklfrYOLGcQ= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail 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 1558206592857301.05697094119967; Sat, 18 May 2019 12:09:52 -0700 (PDT) Received: from localhost ([127.0.0.1]:37619 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4iI-0006tU-JO for importer@patchew.org; Sat, 18 May 2019 15:09:46 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59166) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dQ-0002lS-Ja for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4aw-0002dW-2E for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:11 -0400 Received: from mail-pf1-x444.google.com ([2607:f8b0:4864:20::444]:39129) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4av-0002d6-PR for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:10 -0400 Received: by mail-pf1-x444.google.com with SMTP id z26so5254362pfg.6 for ; Sat, 18 May 2019 12:02:09 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.07 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=Dp2wE06ppFvr7SDc7+wjEouETDXh/6Jd86FUlkd8ziE=; b=Nv8tgCKEQwfqnpVeDr/mOFgdZIrwTTm0x6+1Xh722DfqBMm8Ret9tLRopYz0AtyqCm OXrhAXUremVVi2bTpXmmlI1ZtFN/ZIWu+IDF5OFe+kZs3MyCQAIJT7W4Fh/DF2pAwyjH 0IxEy1bGn+li9hUklTdvXoTheFgugsYC/1P40zsHIFvwmYN4HxzdospZeidVANAJ6eEO GFkPEOQBp/RliGa1amqjp48qR4ParxP2JGdm6IPSa7nH72gSpfvNiW0ZWCnNpXFJWqAZ K66L9iqbF26IvlsA7Av3w1GIXYJ8QCLLlrr6G6tw9jKcRqyVcsR/e5OnPiDrrBErqyyb YoCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=Dp2wE06ppFvr7SDc7+wjEouETDXh/6Jd86FUlkd8ziE=; b=QgjIrAGQYb262g16/sZZC4wUMmUKC7HnqSYLzrGGlYDzN1XmCTBEilXKneH6N6VBAk cX3FrOg6PMQ7WaLOQl1UfrytQ1DmbHvvYZzXLeaz7EYKExuDJmYhCaIzdW3Bp4LRqliU vpKTq5utAV7Al2jIXC5mJEOVFekpKelUFw1u3+ejhmO9pUKzBTxbRkwjHY5OpYaJg4cP hJr8NLd/LXAllt3IR6rkW/L0a9EQ0zeWXFfew4OtM4oNr9vNWoq0M9sXzephx73jRQbi 07bL2T9QqResKoqTZngUlWvG91HIM3XC6/2whyPUMt6EGbgolp46ahODwCXuDE+lQe/h +8rw== X-Gm-Message-State: APjAAAUnqFMvnqEaK8KNLkyGe6iww6VnmCmgHvEFhjMQVYc62tVW0u6w YL09IO9Uss+YKI88GiuNzuvzQUdA+T8= X-Google-Smtp-Source: APXvYqzr5OCTom3DTNmQpBGsKVoDLRYser03zrPph7KMiOuborGbVHdNtqaU5BA4AZLApkYlaQsfPg== X-Received: by 2002:aa7:8008:: with SMTP id j8mr69359424pfi.120.1558206128483; Sat, 18 May 2019 12:02:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:47 -0700 Message-Id: <20190518190157.21255-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::444 Subject: [Qemu-devel] [PATCH 06/16] tcg: Expand vector minmax using cmp+cmpsel X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Provide a generic fallback for the min/max operations. Signed-off-by: Richard Henderson --- tcg/tcg-op-vec.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/tcg/tcg-op-vec.c b/tcg/tcg-op-vec.c index 004a34935b..501d9630a2 100644 --- a/tcg/tcg-op-vec.c +++ b/tcg/tcg-op-vec.c @@ -120,6 +120,10 @@ bool tcg_can_emit_vecop_list(const TCGOpcode *list, } break; case INDEX_op_cmpsel_vec: + case INDEX_op_smin_vec: + case INDEX_op_smax_vec: + case INDEX_op_umin_vec: + case INDEX_op_umax_vec: if (tcg_can_emit_vec_op(INDEX_op_cmp_vec, type, vece)) { continue; } @@ -632,24 +636,32 @@ void tcg_gen_ussub_vec(unsigned vece, TCGv_vec r, TCG= v_vec a, TCGv_vec b) do_op3_nofail(vece, r, a, b, INDEX_op_ussub_vec); } =20 +static void do_minmax(unsigned vece, TCGv_vec r, TCGv_vec a, + TCGv_vec b, TCGOpcode opc, TCGCond cond) +{ + if (!do_op3(vece, r, a, b, opc)) { + tcg_gen_cmpsel_vec(cond, vece, r, a, b, a, b); + } +} + void tcg_gen_smin_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3_nofail(vece, r, a, b, INDEX_op_smin_vec); + do_minmax(vece, r, a, b, INDEX_op_smin_vec, TCG_COND_LT); } =20 void tcg_gen_umin_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3_nofail(vece, r, a, b, INDEX_op_umin_vec); + do_minmax(vece, r, a, b, INDEX_op_umin_vec, TCG_COND_LTU); } =20 void tcg_gen_smax_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3_nofail(vece, r, a, b, INDEX_op_smax_vec); + do_minmax(vece, r, a, b, INDEX_op_smax_vec, TCG_COND_GT); } =20 void tcg_gen_umax_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3_nofail(vece, r, a, b, INDEX_op_umax_vec); + do_minmax(vece, r, a, b, INDEX_op_umax_vec, TCG_COND_GTU); } =20 void tcg_gen_shlv_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558206414; cv=none; d=zoho.com; s=zohoarc; b=hF6cuCjMWZEg7u0OMdxwxwUYbAte59T5v4Cj/CBphh4tQ7C7o1VMHZrBPxc2vsyynwiBVYLwWDnD/TD3oboMX4JUjNq7pzM7qV98bQ1C9agdsD+E3OmGGzIDZwMpt34l/OuOyaOtScS+szBd5H3CRCwv9POeJdo/Gd1OLcvrTWc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558206414; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=h2THfX9yFXUdDN24lXnYzdU4v3sPNpuvs1LZ+ysU720=; b=oW9eBbY9wWgp7Rp5mS1n/q0SJlExAduahy8QOFBwNgnNocy0tOjBGeM+4czagkypz6EcfgMuKRZa/ddVFR2QFoy5eDukVBi8Z2W1sbDjV0Z2TwA309knIPYaJAYhj7trsEl/jZwLchjs7OwM9AK8Hf/21AXfrEXxRdAlNGCQmdY= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail 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 1558206414625405.4763876541657; Sat, 18 May 2019 12:06:54 -0700 (PDT) Received: from localhost ([127.0.0.1]:37593 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4fO-0004SF-Kh for importer@patchew.org; Sat, 18 May 2019 15:06:46 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59178) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dJ-0002nw-7b for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4ax-0002eT-7f for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:12 -0400 Received: from mail-pf1-x443.google.com ([2607:f8b0:4864:20::443]:36729) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4ax-0002dm-22 for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:11 -0400 Received: by mail-pf1-x443.google.com with SMTP id v80so5259821pfa.3 for ; Sat, 18 May 2019 12:02:10 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.08 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=h2THfX9yFXUdDN24lXnYzdU4v3sPNpuvs1LZ+ysU720=; b=T2fohxur4IW6l9ZWBNTX2HfN2q2lDq6NzTStZEBEfzfNbyatAVicax5GJJXsY3xKjL pVrMgNYV3YpkmgoGtxPt6CdDMfJmngTNRhiMZBlJVsRPQ13RL4HIsvNxvQ/QFOnavGRR SNYEeGEgRrMd37b304TOf0dZcebF4tuqY+BpL3CvMfKC/3ZsONdt95AKxpL4LEffZJ0Q 6yhPD9hjQ+rWVA5rCvR2VJsoOoEIVIsFJY8BdwIqZ+OWnMX9px+GRSsDKOzPqfgW7Wuw BPA/FJeAqz4hCTD2AOq3+h3VNFGI0ZFpEJUwuOLsJ4t6H5dUYTCpFDi+gKvz4vWaYp1Q Ponw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=h2THfX9yFXUdDN24lXnYzdU4v3sPNpuvs1LZ+ysU720=; b=ReG1ItfpLk4tPmGErsYfNNCgQEQauyzs+4KQwvYFLDYjbquIaqPuCw/Cv3PCiLSguR bJE9o/C2pV1DsImjGl/1YzZRMmC9oSYsCs3AjawFDzKUBBe2YwUkauk737dSfc8NLoMv 4tJ2pKt8vBgChe031GbPVefGJLKhhN5DqfmRvsBWdlfzI2A1jGsHwPJwasS+6Lwrg2Q0 SKDd5S0dUbU8UhP6VmoYWSxzUeOxad3q6SZIREakVHftsar9cQZ7nfOLKLyM8hICLR1s zmvsghzQ2SoTXw/c9Vs8ucyEPXMRNJfwR9xtlU4OOcQ226LsZK0jkE6MlWtGx2z8NbEP PfYw== X-Gm-Message-State: APjAAAVry/4bosLMwiARxSonj3SgAKvYQifjLiD5elohkZZnyQiFzWBR zEpDNwGDDzar1wsgkmcxoWBWjWSCcNw= X-Google-Smtp-Source: APXvYqyG/JDs/U7gJ3GJ4fwqcrfeImsn+Zie7ehQOfwmTamn6aYkMQtCKlmnGmYDvaaqw5D9u4nIfg== X-Received: by 2002:a62:e201:: with SMTP id a1mr69446977pfi.67.1558206129695; Sat, 18 May 2019 12:02:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:48 -0700 Message-Id: <20190518190157.21255-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::443 Subject: [Qemu-devel] [PATCH 07/16] tcg: Add TCG_OPF_NOT_PRESENT if TCG_TARGET_HAS_foo is negative X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" If INDEX_op_foo is always expanded by tcg_expand_vec_op, then there may be no reasonable set of constraints to return from tcg_target_op_def for that opcode. Let TCG_TARGET_HAS_foo be specified as -1 in that case. Thus a boolean test for TCG_TARGET_HAS_foo is true, but we will not assert within process_op_defs when no constraints are specified. Compare this with tcg_can_emit_vec_op, which already uses this tri-state indication. Signed-off-by: Richard Henderson --- tcg/tcg-opc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tcg/tcg-opc.h b/tcg/tcg-opc.h index c7d971fa3d..242d608e6d 100644 --- a/tcg/tcg-opc.h +++ b/tcg/tcg-opc.h @@ -35,7 +35,7 @@ DEF(call, 0, 0, 3, TCG_OPF_CALL_CLOBBER | TCG_OPF_NOT_PRE= SENT) =20 DEF(br, 0, 0, 1, TCG_OPF_BB_END) =20 -#define IMPL(X) (__builtin_constant_p(X) && !(X) ? TCG_OPF_NOT_PRESENT : 0) +#define IMPL(X) (__builtin_constant_p(X) && (X) <=3D 0 ? TCG_OPF_NOT_PRESE= NT : 0) #if TCG_TARGET_REG_BITS =3D=3D 32 # define IMPL64 TCG_OPF_64BIT | TCG_OPF_NOT_PRESENT #else --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558206881; cv=none; d=zoho.com; s=zohoarc; b=O5wdqYbe2Zs3hikoGSzY6MurjIIvvFOZZBGw/Z5V1T6+oBEOlVSRbiYedUP731a73Z2A0DifL1k+3saRcCuF6ngL41pcBQ9n4jS8LdVskYNO5HwuHiGrr8hDAfNtbtJIxlimPyzFIoqtWgRtOuam7qQdcUZhWOh+b3IU3IcB6oA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558206881; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=oLTml3dhbqYDrgc3cYARBzaQje8i0Sq1y8nx8+B4Ie0=; b=MrycJuQFiyJIFevnFLlvtGPxJhvCkqahbFu3vusFWSqKJCWKdvpAHv/WOAtOYs6fo0KZkgaKWYnjcVNnQ76POwMov7PnVXDbr8waXtUCWrOF+s/VAIHOLGQk5Iabc+8VqEvylVrx2bRb5vbRslZtpH35P2aZLl6ZDhdQL7lTDD4= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail 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 1558206881819569.6877597695957; Sat, 18 May 2019 12:14:41 -0700 (PDT) Received: from localhost ([127.0.0.1]:37699 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4mz-0002rb-GJ for importer@patchew.org; Sat, 18 May 2019 15:14:37 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59178) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dQ-0002nw-9C for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4ay-0002f7-5U for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:13 -0400 Received: from mail-pg1-x544.google.com ([2607:f8b0:4864:20::544]:44104) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4ax-0002eY-VV for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:12 -0400 Received: by mail-pg1-x544.google.com with SMTP id z16so4815766pgv.11 for ; Sat, 18 May 2019 12:02:11 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.09 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=oLTml3dhbqYDrgc3cYARBzaQje8i0Sq1y8nx8+B4Ie0=; b=QUb+JdKu7HycWq6KHVSmcsoDLZAe0PKy9uka/+4fuiVEGnZ1gwdncxTek2/SJeOIp3 S9LoBlyeOv03b3g/kfwPeIH4m2CblmSImdsXxML7iqBht/lIywQW7PywXOaYEKnOQSv6 n5oxxv2PAcJhGmG2Bl0YuYRKlQMTVYDKK2UXlVKBa1XdkTRX4fcY2hXcGyHTb0sQfKMH ZnueaCi5HytAtTwLJtui8UULppJas8sOrOzVSeSAoGfDL1D8GCDE9mjqdyt5gqnnUgz6 rAOlPxQ3CM2/1AnVWPUGu+c095CCZUHC7hBd7IF3gSxNqEYOZ63s+5N8plq4BGVAnEBz kXsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=oLTml3dhbqYDrgc3cYARBzaQje8i0Sq1y8nx8+B4Ie0=; b=s9WCZyFGiqgB/rSHwJPAydbQytMmJBJxVRJNMIz6fVXiFV6L03qFxAud0xjqrXvvpV +zvsv6XwUlceE8/mAnu5JRwtRMvFvrgloYs+9bP6xYLjtY+BDKAPOrKRgo35QIrkBSce i4lcu94r97mslXg1UKvbtrBOTi0v1ecmjGXPEpHxkvV2OpQ3qAK1PXPjaUjiWcscnTW/ 31vyME+oSrR5ApiEcId7XILowWOlqENTvv5pzdajNCb3WQt5tRINs5dS9m5ZwiAzdtmt RLe7QsK3V1V5gFubhxBUn/Q0UUFPUZeLohpmoqbnHhiDrSS1yhSZHoDOtOZIb5quXIOM +BPA== X-Gm-Message-State: APjAAAXrzrChkxTmEH0llztaXG6pL6d001uVSggadkPsscQwE4C13UJU /CvN+16NAXnhp1xWw9o4bWTVM+b27c4= X-Google-Smtp-Source: APXvYqytMY3WREBZsvIqM1b6GOl40B91MH/iA0JIHGna84ZBipoZHeCQP3FUUI/9uNa+DBad4dpQFg== X-Received: by 2002:a63:6f0b:: with SMTP id k11mr64449614pgc.342.1558206130808; Sat, 18 May 2019 12:02:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:49 -0700 Message-Id: <20190518190157.21255-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::544 Subject: [Qemu-devel] [PATCH 08/16] tcg/i386: Support vector comparison select value X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We already had backend support for this feature. Expand the new cmpsel opcode using vpblendb. The combination allows us to avoid an extra NOT for some comparison codes. Signed-off-by: Richard Henderson --- tcg/i386/tcg-target.h | 2 +- tcg/i386/tcg-target.inc.c | 39 +++++++++++++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/tcg/i386/tcg-target.h b/tcg/i386/tcg-target.h index 16a83a7f7b..928e8b87bb 100644 --- a/tcg/i386/tcg-target.h +++ b/tcg/i386/tcg-target.h @@ -191,7 +191,7 @@ extern bool have_avx2; #define TCG_TARGET_HAS_sat_vec 1 #define TCG_TARGET_HAS_minmax_vec 1 #define TCG_TARGET_HAS_bitsel_vec 0 -#define TCG_TARGET_HAS_cmpsel_vec 0 +#define TCG_TARGET_HAS_cmpsel_vec -1 =20 #define TCG_TARGET_deposit_i32_valid(ofs, len) \ (((ofs) =3D=3D 0 && (len) =3D=3D 8) || ((ofs) =3D=3D 8 && (len) =3D=3D= 8) || \ diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c index b3601446cd..ffcafb1e14 100644 --- a/tcg/i386/tcg-target.inc.c +++ b/tcg/i386/tcg-target.inc.c @@ -3246,6 +3246,7 @@ int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type, = unsigned vece) case INDEX_op_andc_vec: return 1; case INDEX_op_cmp_vec: + case INDEX_op_cmpsel_vec: return -1; =20 case INDEX_op_shli_vec: @@ -3464,8 +3465,8 @@ static void expand_vec_mul(TCGType type, unsigned vec= e, } } =20 -static void expand_vec_cmp(TCGType type, unsigned vece, TCGv_vec v0, - TCGv_vec v1, TCGv_vec v2, TCGCond cond) +static bool expand_vec_cmp_noinv(TCGType type, unsigned vece, TCGv_vec v0, + TCGv_vec v1, TCGv_vec v2, TCGCond cond) { enum { NEED_SWAP =3D 1, @@ -3522,11 +3523,34 @@ static void expand_vec_cmp(TCGType type, unsigned v= ece, TCGv_vec v0, tcg_temp_free_vec(t2); } } - if (fixup & NEED_INV) { + return fixup & NEED_INV; +} + +static void expand_vec_cmp(TCGType type, unsigned vece, TCGv_vec v0, + TCGv_vec v1, TCGv_vec v2, TCGCond cond) +{ + if (expand_vec_cmp_noinv(type, vece, v0, v1, v2, cond)) { tcg_gen_not_vec(vece, v0, v0); } } =20 +static void expand_vec_cmpsel(TCGType type, unsigned vece, TCGv_vec v0, + TCGv_vec c1, TCGv_vec c2, + TCGv_vec v3, TCGv_vec v4, TCGCond cond) +{ + TCGv_vec t =3D tcg_temp_new_vec(type); + + if (expand_vec_cmp_noinv(type, vece, t, c1, c2, cond)) { + /* Invert the sense of the compare by swapping arguments. */ + TCGv_vec x; + x =3D v3, v3 =3D v4, v4 =3D x; + } + vec_gen_4(INDEX_op_x86_vpblendvb_vec, type, vece, + tcgv_vec_arg(v0), tcgv_vec_arg(v4), + tcgv_vec_arg(v3), tcgv_vec_arg(t)); + tcg_temp_free_vec(t); +} + static void expand_vec_minmax(TCGType type, unsigned vece, TCGCond cond, bool min, TCGv_vec v0, TCGv_vec v1, TCGv_vec v2) @@ -3551,7 +3575,7 @@ void tcg_expand_vec_op(TCGOpcode opc, TCGType type, u= nsigned vece, { va_list va; TCGArg a2; - TCGv_vec v0, v1, v2; + TCGv_vec v0, v1, v2, v3, v4; =20 va_start(va, a0); v0 =3D temp_tcgv_vec(arg_temp(a0)); @@ -3578,6 +3602,13 @@ void tcg_expand_vec_op(TCGOpcode opc, TCGType type, = unsigned vece, expand_vec_cmp(type, vece, v0, v1, v2, va_arg(va, TCGArg)); break; =20 + case INDEX_op_cmpsel_vec: + v2 =3D temp_tcgv_vec(arg_temp(a2)); + v3 =3D temp_tcgv_vec(arg_temp(va_arg(va, TCGArg))); + v4 =3D temp_tcgv_vec(arg_temp(va_arg(va, TCGArg))); + expand_vec_cmpsel(type, vece, v0, v1, v2, v3, v4, va_arg(va, TCGAr= g)); + break; + case INDEX_op_smin_vec: v2 =3D temp_tcgv_vec(arg_temp(a2)); expand_vec_minmax(type, vece, TCG_COND_GT, true, v0, v1, v2); --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558206752; cv=none; d=zoho.com; s=zohoarc; b=Axi1MChSUtJ+dtO9dV/d6p2cFHqIB7iNMoDMOublrespVexFYoWue7EcjoBCw/wKKRwUTTIrJPQ6uOgFgndK0G6X+8rnakIs5HPFlMvx8axmqHAnBerzXH53IhQkQg8TOZUgPragGnpfEY07lRYw7DUMFcXSQQfP2M/9KcAJUGg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558206752; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=cyPCzZg9DUKeW2pqf+eu++K5/1I4IivLKFA9dQuPgvg=; b=edp6t7TTOKdo2Ul/6P9a+Sr8eUeyGkYj91Pf49P+s2hbXY6O7QTTGxKfwwaBtXslCSjrxwu+y7L2tshKqmWoDHUQkudoE42fcP2auRoU8v/f8cCKnxBZGVfGcdsdU/Pn7tA9jL5lSAth0ZpmMXQGYNcfp8hiM+UtWuwUPEN5m/8= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail 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 1558206752159407.274387001508; Sat, 18 May 2019 12:12:32 -0700 (PDT) Received: from localhost ([127.0.0.1]:37681 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4kq-00011U-Vh for importer@patchew.org; Sat, 18 May 2019 15:12:25 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59195) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dP-0002qF-Kt for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4az-0002h8-3W for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:14 -0400 Received: from mail-pg1-x542.google.com ([2607:f8b0:4864:20::542]:40197) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4ay-0002gB-UF for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:13 -0400 Received: by mail-pg1-x542.google.com with SMTP id d30so4826165pgm.7 for ; Sat, 18 May 2019 12:02:12 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.10 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=cyPCzZg9DUKeW2pqf+eu++K5/1I4IivLKFA9dQuPgvg=; b=tbQFSHmv+dDsabC/U32Pcoi0BFI9mPCug1jfNkNmSBElKKsAGb7e+447Idhz2zljiv EvxsGRRqscjDRKmwPGa7LgLIl3pJLbsVVRqxEYSLyISJMmnuiDnXdDXk6sniXz4Xezcg sXaf8dWQXfN8oncx0MqCvtR4Xb/BhzCHr673aFGaqGWCYoAIeJNtOdlOv+XOFkkOMmvR PyOmAJ8OPzw2eo6AtcL7fZggS/7qemeDrFRu0FqZ98ehzMHdhFEphY8loBtcmrg+Zi8x YajK9+GBw2mlkHvMlBnqOQJrZEFJN3AZCcBei/Rcs6EEp/b7Z09OdYOSRRp4hFMKCXzh jUug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=cyPCzZg9DUKeW2pqf+eu++K5/1I4IivLKFA9dQuPgvg=; b=Ste4+FlI4P0/L/9vhdiADB2CnRM4skyGMfRpJI0B31FFdVP91Ej0hGbEVpgL3i3H53 AtfjpMtR9yuLj0biMor3gzHyY3Lqdyvm3zt9zczq0iD7hkjBT6V1p6AauRa8HzABCqEB I+9BsuNSv/SNY3tTdKSBing3K0bGIpFGuMj1SzoVeiGRg8Y2rVNb397pUxY17Kh6xDWk VuWFllfGtNEhvEnt1GGDUdpM0sit4yH1puYNKSMU5wZvsfSFeraqNolx/Pna/O1rufY+ Q4LlpjMDK7BQwGiVtSrJvMpPEVkTCsy8NvvXpnYp68AViEiipFll5p+OFc+f8Fdek/ho CdyA== X-Gm-Message-State: APjAAAWhYXtdPqo+hpCFZttb4JKiV5n6rkBethiyRnJO/Y5Ysj+lYeiP hjBvgSdiLPw+Sr1GFgllFP0FAMvTI4o= X-Google-Smtp-Source: APXvYqwtsb98oQBhy1fmkyb8Z8QIWVYUYf5UfMgHrmzMgTRg9ykcPZDJMa0k3XABR552U4UAgBWnSg== X-Received: by 2002:a63:6907:: with SMTP id e7mr22562145pgc.209.1558206131801; Sat, 18 May 2019 12:02:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:50 -0700 Message-Id: <20190518190157.21255-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::542 Subject: [Qemu-devel] [PATCH 09/16] tcg/i386: Remove expansion for missing minmax X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This is now handled by code within tcg-op-vec.c. Signed-off-by: Richard Henderson --- tcg/i386/tcg-target.inc.c | 37 ------------------------------------- 1 file changed, 37 deletions(-) diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c index ffcafb1e14..569a2c2120 100644 --- a/tcg/i386/tcg-target.inc.c +++ b/tcg/i386/tcg-target.inc.c @@ -3297,7 +3297,6 @@ int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type, = unsigned vece) case INDEX_op_smax_vec: case INDEX_op_umin_vec: case INDEX_op_umax_vec: - return vece <=3D MO_32 ? 1 : -1; case INDEX_op_abs_vec: return vece <=3D MO_32; =20 @@ -3551,25 +3550,6 @@ static void expand_vec_cmpsel(TCGType type, unsigned= vece, TCGv_vec v0, tcg_temp_free_vec(t); } =20 -static void expand_vec_minmax(TCGType type, unsigned vece, - TCGCond cond, bool min, - TCGv_vec v0, TCGv_vec v1, TCGv_vec v2) -{ - TCGv_vec t1 =3D tcg_temp_new_vec(type); - - tcg_debug_assert(vece =3D=3D MO_64); - - tcg_gen_cmp_vec(cond, vece, t1, v1, v2); - if (min) { - TCGv_vec t2; - t2 =3D v1, v1 =3D v2, v2 =3D t2; - } - vec_gen_4(INDEX_op_x86_vpblendvb_vec, type, vece, - tcgv_vec_arg(v0), tcgv_vec_arg(v1), - tcgv_vec_arg(v2), tcgv_vec_arg(t1)); - tcg_temp_free_vec(t1); -} - void tcg_expand_vec_op(TCGOpcode opc, TCGType type, unsigned vece, TCGArg a0, ...) { @@ -3609,23 +3589,6 @@ void tcg_expand_vec_op(TCGOpcode opc, TCGType type, = unsigned vece, expand_vec_cmpsel(type, vece, v0, v1, v2, v3, v4, va_arg(va, TCGAr= g)); break; =20 - case INDEX_op_smin_vec: - v2 =3D temp_tcgv_vec(arg_temp(a2)); - expand_vec_minmax(type, vece, TCG_COND_GT, true, v0, v1, v2); - break; - case INDEX_op_smax_vec: - v2 =3D temp_tcgv_vec(arg_temp(a2)); - expand_vec_minmax(type, vece, TCG_COND_GT, false, v0, v1, v2); - break; - case INDEX_op_umin_vec: - v2 =3D temp_tcgv_vec(arg_temp(a2)); - expand_vec_minmax(type, vece, TCG_COND_GTU, true, v0, v1, v2); - break; - case INDEX_op_umax_vec: - v2 =3D temp_tcgv_vec(arg_temp(a2)); - expand_vec_minmax(type, vece, TCG_COND_GTU, false, v0, v1, v2); - break; - default: break; } --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558206757; cv=none; d=zoho.com; s=zohoarc; b=nOyqpzoOSHt63cNol1BIXrCLeZzh9wDhMI8WSprIs/oJzG5LuxqQkjKLWlJcwo2vW/ZXMcRugZHsdiE8SMpD4UI/x4WSwMGIq5XU+IfJ6ryR1QVpayujmHCbQOXoZhlmHybg1z6GezCtkvNgQ03eIEFrtYXaqH2nhArgcZqAp3A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558206757; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=OLftcOa71o3SDWkHEvzuYmmBM81jvFAhtQKjy7MXc3g=; b=CWwn/Okvfep8bMFVMPKHA/P/jz2WdmQIOXpS7BMLNdp3lNOhkAuVVTTWvGKqFp0+jR4/VN5BppQUZNpdIlnDg1k7UTL5mJigOsvvP63FsBXfnLhyT7qiPB2XDuQj/HgwD7ZrqgyI42R6TVgsJe87kBY1H6/LWF4tXAro6mM5r6U= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558206757606745.0261438081325; Sat, 18 May 2019 12:12:37 -0700 (PDT) Received: from localhost ([127.0.0.1]:37679 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4kf-0000qe-Lu for importer@patchew.org; Sat, 18 May 2019 15:12:13 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59166) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dP-0002lS-9E for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4b1-0002i6-JQ for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:17 -0400 Received: from mail-pf1-x443.google.com ([2607:f8b0:4864:20::443]:34613) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4b0-0002hS-Bm for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:14 -0400 Received: by mail-pf1-x443.google.com with SMTP id n19so5269639pfa.1 for ; Sat, 18 May 2019 12:02:14 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.11 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=OLftcOa71o3SDWkHEvzuYmmBM81jvFAhtQKjy7MXc3g=; b=p/RQnUV5OvLoa08tg1eiYyRAFDHUcJ9wsisxXqmYbKQxz3Ro3VtXEpwq92DYEnyjFa 0jC1GTaD8xdDI4CHDwDqhPLwjBQsNtoHF7DLz8vQYRmIBbw7j9zTTCZnJODd/rOnc+Ea 0DPub1POc9Ie7g4+FC2130BiQU3skP845wCYJjxxlrP+ZuvMYQ01U2iFfTpVw4xuaX+8 pHOJXgW87ZF/vzTu5utNFA13disk+Y9Pg5ZCZ9UnTzJgnKkVyG+O/trZW/CmIiQVGBKs yr8FdfbDo5teXICWo4PzsgP+sOzco3YmWzFl8mQQvcKDxdQtFjkT2IpZ6+7kdJyVGNeU t1bQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=OLftcOa71o3SDWkHEvzuYmmBM81jvFAhtQKjy7MXc3g=; b=RaYm79eS00mTizjqjJ3Ppz8Yl2pKLbluum6jGsSyS2B5dJN/yr59zXw85x3cBnN8/I gqBVdoYr+qglHD5pt7chAVrA6hfo6SfKpe/5RyggBQCiU7ZsNFKe8yHlACTGxVBAjmG9 uko3ExSx4B0KZBuylj0TqjO9pSaqfZATB4/Ih8qIdWq9qjscIs3IQuzKkClfFEkJ7Uh8 C5Kptd6dnurFsYDtqs2A0s8rfAe3bpYiwHeqA4Z/f3qSmN/7SIaEFYMyiIl7MIYuJEa7 yqn5m9mz3t2sjrhu3heDMWUPXmFQJeGWTmGNbB1K44j4umgz8Wkx4kGST5nEPvynF5PT XtAQ== X-Gm-Message-State: APjAAAUj1cNrLKfNq1oYg2BC87/2GFqjC/WT8csLIPn0IZFLiHgMD5Tv P8SmFVHUdalvPEcf7tDSOYeJGOIf1HE= X-Google-Smtp-Source: APXvYqwN2HnM/CD1gHQM9OWHU6RDZyAGSTuy6UVEcbbghCyN1Nxj8Ifoh2wcL000x8fq6M3344P26g== X-Received: by 2002:a63:1c4:: with SMTP id 187mr38120757pgb.317.1558206133167; Sat, 18 May 2019 12:02:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:51 -0700 Message-Id: <20190518190157.21255-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::443 Subject: [Qemu-devel] [PATCH 10/16] tcg/i386: Use umin/umax in expanding unsigned compare X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Using umin(a, b) =3D=3D a as an expansion for TCG_COND_LEU is a better alternative to (a - INT_MIN) <=3D (b - INT_MIN). Signed-off-by: Richard Henderson --- tcg/i386/tcg-target.inc.c | 80 +++++++++++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 19 deletions(-) diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c index 569a2c2120..6ec5e60448 100644 --- a/tcg/i386/tcg-target.inc.c +++ b/tcg/i386/tcg-target.inc.c @@ -3468,28 +3468,61 @@ static bool expand_vec_cmp_noinv(TCGType type, unsi= gned vece, TCGv_vec v0, TCGv_vec v1, TCGv_vec v2, TCGCond cond) { enum { - NEED_SWAP =3D 1, - NEED_INV =3D 2, - NEED_BIAS =3D 4 - }; - static const uint8_t fixups[16] =3D { - [0 ... 15] =3D -1, - [TCG_COND_EQ] =3D 0, - [TCG_COND_NE] =3D NEED_INV, - [TCG_COND_GT] =3D 0, - [TCG_COND_LT] =3D NEED_SWAP, - [TCG_COND_LE] =3D NEED_INV, - [TCG_COND_GE] =3D NEED_SWAP | NEED_INV, - [TCG_COND_GTU] =3D NEED_BIAS, - [TCG_COND_LTU] =3D NEED_BIAS | NEED_SWAP, - [TCG_COND_LEU] =3D NEED_BIAS | NEED_INV, - [TCG_COND_GEU] =3D NEED_BIAS | NEED_SWAP | NEED_INV, + NEED_INV =3D 1, + NEED_SWAP =3D 2, + NEED_BIAS =3D 4, + NEED_UMIN =3D 8, + NEED_UMAX =3D 16, }; TCGv_vec t1, t2; uint8_t fixup; =20 - fixup =3D fixups[cond & 15]; - tcg_debug_assert(fixup !=3D 0xff); + switch (cond) { + case TCG_COND_EQ: + case TCG_COND_GT: + fixup =3D 0; + break; + case TCG_COND_NE: + case TCG_COND_LE: + fixup =3D NEED_INV; + break; + case TCG_COND_LT: + fixup =3D NEED_SWAP; + break; + case TCG_COND_GE: + fixup =3D NEED_SWAP | NEED_INV; + break; + case TCG_COND_LEU: + if (vece <=3D MO_32) { + fixup =3D NEED_UMIN; + } else { + fixup =3D NEED_BIAS | NEED_INV; + } + break; + case TCG_COND_GTU: + if (vece <=3D MO_32) { + fixup =3D NEED_UMIN | NEED_INV; + } else { + fixup =3D NEED_BIAS; + } + break; + case TCG_COND_GEU: + if (vece <=3D MO_32) { + fixup =3D NEED_UMAX; + } else { + fixup =3D NEED_BIAS | NEED_SWAP | NEED_INV; + } + break; + case TCG_COND_LTU: + if (vece <=3D MO_32) { + fixup =3D NEED_UMAX | NEED_INV; + } else { + fixup =3D NEED_BIAS | NEED_SWAP; + } + break; + default: + g_assert_not_reached(); + } =20 if (fixup & NEED_INV) { cond =3D tcg_invert_cond(cond); @@ -3500,7 +3533,16 @@ static bool expand_vec_cmp_noinv(TCGType type, unsig= ned vece, TCGv_vec v0, } =20 t1 =3D t2 =3D NULL; - if (fixup & NEED_BIAS) { + if (fixup & (NEED_UMIN | NEED_UMAX)) { + t1 =3D tcg_temp_new_vec(type); + if (fixup & NEED_UMIN) { + tcg_gen_umin_vec(vece, t1, v1, v2); + } else { + tcg_gen_umax_vec(vece, t1, v1, v2); + } + v2 =3D t1; + cond =3D TCG_COND_EQ; + } else if (fixup & NEED_BIAS) { t1 =3D tcg_temp_new_vec(type); t2 =3D tcg_temp_new_vec(type); tcg_gen_dupi_vec(vece, t2, 1ull << ((8 << vece) - 1)); --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558206417; cv=none; d=zoho.com; s=zohoarc; b=YvJNDB2lqJbqJauc10rCdBy/GN0XK0g6RGlmoMXtWRyxiqpmQnpEZlC2c0Hkqi9+u6FVvqssPb+GmQOKoGWmxdw8sr7DktjR9l18SMEkkmPwaGNjhnBpqAaj3giS5p+p35I5qZTmCMLefYjgbiYHacm73XGxhUrGawAIf5Z50Q4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558206417; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=2Z/xMZNbQQoNoZQShCqBViE6D5UwKBhH3tq+yJTAfz4=; b=OA+aG9qNxEspgktys1ymFZ+NcsDFwi1Qxdjzr1W65SBacqgyu6ioDCjwwfHxlHGxCB5ykcvJSvVE2YNNjWbaQIkB0FistKG4etwJ6VYHvc0jcyTPsR6WRner5tZsOcRO/tg+dcRfKOMVqCixyxi2EQ47Prnpvs1BQat0ZNqXfIk= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail 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 1558206417153385.5946141088863; Sat, 18 May 2019 12:06:57 -0700 (PDT) Received: from localhost ([127.0.0.1]:37591 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4f6-0003zI-4S for importer@patchew.org; Sat, 18 May 2019 15:06:28 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59166) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dB-0002lS-7f for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4b4-0002jK-5B for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:19 -0400 Received: from mail-pf1-x444.google.com ([2607:f8b0:4864:20::444]:36730) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4b2-0002hv-3m for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:17 -0400 Received: by mail-pf1-x444.google.com with SMTP id v80so5259888pfa.3 for ; Sat, 18 May 2019 12:02:15 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.13 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=2Z/xMZNbQQoNoZQShCqBViE6D5UwKBhH3tq+yJTAfz4=; b=SHVMKSlAm8YY9ESIqjMGZia8cRwr3363o57U/3uAfbatVFlhJLlx8pqzt7ynOMBp7A m4CiWEwVrQ6bQUPH12TBqjsE6GZbIQvqxBM9ziC2lzahrUREbSXdsYw8o3tU8tJyACoS d1tByaWRjzHeTsr5SKs7xnvxcT06T4K0Qro51hfvWC2ry3OUek6MdzACEJSGfUKpnm9Q JoKuptpsb0lwENFPTWLBPi4e4qtF1oDZaLIeBoitZ6bTBJsLxLOiZ30zjOZvqlAfziA6 bYT83o9KwvgIPCiYjGsGFPGHZdkiPYfqQ5fBKTQ3OJB9E0vt3CVSIn4lZkqxDk/oa6a6 PTjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=2Z/xMZNbQQoNoZQShCqBViE6D5UwKBhH3tq+yJTAfz4=; b=hMcg6hXu1rH9oH42vHrGbelGD6GFwoJIa8PTzSOWLMQCLeHKpGySBodq3wDW5T5NCP 2YRTQ2WDWE0AtQDoPSNNDoOKeXdTbEeRDTHaWWNIM976HkV+lRhgfKy9mlXe4pU01TDS 4vHv42tWQv5mu4AJ07xeWq5cVHuiQNID31nwrZ5c1Q2t26PFecU+GoVceojOt3GTrn7r ni+C+VDXsWbaEqOaEWLuqp0fOgYjqErVyTQ33jYQEfzHdQ+vnwZwBJtwuCS1o8o4KlZ2 j+/3EVsBf8wNESCCxa1LGpndugCjNJhTMwSLe5iMiQIL7zqGVSr/a+mFM7mf/vEnDsVn NiVQ== X-Gm-Message-State: APjAAAXtEgeVzO97ITT2fjLNwTRtQsU/MpoHSxOYUMBt8mlLNL6wfLJJ ELQWT7QZkjz0C3TAR3eS69tKkEZuToY= X-Google-Smtp-Source: APXvYqwB0P5y20DjUa71qneTcQGLHvEtiqkowjlaTrbiQyGPnXEsMTPDhz6ZaQzOmSwSYdKu0rii5Q== X-Received: by 2002:a62:ea0a:: with SMTP id t10mr69243715pfh.236.1558206134214; Sat, 18 May 2019 12:02:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:52 -0700 Message-Id: <20190518190157.21255-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::444 Subject: [Qemu-devel] [PATCH 11/16] tcg/aarch64: Support vector bitwise select value X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The instruction set has 3 insns that perform the same operation, only varying in which operand must overlap the destination. We can represent the operation without overlap and choose based on the operands seen. Signed-off-by: Richard Henderson --- tcg/aarch64/tcg-target.h | 2 +- tcg/aarch64/tcg-target.inc.c | 24 +++++++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/tcg/aarch64/tcg-target.h b/tcg/aarch64/tcg-target.h index b4a9d36bbc..ca214f6909 100644 --- a/tcg/aarch64/tcg-target.h +++ b/tcg/aarch64/tcg-target.h @@ -140,7 +140,7 @@ typedef enum { #define TCG_TARGET_HAS_mul_vec 1 #define TCG_TARGET_HAS_sat_vec 1 #define TCG_TARGET_HAS_minmax_vec 1 -#define TCG_TARGET_HAS_bitsel_vec 0 +#define TCG_TARGET_HAS_bitsel_vec 1 #define TCG_TARGET_HAS_cmpsel_vec 0 =20 #define TCG_TARGET_DEFAULT_MO (0) diff --git a/tcg/aarch64/tcg-target.inc.c b/tcg/aarch64/tcg-target.inc.c index 40bf35079a..e99149cda7 100644 --- a/tcg/aarch64/tcg-target.inc.c +++ b/tcg/aarch64/tcg-target.inc.c @@ -523,6 +523,9 @@ typedef enum { I3616_ADD =3D 0x0e208400, I3616_AND =3D 0x0e201c00, I3616_BIC =3D 0x0e601c00, + I3616_BIF =3D 0x2ee01c00, + I3616_BIT =3D 0x2ea01c00, + I3616_BSL =3D 0x2e601c00, I3616_EOR =3D 0x2e201c00, I3616_MUL =3D 0x0e209c00, I3616_ORR =3D 0x0ea01c00, @@ -2181,7 +2184,7 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode o= pc, =20 TCGType type =3D vecl + TCG_TYPE_V64; unsigned is_q =3D vecl; - TCGArg a0, a1, a2; + TCGArg a0, a1, a2, a3; =20 a0 =3D args[0]; a1 =3D args[1]; @@ -2304,6 +2307,20 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode = opc, } break; =20 + case INDEX_op_bitsel_vec: + a3 =3D args[3]; + if (a0 =3D=3D a3) { + tcg_out_insn(s, 3616, BIT, is_q, 0, a0, a2, a1); + } else if (a0 =3D=3D a2) { + tcg_out_insn(s, 3616, BIF, is_q, 0, a0, a3, a1); + } else { + if (a0 !=3D a1) { + tcg_out_mov(s, type, a0, a1); + } + tcg_out_insn(s, 3616, BSL, is_q, 0, a0, a2, a3); + } + break; + case INDEX_op_mov_vec: /* Always emitted via tcg_out_mov. */ case INDEX_op_dupi_vec: /* Always emitted via tcg_out_movi. */ case INDEX_op_dup_vec: /* Always emitted via tcg_out_dup_vec. */ @@ -2334,6 +2351,7 @@ int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type, = unsigned vece) case INDEX_op_usadd_vec: case INDEX_op_ussub_vec: case INDEX_op_shlv_vec: + case INDEX_op_bitsel_vec: return 1; case INDEX_op_shrv_vec: case INDEX_op_sarv_vec: @@ -2408,6 +2426,8 @@ static const TCGTargetOpDef *tcg_target_op_def(TCGOpc= ode op) =3D { .args_ct_str =3D { "r", "r", "rA", "rZ", "rZ" } }; static const TCGTargetOpDef add2 =3D { .args_ct_str =3D { "r", "r", "rZ", "rZ", "rA", "rMZ" } }; + static const TCGTargetOpDef w_w_w_w + =3D { .args_ct_str =3D { "w", "w", "w", "w" } }; =20 switch (op) { case INDEX_op_goto_ptr: @@ -2580,6 +2600,8 @@ static const TCGTargetOpDef *tcg_target_op_def(TCGOpc= ode op) return &w_wr; case INDEX_op_cmp_vec: return &w_w_wZ; + case INDEX_op_bitsel_vec: + return &w_w_w_w; =20 default: return NULL; --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558206426; cv=none; d=zoho.com; s=zohoarc; b=n0RmVFl3CPUgHH8C1B3taKiBNdPMwfsDSH6NFcrZh5ZR2BekGD9ae3/O15tqGkuXkXu3LPYbdRLaOrL2y4jRuS0IS6aQXQEcTNH492w2UScThElH/9NyCUH3M+0ukwBhq0dvcvZxn3kTGp3y0dyPWvPiJFNBZPAhUyx/kGn/1so= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558206426; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=/D6aLozHwnS1sPI8iNsL3pMxewPkp4IUhb3tHD+DOe4=; b=eWAoVylXbcugtCDfhYfjgAAQD4vxQZuZN8KeoCwIb9k+zyvj2i/NabzjNJKbw6ymfcXIZgRUjPYtXvvNtWjeynMwC0JEFY/yRfnvgilZ4sebvMlGtXVpwwdHzfPp1V+HUKVfHo2ZgddjZX2OJspPJLjRcU+JgmuE7z2ftv8GnrM= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1558206426927829.9255423937482; Sat, 18 May 2019 12:07:06 -0700 (PDT) Received: from localhost ([127.0.0.1]:37597 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4fY-0004bb-Nb for importer@patchew.org; Sat, 18 May 2019 15:06:56 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59166) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dM-0002lS-Tm for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4b5-0002kL-S5 for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:21 -0400 Received: from mail-pf1-x444.google.com ([2607:f8b0:4864:20::444]:34614) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4b4-0002iU-4L for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:19 -0400 Received: by mail-pf1-x444.google.com with SMTP id n19so5269665pfa.1 for ; Sat, 18 May 2019 12:02:16 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.14 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=/D6aLozHwnS1sPI8iNsL3pMxewPkp4IUhb3tHD+DOe4=; b=DX98WC+w6H36YBm5EDtBPEhzGilvTj4uIwQ9+YO9lP0LLRhpO7KtG4L/fqqkIpuF5b 8uSa4ytNJiNTh/0+dFzuB/v+kbaokbyrShOsd1fLa0KNO2/1d979NH2+MQZaVEPSOgEh qZVAVnlxbmVrF0yrVyZFSCF8uUPBiS8Qgkl8xmUg35qCVpcJWv/E4f4dSPcxhGrzIInH G4WwATWsYJGX95MDYS9c1M30vholRxwjGsM+zVS/MepbMP+nQNaiKSyxEdTi1+myMCEQ uQRMWiyM6wdvjNAaGrFfYlYsEIaLwpiJlyNG+dWKZm+oNr8r0q6rU9fYESYPH/57jvAU IBug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=/D6aLozHwnS1sPI8iNsL3pMxewPkp4IUhb3tHD+DOe4=; b=uasVNDWUifvjb+T+awO7euS4AiCpcKoVxPNf3lOpBxrZCg8KJEOBXEvuYFAEIea7S7 Co2VoM43YkCWCjFzogHkbWJ7B+K935yu9Dfe25T8Q5y2IP1/Lt03rPXQ7ngw1y0EsbHB KmK+BFhxHVqnCi+cH8bILvdmwCkVogkKVt+ZtOoZ5Uf5bYuaWpolcWZzOq5Cjxd3H6QW 52lDLRGqKX62YQgJoiY1xXwkfMJNiPya/MvddL3qXZuPKwNc2dx4RZz19+ZcawTfi1Ma I0AJGfM+NXVjTZukE3hUXzoT6jW9/kS+xTx8K9ARQr58GvOj3DVCOuOcxxhoWAjdAupQ RZ2g== X-Gm-Message-State: APjAAAWfSvb4fQzuqctrMXDIlvWwyneXHs0cPfxzU9w9X608ZcNnDT3u iskdHdVeJ0aujuILiJSPeJeQUPkwxio= X-Google-Smtp-Source: APXvYqzvZVir7bSlPOQyKcWKGs+bT+BYBawGmn93r/3BoGDeb6Gjnbk3HGpI43jmk+Tq61Si6KzxNQ== X-Received: by 2002:a65:60c7:: with SMTP id r7mr63134180pgv.22.1558206135452; Sat, 18 May 2019 12:02:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:53 -0700 Message-Id: <20190518190157.21255-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::444 Subject: [Qemu-devel] [PATCH 12/16] tcg/aarch64: Split up is_fimm X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" There are several sub-classes of vector immediate, and only MOVI can use them all. This will enable usage of MVNI and ORRI, which use progressively fewer sub-classes. This patch adds no new functionality, merely splits the function and moves part of the logic into tcg_out_dupi_vec. Signed-off-by: Richard Henderson --- tcg/aarch64/tcg-target.inc.c | 205 ++++++++++++++++++++--------------- 1 file changed, 120 insertions(+), 85 deletions(-) diff --git a/tcg/aarch64/tcg-target.inc.c b/tcg/aarch64/tcg-target.inc.c index e99149cda7..1422dfebe2 100644 --- a/tcg/aarch64/tcg-target.inc.c +++ b/tcg/aarch64/tcg-target.inc.c @@ -190,103 +190,86 @@ static inline bool is_limm(uint64_t val) return (val & (val - 1)) =3D=3D 0; } =20 -/* Match a constant that is valid for vectors. */ -static bool is_fimm(uint64_t v64, int *op, int *cmode, int *imm8) +/* Return true if v16 is a valid 16-bit shifted immediate. */ +static bool is_shimm16(uint16_t v16, int *cmode, int *imm8) { - int i; - - *op =3D 0; - /* Match replication across 8 bits. */ - if (v64 =3D=3D dup_const(MO_8, v64)) { - *cmode =3D 0xe; - *imm8 =3D v64 & 0xff; + if (v16 =3D=3D (v16 & 0xff)) { + *cmode =3D 0x8; + *imm8 =3D v16 & 0xff; + return true; + } else if (v16 =3D=3D (v16 & 0xff00)) { + *cmode =3D 0xa; + *imm8 =3D v16 >> 8; return true; } - /* Match replication across 16 bits. */ - if (v64 =3D=3D dup_const(MO_16, v64)) { - uint16_t v16 =3D v64; + return false; +} =20 - if (v16 =3D=3D (v16 & 0xff)) { - *cmode =3D 0x8; - *imm8 =3D v16 & 0xff; - return true; - } else if (v16 =3D=3D (v16 & 0xff00)) { - *cmode =3D 0xa; - *imm8 =3D v16 >> 8; - return true; - } +/* Return true if v32 is a valid 32-bit shifted immediate. */ +static bool is_shimm32(uint32_t v32, int *cmode, int *imm8) +{ + if (v32 =3D=3D (v32 & 0xff)) { + *cmode =3D 0x0; + *imm8 =3D v32 & 0xff; + return true; + } else if (v32 =3D=3D (v32 & 0xff00)) { + *cmode =3D 0x2; + *imm8 =3D (v32 >> 8) & 0xff; + return true; + } else if (v32 =3D=3D (v32 & 0xff0000)) { + *cmode =3D 0x4; + *imm8 =3D (v32 >> 16) & 0xff; + return true; + } else if (v32 =3D=3D (v32 & 0xff000000)) { + *cmode =3D 0x6; + *imm8 =3D v32 >> 24; + return true; } - /* Match replication across 32 bits. */ - if (v64 =3D=3D dup_const(MO_32, v64)) { - uint32_t v32 =3D v64; + return false; +} =20 - if (v32 =3D=3D (v32 & 0xff)) { - *cmode =3D 0x0; - *imm8 =3D v32 & 0xff; - return true; - } else if (v32 =3D=3D (v32 & 0xff00)) { - *cmode =3D 0x2; - *imm8 =3D (v32 >> 8) & 0xff; - return true; - } else if (v32 =3D=3D (v32 & 0xff0000)) { - *cmode =3D 0x4; - *imm8 =3D (v32 >> 16) & 0xff; - return true; - } else if (v32 =3D=3D (v32 & 0xff000000)) { - *cmode =3D 0x6; - *imm8 =3D v32 >> 24; - return true; - } else if ((v32 & 0xffff00ff) =3D=3D 0xff) { - *cmode =3D 0xc; - *imm8 =3D (v32 >> 8) & 0xff; - return true; - } else if ((v32 & 0xff00ffff) =3D=3D 0xffff) { - *cmode =3D 0xd; - *imm8 =3D (v32 >> 16) & 0xff; - return true; - } - /* Match forms of a float32. */ - if (extract32(v32, 0, 19) =3D=3D 0 - && (extract32(v32, 25, 6) =3D=3D 0x20 - || extract32(v32, 25, 6) =3D=3D 0x1f)) { - *cmode =3D 0xf; - *imm8 =3D (extract32(v32, 31, 1) << 7) - | (extract32(v32, 25, 1) << 6) - | extract32(v32, 19, 6); - return true; - } +/* Return true if v32 is a valid 32-bit shifting ones immediate. */ +static bool is_soimm32(uint32_t v32, int *cmode, int *imm8) +{ + if ((v32 & 0xffff00ff) =3D=3D 0xff) { + *cmode =3D 0xc; + *imm8 =3D (v32 >> 8) & 0xff; + return true; + } else if ((v32 & 0xff00ffff) =3D=3D 0xffff) { + *cmode =3D 0xd; + *imm8 =3D (v32 >> 16) & 0xff; + return true; } - /* Match forms of a float64. */ + return false; +} + +/* Return true if v32 is a valid float32 immediate. */ +static bool is_fimm32(uint32_t v32, int *cmode, int *imm8) +{ + if (extract32(v32, 0, 19) =3D=3D 0 + && (extract32(v32, 25, 6) =3D=3D 0x20 + || extract32(v32, 25, 6) =3D=3D 0x1f)) { + *cmode =3D 0xf; + *imm8 =3D (extract32(v32, 31, 1) << 7) + | (extract32(v32, 25, 1) << 6) + | extract32(v32, 19, 6); + return true; + } + return false; +} + +/* Return true if v64 is a valid float64 immediate. */ +static bool is_fimm64(uint64_t v64, int *cmode, int *imm8) +{ if (extract64(v64, 0, 48) =3D=3D 0 && (extract64(v64, 54, 9) =3D=3D 0x100 || extract64(v64, 54, 9) =3D=3D 0x0ff)) { *cmode =3D 0xf; - *op =3D 1; *imm8 =3D (extract64(v64, 63, 1) << 7) | (extract64(v64, 54, 1) << 6) | extract64(v64, 48, 6); return true; } - /* Match bytes of 0x00 and 0xff. */ - for (i =3D 0; i < 64; i +=3D 8) { - uint64_t byte =3D extract64(v64, i, 8); - if (byte !=3D 0 && byte !=3D 0xff) { - break; - } - } - if (i =3D=3D 64) { - *cmode =3D 0xe; - *op =3D 1; - *imm8 =3D (extract64(v64, 0, 1) << 0) - | (extract64(v64, 8, 1) << 1) - | (extract64(v64, 16, 1) << 2) - | (extract64(v64, 24, 1) << 3) - | (extract64(v64, 32, 1) << 4) - | (extract64(v64, 40, 1) << 5) - | (extract64(v64, 48, 1) << 6) - | (extract64(v64, 56, 1) << 7); - return true; - } return false; } =20 @@ -817,11 +800,63 @@ static void tcg_out_logicali(TCGContext *s, AArch64In= sn insn, TCGType ext, static void tcg_out_dupi_vec(TCGContext *s, TCGType type, TCGReg rd, tcg_target_long v64) { - int op, cmode, imm8; + bool q =3D type =3D=3D TCG_TYPE_V128; + int cmode, imm8, i; =20 - if (is_fimm(v64, &op, &cmode, &imm8)) { - tcg_out_insn(s, 3606, MOVI, type =3D=3D TCG_TYPE_V128, rd, op, cmo= de, imm8); - } else if (type =3D=3D TCG_TYPE_V128) { + /* Test all bytes equal first. */ + if (v64 =3D=3D dup_const(MO_8, v64)) { + imm8 =3D (uint8_t)v64; + tcg_out_insn(s, 3606, MOVI, q, rd, 0, 0xe, imm8); + return; + } + + /* + * Test all bytes 0x00 or 0xff second. This can match cases that + * might otherwise take 2 or 3 insns for MO_16 or MO_32 below. + */ + for (i =3D imm8 =3D 0; i < 8; i++) { + uint8_t byte =3D v64 >> (i * 8); + if (byte =3D=3D 0xff) { + imm8 |=3D 1 << i; + } else if (byte !=3D 0) { + goto fail_bytes; + } + } + tcg_out_insn(s, 3606, MOVI, q, rd, 1, 0xe, imm8); + return; + fail_bytes: + + /* + * Tests for various replications. For each element width, if we + * cannot find an expansion there's no point checking a larger + * width because we already know by replication it cannot match. + */ + if (v64 =3D=3D dup_const(MO_16, v64)) { + uint16_t v16 =3D v64; + + if (is_shimm16(v16, &cmode, &imm8)) { + tcg_out_insn(s, 3606, MOVI, q, rd, 0, cmode, imm8); + return; + } + } else if (v64 =3D=3D dup_const(MO_32, v64)) { + uint32_t v32 =3D v64; + + if (is_shimm32(v32, &cmode, &imm8) || + is_soimm32(v32, &cmode, &imm8) || + is_fimm32(v32, &cmode, &imm8)) { + tcg_out_insn(s, 3606, MOVI, q, rd, 0, cmode, imm8); + return; + } + } else if (is_fimm64(v64, &cmode, &imm8)) { + tcg_out_insn(s, 3606, MOVI, q, rd, 1, cmode, imm8); + return; + } + + /* + * As a last resort, load from the constant pool. Sadly there + * is no LD1R (literal), so store the full 16-byte vector. + */ + if (type =3D=3D TCG_TYPE_V128) { new_pool_l2(s, R_AARCH64_CONDBR19, s->code_ptr, 0, v64, v64); tcg_out_insn(s, 3305, LDR_v128, 0, rd); } else { --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558206585; cv=none; d=zoho.com; s=zohoarc; b=E6QLpSmTw0sZ1Krnfz7K/nHRQB9BOkDcfqRRU7LgvyqeV4GQStO7X6+bf4wyPE/nYFmEQyjCJvHGoAefWyH75g8LjQhVN83IX6n28xPA56178PzGcVT73SHFy50C7h5ztQkIHzaXJ80g1suQScXev/a8+X2eB7BThFSN2E/L2K0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558206585; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=5pgxUU1cRl5UBw70ixoMtifwIrAs5XS+sRdx95+Fg/g=; b=NxChVEDDYy++IjT0WjuCAxonVuD7auUnOtk2Az/+H8KneiIVFrd5fpKPeqIj7FMmziqPsj/VJGhiPH18c5gm2p7VJH7W7//CiUcTumBSZQ3vjIgcc36OJiwOX9u/7IM1IIWuqvtZQ2eeYCo8b0Ig4YHHIgGLZyVWsooLv6Y6q/k= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail 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 1558206585876514.2020384213489; Sat, 18 May 2019 12:09:45 -0700 (PDT) Received: from localhost ([127.0.0.1]:37617 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4iD-0006q0-LQ for importer@patchew.org; Sat, 18 May 2019 15:09:41 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59178) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dO-0002nw-U4 for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4b5-0002kG-Rm for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:20 -0400 Received: from mail-pf1-x441.google.com ([2607:f8b0:4864:20::441]:41278) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4b4-0002j0-5T for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:19 -0400 Received: by mail-pf1-x441.google.com with SMTP id q17so5243771pfq.8 for ; Sat, 18 May 2019 12:02:17 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.15 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=5pgxUU1cRl5UBw70ixoMtifwIrAs5XS+sRdx95+Fg/g=; b=Hk2LWuP2q3y8VWttu/hNazeJeZ7x6dEOuJnRrijJnUA27kNW9XNU7nBa1c2P2YRK1I bXSbZh4zrUF3tXfyZ5UsyF2qdSMgiLnoIBAh4yTshNglRJKuIiPYgf5JUKCCYquwOh/0 Z5Yvy6xplKYn+4CkpL3OQcHYN3ZjFnJ3dxGjT4h0thYpTeqnuXuftfmQxwCNoliXahVZ GzXOQRWbmlfx6usZRRj+vtel+fjhqi0MlaMYhkl+F79BQTQnsyIPZnOlSlRJVl/AlzzY Y5b5x6XoNpLTHQLA/wswGo/fcgU22WFZq8RRju5nd355CpdmRtpGa2vPETmc3yIrlV3i o1rQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=5pgxUU1cRl5UBw70ixoMtifwIrAs5XS+sRdx95+Fg/g=; b=jexrOzbd5xfKIhgLROl1vuk+1jOuVZgKu8aHd9unD70EqeYmKSjinZIKO6St0O9wSC yNPusOilL7xfhR1e1ELCfL/kE3HDllyfsjexQc+KH4ijuUNx8WK5WRfJ8kSPBRjCfOPQ ZkYCIPlL58k/nMpJ1XXxZAhmDV3g1/HMv9kKGlMcxRw4NqggdmtlNmw9IAbFleIXBXaQ 8FsIOfwSaC5UR+tL1SbgDdaeasSEHg9szezGUTCvU6JtCCZCNxtBGGpVBIgwawQN/0FP Lom+6w/iyOzbI16ITzIgT8Wd3ykSu+E+J/h2i/YQEhYks4aaP4v++tU/1sm/izv185cS PKdw== X-Gm-Message-State: APjAAAWxBxRGy6wX88XEZuki7FvWOvxtDJcWOc84+AVrpnlW9NZj4UP6 YXcn2pQg4WVFNhJDuGmM/EtaHyITpug= X-Google-Smtp-Source: APXvYqxMml5drvLqg8yZrKFre7NUGiT+MaMIoZDwNnXd0j2kr/rGG1O4a7XMEYEvSB/vNQ3RwoVLqA== X-Received: by 2002:a62:3085:: with SMTP id w127mr46884150pfw.170.1558206136676; Sat, 18 May 2019 12:02:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:54 -0700 Message-Id: <20190518190157.21255-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::441 Subject: [Qemu-devel] [PATCH 13/16] tcg/aarch64: Use MVNI in tcg_out_dupi_vec X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The compliment of a subset of immediates can be computed with a single instruction. Signed-off-by: Richard Henderson --- tcg/aarch64/tcg-target.inc.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tcg/aarch64/tcg-target.inc.c b/tcg/aarch64/tcg-target.inc.c index 1422dfebe2..0b8b733805 100644 --- a/tcg/aarch64/tcg-target.inc.c +++ b/tcg/aarch64/tcg-target.inc.c @@ -494,6 +494,7 @@ typedef enum { =20 /* AdvSIMD modified immediate */ I3606_MOVI =3D 0x0f000400, + I3606_MVNI =3D 0x2f000400, =20 /* AdvSIMD shift by immediate */ I3614_SSHR =3D 0x0f000400, @@ -838,8 +839,13 @@ static void tcg_out_dupi_vec(TCGContext *s, TCGType ty= pe, tcg_out_insn(s, 3606, MOVI, q, rd, 0, cmode, imm8); return; } + if (is_shimm16(~v16, &cmode, &imm8)) { + tcg_out_insn(s, 3606, MVNI, q, rd, 0, cmode, imm8); + return; + } } else if (v64 =3D=3D dup_const(MO_32, v64)) { uint32_t v32 =3D v64; + uint32_t n32 =3D ~v32; =20 if (is_shimm32(v32, &cmode, &imm8) || is_soimm32(v32, &cmode, &imm8) || @@ -847,6 +853,11 @@ static void tcg_out_dupi_vec(TCGContext *s, TCGType ty= pe, tcg_out_insn(s, 3606, MOVI, q, rd, 0, cmode, imm8); return; } + if (is_shimm32(n32, &cmode, &imm8) || + is_soimm32(n32, &cmode, &imm8)) { + tcg_out_insn(s, 3606, MVNI, q, rd, 0, cmode, imm8); + return; + } } else if (is_fimm64(v64, &cmode, &imm8)) { tcg_out_insn(s, 3606, MOVI, q, rd, 1, cmode, imm8); return; --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558206599; cv=none; d=zoho.com; s=zohoarc; b=HhN5eOL4qedWCO3a1Kys7ovyuNd59L4cZ9evQhmZddb3qY8de9gPj9X9UvyB5JqrTdTAr7fB7SwzvMb+mAVtVrlRjpq0qQtRkE/f/DBjzBhIpwGPOi4EOkk4PRnW+UbpdDxTIaG1M5h8mYDP8ympALAogL8tJpN7WYiokrxdWS0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558206599; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=zqTcnSP07QNrvm+tUagQdKAYnifB03tbX5A/KwjlV2s=; b=B1w9020puQipLU12zz46HkTZEq3BZ0LtzGm6+GerTCraGcAZ0E0LEguZ+Z8jBR9C7WWHsR5oEjhHED3gwbkhwdcPTD3mXk5DP6DRa/hzPe+lVmxJ8SElm2vO1yIGrwiHM7ZA43XTOTIWftsYLmwjEykLG284MZWxCBhDhRHQV40= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail 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 1558206599052224.81377942635686; Sat, 18 May 2019 12:09:59 -0700 (PDT) Received: from localhost ([127.0.0.1]:37621 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4iO-0006xN-RA for importer@patchew.org; Sat, 18 May 2019 15:09:52 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59195) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dN-0002qF-OK for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4b5-0002kT-V1 for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:20 -0400 Received: from mail-pg1-x541.google.com ([2607:f8b0:4864:20::541]:37678) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4b5-0002je-P6 for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:19 -0400 Received: by mail-pg1-x541.google.com with SMTP id n27so2231038pgm.4 for ; Sat, 18 May 2019 12:02:19 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.16 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=zqTcnSP07QNrvm+tUagQdKAYnifB03tbX5A/KwjlV2s=; b=rL0iP2h0jKW9abc7xAj6Hon9dUs0yXFvg30c/6Z7XNV7VMSaKcZc1OgHJKk9bUBtL4 /MLkU3fVKKYcWIqeTa5DTseaogjiRQkUqVHcmpJ715R0++r80BxHj+8P9/g/zmxRp0I6 noJstJ8578xL6C8Q73urzkGYcrxF8zx9cOAIlSPTliH5Ipx3xNJxlSmmz2mjoyHzmoVY qS4/AYdK1EsNjWl3FfymAn7fC4DrAb4gMFiEpFeCKO0I06QUPxXj+MWOQQ+GK8UwMEu7 9CrbII8CLhZIyyT6IF6YckVttRlj2KX2siMWuT/IA/g4p8oezSl16qTDNK6abmgN2Pqg LtCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=zqTcnSP07QNrvm+tUagQdKAYnifB03tbX5A/KwjlV2s=; b=Ewchzj/djHLLY7h1jjJ9n3Pl8fKbzrebMQ86kE2MTDNHagWWZQ3gHY3bgBL49alY8p N6QtYS9Dwh7M5cjeTlI8Ach0TFlFgaE1GWYdXCzSMLxDnnneXGL3nAg26UgXmnq9JN61 +boB7m6/57Qn9d7jj+xfxVKJP9FA70bLTKlX2P+9avSqJqY25ZdLSsOqpz3OUn2sX8RP KcuK497Dehi4pjJdCeArNjusa36QxXPAhpLuDEUkVwHQjMc4/mgxJNoxFesIFcZPDQQQ PI3geQB5+kq9Kw4ryddxI+HG8I7FHo6dKDFIE5YVImvdkhz/qlyyuYVhfacRNXoPs2lF iyFA== X-Gm-Message-State: APjAAAXX2skti7yzaP3EeRYDocD/UluUkH5ZLPu7JEJI1M11k+Ns5r/H G+7JxXHjAqEYq61fEQjLseuGSe/Wtqc= X-Google-Smtp-Source: APXvYqwQA4Y4gRI1mOksQXXbGkJwesULC3YNQ0FmWfyWFGEYkn39Z3o+YnCtpkc9ArGKKFddDNMWSQ== X-Received: by 2002:a63:2c14:: with SMTP id s20mr47830203pgs.182.1558206137908; Sat, 18 May 2019 12:02:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:55 -0700 Message-Id: <20190518190157.21255-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::541 Subject: [Qemu-devel] [PATCH 14/16] tcg/aarch64: Build vector immediates with two insns X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use MOVI+ORR or MVNI+BIC in order to build some vector constants, as opposed to dropping them to the constant pool. This includes all 16-bit constants and a similar set of 32-bit constants. Signed-off-by: Richard Henderson --- tcg/aarch64/tcg-target.inc.c | 47 ++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/tcg/aarch64/tcg-target.inc.c b/tcg/aarch64/tcg-target.inc.c index 0b8b733805..52c18074ae 100644 --- a/tcg/aarch64/tcg-target.inc.c +++ b/tcg/aarch64/tcg-target.inc.c @@ -273,6 +273,26 @@ static bool is_fimm64(uint64_t v64, int *cmode, int *i= mm8) return false; } =20 +/* + * Return non-zero if v32 can be formed by MOVI+ORR. + * Place the parameters for MOVI in (cmode, imm8). + * Return the cmode for ORR; the imm8 can be had via extraction from v32. + */ +static int is_shimm32_pair(uint32_t v32, int *cmode, int *imm8) +{ + int i; + + for (i =3D 6; i > 0; i -=3D 2) { + /* Mask out one byte we can add with ORR. */ + uint32_t tmp =3D v32 & ~(0xffu << (i * 4)); + if (is_shimm32(tmp, cmode, imm8) || + is_soimm32(tmp, cmode, imm8)) { + break; + } + } + return i; +} + static int tcg_target_const_match(tcg_target_long val, TCGType type, const TCGArgConstraint *arg_ct) { @@ -495,6 +515,8 @@ typedef enum { /* AdvSIMD modified immediate */ I3606_MOVI =3D 0x0f000400, I3606_MVNI =3D 0x2f000400, + I3606_BIC =3D 0x2f001400, + I3606_ORR =3D 0x0f001400, =20 /* AdvSIMD shift by immediate */ I3614_SSHR =3D 0x0f000400, @@ -843,6 +865,14 @@ static void tcg_out_dupi_vec(TCGContext *s, TCGType ty= pe, tcg_out_insn(s, 3606, MVNI, q, rd, 0, cmode, imm8); return; } + + /* + * Otherwise, all remaining constants can be loaded in two insns: + * rd =3D v16 & 0xff, rd |=3D v16 & 0xff00. + */ + tcg_out_insn(s, 3606, MOVI, q, rd, 0, 0x8, v16 & 0xff); + tcg_out_insn(s, 3606, ORR, q, rd, 0, 0xa, v16 >> 8); + return; } else if (v64 =3D=3D dup_const(MO_32, v64)) { uint32_t v32 =3D v64; uint32_t n32 =3D ~v32; @@ -858,6 +888,23 @@ static void tcg_out_dupi_vec(TCGContext *s, TCGType ty= pe, tcg_out_insn(s, 3606, MVNI, q, rd, 0, cmode, imm8); return; } + + /* + * Restrict the set of constants to those we can load with + * two instructions. Others we load from the pool. + */ + i =3D is_shimm32_pair(v32, &cmode, &imm8); + if (i) { + tcg_out_insn(s, 3606, MOVI, q, rd, 0, cmode, imm8); + tcg_out_insn(s, 3606, ORR, q, rd, 0, i, extract32(v32, i * 4, = 8)); + return; + } + i =3D is_shimm32_pair(n32, &cmode, &imm8); + if (i) { + tcg_out_insn(s, 3606, MVNI, q, rd, 0, cmode, imm8); + tcg_out_insn(s, 3606, BIC, q, rd, 0, i, extract32(n32, i * 4, = 8)); + return; + } } else if (is_fimm64(v64, &cmode, &imm8)) { tcg_out_insn(s, 3606, MOVI, q, rd, 1, cmode, imm8); return; --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558206422; cv=none; d=zoho.com; s=zohoarc; b=fGjOkGoIi6oVHk9WHvk6Hyijpva772zRm4p76rMo03Y5N3kTo/ohvopnrcBTP8b1XHtG1HEYQyMFl3dgWxkiFna2DDtZMGTdy56FYb7tozXbz8AITAXKBZwFwcCiy64GkzHNCL5rAnZw6Vuct7F1GUh1ZF7BLiui9wM9EJ/boX4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558206422; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=AirXKI1PS8HjM151RJTWK1/DcdzF7g0f+0zrycENkFI=; b=Ituy8XHo8nAumXK12ShRHiplZxrwwY2HicM+ivnwDKaPDo3g9cYPewLP3FtSEdyJopS80JQpvoboh5hsKNWoE/ragIpkAMk/NkQiV8cj0A2F5hAUc5qawtNvgkG+YkSrNIX+ZOPGAEU6c1VLg2wuF3N3D5F/AJZgBJkFFhXkCJ4= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail 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 1558206422659418.9407866796588; Sat, 18 May 2019 12:07:02 -0700 (PDT) Received: from localhost ([127.0.0.1]:37595 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4fU-0004Wz-GH for importer@patchew.org; Sat, 18 May 2019 15:06:52 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59178) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dM-0002nw-Hd for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:41 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4b6-0002km-BC for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:21 -0400 Received: from mail-pf1-x441.google.com ([2607:f8b0:4864:20::441]:42180) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4b6-0002k9-5E for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:20 -0400 Received: by mail-pf1-x441.google.com with SMTP id 13so5245068pfw.9 for ; Sat, 18 May 2019 12:02:20 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.18 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=AirXKI1PS8HjM151RJTWK1/DcdzF7g0f+0zrycENkFI=; b=wm0Tqh6H8BruN8LoznuFQnO8IBRQrSBDUwa6HZXqppYfvP+XRHdNxXMQ7cfk3bpO5P 8xlHRPHyvzHVpdESOY0TItUQBqGvwnEyXJiVVemZEqZjU4M/+Bw3lJWwTF07NDw7Yub8 GydwAlO7H8i9I0NWaOnUrxSkVE3QartU5bHWzbGvg2p0yTKFf5pVuxsf+gFTajD3sxdX 7u5uKbNrOxfeVHiy6mj4RhZ7N9z9ePv/LsPOmua3934sK1pcYtRQ/+QfwIekub0nPanU cX+ZcUN8ZjfcUcJbbIrmegC7ckeN1H75gXOW2uZQsIBw3/7XwoW7YOVnoz7HTEejPNUC aXSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=AirXKI1PS8HjM151RJTWK1/DcdzF7g0f+0zrycENkFI=; b=Qeteu6zpCPHKyGfVdaVwfXMIxrn7ZEpWGKUfZnrnLcTdFlz0aAclbVnrQyiFDxUoMW hZe3DsxpaY0twUo2E1Oe14nIzIuRhOTWrHmdEWhnXD3PJPdlm74EqdbHKUWqrJ1afpIR SFBlifcXpN4lFWqbeGwRVWetaA6OvFXMH4DI6NS43BbK2m96bRsZI+DMh9kMWePcfbM0 dHvteOCMMnORbsJ1D6HFg9L+2P+olCEvMmncti4Vwkcg5ADJUDpMCbx1yaHeao5Fg8Ov B521+kBo5Cl4GpAYPejQYq4fjm4QlpWoyxZmPBNROJXun+n/A4WMm02KHOEYoouWWESi VZoA== X-Gm-Message-State: APjAAAW8eZsF7cyDAcJIrS6fnXprybYuTipMRjnsgEbGN6cuKNrNi8pL FxPUXU1Y7vHDBlXVLiurxIwwpMaB5lk= X-Google-Smtp-Source: APXvYqwmjSFLSwtSlkaUpFNfHPclHpDVGynX4Y0J2szRGDTZ/IOOkEvpzy5GtuDStNceYmO2lyPFVw== X-Received: by 2002:a63:a351:: with SMTP id v17mr64525226pgn.431.1558206138956; Sat, 18 May 2019 12:02:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:56 -0700 Message-Id: <20190518190157.21255-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::441 Subject: [Qemu-devel] [PATCH 15/16] tcg/aarch64: Allow immediates for vector ORR and BIC X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The allows immediates to be used for ORR and BIC, as well as the trivial inversions, ORC and AND. Signed-off-by: Richard Henderson --- tcg/aarch64/tcg-target.inc.c | 90 +++++++++++++++++++++++++++++++++--- 1 file changed, 83 insertions(+), 7 deletions(-) diff --git a/tcg/aarch64/tcg-target.inc.c b/tcg/aarch64/tcg-target.inc.c index 52c18074ae..9e1dad9696 100644 --- a/tcg/aarch64/tcg-target.inc.c +++ b/tcg/aarch64/tcg-target.inc.c @@ -119,6 +119,8 @@ static inline bool patch_reloc(tcg_insn_unit *code_ptr,= int type, #define TCG_CT_CONST_LIMM 0x200 #define TCG_CT_CONST_ZERO 0x400 #define TCG_CT_CONST_MONE 0x800 +#define TCG_CT_CONST_ORRI 0x1000 +#define TCG_CT_CONST_ANDI 0x2000 =20 /* parse target specific constraints */ static const char *target_parse_constraint(TCGArgConstraint *ct, @@ -154,6 +156,12 @@ static const char *target_parse_constraint(TCGArgConst= raint *ct, case 'M': /* minus one */ ct->ct |=3D TCG_CT_CONST_MONE; break; + case 'O': /* vector orr/bic immediate */ + ct->ct |=3D TCG_CT_CONST_ORRI; + break; + case 'N': /* vector orr/bic immediate, inverted */ + ct->ct |=3D TCG_CT_CONST_ANDI; + break; case 'Z': /* zero */ ct->ct |=3D TCG_CT_CONST_ZERO; break; @@ -293,6 +301,16 @@ static int is_shimm32_pair(uint32_t v32, int *cmode, i= nt *imm8) return i; } =20 +/* Return true if V is a valid 16-bit or 32-bit shifted immediate. */ +static bool is_shimm1632(uint32_t v32, int *cmode, int *imm8) +{ + if (v32 =3D=3D deposit32(v32, 16, 16, v32)) { + return is_shimm16(v32, cmode, imm8); + } else { + return is_shimm32(v32, cmode, imm8); + } +} + static int tcg_target_const_match(tcg_target_long val, TCGType type, const TCGArgConstraint *arg_ct) { @@ -317,6 +335,23 @@ static int tcg_target_const_match(tcg_target_long val,= TCGType type, return 1; } =20 + switch (ct & (TCG_CT_CONST_ORRI | TCG_CT_CONST_ANDI)) { + case 0: + break; + case TCG_CT_CONST_ANDI: + val =3D ~val; + /* fallthru */ + case TCG_CT_CONST_ORRI: + if (val =3D=3D deposit64(val, 32, 32, val)) { + int cmode, imm8; + return is_shimm1632(val, &cmode, &imm8); + } + break; + default: + /* Both bits should not be set for the same insn. */ + g_assert_not_reached(); + } + return 0; } =20 @@ -2278,6 +2313,7 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode o= pc, TCGType type =3D vecl + TCG_TYPE_V64; unsigned is_q =3D vecl; TCGArg a0, a1, a2, a3; + int cmode, imm8; =20 a0 =3D args[0]; a1 =3D args[1]; @@ -2309,20 +2345,56 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode= opc, tcg_out_insn(s, 3617, ABS, is_q, vece, a0, a1); break; case INDEX_op_and_vec: + if (const_args[2]) { + is_shimm1632(~a2, &cmode, &imm8); + if (a0 =3D=3D a1) { + tcg_out_insn(s, 3606, BIC, is_q, a0, 0, cmode, imm8); + return; + } + tcg_out_insn(s, 3606, MVNI, is_q, a0, 0, cmode, imm8); + a2 =3D a0; + } tcg_out_insn(s, 3616, AND, is_q, 0, a0, a1, a2); break; case INDEX_op_or_vec: + if (const_args[2]) { + is_shimm1632(a2, &cmode, &imm8); + if (a0 =3D=3D a1) { + tcg_out_insn(s, 3606, ORR, is_q, a0, 0, cmode, imm8); + return; + } + tcg_out_insn(s, 3606, MOVI, is_q, a0, 0, cmode, imm8); + a2 =3D a0; + } tcg_out_insn(s, 3616, ORR, is_q, 0, a0, a1, a2); break; - case INDEX_op_xor_vec: - tcg_out_insn(s, 3616, EOR, is_q, 0, a0, a1, a2); - break; case INDEX_op_andc_vec: + if (const_args[2]) { + is_shimm1632(a2, &cmode, &imm8); + if (a0 =3D=3D a1) { + tcg_out_insn(s, 3606, BIC, is_q, a0, 0, cmode, imm8); + return; + } + tcg_out_insn(s, 3606, MOVI, is_q, a0, 0, cmode, imm8); + a2 =3D a0; + } tcg_out_insn(s, 3616, BIC, is_q, 0, a0, a1, a2); break; case INDEX_op_orc_vec: + if (const_args[2]) { + is_shimm1632(~a2, &cmode, &imm8); + if (a0 =3D=3D a1) { + tcg_out_insn(s, 3606, ORR, is_q, a0, 0, cmode, imm8); + return; + } + tcg_out_insn(s, 3606, MVNI, is_q, a0, 0, cmode, imm8); + a2 =3D a0; + } tcg_out_insn(s, 3616, ORN, is_q, 0, a0, a1, a2); break; + case INDEX_op_xor_vec: + tcg_out_insn(s, 3616, EOR, is_q, 0, a0, a1, a2); + break; case INDEX_op_ssadd_vec: tcg_out_insn(s, 3616, SQADD, is_q, vece, a0, a1, a2); break; @@ -2505,6 +2577,8 @@ static const TCGTargetOpDef *tcg_target_op_def(TCGOpc= ode op) static const TCGTargetOpDef lZ_l =3D { .args_ct_str =3D { "lZ", "l" } = }; static const TCGTargetOpDef r_r_r =3D { .args_ct_str =3D { "r", "r", "= r" } }; static const TCGTargetOpDef w_w_w =3D { .args_ct_str =3D { "w", "w", "= w" } }; + static const TCGTargetOpDef w_w_wO =3D { .args_ct_str =3D { "w", "w", = "wO" } }; + static const TCGTargetOpDef w_w_wN =3D { .args_ct_str =3D { "w", "w", = "wN" } }; static const TCGTargetOpDef w_w_wZ =3D { .args_ct_str =3D { "w", "w", = "wZ" } }; static const TCGTargetOpDef r_r_ri =3D { .args_ct_str =3D { "r", "r", = "ri" } }; static const TCGTargetOpDef r_r_rA =3D { .args_ct_str =3D { "r", "r", = "rA" } }; @@ -2660,11 +2734,7 @@ static const TCGTargetOpDef *tcg_target_op_def(TCGOp= code op) case INDEX_op_add_vec: case INDEX_op_sub_vec: case INDEX_op_mul_vec: - case INDEX_op_and_vec: - case INDEX_op_or_vec: case INDEX_op_xor_vec: - case INDEX_op_andc_vec: - case INDEX_op_orc_vec: case INDEX_op_ssadd_vec: case INDEX_op_sssub_vec: case INDEX_op_usadd_vec: @@ -2691,6 +2761,12 @@ static const TCGTargetOpDef *tcg_target_op_def(TCGOp= code op) return &w_r; case INDEX_op_dup_vec: return &w_wr; + case INDEX_op_or_vec: + case INDEX_op_andc_vec: + return &w_w_wO; + case INDEX_op_and_vec: + case INDEX_op_orc_vec: + return &w_w_wN; case INDEX_op_cmp_vec: return &w_w_wZ; case INDEX_op_bitsel_vec: --=20 2.17.1 From nobody Mon Nov 10 17:58:56 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1558206573; cv=none; d=zoho.com; s=zohoarc; b=d/ovBhgdXSWIf0kfqQr2F94uvRu90zTiwASNCoOvKhOVYRxYwjCQ5xt5mggO5aTW/tIMHimlxd0SY28XGTDx7Z4vFXjuFHvabRZHkMe9wZNtObUrgQeAKp0Fb8WpD+MGfP2GQ4XR/HoW0McA5SmUAa3VtuNsR9rAJHQE/1Tj5tY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558206573; h=Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=xoXIkCrK3V7BH4MhmjLPxOrcr1ayi9bYK48w1V2yt0Q=; b=mgQFmmObfbJzSrqXkGrQ64+fGBu1EoXyWmEYE6k2Lof+zCp0fYRS5JAv66IA76X0rooBLYKt7hKkj7zprZPkg7Y7QcB692HfASCLZ4yAc3PurTApEnskEpZKGFE3rNuJTXwB5AZySOTUC4fYiqMrQnKN6jdwhBFk7LacyxKgbWQ= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail 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 1558206573566669.7324080009994; Sat, 18 May 2019 12:09:33 -0700 (PDT) Received: from localhost ([127.0.0.1]:37615 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4hz-0006aX-Be for importer@patchew.org; Sat, 18 May 2019 15:09:27 -0400 Received: from eggs.gnu.org ([209.51.188.92]:59166) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hS4dK-0002lS-Gf for qemu-devel@nongnu.org; Sat, 18 May 2019 15:04:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hS4b8-0002m1-FP for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:23 -0400 Received: from mail-pf1-x442.google.com ([2607:f8b0:4864:20::442]:45736) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hS4b7-0002lH-PN for qemu-devel@nongnu.org; Sat, 18 May 2019 15:02:21 -0400 Received: by mail-pf1-x442.google.com with SMTP id s11so5235312pfm.12 for ; Sat, 18 May 2019 12:02:21 -0700 (PDT) Received: from localhost.localdomain (97-113-13-231.tukw.qwest.net. [97.113.13.231]) by smtp.gmail.com with ESMTPSA id m9sm2751274pgd.23.2019.05.18.12.02.18 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 May 2019 12:02:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=xoXIkCrK3V7BH4MhmjLPxOrcr1ayi9bYK48w1V2yt0Q=; b=kJOYH0VjIG7gZVYODI9E/MlwlsNMuX8r9npnryj3scJ5lTguCR+yzEFTix1GMlKQDu yGEuFcyjDNGwEGk3V3fMExRNo1B7JEDsbdPJ8om1LuHKXeZ1R+mhZupD/i5WCvsp5xxz 1Gw9aPpYOFkFi58rgX54H3612WNhDcAYmZMMGuO4isj7t1pkUE0IVwiDvTr2x7+n7qjw Vfv6y2LxVSiDvAjnOPc+Yb5eWfnksAw4SzZ7ksq8BouURkp95J8V1+TnE6+dWcvCrKCk wu81XHwHJK8bbMpGKnlFYbxOEJ2SIr+uhBbkXIrYqrspmqiaWObtF2OLn3Ec85XnDMtP 1mkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=xoXIkCrK3V7BH4MhmjLPxOrcr1ayi9bYK48w1V2yt0Q=; b=r3kRDiwG3WNEmJ7cIhcKtJ09H6LIQ3EGjmBBmFUabdd41c2mwNfLHAo7vaBLpRpg6y YeiDJab5P0y7w1vXmS21Mef+JQ2unGZ5vuILLr7xa2OuSKI1YvsU5JvkdPjRMqYSCCma oWtVfkLfEK34Z5u29QPC2DrlaNN007JCa7ISZRBvFBoA9ZLhrHpHamkY8y18MyqPyty1 WGF9ZnyZRHri8jg51o4WRHNZICRvLorlcSOUCqUWVxkRzbNdoZ9PEZBbujNffWWIrAi/ MIPR/ALjdU0PLw8p7BZvWHi4sUVeY6tMPHTaqCHBkHoa0VItWzcMJVPyRz/ryUgjWclZ LDKw== X-Gm-Message-State: APjAAAXr7gcbTs1vN3LLeO8agDELpEItdm0P8g85WyPIdqFepmlhTpgc nBAZPnxQKDw95VpN7tTsty/2poLMUbA= X-Google-Smtp-Source: APXvYqzy0MyJcIBydTeMkUkBWEY+ryeT8VFx+ErSm7cUYn0OnYnrbcncResptwjLOsQNmBP/PI9Fnw== X-Received: by 2002:aa7:8dc3:: with SMTP id j3mr69600746pfr.141.1558206140057; Sat, 18 May 2019 12:02:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Sat, 18 May 2019 12:01:57 -0700 Message-Id: <20190518190157.21255-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190518190157.21255-1-richard.henderson@linaro.org> References: <20190518190157.21255-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::442 Subject: [Qemu-devel] [PATCH 16/16] tcg/i386: Use MOVDQA for TCG_TYPE_V128 load/store X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This instruction raises #GP, aka SIGSEGV, if the effective address is not aligned to 16-bytes. We have assertions in tcg-op-gvec.c that the offset from ENV is aligned, for vector types <=3D V128. But the offset itself does not validate that the final pointer is aligned -- one must also remember to use the QEMU_ALIGNED() attribute on the vector member within ENV. PowerPC Altivec has vector load/store instructions that silently discard the low 4 bits of the address, making alignment mistakes difficult to discover. Aid that by making the most popular host visibly signal the error. Signed-off-by: Richard Henderson --- tcg/i386/tcg-target.inc.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/tcg/i386/tcg-target.inc.c b/tcg/i386/tcg-target.inc.c index 6ec5e60448..c0443da4af 100644 --- a/tcg/i386/tcg-target.inc.c +++ b/tcg/i386/tcg-target.inc.c @@ -1082,14 +1082,24 @@ static void tcg_out_ld(TCGContext *s, TCGType type,= TCGReg ret, } /* FALLTHRU */ case TCG_TYPE_V64: + /* There is no instruction that can validate 8-byte alignment. */ tcg_debug_assert(ret >=3D 16); tcg_out_vex_modrm_offset(s, OPC_MOVQ_VqWq, ret, 0, arg1, arg2); break; case TCG_TYPE_V128: + /* + * The gvec infrastructure is asserts that v128 vector loads + * and stores use a 16-byte aligned offset. Validate that the + * final pointer is aligned by using an insn that will SIGSEGV. + */ tcg_debug_assert(ret >=3D 16); - tcg_out_vex_modrm_offset(s, OPC_MOVDQU_VxWx, ret, 0, arg1, arg2); + tcg_out_vex_modrm_offset(s, OPC_MOVDQA_VxWx, ret, 0, arg1, arg2); break; case TCG_TYPE_V256: + /* + * The gvec infrastructure only requires 16-byte alignment, + * so here we must use an unaligned load. + */ tcg_debug_assert(ret >=3D 16); tcg_out_vex_modrm_offset(s, OPC_MOVDQU_VxWx | P_VEXL, ret, 0, arg1, arg2); @@ -1117,14 +1127,24 @@ static void tcg_out_st(TCGContext *s, TCGType type,= TCGReg arg, } /* FALLTHRU */ case TCG_TYPE_V64: + /* There is no instruction that can validate 8-byte alignment. */ tcg_debug_assert(arg >=3D 16); tcg_out_vex_modrm_offset(s, OPC_MOVQ_WqVq, arg, 0, arg1, arg2); break; case TCG_TYPE_V128: + /* + * The gvec infrastructure is asserts that v128 vector loads + * and stores use a 16-byte aligned offset. Validate that the + * final pointer is aligned by using an insn that will SIGSEGV. + */ tcg_debug_assert(arg >=3D 16); - tcg_out_vex_modrm_offset(s, OPC_MOVDQU_WxVx, arg, 0, arg1, arg2); + tcg_out_vex_modrm_offset(s, OPC_MOVDQA_WxVx, arg, 0, arg1, arg2); break; case TCG_TYPE_V256: + /* + * The gvec infrastructure only requires 16-byte alignment, + * so here we must use an unaligned store. + */ tcg_debug_assert(arg >=3D 16); tcg_out_vex_modrm_offset(s, OPC_MOVDQU_WxVx | P_VEXL, arg, 0, arg1, arg2); --=20 2.17.1