From nobody Sun May 5 19:23:44 2024 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=1558564261; cv=none; d=zoho.com; s=zohoarc; b=MQ+LZIBMYkNFY288rNhb6Ow+lBlwx0FPgENahtUNpV17V4ovtZlTgXzeRw+bGq8wkiGO2kYJpr/2Ct+exHP9dSWDEp8WUBTd47/L/TrgXL8D1d7S1dAMQhszCglGcFIKraXWPB4zvpgLDGlkriAJBRdIdmJJbDVQxpewBqFlNBM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564261; h=Cc: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=clJLh5x6ukRqJncPZVnYV1utyoCIrwQJXHDjU214FCUmzyCixv1iobfE5DWfscBRMKIT5CWzGYTirIOh3dGCOhg4Zmeh33Z8kvCVDLSYYFmWP/pM23xDGktaff/Bs7FbVImaNm8MFH+tQcBGI/obXPThFidD+z7KO30ZHHwjX4c= 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 15585642611791008.0846720144663; Wed, 22 May 2019 15:31:01 -0700 (PDT) Received: from localhost ([127.0.0.1]:52496 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZkc-00042G-2q for importer@patchew.org; Wed, 22 May 2019 18:30:22 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49702) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZin-0002vp-Pu for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZil-0007Ie-T1 for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:29 -0400 Received: from mail-yb1-xb44.google.com ([2607:f8b0:4864:20::b44]:43922) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZil-0007Hc-Ot for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:27 -0400 Received: by mail-yb1-xb44.google.com with SMTP id n145so1485153ybg.10 for ; Wed, 22 May 2019 15:28:26 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=CNtLSsppNDq+qCEdta/UyzFB0xSoIc+vMFY+eO0LpIo=; b=BJO33EC3dc+1GlCW3R0VHfkl3T4pzUvt5KRIQuUjBCwhbwXo0iMvXjFAhgTdIAPYaF iCP5cM2ErgGDzfSPCuql6BCogt4SihuPMab9OcKsH/e/4xRJBviFAiqnmqoJnl9ycvij IUF4Sl4SoIgb5/3+dIsOif1M0USHSG9WJghQ812MOIM1zrnv3M1rV1oaweaWKZsg8h64 26kqeMZz0lkOzAQcBGoacwlEl8osbKt1Tteb02wKhxFDOX4ul6vuAB3GadXpVsukf622 P937WRO3K6VIMRkYjUQBH2HwL/ql+svqA0FtL5Gsnnrs7o0P0Z8OIkV58UdITMCkhcuB 7adg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=CNtLSsppNDq+qCEdta/UyzFB0xSoIc+vMFY+eO0LpIo=; b=VYRxOYD5a1vOm0HvrxYtVowalhJpckG6frd+XN+GVw8ZZb7VbKhKacfh72d4B34dSD EpHJcOD+SpAPQT5nOWw6XVfbZ3EZnDkAB643gxNrDJXpoL0eFzMwmUqMw1vOPTfg3xJe eqRMHhrSq9Y0aHHM5kbSxwLYTujTodAwzssyOY0crjfinjumVyne9YfVkaXgid0+vbUR m9T7LGazSgti3cXbvwmsXGx3FghMydB5A8vWzlqZGK6k5wSG//qLZrt+zejxIGtYQ05S /YJBwN3f2+cGeakut20ej/inXH8iwnGQ1vn4t1eK5DEWfaC86J7EJQ9ANMdC/8Qc65Pt K0kQ== X-Gm-Message-State: APjAAAVDHkmaG3vDsGRSlKD3B/Rvmol9BXRkB1ifWvD2jIfrQ3cAIvlH ufcuw0Gt34/MOaYY9Yeg8ccGeRk+WwI= X-Google-Smtp-Source: APXvYqzTUGwKas+/XnQLZVFo8PtmkSP6ZFQkRiPeHCg56JpbkSOOLUUa+D+DoQfVAu7mlg3wuOqUUA== X-Received: by 2002:a25:e04d:: with SMTP id x74mr17250123ybg.511.1558564105372; Wed, 22 May 2019 15:28:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:06 -0400 Message-Id: <20190522222821.23850-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::b44 Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558564235; cv=none; d=zoho.com; s=zohoarc; b=eblHBibmOKNRaCPXj+Tbu/A2Xe3NB49JnKPotRPTK322xVx0fS65aZQiN9TjbGB96+FuJmnvYwTyb9P5UUA2POM7L1kKTVw5Exs5Lq4LQFxg0B/al3/OHohhWpiDNTE8yPW0KoU5Pxh1WJvHFzoM6wYarVSkdns7IPzpyU8p1vY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564235; h=Cc: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=oPnbiE/BUPkE19hH+2siIAYEF76rGfzHudzswX1YFZkrtjQI74HPDTHKKvhPeGovaLslhVKvE/TkgTsUmh7aJar0HzEoYFMn5zkAGy3pF6YovG4pQJg35D3WSPOOiqhmis0Z62AWc1bzBj4JtJ3Ovntnyy50iDPaSGxbeOK88ss= 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 1558564235295577.8589913209873; Wed, 22 May 2019 15:30:35 -0700 (PDT) Received: from localhost ([127.0.0.1]:52498 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZke-00044A-TW for importer@patchew.org; Wed, 22 May 2019 18:30:25 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49701) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZin-0002vo-Pq for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZil-0007Ik-UE for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:29 -0400 Received: from mail-yb1-xb2e.google.com ([2607:f8b0:4864:20::b2e]:38467) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZil-0007I3-Pi for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:27 -0400 Received: by mail-yb1-xb2e.google.com with SMTP id x7so1498465ybg.5 for ; Wed, 22 May 2019 15:28:27 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=oqAGJXCcrmzUdmSG3sZCijkOSbKbEdDFHwT2UnQhICM=; b=LdTUrcB0dW7oQ5OSz+p27Rw/40IUzZ3kspAb9Bb6GZdmumh4WAMq8CbMTfus2JQ0xy tAbAaNlcRSpLTy9OpQFsl/uXOcrSsFDB+UCWUAyKyDQLrOVblP3ICU44EHQW+cx29nBq xNo5yzrVaqa7jMuuMA2adv6Sy9ejThl+A7eeGc4HD9nvdwE4+MWXd9q9XdCUGSbuP67v U589o1ETHPPYizq2ieyJMSXc/MmzRYPS1glL7n/bBTULF4a34CF6JCeAYQVOrPMma0vq HSl9N/4OAUTCQsKzeei0e5jc5J+l2QYzc52hQwfbinDI3CzWpJXsmHg0keLiZaRKao1N MNNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=oqAGJXCcrmzUdmSG3sZCijkOSbKbEdDFHwT2UnQhICM=; b=Mgkijv1uB7qI1XYhEB05JQADxx2Ck8NYlocaOSdbWMOnYflI8kwLQzWRIMFUG12sJM i5V2Kp+smcHzzNCymTGpqii2vHNqBXh0Es3FiPjKzhXN1HtJx8fkpa0GN1EJlobl03YA rOFajLnf8QJQrBydHGxDsK7OZkLlvn/DaEvhviQ2nTkVd6z3StKwPf/IpNjjA9O9WeWh h+5thi0jPE5XHwdKKpN+q5xY1oa6X4eP4JL7wkpLKbBhzkR18PICgfKD0M3qdsMTlMzS 1W47lJrocI2MlpO1squL4h7SsLPc5pWKjTksOO2ZnZhHZ6vG07RFqk4LIQ30gR2DEDvV Lm0Q== X-Gm-Message-State: APjAAAVS25y2MulzFUcPmtrsvLcyYras9kD9IYknTSHXiI/rb3/4hK3/ r03V8cB7REKeb99Snnn0p/28Cr7uAQo= X-Google-Smtp-Source: APXvYqyaWBHL/vMYhDm9OJzFA1nl8x2ogsnMA1Sh0YOctUAvf17Cia67NpVXBzZRqaxL5hi1YMy6iw== X-Received: by 2002:a25:7711:: with SMTP id s17mr16169011ybc.327.1558564106446; Wed, 22 May 2019 15:28:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:07 -0400 Message-Id: <20190522222821.23850-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::b2e Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558564246; cv=none; d=zoho.com; s=zohoarc; b=du5ac8VcHwI/Bz8GJs+dUi745QjE012xopadWjviMUhYnlk9XO/Lu7V+2QGx4Z+TkuLVMib37HnxIGrKVPSPuKsfbB4h2uyHxiK8ngrVfKmLLqrxpELqE0BPHUgq9ciyGkclMa0ZpPwyfjISXeUI26GzCcy2+7SHmR3ulWN4q9c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564246; h=Cc: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=h7RzCffkEXY6wQhyOGkNaPTfImax+tSQYv+M3rv06GJAcpzKKRq/my6BEopiZxvbhrVLAezQ9pHiwnAm33xogb2XjnaFnk9m7n75kjmxp0TaiQTgh+EbvOnY+CEc6K3XFgGyeKsFSAZ0/K7TzAybQUZHmCSzV2+HNrh24cu3Re0= 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 1558564246138452.99095091272454; Wed, 22 May 2019 15:30:46 -0700 (PDT) Received: from localhost ([127.0.0.1]:52500 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZkk-00049B-Th for importer@patchew.org; Wed, 22 May 2019 18:30:30 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49739) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZip-0002wN-Up for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZin-0007Jx-Ru for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:31 -0400 Received: from mail-yb1-xb41.google.com ([2607:f8b0:4864:20::b41]:37122) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZim-0007Iq-CV for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:29 -0400 Received: by mail-yb1-xb41.google.com with SMTP id z12so1502448ybr.4 for ; Wed, 22 May 2019 15:28:28 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=LKqluvSgNgObFg/5PCh55olLBZ6qvjIouGnoyC1zOlQ=; b=sw3c6Arf3Uux9PJbvYUEXbIpRViToybYPIkYQAysB+fOYdl1D4VKACLZxvNeDqET4I OTopyWF8BsqeFlkcznpjS0tb7YJmftV8h6q9acFPj8oxAhbqJwp2arrZs/E1vbJEBOl5 yaZIO61Xt4eo0aPc6/vd1wzVLWfgAG4mHWIQ1e0Mi81UQDuIs57/XdrahuBC2fhgNt1t 7euFsNr+uCdlnEDK9+VLfCzux+NZPFY7qnIqo50B7zYVFzGpVeUnNHxlvJHwh6ktlhPt Tjtb1nRaz4StLplIYkzAEMaPASEUkYFniG4vMr+GCN5TUnC12dONiq900NOwPd+zMeQg qRyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=LKqluvSgNgObFg/5PCh55olLBZ6qvjIouGnoyC1zOlQ=; b=XDc3Qv/BcfcSKGkwPPDCvTWDETZ0myJrfGhQwBGtGlSqoM2DeGQEAV8iV4qibVQ6tm V0xd5Gba+N9yjsbVcjmD+okzqryf22+CJaF8SbLkABo8MeYM2FuzdrfjwW9ykolcGsuw FHQQJLtYArDpQrcO6K9xut6yhWJD+okvUIiLUVl04D4ilnB4F1sxHn2LyssHnCJqIFBu jJYnIISQXfBW50r0vYmk6IrRnQORF6Zn+TeicP/KAFY2UQuMkzqdOur2ekWH0oaQFIlH P1tugoe5FvvYohOPnA1d0FEUcX22ivPKUHyirmqrHCik2Ne7DUuRxrvrXtOvUDpIbu6t R6mw== X-Gm-Message-State: APjAAAUby58CS1M16/SMXLOi5pcuClkxIjkA0WJCJE8dGQRY3y/TgudD ze+Ha7GJ5++xraAtbcGBRdKEV6iqkHU= X-Google-Smtp-Source: APXvYqxkEd4pNmQeFfHpbI79fKOaKWbTYXwqP7vVmI+1Z5tKzL5LUfFayh8orbBnguK2sjT/lLTmiQ== X-Received: by 2002:a25:4d07:: with SMTP id a7mr40846887ybb.176.1558564107426; Wed, 22 May 2019 15:28:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:08 -0400 Message-Id: <20190522222821.23850-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::b41 Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558564435; cv=none; d=zoho.com; s=zohoarc; b=akSslOVJVJlJvBU4/y1lMaUOHlUlagTa/AfT6Z+navKXVaY7wh4Sf0gfE0aWygCd59blzOwpNP1mVtSsY0w0itFYFgCc7Wfp7L9Rdfdx99qTeCFkxK1wJShppsAPzpQ2Jlc2F3rfGRixs/WIDsprK9GCjnaM/dGlNXVlzMO7Ecc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564435; h=Cc: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=V0vWj7lPCDAKQCGp+bG1usJUBDZDEmEP9fk4TR5SF+ssjh6kLHgxvku8Mi/Rl1o/n3hpWjVk1A/gLbNabtiC0k5rLWZ4Rd3+b42mITnYdGDCm8MU1AzumN/LJEJSGHXaPULvHSzllhEkadHafujwwGvg1gB1Tuq6qnxtcOXiGlE= 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 1558564435518719.8320874931775; Wed, 22 May 2019 15:33:55 -0700 (PDT) Received: from localhost ([127.0.0.1]:52555 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZnw-0006qe-Do for importer@patchew.org; Wed, 22 May 2019 18:33:48 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49741) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZip-0002wO-Uo for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZio-0007K6-1y for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:31 -0400 Received: from mail-yw1-xc44.google.com ([2607:f8b0:4864:20::c44]:33082) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZin-0007JT-Sm for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:29 -0400 Received: by mail-yw1-xc44.google.com with SMTP id v81so1494347ywe.0 for ; Wed, 22 May 2019 15:28:29 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=dIrUBx1AozwSRTf1CstcHoUDbRuw3JV0rC9AxpXdw/A=; b=IYPob7b0zzs+KlftGHpeu4nEX3FpGsNqAjDLjjae9PvIhmoVaM0r7mloEGNqdk9086 xdvZyYgbaspSq4kpH2+vuQIuicGIxfJS3tuZZCyGVTXk8Pn6ykXsm9RjJyY+ohxAJsgg rz646o2U1lzUekg0d0IyBZBBwJf6BXJ0o8qyiaxMX6EBRTFdzNhGHSAFcb+10XQ0zU1D ZXSdXZ1VQXyKJ/C39J13Ueq6XhPIqgreQA0sWpEbAM8Wg5tDEcW27BwKsGfPQrHHo/nU AfGi2Hu6nUywlV1W0oKqQtV2ex7P2dKh7KCBNJG4oZNaUMQ4dsQWR5t08tyZNUGsR+1E q6iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=dIrUBx1AozwSRTf1CstcHoUDbRuw3JV0rC9AxpXdw/A=; b=X8MNNn/4vLy8jU7bWkC0R15b8p+gYaccgfvVaYpjVYlrq2soYBMxuwbrEpP4DwshzZ 6P+5TBWk8siqe67Xjv3UAh2fguKr1lqFjavjZsFTTKjsOswX3jPlcyQWOb0nLac0fcaq 3mrmdv41vCIkS7qby55PG2AFgrcd5Quc52H9PVQ95pgZIF4vnY1S6RhnJmSN1d4EHXfk CGd7sw7vDLlVraN/srj78BmCrn9nWfAm1UFG+vvAizFvSDJkXbm0/JWovwowyR3mfdSO 28p5zpYpm/L9Fch3W9ROaaJp3Gx7AO0EFU5qmwtamTwdKpNuQGf4e4O4bZfM4riNyvO5 aV5g== X-Gm-Message-State: APjAAAVfOuCrSSJrwVikjvwET9iZnJFxDaZrAGV2C4ZjsYAfev66ppAU Y3xhIPzn+SOuXn8qB8wcRrMc8qHv/i0= X-Google-Smtp-Source: APXvYqy59uJYg3FtG2fyvPMUX5QOHYubXFyW6vDKBI+jBjP/LcR4hpcMquhGTCbImlRlwUYdl5JtPA== X-Received: by 2002:a81:72d5:: with SMTP id n204mr43050821ywc.72.1558564108440; Wed, 22 May 2019 15:28:28 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:09 -0400 Message-Id: <20190522222821.23850-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::c44 Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558564443; cv=none; d=zoho.com; s=zohoarc; b=It53f0zPeEiQv9vymrjGy9SI0tIvy6AB7WY2QsqTeCAf+/TAOA6+EHUPuFEjCsN/Otqo508tG95qquo/qVIFhF8n6q6KWDH6ZnrFsomZm6ewzmdCzYfVj/Sr/sj2SXyr3xzHAVVcnB6vR1bgn+qsnmKu32JCTK0gw7ulgHcMw/o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564443; h=Cc: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=XmkmOR7ItdgpXVV1mO8t2zgCO4zPWQpFhYxUz79gmgC0vr8wn8U0vscqwLv0YnrZ+dlIAZ02Wwk6NC1uvcnia8YfC1wBCZ0nUtulLoIJznE08S4yGwUt/g+GjYfuGoY8bfiBkHvuIB/ulWLzJiP/zUgvodneNoHQ45UNewHy5QM= 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 1558564443129438.87293305770186; Wed, 22 May 2019 15:34:03 -0700 (PDT) Received: from localhost ([127.0.0.1]:52559 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZo7-00071C-1d for importer@patchew.org; Wed, 22 May 2019 18:33:59 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49785) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZiv-00031X-PC for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZir-0007M3-Ve for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:35 -0400 Received: from mail-yb1-xb2b.google.com ([2607:f8b0:4864:20::b2b]:46056) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZiq-0007KH-1X for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:33 -0400 Received: by mail-yb1-xb2b.google.com with SMTP id e128so1480127ybc.12 for ; Wed, 22 May 2019 15:28:30 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=IHzD/cFhgds3vlWGOoqI0eCnewZUJpWI1Gh0PD14SRs=; b=r3PiTJIYGw6Qs7AjLyAsPGTd64/vPXH9IOtnr5MlPytOjoetK9dxpS3cgnAzqP+nZp imN36oAEOka/Ld0rteneJ81sNTxmgnQfnjlbcX3U4GeD2PIPmVVpUo4Iv2iumpBiy8VK vjMbnYTCY+JzY6vYjU/HIE2AjGDAhCPxjHzHcSjYfq//3AC8MPmunp5tdTq7tkiAC/F2 NT3U5y97EDAeB+QxGELztQ95aIGyTYE/lOgvroc4MEDKdNGa9E7FM8+73n9YkQ63Pc4U 6bT7n3KnS5lp+UDtATlcHcwg4AsnTEyiBekXUvaGsPqql68UOpMqm/GDpT+OFQzr9qdm cR+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=IHzD/cFhgds3vlWGOoqI0eCnewZUJpWI1Gh0PD14SRs=; b=YS8g7zKvyX/gmPcoaJyKRf4q31lO36p+1dbT1J/CZhcJYUFUGIUB39FHKFhAZpJ/G7 e/nzJVQau8GCCHIvfpNC9qKoHdNQeZU3C+owv6SJ5xe/IDBAlS7UV4WoDKROsAKQjD65 qdOHdffQwhc7V4o+CekFV5MBpXXtOI16LOsSf+s1pORhHIyeGQ/QxM8XUV5TkQfMwTfx CkpbnMSkXH0n0ILRGX9UjZGbB9hbghlPg7YGk9JDOZTyubmFZ5LqfAhMShb3fi0KO/Mo uYIRdFiZg05eaztGu0ufYMEuyLc1zWFJxYCp9PYgTt7+TDjwhEFRU1eWUIEitzRCN24E 7nhA== X-Gm-Message-State: APjAAAXQ2PPKk6hO9lj130bBylq7CZJA9ttLYHgakU41KaD7KO+u8Y8v dWK8VenHMnJ/DIK+ikpjrkWY0rNDC/M= X-Google-Smtp-Source: APXvYqyo1JoapNx8fGfnh7o8tjUFsrIafCKZLsVaxbvsjeYfyP0i1+j8wrr/x2LCzX5jj/1H44Wxug== X-Received: by 2002:a25:f20e:: with SMTP id i14mr41568617ybe.122.1558564109512; Wed, 22 May 2019 15:28:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:10 -0400 Message-Id: <20190522222821.23850-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::b2b Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558564247; cv=none; d=zoho.com; s=zohoarc; b=e//Aap+5m9THT/3gPGcquDzU1xsuIbULxZayPQ5B3U67jpSg6zpjxQxgeawulhAFLnnrmSVyqw1Cek4hb1+S1Lk6yoHMvcfD8VXlAllDfwDlX+EgW0DzDDUY5xW+HFWC1wvR9ean98tP/sxAsKpVMOJXk6AdXjaktXNqgd1WEb8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564247; h=Cc: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=amkq4zKbTLZT0vPMWHkbJVS+Gk2dA9oAcAzfepI3Vtx0fVed+ope8OMwYcDtwHNyQKWyD6WgXm/l4huOkM/AKlTSeQ5vxz8l711a8DNkBOeWBBdVfXGWtUYagCIN4DhdZzoBySCUluD9iIlJLbC24mBPjCW9dmuSoNT9r2sZucI= 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 1558564247302840.1946704665093; Wed, 22 May 2019 15:30:47 -0700 (PDT) Received: from localhost ([127.0.0.1]:52502 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZkr-0004DQ-7M for importer@patchew.org; Wed, 22 May 2019 18:30:37 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49786) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZiv-00031a-PO for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZir-0007M9-W2 for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:35 -0400 Received: from mail-yb1-xb43.google.com ([2607:f8b0:4864:20::b43]:40183) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZiq-0007Kd-1q for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:33 -0400 Received: by mail-yb1-xb43.google.com with SMTP id g62so1490373ybg.7 for ; Wed, 22 May 2019 15:28:31 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Dp2wE06ppFvr7SDc7+wjEouETDXh/6Jd86FUlkd8ziE=; b=fIPiLh6hCxAuH1koRb0SzwwUI/pJky6k/oG7kQyC5n9CWGBZUBZTj3hLS0kkJH0+k+ 2QcPfGDNmec2gxWbNmyh7eyH59U8RwF+zAgPeQGT3eeWLEmVtLv43AswahPT1SPBLrwz GwA7mrBbYxS2Mh0QY0rtsvvXIxC+OeJJCixj/DigvJSeiX35XdpbT+UKYaPk4GWD7Rtf XEV6aVqkYfHPZsdnaq9Y+0wg4r3ytR4zirCq2esL1KY7n0LoD1G066kCHLm1UBw537wg 4rwr98apdk3ekolWwq7wZvSQ3FKKpNqNoKkXmeQvGm7PdhZJpBALhcLyhZvPaf0qUxC7 bmhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Dp2wE06ppFvr7SDc7+wjEouETDXh/6Jd86FUlkd8ziE=; b=qUY4CvIoVCJAi7fXLB5UmYvEZYP70zz6XWcoR9re07eH25Vr194B7LWa3fCzb33SS/ fGc2N/bNvNbVMcx/snFW7rUHG7vKJ58B9tjVCryn77R01EL5ykxS97Lz9drLsx07owqh q7yQlhJwfUsIAhzWQP4IoywBCUAoMH/hX+Y0c+MTyo9kWi2QLTbXDCx2XO10Qj3aMTAw QnTgOknUxXeEAOJdTKTxoGTdAm9bmuj99sv7Uu0YFB283ZhADSkRY/tpfP95i4SgGvxj WVWUPVjgi5S8TZhRxgT1QVzvDC+kM/eoYDpmCrMrV+MC2k31HbXWP8TebYVSQNkF8YG8 0vRQ== X-Gm-Message-State: APjAAAUHuHEh6fosFysyq53+Y9z13jyp9hTn9+L9PYMiwYplUAGzdv20 vwv/VaSAo7vDNfqlNPxJPKBCmz/g0gI= X-Google-Smtp-Source: APXvYqzWQBPuxNNMC2A3mH0zOR6sfXEzHdvIulzZp/fQi1YXDfKbTAbcDQiNNeLWXtfVyYY1KVbdyw== X-Received: by 2002:a25:ce8a:: with SMTP id x132mr11836887ybe.239.1558564110477; Wed, 22 May 2019 15:28:30 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:11 -0400 Message-Id: <20190522222821.23850-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::b43 Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558564676; cv=none; d=zoho.com; s=zohoarc; b=UE9cBD2kZVUIY64/tgusa/MJ0T+k+Yi+RO5T6PQZkZPZ0mIgJJ9ICEr0FYsia+zsWCHmra1L15B0SIEIHJr9hu5bJG/gUaEDMZp+D9VPWmVLjMgQO1Xr8BnHyhSNHKs836w0/oRCDi+7y4peJvVa7+0/z7qAelpmcbdJbiHUglo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564676; h=Cc: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=T4+MV0rn9859TAn6y7TTN0XPs2tBYFVmKBowHNjxPrE/gwecL+oUafB7Xlg4ucC8mvRAOM8Er9hjSJdZdKqTuABSSqcKe8+Bmh70sG7r6Srjwim7+j1c3XFkcug8g/7SKboDIqE0EcXet6XbL8yTSYIHtjlYMqAnsWKhADS827U= 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 1558564676188773.6790232635038; Wed, 22 May 2019 15:37:56 -0700 (PDT) Received: from localhost ([127.0.0.1]:52617 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZrk-0001M0-69 for importer@patchew.org; Wed, 22 May 2019 18:37:44 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49839) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZiz-00035A-OB for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZiv-0007Ni-PV for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:41 -0400 Received: from mail-yb1-xb29.google.com ([2607:f8b0:4864:20::b29]:34528) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZis-0007LP-0u for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:35 -0400 Received: by mail-yb1-xb29.google.com with SMTP id v78so1508084ybv.1 for ; Wed, 22 May 2019 15:28:32 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=h2THfX9yFXUdDN24lXnYzdU4v3sPNpuvs1LZ+ysU720=; b=kloKS3sr0XYU/InhwH+l7vSipYhfurUNODSj/0nRtWyH1TlryQE6iCEvYC5JN76S4Y QjT5mGLvMh3TVYXXjqhLDYtxxSn6mKoR3LISPBRzRruSxfH+C/wowE0APooPS/T1p8+b 5UXNm+DYewk3nq/q36yZtGQaQ1pSeTfwSwZIOSkI0dG13xKFOCmy0tfTqOATpJWmjjlX uyINEgXB6g4fMMremipfHc1Nv7KpfmeYZLTKW4RjC1pNCwq2GzReHvbtF0WDQJHk1FZu dFOqROyRQikAcRQr8N7Txc0/zCM5SovjNqSmfNbZAyb5UjyKvg7Vv2CRN6FZRRGiWk5/ jZMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=h2THfX9yFXUdDN24lXnYzdU4v3sPNpuvs1LZ+ysU720=; b=a6EXEX7z7aeq42POTHslMhf+q4dHvUcm59aM5CdqlHSPVu9ErfE3s8mxxQG4yOyArd +0CBQcsI9xa73XvYx4gfUWyp0FbT7Tm0GOHl9J2+dB9VzHVQB7NnjXyA7DzR1iMb6JUq keyq/uWwoLTizKql1mpysYQ1AkPtnIC4Cy8rJMejbEmWbA0WI/DB7WJ3OxjAYKWrzPLU 70SngtjTok6UdlBmuqClEmXOXY8EM4J/Rn0f28NF4zLmtu/5EMSFqPygFOQQTURfSBLp Ev0rIHVDNwLrPloRwsQldmLfRgq+qEZRMAFVq+V6Aed808VRsJx/u/paDTlb1CZJHZiw 6afg== X-Gm-Message-State: APjAAAVSCwCcvx7M+NhC31uR7ozGQuEBgyJwhPpuO1TycoLN+E15qjHc T2JkoguTL5llmQ2NKz/STIOVtdXeXAw= X-Google-Smtp-Source: APXvYqxvl13RNClaE8ll1hnOI0i5FOY7lbvsMvnrdyz07jbKvwpVRKY7AB0WTSkdf9CR7NQ96I3hBg== X-Received: by 2002:a25:3302:: with SMTP id z2mr13908073ybz.437.1558564111712; Wed, 22 May 2019 15:28:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:12 -0400 Message-Id: <20190522222821.23850-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::b29 Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558564620; cv=none; d=zoho.com; s=zohoarc; b=OW/977tpWd1kxD7PVUR0iyifsxTIBL/Vao6IT0rnpcNNkRv8Nr91kJrbKgXboqosQEOduZ/L4sg5EdCFiXI24/4Hk17/6Jf3gbf9xq50L4RPIzEhxzUoEozsYCGQeI8BFzF1aN7cTjSPF0mZXwzMqbA7YoMfc8vX/ZWGXo7zND8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564620; h=Cc: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=a2vg4okvcFGTFGQfEN3HFtnIazZsI2B90hvHfMNUMjSvoD2Jn13n5E431WQ/fuP8BCWFLYe7z6gUCS1wgri6/jx7XE4QLJaYwtbUicvd/MR/DdksyV5gYPmYO0TVA04qKauQbdxnNBMzIhpEtfRpgcm+clyV6GNeBViToX5yMKk= 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 1558564620362794.7983957499889; Wed, 22 May 2019 15:37:00 -0700 (PDT) Received: from localhost ([127.0.0.1]:52615 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZqx-0000oL-D4 for importer@patchew.org; Wed, 22 May 2019 18:36:55 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49810) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZix-00033H-Ql for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZiv-0007Nv-Qa for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:39 -0400 Received: from mail-yb1-xb29.google.com ([2607:f8b0:4864:20::b29]:33675) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZis-0007Lj-0t for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:35 -0400 Received: by mail-yb1-xb29.google.com with SMTP id k128so1510754ybf.0 for ; Wed, 22 May 2019 15:28:33 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=oLTml3dhbqYDrgc3cYARBzaQje8i0Sq1y8nx8+B4Ie0=; b=pTPteNdO1BWnwgr6mpOUVr7HxALu5LCwC6qtzaEtwfPWLgv2cS6KAkzZ4I7jtY978M LOheEb/zZOBXIuwPIWeZ6nDAYGlM/dPdEz6AQhDqdzvRKQVpz4aw4GZfdsTIzrRwEdjs vtausMHEOkzFVmcJGNnsdjnDgO0qdbFeANZcvnziO3W/37WGEjUE6P0cRBFTDqs+8FL4 IIRu4ShJfcjOtac4yLJ3tlTaW2qFrJr2drhnq0AQ15QzvLC61hoN5uPBcZRPThDP+9m1 Aczpz5Gm3ryZW2hZZJPG3rrfpDFmBiR/PLv/h7rBPKdL/Nyh8WT0O1x9NVGJ1rR/J1Al I9Mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=oLTml3dhbqYDrgc3cYARBzaQje8i0Sq1y8nx8+B4Ie0=; b=HdmKlUavcXVWafvKYvoSAqg+oh49MZ1+oUzeO3NZmAhymYy+VZaAP58zOVW+Qy3H6t 4w9DYFKpzGU/2XQINr/V0I8s+SiHVZoXawtUV6m+18IOemmQAFrXxyOfdbtgGlVXZPnF AWaD1DELBIk1McGYOT7dBnPca4AulqmePb3aObbdNseJlyfEPA0qP34KEoz73eKrpVS4 87aZJIWGj6KFAaXl+6XTXGccR6VjjOQctmvs1tWXjtL6SGivopmVnTDP6BYnOdqGGqow tLE1C0/TuV0UoXk7mhKwH2KgCjMekndZ4dNK3XnnoG+NANraS9IXXuPuvE85U2YmMJsV yjoQ== X-Gm-Message-State: APjAAAUaGmnSsbdEAAoNt0imw81zOMag3GwVOvHcWj7AbugRS46SoyfD xPP7SJuYuLKaAR6zD/+2lI7NFrFGODo= X-Google-Smtp-Source: APXvYqyctjGmkEgIAgBLK1dEUKEACnEEpDv0os+p6YDxIC70UvAXMsNOJNZmObR9JUt+It09XIRC4w== X-Received: by 2002:a5b:b92:: with SMTP id l18mr9756738ybq.283.1558564112753; Wed, 22 May 2019 15:28:32 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:13 -0400 Message-Id: <20190522222821.23850-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::b29 Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558564610; cv=none; d=zoho.com; s=zohoarc; b=jukZWExxuA1ghDugRudZRm3Li4eUG0xT5KxKYkh+UG0FJyLGeyWloBnd8dwWdxBIcxt+PCnfF4f+LbscoKAPDXjkaY8fXnzjD0bVjMBEzjqTmoSCGE114FD1vhFaHyato87PcgMJ1u3LWzrUTutpTHwA/RQVU0qYyWT6WypwOLk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564610; h=Cc: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=gfmx4BpgjrZqQ98Eq9DmlLmtVXIpnnO7wCEsBI4NwhqbQ5AJ+DR83svdY1/4gn2R5//lF2WEuPsUnLqAQBgVjc2DQDfv+KBe59heaOX0kcuhhgO+kQUkub/2oouW5oEO7ndHgueeXN1010M0JG06Izah3LHVMb8DN5Od8hkOuxc= 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 1558564610355567.6184862948982; Wed, 22 May 2019 15:36:50 -0700 (PDT) Received: from localhost ([127.0.0.1]:52613 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZqm-0000i1-9W for importer@patchew.org; Wed, 22 May 2019 18:36:44 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49913) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZj4-00039x-JS for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZj3-0007RS-Gx for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:46 -0400 Received: from mail-yb1-xb31.google.com ([2607:f8b0:4864:20::b31]:39104) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZj1-0007MV-Ol for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:45 -0400 Received: by mail-yb1-xb31.google.com with SMTP id a3so1497777ybr.6 for ; Wed, 22 May 2019 15:28:34 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=cyPCzZg9DUKeW2pqf+eu++K5/1I4IivLKFA9dQuPgvg=; b=oRkrI5C4KGkvNs/oqPbgoM9XFy+VDahGjMZCQDmIFo9jYrXEl1mZkelkmMVlrjh5ns a53I0lC1ebsp8juhQWg26bt6EJL0nClavDqUt8DHI2ZPcNp3IeuOVz2MkIqYx2psoXq6 PnrRqKxq3DWlCMU17cZoEgRF5l6baMw8vA1GmqvaoKODr5qaIq+AgR2O+0MxwGBcfJu1 ptPtMCebT0eTFQNJAgvMvGYQJaA9a4iCmUJ0B6TEByxsnGIT77TtcLwPSWCmTjuPL+JN i3kL5at0OZy/VHz6W4dgAu+OP0oCYPhCplr6L5UCG3iC3H04daJcVDmgYxjSJS9B8/Ah Tvfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=cyPCzZg9DUKeW2pqf+eu++K5/1I4IivLKFA9dQuPgvg=; b=UApYc9uw3JHbg8yDY42q5n2qiNeOPm2okivd/6WOI9bdfqvmErA/gLyO/l//1XkyEU WBmfzjPdyhzhWx5QqWmSaihEsnAmZp1trPLTCD5BBLWlvHqdtQPfvS9ea9u2VbUrQPmY LHdFNfRC7VCLSob49wTbnJ+XPQjnhmEDJvbAgN8ovNZOf+IcutXZq7mJhHPynE70hE/T OANIfQr9Vl4nz1C9C3HCJUj4S3Ug7Exg63rTVDq6iXx4m/pfj2IxoJNB8/1P/6oOLTV9 mEgWcVPVNtqOUBHJ7GPSNEf6hvfSDw6wjT1t5GmxME1aoZCEguzWpTLkEyv1nUne7DDo bhBg== X-Gm-Message-State: APjAAAVQV0E8AP2Qms0c8NK9QougZ06MK58qhCV7TlBRSJxkgBPolPPe 5kU1s+2jSZucOgV8btYZ0d1xHUYnk/4= X-Google-Smtp-Source: APXvYqy2AlpWHnO73CO5ZDw2917cOavzO9knlQCNA4k1E0BJg6xsKG1/6QeLuvukDJXLBzDWI2N7sg== X-Received: by 2002:a5b:bcf:: with SMTP id c15mr14094056ybr.13.1558564113817; Wed, 22 May 2019 15:28:33 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:14 -0400 Message-Id: <20190522222821.23850-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::b31 Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558564763; cv=none; d=zoho.com; s=zohoarc; b=Ee9JR656TKsPbJbSRxkwJ++3+NqwINZ6IbjQdM8Bopk9U20tex/w0nd37r9gPKc1LjynGidMFn8fW5xGpRQ9T0l55H1feJCkwi0iGGY7UUjoP6DukCnOw1PdPObDRLFzxrvGJR+6q29moxoz1FcBqN/X+ELESkkFbxscE9x6lik= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564763; h=Cc: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=KuIP0ETSkAiWcGg3rGXsVIfiVLfF54qZbSG7HpNP3RoqK+U2AafwPlti4OH0SHQklobnZdGLUPV9RO7VyUKC02ctFkQ7sqrnyl6LyyVDlwY4agRWtV9ESn2g0ovRO0WyUW5M6BLLWGIrdO2FQNjAVQyp3zTBfA+0WziNAxKYfmw= 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 1558564763768308.5624601874225; Wed, 22 May 2019 15:39:23 -0700 (PDT) Received: from localhost ([127.0.0.1]:52631 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZtE-0002Ok-PJ for importer@patchew.org; Wed, 22 May 2019 18:39:16 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49911) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZj4-00039v-J4 for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZj3-0007RF-FV for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:46 -0400 Received: from mail-yw1-xc43.google.com ([2607:f8b0:4864:20::c43]:41249) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZiz-0007Mp-Np for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:43 -0400 Received: by mail-yw1-xc43.google.com with SMTP id o65so1483056ywd.8 for ; Wed, 22 May 2019 15:28:35 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=OLftcOa71o3SDWkHEvzuYmmBM81jvFAhtQKjy7MXc3g=; b=uUBBJxmvsqRHbMy8XSdo6r5vF5HvwD48/t4WfqRF0g2PV7vA2RF2BKGARd+3PLeRAD 4JzeUXHypr+jbcec2ca4yxa9VNCu5NrZJSk2IVbYNLTCPi++5yE3D4//d+BrlaSM312+ UhdqRWPIH1Rwa1T1OkhEO9t6NLetYVY592p5CCgJPGnnO4hJIXdPXK2SUvM4DwvXLarz fOo8dNksT6NFut81D5N066dGNKvIX0C7XtZrzcjMPj+0/2WcYDb6QLKZUJ+mBKHKjqE/ xpSdFH4i9YjNep2b6ZBLIcvaOr4ObusdfgLDPraa3rJiHAKJd3DXrZtgCpRR4Ukfhitc fR2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=OLftcOa71o3SDWkHEvzuYmmBM81jvFAhtQKjy7MXc3g=; b=a0aYa6NUUGd0R3UFPkL96JlYEeiyFB3WD/RftvXgX5aD1zj+AMiDBvLtYpikhWmwL9 L0RcWWi8UeQ3Tmu1KOx+ixhLGDqwOYaZPJljmgj/1cR7al8aCTDRc/MSTWTmzdZeruli rWCT9NcYKRex5nrii/opib1oGnHbuGhG5yCKl3ei5YgyUzJrNzL/otQ8IBR+I4t8DADn 58mL6WtCtX8XBTEgZ8eVP3QZ88bUnCSkqbM/27yrUHrx1V60ROfeHRCxahUzwXN23mzY mfAc5JzSCtqNe2+2YhiHfT6URD4bqO4Z0TTFi+8MGsdRPb0t8/fVJpHF9JSSobLXkWWe hAww== X-Gm-Message-State: APjAAAW6la42w027q2Fb1rRNs0/IZITvWh8P6ljNyOGaJxfl1mW3+yWe Dd15Wg7rBbKUkt9+JrKXEg3O5AO0JH4= X-Google-Smtp-Source: APXvYqwnVFFk/LIWzXbUfC7yy1mlo6A/35o/Gp3RT3FWqk39mZGfGHgAToBjGJJ09PBp8fJrcpFw6g== X-Received: by 2002:a0d:ea4c:: with SMTP id t73mr42896537ywe.472.1558564114807; Wed, 22 May 2019 15:28:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:15 -0400 Message-Id: <20190522222821.23850-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::c43 Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558564989; cv=none; d=zoho.com; s=zohoarc; b=Spf66AspHrau9HGJrTN0ODrjgQg5UCu5vwka7JvyOmG7EbMHGJnuVBpJ9zxT73DjFCa9uUiN6I8T02BsDQqC8Tr27u6vjzCUBZSuNiSFPa/iStHDL/9fQVbQefEeNNfkJps+27WDaSv7UygEXkc2mcXGWX/VOrR/rpfP0g32LQw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564989; h=Cc: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=U8fqF9YE/VI5o8CLSdp9Rzr2lE1uxiM/YSrsbc+8JF5ILgd+L1aqvTe3qlaSgtTd1C5QRe8Y/nfPQelfpRcxFaHSkP0Nas04LSeObBN/nbOkrEuwXErWzKh9azHo3b9hymGH7PlkZH6n8MKAa8qVlwvqTRjq1bA/IMKCs/NYuNs= 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 1558564989220644.9360542835984; Wed, 22 May 2019 15:43:09 -0700 (PDT) Received: from localhost ([127.0.0.1]:52685 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZwB-0004aD-MD for importer@patchew.org; Wed, 22 May 2019 18:42:19 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49955) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZj5-0003Ag-C4 for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZj3-0007S1-Uv for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:47 -0400 Received: from mail-yb1-xb44.google.com ([2607:f8b0:4864:20::b44]:43923) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZj3-0007N7-NZ for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:45 -0400 Received: by mail-yb1-xb44.google.com with SMTP id n145so1485279ybg.10 for ; Wed, 22 May 2019 15:28:36 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=2Z/xMZNbQQoNoZQShCqBViE6D5UwKBhH3tq+yJTAfz4=; b=K8ibIvSsLExOpQP8f2EyNiW9rB0tAJOSnxMoHymryzxrogsVcFvfWN7WY4P525e0rO +noSVh7PhvCGcYSINq7qkjKi4VI/wIyjYMxr9pDHrs4ao6Zpmmfthxyo2RYSm2nayCRN KSO658o+bzBrLxDRDvwWMKVloyGIBJk7qEY9boTgmenY6NbSb8EzWZRJTD826tpei885 Sd5eURlJyr2w81YEp8/OGjr6H7JYsXPi+7n+6csEv13Nge4nTkJV7wjM7s9pp7BXd+Cs Yg3GAMQEoPvCxVGOYL5211IDdE7OUcBra0s8c+HXi6AUggOpNwXELustTE9eIyh++oEQ HfxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=2Z/xMZNbQQoNoZQShCqBViE6D5UwKBhH3tq+yJTAfz4=; b=AiKG1Gm9hLvffRWy+XUIdlpQkwsfYaS5mQHZaX6IHKMDz938mQgSFLS12iVCOB8d2j K3/L9YM+uEPYCsNuI6TQwGb+W7/OLU9IXHeIaoLhYBWkjixyDbFYdW6SpDrrxcw0ojaA uiyk/0cwpSYYpmHdZCW1VuEbj4Enf0pHFm32JzkBmU1QidSGjN7jVEzMuvd6eD1o1kQv T+yiraaUAYcv0FpD5xIX5Fi6wyljrBPmL8aXmrqAih8yTP7hWjKHFkPEuukEJrHc3Wg7 EBFK6OXGBFglMP1z+DJJ+fEKn56xuEAk7jo90xImJAQjX1VTAjvL0FEnDQhSp78dI8lZ scow== X-Gm-Message-State: APjAAAWJGvlGMeuakNVKuBr7YLLyMZBi46DfykgTsDL67q7EUaMfD3OD TppXeFyYVcqp1x2l/AsVyVVofwadGbA= X-Google-Smtp-Source: APXvYqwqng9tgWhO73AathvmZKP1+gCstXTrQ3RvjParmmkDJQWKhWXnZfIKdhGS0Z8dJRqi6/LlDQ== X-Received: by 2002:a25:6889:: with SMTP id d131mr9553981ybc.211.1558564115845; Wed, 22 May 2019 15:28:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:16 -0400 Message-Id: <20190522222821.23850-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::b44 Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558564818; cv=none; d=zoho.com; s=zohoarc; b=h3v6LTfWZ8vB0sXGGG3h9cmel+iOzmBnKz9N5ZtXZbmcmpuLKUfROXvH7Q0TW+rc9Yq21fhrF580BRhJSEqVJyETOM942p/K6SRZSvmlnZ8WW750lvmneRZQGMW0N5ELl4/sakOz9sJLcd/0xmeT/6JE9NrAmuZB5aginbG1XTs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564818; h=Cc: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=ieVVkPgQ4sP6ept0PT6mJkL09LzDxmGVmUe9M4Q4mDkBOdKIANXnP118MjKfebN3wHt2B5VVR7c5RMt0D2/Tyveak/en3WCNPGEjVClNG4GXmvfTRITE+XHJ8gQSAHYLgB50u5ujPjfG4SsC/OrGnQW5otRavOFbyUProBz0+O8= 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 1558564818548763.3778622329377; Wed, 22 May 2019 15:40:18 -0700 (PDT) Received: from localhost ([127.0.0.1]:52635 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZu7-000332-Jd for importer@patchew.org; Wed, 22 May 2019 18:40:11 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49948) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZj5-0003AX-8J for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZj3-0007Rh-Pe for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:47 -0400 Received: from mail-yb1-xb42.google.com ([2607:f8b0:4864:20::b42]:35999) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZj3-0007Na-ID for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:45 -0400 Received: by mail-yb1-xb42.google.com with SMTP id v66so1503158ybb.3 for ; Wed, 22 May 2019 15:28:37 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=/D6aLozHwnS1sPI8iNsL3pMxewPkp4IUhb3tHD+DOe4=; b=VEiP8vmV0RQmXxrJLn9yHrrDOSw7ynQuiJjAXkCBfBYy5hVPFpV5oWV5XuSZ4ulvrw bFtpqLHkf/rqLsFgBBUc0pPCAcu69fluT8reEb21Hi4R+POKpF7uxrLaawzGnlTHAxCe TSHXvO9CdAHZEGXz69pL4Mer3UqPFgDi+BieA6CZePaR3OTL0vv4G936QudEWJ1FoNHH FETQljC/D7AA8+ZKK2ynOAcbXY1LZdal6Nor4E+SEx9tmASHrmqMTgCDmb28QAf3wGuC ZSgNpJEOgHdQXpCeLJVrixzwOd1pLNHdNgW1P2Fco/31ZcJVL1RFOH6Xt5aTahRYL+IH /Oow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=/D6aLozHwnS1sPI8iNsL3pMxewPkp4IUhb3tHD+DOe4=; b=tauFOc4VjM6o/U74eXOvgxWcLvEuPNi5WHiqo2oig2CoDh0NtlfFw5LTGP0bBLoVst DUz3lPbhllmo4XHYUhczBLYIlfFiMw5RYo1m0HlDBJ77En6jOLtUBzM84mkTmOida2kA tHwvnCer9f6AO6PLLJ8gXK6efJnMNtGEOWtBGI+YkStf5n5OB1cV5L7dCFuFMaVM2q0Y egXbvZA0PJVLUlNP+vvixITSxr1MbWUOMKBdnZTG8MfOULGaMAuXrhX5U5WuJzT5J0QW XafNA5AfXq4WwALLGldzGNoFVPTsbaM+BYivnvVonmLw8Gl89qy20PpEFBp+23/Ng8+w OFIw== X-Gm-Message-State: APjAAAUGVmXytf8sAS4xrMOU0DS0xgkNXRs3nVpfwCS66YUBYXwBmRhR 7fSH377kXJm2msJwDSI2ltT5TR2Lslo= X-Google-Smtp-Source: APXvYqyCnKDJ782uXZmeLRRL7u5DUwn+Tkgko7As4VUQ4FcN/G7NJCfC2CZEmvv/r/ZsvL5YLqL5dg== X-Received: by 2002:a25:77c8:: with SMTP id s191mr20720580ybc.152.1558564116955; Wed, 22 May 2019 15:28:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:17 -0400 Message-Id: <20190522222821.23850-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::b42 Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558564874; cv=none; d=zoho.com; s=zohoarc; b=PsdW/E2p4W0sC1vvhwiU5m2nFfoQ4uYRQXICgB6hZogExmbgpqGK3F9+pwSp4pv9L//yHVC1ee0dTzLkNDFgIXRjfxHwtRtGtMBX+inVdVVGyCXnSRnUDA7F0vpQ9u1Tx3tLNyedkMJCuM/kbMDAIvIGM7Fl2FrODRakqTDicto= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564874; h=Cc: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=hupcnzkaqKIvqFfL2XZZnU9BESjighoGQibQBzOLJYturFqlFGJTCBP9v9xP8MeL3cbDwsi47LglCvPoKPd/G3XF7QodidwuBp5PvkbCFhUTampMkfig8yOKrI9wCvGBTxLgPrMraEWuBsW6iHLOnaT98AM4WDpYkiSwMubcUGg= 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 1558564874130700.0817576957234; Wed, 22 May 2019 15:41:14 -0700 (PDT) Received: from localhost ([127.0.0.1]:52679 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZv2-0003tI-80 for importer@patchew.org; Wed, 22 May 2019 18:41:08 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49915) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZj4-00039y-KG for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZj3-0007Ra-MV for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:46 -0400 Received: from mail-yw1-xc43.google.com ([2607:f8b0:4864:20::c43]:40216) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZj3-0007OH-Gt for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:45 -0400 Received: by mail-yw1-xc43.google.com with SMTP id 18so1484108ywe.7 for ; Wed, 22 May 2019 15:28:38 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=5pgxUU1cRl5UBw70ixoMtifwIrAs5XS+sRdx95+Fg/g=; b=ZmIZP62uRC6Ro4Hjl4+oNmfrfolZ2tbnvAyoqcrnhf7UpIYjiB5V41dTdBcvTK8U52 ADxdBPTPWBCy6+fy4wPbBTZVQg8V37ey10GzwufBT7VKJensWHWpa0si10K/JO0erTHT 2FXuPF/IW4OPxG/KzH6705938yLQaWG/Atg5/KB5ZIMsROvtCzDklRp79cJiH3Ee72bQ NzTwIiMbesKF57rK+D6Gb7Wl4gJVKRmeqvYHjpeNNqpNV+W1OpgbSQ/PMpfMqeiDCew3 cuWWlUOJF/drjqGM0qYj5KJpMAGQQkudbsWPjaPzpxJuVJZ8sCt7BfMSGXurz0dyMjkm eFSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=5pgxUU1cRl5UBw70ixoMtifwIrAs5XS+sRdx95+Fg/g=; b=GJkgaiyBdxqJJliUap6lyljHnXn2/q8aViDFRwGk3kcOF01BksNBREoXDlUhEjA524 7BP729+L8twAP1l3ST+kktxQ3h6PKuSRm3HDiWQHjbpPUm/mf/BIZeNMr1ivKlQmYF4N oIeRUHBU2SjzwFaY5qB41TdynY/93z2mfYmihPtjj1QhFfwO8vTVyEpXfw6i3VvZqNk1 napQVXQWFJjwte90Lf10EmLOJbuz/g8SF+1ZPQ8m02DhEZBEeu6BJqR4A9lasaY0OMId kaOGaFh5FxBqu6V5xRhEWTrvWf+G3r0A1VPFlYc+UnAV6r2LONjhnl4/CM9f3AM7Zchh GVpA== X-Gm-Message-State: APjAAAXv9aMu5N5gsFF+w85TFSCRu+5ZUj3DJQ7YZNAzanHPlZ9L60eZ TBXiyM5vnxNkuZHFQFidYuNdDT8D4Bg= X-Google-Smtp-Source: APXvYqzGTzLtrOD80PO68a7Ida1V91gM8+u9WjANAFt2Nj1p+8SkKqikbnKiMwNaqBHE1ZMwi+QJEw== X-Received: by 2002:a81:3acb:: with SMTP id h194mr42063623ywa.303.1558564117990; Wed, 22 May 2019 15:28:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:18 -0400 Message-Id: <20190522222821.23850-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::c43 Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558564484; cv=none; d=zoho.com; s=zohoarc; b=mZ/qIhbU26f/g7rqaB3o8tMhH/YFXxM1WZrHwUUo9iYHVxCbJOu5KkfARed8QNPQeSNXY06ZrR+Eun4EuvT6NiRWW+KloGk89pMyVHJMzPm9trrKB9j4xIyPQ34sbfAAoy1UpMUbAFm2Beeacss0ZRPDRLJOX5cNmrOVPRHI8o0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564484; h=Cc: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=MqFXuGs34mSHoyUbhnxRleM66kfOlGvSvRlnNfw7zfAn39ys0D3vd1a4/H6KszXkRnz7A0Zmy8unp7LIMroQCzx3FrMknXzp2BIifUZaCnGVhUcTfVHxGOb36xObdMON4wq1ge5fzNJrzEKtYqFi2aPRuotkF83iqmEV0e20Y4Y= 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 15585644843001001.8308473115387; Wed, 22 May 2019 15:34:44 -0700 (PDT) Received: from localhost ([127.0.0.1]:52561 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZoj-0007Sr-9v for importer@patchew.org; Wed, 22 May 2019 18:34:37 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49940) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZj5-0003AJ-1T for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZj3-0007Rq-T0 for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:47 -0400 Received: from mail-yb1-xb41.google.com ([2607:f8b0:4864:20::b41]:39426) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZj3-0007Oh-M0 for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:45 -0400 Received: by mail-yb1-xb41.google.com with SMTP id a3so1497865ybr.6 for ; Wed, 22 May 2019 15:28:39 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=zqTcnSP07QNrvm+tUagQdKAYnifB03tbX5A/KwjlV2s=; b=vHLqMPz8J/gynRtyHVBP88iG0jkx2yiVgPnPTwl0Lv4sZOHAqz+2y0MzGm+Fb80gQn ABWS0hICVxt9Yc+jWCw65SBN6Zbgh2XbM2QAexK2TdbchjY8ReImCWbqmJywqdt4X1Rm K5h1yGNdkJDflEKYRGKeAPvhOfUACsYaemQXo8KnYDk7M8/YkzqChJ1ecSsntTdhYSNq D4iDkfxMiZ2ubb4bMNwPtYcsFGBrfq+r2XQDd/HPAeR/mD8/zJaOsQU0Ts929xelL+1y s0xcEDhDmeNmMRoI3aCx5CfAEwA/2ePImZb+OepXSrsULwk7SJ3fUd2NSGwHCL6p4Gta lZIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=zqTcnSP07QNrvm+tUagQdKAYnifB03tbX5A/KwjlV2s=; b=uR2qCSTApjOPdMLZt0NR/QRIL6g8J2s7l9sBrIH8CmHbBQ+Buf+/yEAiFy80YOeTQR S8YBeVEEatwNJ+2Q3DkI8X4L2oW3Dr1Cqd/WIhoci/EpON8v7knBI7FQWeARGFnzedd9 do0++sw34MkSBhWJGArTLfK8DgsxPT3DhERiDax6X6ghWwTyQNa2hqWizHsN2Ds3YZjw k12Zytp2FQ5n+BzKppzhu10vrwwSmjJoVcNRBp1MI4v5vRv5FcCFV0o2XKaV6PPDOL0L KJoPYmKv1nBozkZTGU8uBae+9o+rbFLBWiE+iY4Uwpv1RmAVxGDIrDKQavUZlOXWfRjm a3+g== X-Gm-Message-State: APjAAAVz44mqBkw2gankUPYUnHjEupf6fO83BIhNvMVnKAvuH6XUOYx+ 2tQQBwFQNPHLsYLTe6tjsdc+wF7V6P0= X-Google-Smtp-Source: APXvYqynJkXef2+B+QAcUOYy8kkHRKMnS2cw9746NknL7yMp9dtX5wY6GHpHgDd3ioGQhRz2f4Ppqw== X-Received: by 2002:a25:41d0:: with SMTP id o199mr14334076yba.256.1558564119002; Wed, 22 May 2019 15:28:39 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:19 -0400 Message-Id: <20190522222821.23850-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::b41 Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558565021; cv=none; d=zoho.com; s=zohoarc; b=PydGoEctJ9Gwoln0mQdSZS4tApAR7jBmak+Fu4fn132UMh+yPYNGNnxfESUzeSflx2iPmTXWoW7rN7q7KdIFbVoN6ioPoOT1fyNcgJpGgC+u5SdnGBIKHoC293TJKwaNadJSYDWmxnCMvWN8Pc7PMLMVU+/tONwVnNu7FErLV/M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558565021; h=Cc: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=RJdZMIgs9EACflNGD9wLLPh35xEN8qswC/enpZsEd4Y0u9xrgBy/qY6ZSPmkWBCyOCqE7o7TwdF7NnsUq83GVgA0pm09da+/FNvP4BqrDhDyov5ea8byofRQL4sXlZazP+O6rnWUaHX9FY89QCc5M/hwZAqvIuIX/tKTT938ePQ= 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 1558565021070985.3188784154669; Wed, 22 May 2019 15:43:41 -0700 (PDT) Received: from localhost ([127.0.0.1]:52691 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZxN-0005Bw-30 for importer@patchew.org; Wed, 22 May 2019 18:43:33 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49957) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZj5-0003Ai-Cx for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZj3-0007Rv-T4 for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:47 -0400 Received: from mail-yb1-xb30.google.com ([2607:f8b0:4864:20::b30]:46061) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZj3-0007PU-LX for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:45 -0400 Received: by mail-yb1-xb30.google.com with SMTP id e128so1480256ybc.12 for ; Wed, 22 May 2019 15:28:40 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=AirXKI1PS8HjM151RJTWK1/DcdzF7g0f+0zrycENkFI=; b=znq81cNxYJ9g9UuAhySNCaQGt5NzrUBrLXec0wgVcvco3cbRyvXp4gn5o8PFqAKx4V bjrU9tGZAHQFK9yhYYM0HVrRoXqNgMD/bw1NQZx+Var/9j8x5jx18Cvu8l9PZcRqRHKr yG3bbV+Esbu4eujiqBkquTs/rol4gBu4CIRrX4NyC4wBXqol+gBXkZdLUMV0OJPl0xvz XRwFKLq1/Ss6uq7Gx4yOiiP9QpusQEFrxxocaDqnYvTK0MyCs6fssDYmbgtOHmwbkePz YndSUmtk0nKdc1jqH9oXIQAIRZ9eRcflCiQoXEk/a7rlh12udjwHDkCugQLM2d0WnwEK 7gRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=AirXKI1PS8HjM151RJTWK1/DcdzF7g0f+0zrycENkFI=; b=oFz0Nuej9wNzk3H3+EHhtF5CvDks4f86USAPtgCEd4OczAAu/Kg4BLVt6Ml/nxX9mJ ZijGLoEmq0aQ9LySI+VLk610Co8ArmOebY65HJEvr4vrtnezfObKm9Zlq6XhzYRTaSyd 7Dq+Z7fMoQcpel5YsdJhSmEPNpNVPRMlpS1lQoMAepGFPF04HE5rZY2EFU1vxEtZ1CNk YrLU7L/mmjMTSSyeYuQAsoyactZIobxUcbUCFkiSkFi6uVY0C3MoiAxgNFHmOENoYdZf hZOGmXRVEyQ/j9zrA9mE3DQ3MPx1xfYxz8qBS7e1wI+lE9t4b1WnoK9/+9PlA9Q1pc5X D0aw== X-Gm-Message-State: APjAAAUrwibEf91Cd3u6yF+86yDHBDNJ9kxWycy8B4jgJTLttOlMZ7QL vEWNYL9NvWcwghun5JQSgPeu+slmSY8= X-Google-Smtp-Source: APXvYqxs+L0/WtRjtAG7ArO9YVkIBWt5CcffmqSEoS1ZrmMgzeGSxkrB2kW1mLmHfzPNWUFy+HuYgg== X-Received: by 2002:a25:7502:: with SMTP id q2mr22709271ybc.31.1558564120013; Wed, 22 May 2019 15:28:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:20 -0400 Message-Id: <20190522222821.23850-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::b30 Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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 Sun May 5 19:23:44 2024 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=1558564771; cv=none; d=zoho.com; s=zohoarc; b=KXNBzZk102jpoavmz/0FsRgsjNN0cWbTXjjTAv87sickHTWsrEfcGZTT0CJmi6IhjCqm18YhAOjHPctbhYMLbgH8UQzZUX5l+ihMeDu2Oxr790mq+5FUqKW+qUXACEA4tb8gqaf1Qp0bAVW7B7UirLHuDbcjRTzkfkC+dx974rA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1558564771; h=Cc: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=hkELPTEwHnoe29OJF8CS4Fy6WtUH8iFbI/J3/QtPgLpifa0i5a2Ve/5tnPOr0eOvE+x7+vQNNgU40WnRFQf5o+K5Q+A3ZwMQXKkr4o0MaYJmezJJqSWAbXhp+KgdPEaiBwV56EC6/wcTXVkgTdR7RrKoB+3yFdESQ6T5yQUOq9c= 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 1558564771769662.6440847793722; Wed, 22 May 2019 15:39:31 -0700 (PDT) Received: from localhost ([127.0.0.1]:52633 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZtO-0002Ux-Cl for importer@patchew.org; Wed, 22 May 2019 18:39:26 -0400 Received: from eggs.gnu.org ([209.51.188.92]:49952) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hTZj5-0003Ab-8u for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hTZj3-0007S7-Vo for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:47 -0400 Received: from mail-yb1-xb42.google.com ([2607:f8b0:4864:20::b42]:42799) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1hTZj3-0007Pp-P9 for qemu-devel@nongnu.org; Wed, 22 May 2019 18:28:45 -0400 Received: by mail-yb1-xb42.google.com with SMTP id a21so1487406ybg.9 for ; Wed, 22 May 2019 15:28:41 -0700 (PDT) Received: from localhost.localdomain ([71.46.56.17]) by smtp.gmail.com with ESMTPSA id q11sm2276453ywg.7.2019.05.22.15.28.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 May 2019 15:28:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=xoXIkCrK3V7BH4MhmjLPxOrcr1ayi9bYK48w1V2yt0Q=; b=fTiFpJr6MaizSsFIhcrL8ePFaPoA/fdloKYzsG/NjD6FCXV9MSF96sPiscm/12Hc8P jmolJMzgFClnXxz01bH9J05E0m7TMStGYP2cusMN20WSoWhFUv9j0fgPIrMdd3T3+vaH MwkZCaf7MeB3ZuYovoVTKqs0KMO2dy9kEzQLyhRA62BabiV1jzybnFQ+/WbWodwTT01f HixsX7yoEm+yOeARKsZhcfjtAXPBZQzb0cZlqoujYHixc39jznt+/m+k2rH5/x7fzMKR qRrJXGVVqvW8h2RMt0GAp1vZEyfWsTbgENYXPfmP3/I3TFT6jiwoXOrrEg0g8kz8jwfa 8Zww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=xoXIkCrK3V7BH4MhmjLPxOrcr1ayi9bYK48w1V2yt0Q=; b=g4wZtGPeyxfmjHLS6WKQdtCvp+kwICqR8l3ZwBPeVrxzgUHn6DIxlBHzS6BeOmDcCA D3z05qdef7Z5ri4zYBujLwhm0gXdQG2wv7sV8PZrs0TFUDbGOBgGkareauwntbAfYp4c JKZptozY3zgd86QbYW8CLBkKkfiREvzIid4tDlYDacMcvpb2/YQ44KQNk91hoKDwxOVU gVei4nn59WjLFHPAYYf5LpU3rPQNjtFA9z8c/CG+3OULqQEMBu2HOb0uDdoTGC7LZt/Y ucRt/TOZFdABUJIhPI8Gh9JplX6zNNGi4GXNqtOwVzJ2Er8+bIYRe1jI/OM1HbK5VXib V6Iw== X-Gm-Message-State: APjAAAVXT58C1/JPi8VaLGvp/UVWRasLaxnLdl/8JQ4o7SdCQeEbCq8b njcZBe0XArt7VoLNwlkBpEtcJsce2tw= X-Google-Smtp-Source: APXvYqxN/wUVAAZoaLfQi0YFG74OhQoRtFizsIxcy09LwaRFiRcgzy/YQiT65vAeAzn+LcbLwBMYSg== X-Received: by 2002:a25:dc3:: with SMTP id 186mr22561627ybn.276.1558564121109; Wed, 22 May 2019 15:28:41 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 22 May 2019 18:28:21 -0400 Message-Id: <20190522222821.23850-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190522222821.23850-1-richard.henderson@linaro.org> References: <20190522222821.23850-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::b42 Subject: [Qemu-devel] [PULL 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: , Cc: peter.maydell@linaro.org 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