From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610385950; cv=none; d=zohomail.com; s=zohoarc; b=GGjGv15dRAqRr0A/Wc/4CwdbsmGHHoRTZhbCD2wO1/rYdZSSUeBZ/TG0AjimNHP7ISEHYHriu+aTsbUWutUBsQPuuTUG0xKFi4jLSNxu19Gza8N3NWRchIBuWTVF+PHnFbzMh4H6WAf02e+a+b9f1yOdfG+bTF1dFbMMMipJuJw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610385950; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=QOepBxSxE/W82FF88rCw1+kC5xT6yp8gccxQTHnqJfE=; b=X44Wv87BN26yjRyfrELdWENbuNkD18PQUgG5npvcZSKmR/7gYOPzkndDdS6poWfd5Y55EvqJhucc/SmSWWq0vfpYp06wsNx9CKrLldq8viBZYALzqlREcQOageV+mQ1c3pTQ/Zui0vQPeidqLlKN7/0LA5C7S/4t61FDyAd4Yeo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=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 1610385950560548.9677400104463; Mon, 11 Jan 2021 09:25:50 -0800 (PST) Received: from localhost ([::1]:40748 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz0wv-0007dd-CK for importer@patchew.org; Mon, 11 Jan 2021 12:25:49 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51518) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rD-00033C-BH for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:19:55 -0500 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]:45639) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rB-000055-IF for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:19:55 -0500 Received: by mail-pl1-x629.google.com with SMTP id e2so160880plt.12 for ; Mon, 11 Jan 2021 09:19:53 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.19.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:19:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QOepBxSxE/W82FF88rCw1+kC5xT6yp8gccxQTHnqJfE=; b=qQVuXl0UCOp/mE2XksAx1GttIamLT/9sW40LzUDYV03pEnG0KC8c5gkOMd5Q5WuGoJ wsFKNI0M+TOFzX73p0uRxLGIVA7U09Ewzx2bJIKH6pkmiZlQUNsVNVnfzXENoI9cXOgD y2HqG08aoGeAQdAnRJdBgW6rDGcdeJkahrKkwQ4pXCs8iLGccdD45MT+i6yyhm/QTYjA JbIH2kNH4v1ZBCC04nPTFCK6nPwcgR2dqEGk7nncofdqInw9q9imnpfO1wH8GxXdZZzf hamANC1J2smeAAIBy9X0f/XT2YoOKSVpc+SKyUuOxRMI/8JI/6Rm7qcJ5EYXDBB0PhaR Zqjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QOepBxSxE/W82FF88rCw1+kC5xT6yp8gccxQTHnqJfE=; b=RbDwCcOILEcKNA+n8Lp4Md27QnAtIbTeIUBNS+LzBJGHjMMBbZisrJhh1eN21GRJH7 TdkcNicAEkCnFt8iKCpcHmDUYLIXEhuVo/CLoLSyB3b9K+CibsRIA/ipTKOyzPzqBdGY 5bZ6D0IVhqn03QUi29aZ8cL2fR/iPFzSm7tI6sK4j/ssQ/RI5StqoBrLhO7s7Ah0223l hZG5PHzISjhMSJV4PVnC+KCtQiAQFqJ5mkvnpzGB57mLOhWBRqAyvDln8rMqSJbcgIfY E7c508AWfOQJrPSS32FLnFK1oGJk7fLkiF7Zg3zKvStFCm2qEXg54YEv/TZZI+Y1H6Iw Vh7A== X-Gm-Message-State: AOAM530k2uzOv7UVIOtE2psvy/odlHiW6YSvw3XB5QRBrQRM3X1AGLvY EyN8Yq81d3c7BzyY6JR9QFO7audujyx4hw== X-Google-Smtp-Source: ABdhPJwB+Z6X3ch/ENIj6GJc4N9iApslNPKWjOmxfkt3PSIwwhNpfSKiWJIoqsJ4SLP69B0r+9xWcQ== X-Received: by 2002:a17:90a:ee8e:: with SMTP id i14mr286855pjz.190.1610385591739; Mon, 11 Jan 2021 09:19:51 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 01/23] tcg: Use tcg_out_dupi_vec from temp_load Date: Mon, 11 Jan 2021 07:19:24 -1000 Message-Id: <20210111171946.219469-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Wataru Ashihara Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Having dupi pass though movi is confusing and arguably wrong. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- Cc: Wataru Ashihara Cc: Philippe Mathieu-Daud=C3=A9 --- tcg/tcg.c | 6 +++- tcg/aarch64/tcg-target.c.inc | 7 ---- tcg/i386/tcg-target.c.inc | 63 ++++++++++++++++++++++++------------ tcg/ppc/tcg-target.c.inc | 6 ---- 4 files changed, 47 insertions(+), 35 deletions(-) diff --git a/tcg/tcg.c b/tcg/tcg.c index 472bf1755b..ded3c928e3 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -3387,7 +3387,11 @@ static void temp_load(TCGContext *s, TCGTemp *ts, TC= GRegSet desired_regs, case TEMP_VAL_CONST: reg =3D tcg_reg_alloc(s, desired_regs, allocated_regs, preferred_regs, ts->indirect_base); - tcg_out_movi(s, ts->type, reg, ts->val); + if (ts->type <=3D TCG_TYPE_I64) { + tcg_out_movi(s, ts->type, reg, ts->val); + } else { + tcg_out_dupi_vec(s, ts->type, reg, ts->val); + } ts->mem_coherent =3D 0; break; case TEMP_VAL_MEM: diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc index ab199b143f..a2a588e3aa 100644 --- a/tcg/aarch64/tcg-target.c.inc +++ b/tcg/aarch64/tcg-target.c.inc @@ -1011,13 +1011,6 @@ static void tcg_out_movi(TCGContext *s, TCGType type= , TCGReg rd, case TCG_TYPE_I64: tcg_debug_assert(rd < 32); break; - - case TCG_TYPE_V64: - case TCG_TYPE_V128: - tcg_debug_assert(rd >=3D 32); - tcg_out_dupi_vec(s, type, rd, value); - return; - default: g_assert_not_reached(); } diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc index 46e856f442..35554fd1e8 100644 --- a/tcg/i386/tcg-target.c.inc +++ b/tcg/i386/tcg-target.c.inc @@ -975,30 +975,32 @@ static void tcg_out_dupi_vec(TCGContext *s, TCGType t= ype, } } =20 -static void tcg_out_movi(TCGContext *s, TCGType type, - TCGReg ret, tcg_target_long arg) +static void tcg_out_movi_vec(TCGContext *s, TCGType type, + TCGReg ret, tcg_target_long arg) +{ + if (arg =3D=3D 0) { + tcg_out_vex_modrm(s, OPC_PXOR, ret, ret, ret); + return; + } + if (arg =3D=3D -1) { + tcg_out_vex_modrm(s, OPC_PCMPEQB, ret, ret, ret); + return; + } + + int rexw =3D (type =3D=3D TCG_TYPE_I32 ? 0 : P_REXW); + tcg_out_vex_modrm_pool(s, OPC_MOVD_VyEy + rexw, ret); + if (TCG_TARGET_REG_BITS =3D=3D 64) { + new_pool_label(s, arg, R_386_PC32, s->code_ptr - 4, -4); + } else { + new_pool_label(s, arg, R_386_32, s->code_ptr - 4, 0); + } +} + +static void tcg_out_movi_int(TCGContext *s, TCGType type, + TCGReg ret, tcg_target_long arg) { tcg_target_long diff; =20 - switch (type) { - case TCG_TYPE_I32: -#if TCG_TARGET_REG_BITS =3D=3D 64 - case TCG_TYPE_I64: -#endif - if (ret < 16) { - break; - } - /* fallthru */ - case TCG_TYPE_V64: - case TCG_TYPE_V128: - case TCG_TYPE_V256: - tcg_debug_assert(ret >=3D 16); - tcg_out_dupi_vec(s, type, ret, arg); - return; - default: - g_assert_not_reached(); - } - if (arg =3D=3D 0) { tgen_arithr(s, ARITH_XOR, ret, ret); return; @@ -1027,6 +1029,25 @@ static void tcg_out_movi(TCGContext *s, TCGType type, tcg_out64(s, arg); } =20 +static void tcg_out_movi(TCGContext *s, TCGType type, + TCGReg ret, tcg_target_long arg) +{ + switch (type) { + case TCG_TYPE_I32: +#if TCG_TARGET_REG_BITS =3D=3D 64 + case TCG_TYPE_I64: +#endif + if (ret < 16) { + tcg_out_movi_int(s, type, ret, arg); + } else { + tcg_out_movi_vec(s, type, ret, arg); + } + break; + default: + g_assert_not_reached(); + } +} + static inline void tcg_out_pushi(TCGContext *s, tcg_target_long val) { if (val =3D=3D (int8_t)val) { diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc index 19a4a12f15..a3f1bd41cd 100644 --- a/tcg/ppc/tcg-target.c.inc +++ b/tcg/ppc/tcg-target.c.inc @@ -987,12 +987,6 @@ static void tcg_out_movi(TCGContext *s, TCGType type, = TCGReg ret, tcg_out_movi_int(s, type, ret, arg, false); break; =20 - case TCG_TYPE_V64: - case TCG_TYPE_V128: - tcg_debug_assert(ret >=3D TCG_REG_V0); - tcg_out_dupi_vec(s, type, ret, arg); - break; - default: g_assert_not_reached(); } --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610385838; cv=none; d=zohomail.com; s=zohoarc; b=PGKhdSs1GlrbB6417wqXCpdD5u6Z5uT4xA0n6J4ZefTB03uO9b5nIGX6XklzrI4JbnQ6e505BNrU6SiR1do++9YuaICd3uZBc5TXIXs3Mzh2c0DdV2/bbbUjkvVydmcfp1wlMMKHhGT2u5fLRcDvtSD6a8dhlqiUvUVU0C6y34o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610385838; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=igVFuD7tCOBdGtqW4y6U7yVjBtZG8cMMEC6HvvNAy3M=; b=gyu3Lbl+E2HokJ7dqA1vquCt2Y7GGbOOFmLuSeLENEtk7Mgbwzr5+uM5+u6WbIGxXjkt2DgEjt9FnvM2f8aUtai7zAD7i40KlEveUqZpsK137TyAn0zF7p3mWoZvhcpCSDk8hoYb16VFYlRszmXTG+vyCDJmWaP4A4Z8zx/3560= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610385838226255.91471780399536; Mon, 11 Jan 2021 09:23:58 -0800 (PST) Received: from localhost ([::1]:35196 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz0v6-0005Js-Vg for importer@patchew.org; Mon, 11 Jan 2021 12:23:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51534) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rF-00035D-1k for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:19:57 -0500 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]:41325) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rC-00005f-Qq for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:19:56 -0500 Received: by mail-pl1-x629.google.com with SMTP id y8so173080plp.8 for ; Mon, 11 Jan 2021 09:19:54 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.19.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:19:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=igVFuD7tCOBdGtqW4y6U7yVjBtZG8cMMEC6HvvNAy3M=; b=HvD0Kb4EB04LZef7C9dW5vTPZ5I82tEbrhBoyxysohl1QLQTS1XuHhUkLZUhDm4iDF CNDLILr3J4wUozG765QgRMNqeapFuag8ZMhIQe3FYFd6OS0ecD6cXFQKPfM1l+zloUMW bBbzgevVJgH/sKIkPgKbcl359lfKiYRSTfffwZ0f1fnKWDP3JZM+PXHdB/J4Frd3K/Lu 9KJGSEPFxY5HK1Hs3vfODZtobgMzV55oboRAv0SRmHLYDFPqezZhTWFZaHye2OPPpBTQ K5JEgXKMIWy1qqauEtKyznLm9snZoKXN/7js8+bKAVmUWwPET7fxbgODn7M+07qEKBF9 MwhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=igVFuD7tCOBdGtqW4y6U7yVjBtZG8cMMEC6HvvNAy3M=; b=e+2iAZz5Y3JZD85/dSaRYE5PqaXcJxSoHPxpLIHSDB/B1AFsVAOnvz18hvcTyu7/zE e6t/FATYVP8L31zf+lBipYnsENkZLLBws4KSWjD0aAxvjkBA9NJWQ1RE49fdWViK5Plo GvlwBsjQ+YLs4SF1Dt4hq1F+u+ccAocwO5SKttS2nl/U/QujT4QmSu/bXnij7+6wdK6T rfwefdmH4VkDQd7nIpWsz7net6/Sjed6hzItvJDxXOOh6/rCtvjydn4L4OOq2FZD8Bv3 xup73mmk2CszUPeqn9IZFckr8jvRsLJ/sTlVOkPFEdAvKMlvTwFwnlYZLVlymSyhzAfD V9Ig== X-Gm-Message-State: AOAM531tpPlZyTHfys4PQ9/1ntm+mcmoD4IveUIBA6uVTlN+fZu3jeVo 6mtNqQ0apswkpXx53g6RY3/t6kn0GroFqg== X-Google-Smtp-Source: ABdhPJwsn9pLWPt+qoWdfyMw1H/08C7daK/7UEPg+oLUSICDFjwyRJI1NySNLD9+mwkba7Afmqdmaw== X-Received: by 2002:a17:90a:902:: with SMTP id n2mr291045pjn.126.1610385593145; Mon, 11 Jan 2021 09:19:53 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 02/23] tcg: Increase tcg_out_dupi_vec immediate to int64_t Date: Mon, 11 Jan 2021 07:19:25 -1000 Message-Id: <20210111171946.219469-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" While we don't store more than tcg_target_long in TCGTemp, we shouldn't be limited to that for code generation. We will be able to use this for INDEX_op_dup2_vec with 2 constants. Also pass along the minimal vece that may be said to apply to the constant. This allows some simplification in the various backends. Signed-off-by: Richard Henderson --- tcg/tcg.c | 31 +++++++++++++++++++++++++----- tcg/aarch64/tcg-target.c.inc | 12 ++++++------ tcg/i386/tcg-target.c.inc | 22 ++++++++++++--------- tcg/ppc/tcg-target.c.inc | 37 +++++++++++++++++++++++------------- 4 files changed, 69 insertions(+), 33 deletions(-) diff --git a/tcg/tcg.c b/tcg/tcg.c index ded3c928e3..c73128208c 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -117,8 +117,8 @@ static bool tcg_out_dup_vec(TCGContext *s, TCGType type= , unsigned vece, TCGReg dst, TCGReg src); static bool tcg_out_dupm_vec(TCGContext *s, TCGType type, unsigned vece, TCGReg dst, TCGReg base, intptr_t offset); -static void tcg_out_dupi_vec(TCGContext *s, TCGType type, - TCGReg dst, tcg_target_long arg); +static void tcg_out_dupi_vec(TCGContext *s, TCGType type, unsigned vece, + TCGReg dst, int64_t arg); static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc, unsigned vecl, unsigned vece, const TCGArg *args, const int *const_args); @@ -133,8 +133,8 @@ static inline bool tcg_out_dupm_vec(TCGContext *s, TCGT= ype type, unsigned vece, { g_assert_not_reached(); } -static inline void tcg_out_dupi_vec(TCGContext *s, TCGType type, - TCGReg dst, tcg_target_long arg) +static inline void tcg_out_dupi_vec(TCGContext *s, TCGType type, unsigned = vece, + TCGReg dst, int64_t arg) { g_assert_not_reached(); } @@ -3390,7 +3390,28 @@ static void temp_load(TCGContext *s, TCGTemp *ts, TC= GRegSet desired_regs, if (ts->type <=3D TCG_TYPE_I64) { tcg_out_movi(s, ts->type, reg, ts->val); } else { - tcg_out_dupi_vec(s, ts->type, reg, ts->val); + uint64_t val =3D ts->val; + MemOp vece =3D MO_64; + + /* + * Find the minimal vector element that matches the constant. + * The targets will, in general, have to do this search anyway, + * do this generically. + */ + if (TCG_TARGET_REG_BITS =3D=3D 32) { + val =3D dup_const(MO_32, val); + vece =3D MO_32; + } + if (val =3D=3D dup_const(MO_8, val)) { + vece =3D MO_8; + } else if (val =3D=3D dup_const(MO_16, val)) { + vece =3D MO_16; + } else if (TCG_TARGET_REG_BITS =3D=3D 64 && + val =3D=3D dup_const(MO_32, val)) { + vece =3D MO_32; + } + + tcg_out_dupi_vec(s, ts->type, vece, reg, ts->val); } ts->mem_coherent =3D 0; break; diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc index a2a588e3aa..be6d3ea2a8 100644 --- a/tcg/aarch64/tcg-target.c.inc +++ b/tcg/aarch64/tcg-target.c.inc @@ -857,14 +857,14 @@ static void tcg_out_logicali(TCGContext *s, AArch64In= sn insn, TCGType ext, tcg_out_insn_3404(s, insn, ext, rd, rn, ext, r, c); } =20 -static void tcg_out_dupi_vec(TCGContext *s, TCGType type, - TCGReg rd, tcg_target_long v64) +static void tcg_out_dupi_vec(TCGContext *s, TCGType type, unsigned vece, + TCGReg rd, int64_t v64) { bool q =3D type =3D=3D TCG_TYPE_V128; int cmode, imm8, i; =20 /* Test all bytes equal first. */ - if (v64 =3D=3D dup_const(MO_8, v64)) { + if (vece =3D=3D MO_8) { imm8 =3D (uint8_t)v64; tcg_out_insn(s, 3606, MOVI, q, rd, 0, 0xe, imm8); return; @@ -891,7 +891,7 @@ static void tcg_out_dupi_vec(TCGContext *s, TCGType typ= e, * 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)) { + if (vece =3D=3D MO_16) { uint16_t v16 =3D v64; =20 if (is_shimm16(v16, &cmode, &imm8)) { @@ -910,7 +910,7 @@ static void tcg_out_dupi_vec(TCGContext *s, TCGType typ= e, 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)) { + } else if (vece =3D=3D MO_32) { uint32_t v32 =3D v64; uint32_t n32 =3D ~v32; =20 @@ -2435,7 +2435,7 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode o= pc, tcg_out_insn_3617(s, insn, is_q, vece, a0, a1); break; } - tcg_out_dupi_vec(s, type, TCG_VEC_TMP, 0); + tcg_out_dupi_vec(s, type, MO_8, TCG_VEC_TMP, 0); a2 =3D TCG_VEC_TMP; } insn =3D cmp_insn[cond]; diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc index 35554fd1e8..9f81e11773 100644 --- a/tcg/i386/tcg-target.c.inc +++ b/tcg/i386/tcg-target.c.inc @@ -942,8 +942,8 @@ static bool tcg_out_dupm_vec(TCGContext *s, TCGType typ= e, unsigned vece, return true; } =20 -static void tcg_out_dupi_vec(TCGContext *s, TCGType type, - TCGReg ret, tcg_target_long arg) +static void tcg_out_dupi_vec(TCGContext *s, TCGType type, unsigned vece, + TCGReg ret, int64_t arg) { int vex_l =3D (type =3D=3D TCG_TYPE_V256 ? P_VEXL : 0); =20 @@ -956,7 +956,14 @@ static void tcg_out_dupi_vec(TCGContext *s, TCGType ty= pe, return; } =20 - if (TCG_TARGET_REG_BITS =3D=3D 64) { + if (TCG_TARGET_REG_BITS =3D=3D 32 && vece < MO_64) { + if (have_avx2) { + tcg_out_vex_modrm_pool(s, OPC_VPBROADCASTD + vex_l, ret); + } else { + tcg_out_vex_modrm_pool(s, OPC_VBROADCASTSS, ret); + } + new_pool_label(s, arg, R_386_32, s->code_ptr - 4, 0); + } else { if (type =3D=3D TCG_TYPE_V64) { tcg_out_vex_modrm_pool(s, OPC_MOVQ_VqWq, ret); } else if (have_avx2) { @@ -964,14 +971,11 @@ static void tcg_out_dupi_vec(TCGContext *s, TCGType t= ype, } else { 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_VPBROADCASTD + vex_l, ret); + if (TCG_TARGET_REG_BITS =3D=3D 64) { + new_pool_label(s, arg, R_386_PC32, s->code_ptr - 4, -4); } else { - tcg_out_vex_modrm_pool(s, OPC_VBROADCASTSS, ret); + new_pool_l2(s, R_386_32, s->code_ptr - 4, 0, arg, arg >> 32); } - new_pool_label(s, arg, R_386_32, s->code_ptr - 4, 0); } } =20 diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc index a3f1bd41cd..d00ec20203 100644 --- a/tcg/ppc/tcg-target.c.inc +++ b/tcg/ppc/tcg-target.c.inc @@ -912,31 +912,41 @@ static void tcg_out_movi_int(TCGContext *s, TCGType t= ype, TCGReg ret, } } =20 -static void tcg_out_dupi_vec(TCGContext *s, TCGType type, TCGReg ret, - tcg_target_long val) +static void tcg_out_dupi_vec(TCGContext *s, TCGType type, unsigned vece, + TCGReg ret, int64_t val) { uint32_t load_insn; int rel, low; intptr_t add; =20 - low =3D (int8_t)val; - if (low >=3D -16 && low < 16) { - if (val =3D=3D (tcg_target_long)dup_const(MO_8, low)) { + switch (vece) { + case MO_8: + low =3D (int8_t)val; + if (low >=3D -16 && low < 16) { tcg_out32(s, VSPLTISB | VRT(ret) | ((val & 31) << 16)); return; } - if (val =3D=3D (tcg_target_long)dup_const(MO_16, low)) { + if (have_isa_3_00) { + tcg_out32(s, XXSPLTIB | VRT(ret) | ((val & 0xff) << 11)); + return; + } + break; + + case MO_16: + low =3D (int16_t)val; + if (low >=3D -16 && low < 16) { tcg_out32(s, VSPLTISH | VRT(ret) | ((val & 31) << 16)); return; } - if (val =3D=3D (tcg_target_long)dup_const(MO_32, low)) { + break; + + case MO_32: + low =3D (int32_t)val; + if (low >=3D -16 && low < 16) { tcg_out32(s, VSPLTISW | VRT(ret) | ((val & 31) << 16)); return; } - } - if (have_isa_3_00 && val =3D=3D (tcg_target_long)dup_const(MO_8, val))= { - tcg_out32(s, XXSPLTIB | VRT(ret) | ((val & 0xff) << 11)); - return; + break; } =20 /* @@ -956,14 +966,15 @@ static void tcg_out_dupi_vec(TCGContext *s, TCGType t= ype, TCGReg ret, if (TCG_TARGET_REG_BITS =3D=3D 64) { new_pool_label(s, val, rel, s->code_ptr, add); } else { - new_pool_l2(s, rel, s->code_ptr, add, val, val); + new_pool_l2(s, rel, s->code_ptr, add, val >> 32, val); } } else { load_insn =3D LVX | VRT(ret) | RB(TCG_REG_TMP1); if (TCG_TARGET_REG_BITS =3D=3D 64) { new_pool_l2(s, rel, s->code_ptr, add, val, val); } else { - new_pool_l4(s, rel, s->code_ptr, add, val, val, val, val); + new_pool_l4(s, rel, s->code_ptr, add, + val >> 32, val, val >> 32, val); } } =20 --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386051; cv=none; d=zohomail.com; s=zohoarc; b=h2WcqLVwHvd2sYxLRqcWZAcZreMihHaGIxFtT13ml7jhNmN5CxSC8IGiYoksXh31d1WgbHmqpqpcSR6kLNrEaqNDUHCf+SIVyOwdd2RKgfZWg/PqAcYkO6H/mtAfi5ereC3RPOtyN80RHJQC4hDXCtsA1bJX7XnPo315p4paraA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386051; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=XLAgXi9Czh5X/FA90bM/X3fbOzQ/DCfR5wliDIq/uwU=; b=V5U7RPX23RJ1ioNQguzjqE79YN87tlk4lZSPvDVLCitsX7uThgwPz+QcCutuofOZphVMt80DjFOHMXrJfXLk9qMFAbC4BYl/APzRHf357Uadv5e3x2WlrikhNc/lAg0mbpgEn9xwUU4Cfn0iW0Z6sWcuSF/mmAB8zlGz9ULpeE8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610386051580242.71291730504163; Mon, 11 Jan 2021 09:27:31 -0800 (PST) Received: from localhost ([::1]:47076 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz0yY-0001wF-Cv for importer@patchew.org; Mon, 11 Jan 2021 12:27:30 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51590) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rL-00039J-99 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:07 -0500 Received: from mail-pj1-x1035.google.com ([2607:f8b0:4864:20::1035]:36020) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rF-00006F-R4 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:03 -0500 Received: by mail-pj1-x1035.google.com with SMTP id l23so10982365pjg.1 for ; Mon, 11 Jan 2021 09:19:57 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.19.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:19:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XLAgXi9Czh5X/FA90bM/X3fbOzQ/DCfR5wliDIq/uwU=; b=hgmY/+osl41iChk4aD6nWYGVat1wtPFfn6BByz11idsIeXKu2WRLWTsIqmkb1qK1Gp 6dU8puqZdmJyv+kDAKqOF/9pjWnyzz6gxQNvenjVIghT89Mi5nnhJtTtVRPqZ7oOGzNC EagvXhmpDh/Y6GSpLvTuSV4PQZViWnNEwgynKiMF+AmY3FpAPk+g9Kit/mH9b8vKrwpz NnL5pNVJEarXtugGhsHTOfX7Hn9EyMWUOqeOt80zop+tIuqSMJHIQKCDf7pqKNtV5Xqi H4YtBdLllOlinbcWY//XZVSt+9tJEMrQfChiY2EQAK4DEevjfs7I7tzRayS0qS1q95+8 VOIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=XLAgXi9Czh5X/FA90bM/X3fbOzQ/DCfR5wliDIq/uwU=; b=TbJsV5k0coasMSZu41gNeg58r6T79+2DSMzEflXMINeug9wVWDI2nmU2+2F9580Kul NiP1cniyOOKvkPUcM6D+VHqcEwLyTOKOGnwHm9EVT95E1mjCY59KL2vkOJdJzJn2KIK+ 1o5iZtwyfs23ELHSW3ca1k3wUROVLeUU+6oRwnU3xgOu95zMUaDTqXzGdmeVJRlYGACn aPyaFvxGBi8lepqJ30TVHJ/zRxIW5hIueSiaicvf32yG7/9llfqHzRAVr+wuLLtxUZWS b0WkxBHAnSfwP7i5gVQ6zvOV6vQ4dp7wsqm/nE1PHPNa57Fu7BiopBRLzx341nfn/LBl 3u/w== X-Gm-Message-State: AOAM530X3LJ2diHTis4Qvyekcx+QimaeUgOGsosmlUwfpssZ/MQDao2N tBplgwIKyOf3CY7h/Wokg00ItwPt1QP15w== X-Google-Smtp-Source: ABdhPJxPuqMwBuDk0UxctZuIVf2WvFdmDnaYuU6s0SLREWUzZDEfiWl3Hwkncw3gB/G0FGi0JSFHzA== X-Received: by 2002:a17:90a:f687:: with SMTP id cl7mr312304pjb.38.1610385595078; Mon, 11 Jan 2021 09:19:55 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 03/23] tcg: Consolidate 3 bits into enum TCGTempKind Date: Mon, 11 Jan 2021 07:19:26 -1000 Message-Id: <20210111171946.219469-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1035; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1035.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) The temp_fixed, temp_global, temp_local bits are all related. Combine them into a single enumeration. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/tcg/tcg.h | 20 +++++--- tcg/optimize.c | 8 +-- tcg/tcg.c | 126 ++++++++++++++++++++++++++++------------------ 3 files changed, 92 insertions(+), 62 deletions(-) diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h index 95fe5604eb..571d4e0fa3 100644 --- a/include/tcg/tcg.h +++ b/include/tcg/tcg.h @@ -483,23 +483,27 @@ typedef enum TCGTempVal { TEMP_VAL_CONST, } TCGTempVal; =20 +typedef enum TCGTempKind { + /* Temp is dead at the end of all basic blocks. */ + TEMP_NORMAL, + /* Temp is saved across basic blocks but dead at the end of TBs. */ + TEMP_LOCAL, + /* Temp is saved across both basic blocks and translation blocks. */ + TEMP_GLOBAL, + /* Temp is in a fixed register. */ + TEMP_FIXED, +} TCGTempKind; + typedef struct TCGTemp { TCGReg reg:8; TCGTempVal val_type:8; TCGType base_type:8; TCGType type:8; - unsigned int fixed_reg:1; + TCGTempKind kind:3; unsigned int indirect_reg:1; unsigned int indirect_base:1; unsigned int mem_coherent:1; unsigned int mem_allocated:1; - /* If true, the temp is saved across both basic blocks and - translation blocks. */ - unsigned int temp_global:1; - /* If true, the temp is saved across basic blocks but dead - at the end of translation blocks. If false, the temp is - dead at the end of basic blocks. */ - unsigned int temp_local:1; unsigned int temp_allocated:1; =20 tcg_target_long val; diff --git a/tcg/optimize.c b/tcg/optimize.c index 1fb42eb2a9..2f827a9d2d 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -116,21 +116,21 @@ static TCGTemp *find_better_copy(TCGContext *s, TCGTe= mp *ts) TCGTemp *i; =20 /* If this is already a global, we can't do better. */ - if (ts->temp_global) { + if (ts->kind >=3D TEMP_GLOBAL) { return ts; } =20 /* Search for a global first. */ for (i =3D ts_info(ts)->next_copy; i !=3D ts; i =3D ts_info(i)->next_c= opy) { - if (i->temp_global) { + if (i->kind >=3D TEMP_GLOBAL) { return i; } } =20 /* If it is a temp, search for a temp local. */ - if (!ts->temp_local) { + if (ts->kind =3D=3D TEMP_NORMAL) { for (i =3D ts_info(ts)->next_copy; i !=3D ts; i =3D ts_info(i)->ne= xt_copy) { - if (ts->temp_local) { + if (i->kind >=3D TEMP_LOCAL) { return i; } } diff --git a/tcg/tcg.c b/tcg/tcg.c index c73128208c..143794a585 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -1211,7 +1211,7 @@ static inline TCGTemp *tcg_global_alloc(TCGContext *s) tcg_debug_assert(s->nb_globals =3D=3D s->nb_temps); s->nb_globals++; ts =3D tcg_temp_alloc(s); - ts->temp_global =3D 1; + ts->kind =3D TEMP_GLOBAL; =20 return ts; } @@ -1228,7 +1228,7 @@ static TCGTemp *tcg_global_reg_new_internal(TCGContex= t *s, TCGType type, ts =3D tcg_global_alloc(s); ts->base_type =3D type; ts->type =3D type; - ts->fixed_reg =3D 1; + ts->kind =3D TEMP_FIXED; ts->reg =3D reg; ts->name =3D name; tcg_regset_set_reg(s->reserved_regs, reg); @@ -1255,7 +1255,7 @@ TCGTemp *tcg_global_mem_new_internal(TCGType type, TC= Gv_ptr base, bigendian =3D 1; #endif =20 - if (!base_ts->fixed_reg) { + if (base_ts->kind !=3D TEMP_FIXED) { /* We do not support double-indirect registers. */ tcg_debug_assert(!base_ts->indirect_reg); base_ts->indirect_base =3D 1; @@ -1303,6 +1303,7 @@ TCGTemp *tcg_global_mem_new_internal(TCGType type, TC= Gv_ptr base, TCGTemp *tcg_temp_new_internal(TCGType type, bool temp_local) { TCGContext *s =3D tcg_ctx; + TCGTempKind kind =3D temp_local ? TEMP_LOCAL : TEMP_NORMAL; TCGTemp *ts; int idx, k; =20 @@ -1315,7 +1316,7 @@ TCGTemp *tcg_temp_new_internal(TCGType type, bool tem= p_local) ts =3D &s->temps[idx]; ts->temp_allocated =3D 1; tcg_debug_assert(ts->base_type =3D=3D type); - tcg_debug_assert(ts->temp_local =3D=3D temp_local); + tcg_debug_assert(ts->kind =3D=3D kind); } else { ts =3D tcg_temp_alloc(s); if (TCG_TARGET_REG_BITS =3D=3D 32 && type =3D=3D TCG_TYPE_I64) { @@ -1324,18 +1325,18 @@ TCGTemp *tcg_temp_new_internal(TCGType type, bool t= emp_local) ts->base_type =3D type; ts->type =3D TCG_TYPE_I32; ts->temp_allocated =3D 1; - ts->temp_local =3D temp_local; + ts->kind =3D kind; =20 tcg_debug_assert(ts2 =3D=3D ts + 1); ts2->base_type =3D TCG_TYPE_I64; ts2->type =3D TCG_TYPE_I32; ts2->temp_allocated =3D 1; - ts2->temp_local =3D temp_local; + ts2->kind =3D kind; } else { ts->base_type =3D type; ts->type =3D type; ts->temp_allocated =3D 1; - ts->temp_local =3D temp_local; + ts->kind =3D kind; } } =20 @@ -1392,12 +1393,12 @@ void tcg_temp_free_internal(TCGTemp *ts) } #endif =20 - tcg_debug_assert(ts->temp_global =3D=3D 0); + tcg_debug_assert(ts->kind < TEMP_GLOBAL); tcg_debug_assert(ts->temp_allocated !=3D 0); ts->temp_allocated =3D 0; =20 idx =3D temp_idx(ts); - k =3D ts->base_type + (ts->temp_local ? TCG_TYPE_COUNT : 0); + k =3D ts->base_type + (ts->kind =3D=3D TEMP_NORMAL ? 0 : TCG_TYPE_COUN= T); set_bit(idx, s->free_temps[k].l); } =20 @@ -1930,17 +1931,27 @@ void tcg_gen_callN(void *func, TCGTemp *ret, int na= rgs, TCGTemp **args) static void tcg_reg_alloc_start(TCGContext *s) { int i, n; - TCGTemp *ts; =20 - for (i =3D 0, n =3D s->nb_globals; i < n; i++) { - ts =3D &s->temps[i]; - ts->val_type =3D (ts->fixed_reg ? TEMP_VAL_REG : TEMP_VAL_MEM); - } - for (n =3D s->nb_temps; i < n; i++) { - ts =3D &s->temps[i]; - ts->val_type =3D (ts->temp_local ? TEMP_VAL_MEM : TEMP_VAL_DEAD); - ts->mem_allocated =3D 0; - ts->fixed_reg =3D 0; + for (i =3D 0, n =3D s->nb_temps; i < n; i++) { + TCGTemp *ts =3D &s->temps[i]; + TCGTempVal val =3D TEMP_VAL_MEM; + + switch (ts->kind) { + case TEMP_FIXED: + val =3D TEMP_VAL_REG; + break; + case TEMP_GLOBAL: + break; + case TEMP_NORMAL: + val =3D TEMP_VAL_DEAD; + /* fall through */ + case TEMP_LOCAL: + ts->mem_allocated =3D 0; + break; + default: + g_assert_not_reached(); + } + ts->val_type =3D val; } =20 memset(s->reg_to_temp, 0, sizeof(s->reg_to_temp)); @@ -1951,12 +1962,17 @@ static char *tcg_get_arg_str_ptr(TCGContext *s, cha= r *buf, int buf_size, { int idx =3D temp_idx(ts); =20 - if (ts->temp_global) { + switch (ts->kind) { + case TEMP_FIXED: + case TEMP_GLOBAL: pstrcpy(buf, buf_size, ts->name); - } else if (ts->temp_local) { + break; + case TEMP_LOCAL: snprintf(buf, buf_size, "loc%d", idx - s->nb_globals); - } else { + break; + case TEMP_NORMAL: snprintf(buf, buf_size, "tmp%d", idx - s->nb_globals); + break; } return buf; } @@ -2547,15 +2563,24 @@ static void la_bb_end(TCGContext *s, int ng, int nt) { int i; =20 - for (i =3D 0; i < ng; ++i) { - s->temps[i].state =3D TS_DEAD | TS_MEM; - la_reset_pref(&s->temps[i]); - } - for (i =3D ng; i < nt; ++i) { - s->temps[i].state =3D (s->temps[i].temp_local - ? TS_DEAD | TS_MEM - : TS_DEAD); - la_reset_pref(&s->temps[i]); + for (i =3D 0; i < nt; ++i) { + TCGTemp *ts =3D &s->temps[i]; + int state; + + switch (ts->kind) { + case TEMP_FIXED: + case TEMP_GLOBAL: + case TEMP_LOCAL: + state =3D TS_DEAD | TS_MEM; + break; + case TEMP_NORMAL: + state =3D TS_DEAD; + break; + default: + g_assert_not_reached(); + } + ts->state =3D state; + la_reset_pref(ts); } } =20 @@ -2583,7 +2608,7 @@ static void la_bb_sync(TCGContext *s, int ng, int nt) la_global_sync(s, ng); =20 for (int i =3D ng; i < nt; ++i) { - if (s->temps[i].temp_local) { + if (s->temps[i].kind =3D=3D TEMP_LOCAL) { int state =3D s->temps[i].state; s->temps[i].state =3D state | TS_MEM; if (state !=3D TS_DEAD) { @@ -3191,7 +3216,8 @@ static void check_regs(TCGContext *s) } for (k =3D 0; k < s->nb_temps; k++) { ts =3D &s->temps[k]; - if (ts->val_type =3D=3D TEMP_VAL_REG && !ts->fixed_reg + if (ts->val_type =3D=3D TEMP_VAL_REG + && ts->kind !=3D TEMP_FIXED && s->reg_to_temp[ts->reg] !=3D ts) { printf("Inconsistency for temp %s:\n", tcg_get_arg_str_ptr(s, buf, sizeof(buf), ts)); @@ -3228,15 +3254,14 @@ static void temp_load(TCGContext *, TCGTemp *, TCGR= egSet, TCGRegSet, TCGRegSet); mark it free; otherwise mark it dead. */ static void temp_free_or_dead(TCGContext *s, TCGTemp *ts, int free_or_dead) { - if (ts->fixed_reg) { + if (ts->kind =3D=3D TEMP_FIXED) { return; } if (ts->val_type =3D=3D TEMP_VAL_REG) { s->reg_to_temp[ts->reg] =3D NULL; } ts->val_type =3D (free_or_dead < 0 - || ts->temp_local - || ts->temp_global + || ts->kind !=3D TEMP_NORMAL ? TEMP_VAL_MEM : TEMP_VAL_DEAD); } =20 @@ -3253,7 +3278,7 @@ static inline void temp_dead(TCGContext *s, TCGTemp *= ts) static void temp_sync(TCGContext *s, TCGTemp *ts, TCGRegSet allocated_regs, TCGRegSet preferred_regs, int free_or_dead) { - if (ts->fixed_reg) { + if (ts->kind =3D=3D TEMP_FIXED) { return; } if (!ts->mem_coherent) { @@ -3436,7 +3461,8 @@ static void temp_save(TCGContext *s, TCGTemp *ts, TCG= RegSet allocated_regs) { /* The liveness analysis already ensures that globals are back in memory. Keep an tcg_debug_assert for safety. */ - tcg_debug_assert(ts->val_type =3D=3D TEMP_VAL_MEM || ts->fixed_reg); + tcg_debug_assert(ts->val_type =3D=3D TEMP_VAL_MEM + || ts->kind =3D=3D TEMP_FIXED); } =20 /* save globals to their canonical location and assume they can be @@ -3461,7 +3487,7 @@ static void sync_globals(TCGContext *s, TCGRegSet all= ocated_regs) for (i =3D 0, n =3D s->nb_globals; i < n; i++) { TCGTemp *ts =3D &s->temps[i]; tcg_debug_assert(ts->val_type !=3D TEMP_VAL_REG - || ts->fixed_reg + || ts->kind =3D=3D TEMP_FIXED || ts->mem_coherent); } } @@ -3474,7 +3500,7 @@ static void tcg_reg_alloc_bb_end(TCGContext *s, TCGRe= gSet allocated_regs) =20 for (i =3D s->nb_globals; i < s->nb_temps; i++) { TCGTemp *ts =3D &s->temps[i]; - if (ts->temp_local) { + if (ts->kind =3D=3D TEMP_LOCAL) { temp_save(s, ts, allocated_regs); } else { /* The liveness analysis already ensures that temps are dead. @@ -3500,7 +3526,7 @@ static void tcg_reg_alloc_cbranch(TCGContext *s, TCGR= egSet allocated_regs) * The liveness analysis already ensures that temps are dead. * Keep tcg_debug_asserts for safety. */ - if (ts->temp_local) { + if (ts->kind =3D=3D TEMP_LOCAL) { tcg_debug_assert(ts->val_type !=3D TEMP_VAL_REG || ts->mem_coh= erent); } else { tcg_debug_assert(ts->val_type =3D=3D TEMP_VAL_DEAD); @@ -3516,7 +3542,7 @@ static void tcg_reg_alloc_do_movi(TCGContext *s, TCGT= emp *ots, TCGRegSet preferred_regs) { /* ENV should not be modified. */ - tcg_debug_assert(!ots->fixed_reg); + tcg_debug_assert(ots->kind !=3D TEMP_FIXED); =20 /* The movi is not explicitly generated here. */ if (ots->val_type =3D=3D TEMP_VAL_REG) { @@ -3556,7 +3582,7 @@ static void tcg_reg_alloc_mov(TCGContext *s, const TC= GOp *op) ts =3D arg_temp(op->args[1]); =20 /* ENV should not be modified. */ - tcg_debug_assert(!ots->fixed_reg); + tcg_debug_assert(ots->kind !=3D TEMP_FIXED); =20 /* Note that otype !=3D itype for no-op truncation. */ otype =3D ots->type; @@ -3595,7 +3621,7 @@ static void tcg_reg_alloc_mov(TCGContext *s, const TC= GOp *op) } temp_dead(s, ots); } else { - if (IS_DEAD_ARG(1) && !ts->fixed_reg) { + if (IS_DEAD_ARG(1) && ts->kind !=3D TEMP_FIXED) { /* the mov can be suppressed */ if (ots->val_type =3D=3D TEMP_VAL_REG) { s->reg_to_temp[ots->reg] =3D NULL; @@ -3617,7 +3643,7 @@ static void tcg_reg_alloc_mov(TCGContext *s, const TC= GOp *op) * Store the source register into the destination slot * and leave the destination temp as TEMP_VAL_MEM. */ - assert(!ots->fixed_reg); + assert(ots->kind !=3D TEMP_FIXED); if (!ts->mem_allocated) { temp_allocate_frame(s, ots); } @@ -3654,7 +3680,7 @@ static void tcg_reg_alloc_dup(TCGContext *s, const TC= GOp *op) its =3D arg_temp(op->args[1]); =20 /* ENV should not be modified. */ - tcg_debug_assert(!ots->fixed_reg); + tcg_debug_assert(ots->kind !=3D TEMP_FIXED); =20 itype =3D its->type; vece =3D TCGOP_VECE(op); @@ -3794,7 +3820,7 @@ static void tcg_reg_alloc_op(TCGContext *s, const TCG= Op *op) i_preferred_regs =3D o_preferred_regs =3D 0; if (arg_ct->ialias) { o_preferred_regs =3D op->output_pref[arg_ct->alias_index]; - if (ts->fixed_reg) { + if (ts->kind =3D=3D TEMP_FIXED) { /* if fixed register, we must allocate a new register if the alias is not the same register */ if (arg !=3D op->args[arg_ct->alias_index]) { @@ -3886,7 +3912,7 @@ static void tcg_reg_alloc_op(TCGContext *s, const TCG= Op *op) ts =3D arg_temp(arg); =20 /* ENV should not be modified. */ - tcg_debug_assert(!ts->fixed_reg); + tcg_debug_assert(ts->kind !=3D TEMP_FIXED); =20 if (arg_ct->oalias && !const_args[arg_ct->alias_index]) { reg =3D new_args[arg_ct->alias_index]; @@ -3927,7 +3953,7 @@ static void tcg_reg_alloc_op(TCGContext *s, const TCG= Op *op) ts =3D arg_temp(op->args[i]); =20 /* ENV should not be modified. */ - tcg_debug_assert(!ts->fixed_reg); + tcg_debug_assert(ts->kind !=3D TEMP_FIXED); =20 if (NEED_SYNC_ARG(i)) { temp_sync(s, ts, o_allocated_regs, 0, IS_DEAD_ARG(i)); @@ -4059,7 +4085,7 @@ static void tcg_reg_alloc_call(TCGContext *s, TCGOp *= op) ts =3D arg_temp(arg); =20 /* ENV should not be modified. */ - tcg_debug_assert(!ts->fixed_reg); + tcg_debug_assert(ts->kind !=3D TEMP_FIXED); =20 reg =3D tcg_target_call_oarg_regs[i]; tcg_debug_assert(s->reg_to_temp[reg] =3D=3D NULL); --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386085; cv=none; d=zohomail.com; s=zohoarc; b=Yjk6SLsu0DabXmLTXmxZmmvh1owKjcUAn0gTQj03nSCZIYpTFMX8cOyHJ5cINhhZMRSbmOq5WJqkuVEntC4qGw4LqwRWL6h5hL/YFgDOhcSxD1xr0rDDLWywiVKQ1m5k9fBuH3J3+V8VuMskC84hfCnR/IP3V0JKTVI8eqqjK6o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386085; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=YpDNiHW+o2iNjUonn03i++LfISaZVtNqCD0CIRtryeM=; b=MaaHhrxCY44sGjRiFQav7DMseGxjNXZ9PuezvJW0FYkcXvhkJsgAvVeqNriToVYjHY2BHM1hT74S9bN1xLXQdYYuv80VeyVL5y8Tda3xPjUDjp741fEHkxOjjgpOB141Uk7UzoWP3gQ0Hcd1p/7RSpskR8qEwLzzeOcdm7KWMzw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 161038608572864.73954872240256; Mon, 11 Jan 2021 09:28:05 -0800 (PST) Received: from localhost ([::1]:49270 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz0z6-0002pO-IB for importer@patchew.org; Mon, 11 Jan 2021 12:28:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51622) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rQ-0003A0-Bc for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:08 -0500 Received: from mail-pg1-x533.google.com ([2607:f8b0:4864:20::533]:34886) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rG-00006O-SW for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:08 -0500 Received: by mail-pg1-x533.google.com with SMTP id n7so101325pgg.2 for ; Mon, 11 Jan 2021 09:19:58 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.19.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:19:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YpDNiHW+o2iNjUonn03i++LfISaZVtNqCD0CIRtryeM=; b=D5SXsndCRK6+dH4IKPu52+B2GEARFsPtwbC3Ae1nQqEgVytbsqNjqf44Ilm5xvoCGa DQbw5+qdQCL+rGdleEzK9lP4f0TMosbXrOYCXnV8zAwr3ucp//NEVmFyhx77zBGhUQgt gL+PlrYgUfMc4DNCfFsMXV/UsSNRvyoujz9tJ/nqzcergZw9y1ZyRHSuSa8gD9YKLOVK aQss/ZHIvrGUO7YXpVGhdhy5MQC+xRVaxq+J92T9aiFBa8gLdHStK2zJ4sGHO9MYKrXO O++OKKRSv14fAFaAAHWz517FesihfxGiGbyhPDtjVhfB3Bh969rcnQUpGmCc94rsN0bL mFiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YpDNiHW+o2iNjUonn03i++LfISaZVtNqCD0CIRtryeM=; b=M5JCP6H96wqe3z6+K7PzR8PvtAuMvela0CwHBmY7kQ+GWmouLmVwZLJN1KpD7uRIJ4 LBtDPiY6rSmNdGxZ3lIofpOImHWI58nQcaoqt0f8x/fcFdf4yaV2ENQ/j0ImvQF+oqlO wpuJBFWLHW96smdYl94Q3BAbY4CfQWCS7r5fEvVorOq26PTeWWizD28WKnDor8+DCqKO rBAgCLibK2NxixdMDJa3sObITHcvNU1XEA7shJD4urKmOHNMIhUmjOcoJLOUh9nZSmHk E/dBjah1dHQxwULJDvbc9uaA26CX4Yxi2+EM1QYfpKFx1sha+MNxHNWizcxycAhyZkgp oWqQ== X-Gm-Message-State: AOAM532cKO4yXw+q315r+1psQsN2Gr8COGtX+h3Fa+mXIu403zFK238/ 7MzTch8M5AR4Z6w99FHHBEZ3anZroZg+Ag== X-Google-Smtp-Source: ABdhPJxfYrsU6v44gFx5ihXpaV1WJ9+NBmSTxX/Z6rBO62rm1SCTzdRJPwgYAxyidkPjAjApnhATKg== X-Received: by 2002:a65:5b0a:: with SMTP id y10mr491155pgq.337.1610385597165; Mon, 11 Jan 2021 09:19:57 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 04/23] tcg: Add temp_readonly Date: Mon, 11 Jan 2021 07:19:27 -1000 Message-Id: <20210111171946.219469-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::533; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x533.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) In most, but not all, places that we check for TEMP_FIXED, we are really testing that we do not modify the temporary. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- include/tcg/tcg.h | 5 +++++ tcg/tcg.c | 21 ++++++++++----------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h index 571d4e0fa3..2bdaeaa69c 100644 --- a/include/tcg/tcg.h +++ b/include/tcg/tcg.h @@ -679,6 +679,11 @@ struct TCGContext { target_ulong gen_insn_data[TCG_MAX_INSNS][TARGET_INSN_START_WORDS]; }; =20 +static inline bool temp_readonly(TCGTemp *ts) +{ + return ts->kind =3D=3D TEMP_FIXED; +} + extern TCGContext tcg_init_ctx; extern __thread TCGContext *tcg_ctx; extern const void *tcg_code_gen_epilogue; diff --git a/tcg/tcg.c b/tcg/tcg.c index 143794a585..e02bb71953 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -3254,7 +3254,7 @@ static void temp_load(TCGContext *, TCGTemp *, TCGReg= Set, TCGRegSet, TCGRegSet); mark it free; otherwise mark it dead. */ static void temp_free_or_dead(TCGContext *s, TCGTemp *ts, int free_or_dead) { - if (ts->kind =3D=3D TEMP_FIXED) { + if (temp_readonly(ts)) { return; } if (ts->val_type =3D=3D TEMP_VAL_REG) { @@ -3278,7 +3278,7 @@ static inline void temp_dead(TCGContext *s, TCGTemp *= ts) static void temp_sync(TCGContext *s, TCGTemp *ts, TCGRegSet allocated_regs, TCGRegSet preferred_regs, int free_or_dead) { - if (ts->kind =3D=3D TEMP_FIXED) { + if (temp_readonly(ts)) { return; } if (!ts->mem_coherent) { @@ -3461,8 +3461,7 @@ static void temp_save(TCGContext *s, TCGTemp *ts, TCG= RegSet allocated_regs) { /* The liveness analysis already ensures that globals are back in memory. Keep an tcg_debug_assert for safety. */ - tcg_debug_assert(ts->val_type =3D=3D TEMP_VAL_MEM - || ts->kind =3D=3D TEMP_FIXED); + tcg_debug_assert(ts->val_type =3D=3D TEMP_VAL_MEM || temp_readonly(ts)= ); } =20 /* save globals to their canonical location and assume they can be @@ -3542,7 +3541,7 @@ static void tcg_reg_alloc_do_movi(TCGContext *s, TCGT= emp *ots, TCGRegSet preferred_regs) { /* ENV should not be modified. */ - tcg_debug_assert(ots->kind !=3D TEMP_FIXED); + tcg_debug_assert(!temp_readonly(ots)); =20 /* The movi is not explicitly generated here. */ if (ots->val_type =3D=3D TEMP_VAL_REG) { @@ -3582,7 +3581,7 @@ static void tcg_reg_alloc_mov(TCGContext *s, const TC= GOp *op) ts =3D arg_temp(op->args[1]); =20 /* ENV should not be modified. */ - tcg_debug_assert(ots->kind !=3D TEMP_FIXED); + tcg_debug_assert(!temp_readonly(ots)); =20 /* Note that otype !=3D itype for no-op truncation. */ otype =3D ots->type; @@ -3643,7 +3642,7 @@ static void tcg_reg_alloc_mov(TCGContext *s, const TC= GOp *op) * Store the source register into the destination slot * and leave the destination temp as TEMP_VAL_MEM. */ - assert(ots->kind !=3D TEMP_FIXED); + assert(!temp_readonly(ots)); if (!ts->mem_allocated) { temp_allocate_frame(s, ots); } @@ -3680,7 +3679,7 @@ static void tcg_reg_alloc_dup(TCGContext *s, const TC= GOp *op) its =3D arg_temp(op->args[1]); =20 /* ENV should not be modified. */ - tcg_debug_assert(ots->kind !=3D TEMP_FIXED); + tcg_debug_assert(!temp_readonly(ots)); =20 itype =3D its->type; vece =3D TCGOP_VECE(op); @@ -3912,7 +3911,7 @@ static void tcg_reg_alloc_op(TCGContext *s, const TCG= Op *op) ts =3D arg_temp(arg); =20 /* ENV should not be modified. */ - tcg_debug_assert(ts->kind !=3D TEMP_FIXED); + tcg_debug_assert(!temp_readonly(ts)); =20 if (arg_ct->oalias && !const_args[arg_ct->alias_index]) { reg =3D new_args[arg_ct->alias_index]; @@ -3953,7 +3952,7 @@ static void tcg_reg_alloc_op(TCGContext *s, const TCG= Op *op) ts =3D arg_temp(op->args[i]); =20 /* ENV should not be modified. */ - tcg_debug_assert(ts->kind !=3D TEMP_FIXED); + tcg_debug_assert(!temp_readonly(ts)); =20 if (NEED_SYNC_ARG(i)) { temp_sync(s, ts, o_allocated_regs, 0, IS_DEAD_ARG(i)); @@ -4085,7 +4084,7 @@ static void tcg_reg_alloc_call(TCGContext *s, TCGOp *= op) ts =3D arg_temp(arg); =20 /* ENV should not be modified. */ - tcg_debug_assert(ts->kind !=3D TEMP_FIXED); + tcg_debug_assert(!temp_readonly(ts)); =20 reg =3D tcg_target_call_oarg_regs[i]; tcg_debug_assert(s->reg_to_temp[reg] =3D=3D NULL); --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386348; cv=none; d=zohomail.com; s=zohoarc; b=DRAtLLhNu3U2W8nPoEweWpaZu5X4yV525RUnqwK6H2yT0wsQAOOz6tk0aIxpXaenSRY3375xBE4wTLhzfx21U+CQVGSlDlWBRKntDNJTXc/lCZ086ZDEpn6BNlEEv5r0whfWdV6PBdRXXmmR85yFbTgI4rbuBGam0CXdOqPlZrU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386348; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=AC87R9xtxutHL4s1/n8odbHgwbxpwhaLEHoWjKyBlaU=; b=PmE8kUZKDqbuNXHIqQcZPspzdI8Nreu+VxnWUyHSCPf+C/m1qbwDJLtPFDz7n+EkhHC/7kkpXjNZI9tIUZeIE2tGvtNbFlRHefx5OmUb6sXACXdVOBBKb9JNuf5yJyf3Kos8IbFNaBR14H5oTink0STavkZJ0krskxNluvMZhGI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610386348157924.4284236734815; Mon, 11 Jan 2021 09:32:28 -0800 (PST) Received: from localhost ([::1]:55792 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz13J-0005f1-UF for importer@patchew.org; Mon, 11 Jan 2021 12:32:25 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51668) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rS-0003B4-AF for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:12 -0500 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:37113) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rJ-000082-4b for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:10 -0500 Received: by mail-pf1-x42c.google.com with SMTP id 11so325411pfu.4 for ; Mon, 11 Jan 2021 09:19:59 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.19.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:19:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=AC87R9xtxutHL4s1/n8odbHgwbxpwhaLEHoWjKyBlaU=; b=U8StMlzyR+6VDwbq6MUKmYp1atbOzVQw/85us9qUqI38Ucs6uKZB1pq9hmKRGs1WK5 rf/AQ7LNJxd0PNMY2pZgmCsV3D+SNnOFFrJp9pcLcF8W690+GaTuGfLJE4vwDnWtFftu bOQB7B4uA0b+zrVI1vwHuEVbjiAOUcSTWvQaAeD9u4aI9XovcC+328+ijgm/L2K+COyH MvvEaSpsQzsiZQD+lp1X8BYYHFwl4gZbS/dcohancsS4Cpeb5EhmQa6HzktvRQ9//BIK VBh7uC+ZmrJkBBldTSabQNjeoOyKSUXhK/PZ1NfGOtF9VPkEG/EFYuZ9Wj1pb8ErAnl2 9ViA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=AC87R9xtxutHL4s1/n8odbHgwbxpwhaLEHoWjKyBlaU=; b=UeVGtzn4IwNvmdp9Bf+xQdZ1e8uxuKjpITyKmnGhB3xB05ZetAumtjCoAe0Vm9Gnee zMwmH/E4bWusfSqNcK3AKllj5KGonYcmD3s4iBGIOgTyTPTr4p9NhyM+E2Po/SETm7h8 ZWT4stIWIcoX0EI/zmNfe1hidRWpXCoYDCM74ybovpBimTJzZQMw0GL4sogVlzpX4mIe RrxVtpgkb9KNdA6Bw34PONYzvsjkzO/YecX5A2aLWFCcgI75TM5b/Po+98tGwyNtIXKz jFvZEzXppmS4BUJF/zILuwBjVWb1lbTBMAM2xdtp8SkDs6il0qNMPwPOZ26VtbOx1Eaf QIEw== X-Gm-Message-State: AOAM533hpmUju52hhRZR7J8IjhyIJkjjuBbPFhklOaFtyQ/xxcMWgUj6 CHrzV8alKVJZmqrNctCRZDHIdFhdo3AhNw== X-Google-Smtp-Source: ABdhPJw5GwxvxjQ5bezHxLwYW2lHcUCGfRI6t71NJYLAtXizqIKTV/fIT2gh3pz0tMY5U3vFuGbIHQ== X-Received: by 2002:a62:8f0e:0:b029:1aa:1268:fa4e with SMTP id n14-20020a628f0e0000b02901aa1268fa4emr403640pfd.18.1610385598775; Mon, 11 Jan 2021 09:19:58 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 05/23] tcg: Expand TCGTemp.val to 64-bits Date: Mon, 11 Jan 2021 07:19:28 -1000 Message-Id: <20210111171946.219469-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42c; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" This will reduce the differences between 32-bit and 64-bit hosts, allowing full 64-bit constants to be created with the same interface. Signed-off-by: Richard Henderson --- include/tcg/tcg.h | 2 +- tcg/tcg.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h index 2bdaeaa69c..e7adc7e265 100644 --- a/include/tcg/tcg.h +++ b/include/tcg/tcg.h @@ -506,7 +506,7 @@ typedef struct TCGTemp { unsigned int mem_allocated:1; unsigned int temp_allocated:1; =20 - tcg_target_long val; + int64_t val; struct TCGTemp *mem_base; intptr_t mem_offset; const char *name; diff --git a/tcg/tcg.c b/tcg/tcg.c index e02bb71953..545dd2b0b2 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -3176,7 +3176,7 @@ static void dump_regs(TCGContext *s) tcg_target_reg_names[ts->mem_base->reg]); break; case TEMP_VAL_CONST: - printf("$0x%" TCG_PRIlx, ts->val); + printf("$0x%" PRIx64, ts->val); break; case TEMP_VAL_DEAD: printf("D"); --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386021; cv=none; d=zohomail.com; s=zohoarc; b=RnCECRTnW98UJxKVTO3LwkTCRB0T6YWTV7FlFYXadqJ1KsCqVtZvDDoT8r/3R6CuNVcG9Sx7GgzwE4nFyx9PKRI20aIQ8pEypKWur+iOIf07oY427rWvURwC/gXUaGU0KfngIcWz5hvX0kJPNu7ue2GXQlpsGP8XWkRP95sHmko= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386021; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qXpykEtc7vaKX9QcxuT/1Uq7HaNn7jlaJj69OtcFcWE=; b=Q9f/fjxzKIll/dJLCh6IZ71zK2XWZp44+t0yr+ga/DwW8vo5+/SyP3TnmwXiiCr0t/5EkLDBdvteQ8URli6d0B44qb2TWYswmMYLd0paRDBROUxF2QOJOTN4aHciNq5tEltHVwi9yAupsnA/SUk6czXIMqxMnSKr2VR7YCxoHiY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610386021627204.41572299031873; Mon, 11 Jan 2021 09:27:01 -0800 (PST) Received: from localhost ([::1]:43922 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz0y4-0000dT-59 for importer@patchew.org; Mon, 11 Jan 2021 12:27:00 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51634) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rQ-0003A5-Sr for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:08 -0500 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]:46982) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rL-00008E-2B for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:08 -0500 Received: by mail-pg1-x535.google.com with SMTP id c22so64086pgg.13 for ; Mon, 11 Jan 2021 09:20:01 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.19.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:19:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qXpykEtc7vaKX9QcxuT/1Uq7HaNn7jlaJj69OtcFcWE=; b=iZRetf99lR/SOBJ83FtkVjFcBgnwBjpM5KLjCVNMP3TvPnNc81MAa0DwyafjpoBKpB xj+XJCQYBttZVtyqvpPkm/aG/QZPSBwE+QupSuJ2GhXXNcERFHpNNtRdu5JATXfJ8VqQ gaMA9xJZRl0HmvVymOYLJD46ZYsEULWOkBRrPqVWiNouIydz0z/RApp7+5Kr9X+AZ9yo 59qTrBIUDCmte6veK9nMUt2MfhBqTp8rLEpAi5iQxzRJQShT4aUq31cejJqkJ2q0pBY8 Vq1JhFfF1ElqDf85GaCTO+VzcvF4Z2dC7X8dK5NbrdywameD0BUseVowuNIUAVAOxgEb zSNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qXpykEtc7vaKX9QcxuT/1Uq7HaNn7jlaJj69OtcFcWE=; b=Hs1WSUX+LQipC5Xp3lPHZXgTHT6BZenjbPa6ztR5IYnhAwLmBrKP9wec/rAW69Y4kK PlCbm7aT1b2kFWbbrwFGX6Z3jDqiPlWrePKSHfhSvLzy2ToTCAFxANuMReBJ/zOf81xN QSEVCdxksAOy6wZ/pkxRzWqFDOijr3Q9hrsCIJn0gD5EWc0mLzwIMw4RHW332SPsfDrO asn6dCjO8/FQFx9feqjGnKGfTg4e9Yy208d0QGVP9Mfd6KuxQlHnow1lUKd+LkVY1FcR hVYGCmUgvQJ3+ihOSfqTyqIRM+rB1EzP+2iyXmNeTTer4TFyVu/t3GXftK2EpjwLZ3pA ufaQ== X-Gm-Message-State: AOAM530FI93i/Iko7+0Aag8g0ZtZbX8VucFex4rAEM8ZCqJfv2nrWDDG ub5z5OXcBT+5JV4dRfi99vzBc0aKHwLQMQ== X-Google-Smtp-Source: ABdhPJwYwfv6qQSu9RbkDdJP/he+FqJh404+/uJrZBYo72D6bTznjkorxYElVtunZMJTzcJwgAMtCg== X-Received: by 2002:a63:4404:: with SMTP id r4mr510957pga.149.1610385600552; Mon, 11 Jan 2021 09:20:00 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 06/23] tcg: Rename struct tcg_temp_info to TempOptInfo Date: Mon, 11 Jan 2021 07:19:29 -1000 Message-Id: <20210111171946.219469-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::535; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x535.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Fix this name vs our coding style. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Richard Henderson --- tcg/optimize.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 2f827a9d2d..0da9750b65 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -35,20 +35,20 @@ glue(glue(case INDEX_op_, x), _i64): \ glue(glue(case INDEX_op_, x), _vec) =20 -struct tcg_temp_info { +typedef struct TempOptInfo { bool is_const; TCGTemp *prev_copy; TCGTemp *next_copy; tcg_target_ulong val; tcg_target_ulong mask; -}; +} TempOptInfo; =20 -static inline struct tcg_temp_info *ts_info(TCGTemp *ts) +static inline TempOptInfo *ts_info(TCGTemp *ts) { return ts->state_ptr; } =20 -static inline struct tcg_temp_info *arg_info(TCGArg arg) +static inline TempOptInfo *arg_info(TCGArg arg) { return ts_info(arg_temp(arg)); } @@ -71,9 +71,9 @@ static inline bool ts_is_copy(TCGTemp *ts) /* Reset TEMP's state, possibly removing the temp for the list of copies. = */ static void reset_ts(TCGTemp *ts) { - struct tcg_temp_info *ti =3D ts_info(ts); - struct tcg_temp_info *pi =3D ts_info(ti->prev_copy); - struct tcg_temp_info *ni =3D ts_info(ti->next_copy); + TempOptInfo *ti =3D ts_info(ts); + TempOptInfo *pi =3D ts_info(ti->prev_copy); + TempOptInfo *ni =3D ts_info(ti->next_copy); =20 ni->prev_copy =3D ti->prev_copy; pi->next_copy =3D ti->next_copy; @@ -89,12 +89,12 @@ static void reset_temp(TCGArg arg) } =20 /* Initialize and activate a temporary. */ -static void init_ts_info(struct tcg_temp_info *infos, +static void init_ts_info(TempOptInfo *infos, TCGTempSet *temps_used, TCGTemp *ts) { size_t idx =3D temp_idx(ts); if (!test_bit(idx, temps_used->l)) { - struct tcg_temp_info *ti =3D &infos[idx]; + TempOptInfo *ti =3D &infos[idx]; =20 ts->state_ptr =3D ti; ti->next_copy =3D ts; @@ -105,7 +105,7 @@ static void init_ts_info(struct tcg_temp_info *infos, } } =20 -static void init_arg_info(struct tcg_temp_info *infos, +static void init_arg_info(TempOptInfo *infos, TCGTempSet *temps_used, TCGArg arg) { init_ts_info(infos, temps_used, arg_temp(arg)); @@ -171,7 +171,7 @@ static void tcg_opt_gen_movi(TCGContext *s, TCGOp *op, = TCGArg dst, TCGArg val) const TCGOpDef *def; TCGOpcode new_op; tcg_target_ulong mask; - struct tcg_temp_info *di =3D arg_info(dst); + TempOptInfo *di =3D arg_info(dst); =20 def =3D &tcg_op_defs[op->opc]; if (def->flags & TCG_OPF_VECTOR) { @@ -202,8 +202,8 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, T= CGArg dst, TCGArg src) TCGTemp *dst_ts =3D arg_temp(dst); TCGTemp *src_ts =3D arg_temp(src); const TCGOpDef *def; - struct tcg_temp_info *di; - struct tcg_temp_info *si; + TempOptInfo *di; + TempOptInfo *si; tcg_target_ulong mask; TCGOpcode new_op; =20 @@ -236,7 +236,7 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, T= CGArg dst, TCGArg src) di->mask =3D mask; =20 if (src_ts->type =3D=3D dst_ts->type) { - struct tcg_temp_info *ni =3D ts_info(si->next_copy); + TempOptInfo *ni =3D ts_info(si->next_copy); =20 di->next_copy =3D si->next_copy; di->prev_copy =3D src_ts; @@ -599,7 +599,7 @@ void tcg_optimize(TCGContext *s) { int nb_temps, nb_globals; TCGOp *op, *op_next, *prev_mb =3D NULL; - struct tcg_temp_info *infos; + TempOptInfo *infos; TCGTempSet temps_used; =20 /* Array VALS has an element for each temp. @@ -610,7 +610,7 @@ void tcg_optimize(TCGContext *s) nb_temps =3D s->nb_temps; nb_globals =3D s->nb_globals; bitmap_zero(temps_used.l, nb_temps); - infos =3D tcg_malloc(sizeof(struct tcg_temp_info) * nb_temps); + infos =3D tcg_malloc(sizeof(TempOptInfo) * nb_temps); =20 QTAILQ_FOREACH_SAFE(op, &s->ops, link, op_next) { tcg_target_ulong mask, partmask, affected; --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386088; cv=none; d=zohomail.com; s=zohoarc; b=ayq9LwEy/1J99FxQw7eVglOO2gN5jOiski7wrjzAfcEbLlv/TsTtlcCpPl5jJkaiHHi4bR/3rMBjcyazlm9M9suM6uXUmJA2lEX5SPTXhsfGyVs13u0HwTQllGDFLiwZQ16cnkj0aQjnlKwd2B/+TS2zBMsG93fov2uAt9UPcZ4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386088; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=HdlisOqlJWN9os3gMBGAWcsA358Yd0mVBunQfB+T/MQ=; b=oERCTBbAvxQvvCP/QvjHP+3YHcyPM5DYcbaj6bIL5G3XQ6uUbD0zQSeMvfAjs2xxRiGJQFK2dSlGSAQD629ZiR1dPD0GyH/S/+gK7Gn4HbD92R5KrSBqBsPDhBPZs7LxcTgzXDHI+fEG+5hbyWEfWDpUx5iOQ0nvgQ+5A84YFcQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610386088728315.2687056558857; Mon, 11 Jan 2021 09:28:08 -0800 (PST) Received: from localhost ([::1]:49512 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz0z9-0002vK-KD for importer@patchew.org; Mon, 11 Jan 2021 12:28:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51736) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0re-0003Eq-Ga for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:22 -0500 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]:40351) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rO-00008P-NY for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:16 -0500 Received: by mail-pf1-x42c.google.com with SMTP id x126so313980pfc.7 for ; Mon, 11 Jan 2021 09:20:03 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=HdlisOqlJWN9os3gMBGAWcsA358Yd0mVBunQfB+T/MQ=; b=ylfKq7M9LUgg8dgdY2+DKERfm62yR41OhUsuk5lOtG4h1OHMf2EPcP6tuzfSQBuLJt C2O4IIpbZejCHac8ILD2ZQH8ptKgcfJQ+cAnNNQ4PGGyMlT0L5Zbw679h+Rw+3BxesAd FBnwbuUr0mcbcXGEL/sad+0VDwU6N6I4wxpQManiJnEA7gqkXwm7O+9zjVR/gqj3EbXL FbIug7+JXudTOK9NllAWuZ6VT0S6t0BPfsUUY79zSR2RMOtJzpSA+b6rydWD9bYLAtM7 kY8qAdYY9na8huBgU5Klsbi9U0xvDKC0Tudn4bE9+bXPCv1DDSvVDis7uVLM8f2N+Ezq /L6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HdlisOqlJWN9os3gMBGAWcsA358Yd0mVBunQfB+T/MQ=; b=nXkTvuV6pOb5PQXV1NV0D3+SfqX4QX3oeqL5pulTPfzfLVXErEAtpTjkjIHS7X7QWi 0ign976WAXfaeFfWyMbMVRuaiqKOpy3vskqX/UEkeofkVfG8E38aZRGRTrxiyeNKmgXP M1FRoctfFMuLGJisvOyygy/U3i3hbLbLdbFgrM1yGN/rHkI+KWAW0NEKQqyWERyUl2oD WXqmgjqgRPERJ2mJUyhsleT9RmlJaTUW7r3EapPQT0nSus/PCP0ZxA1QgpU6NfRqJPQO 0QVzMpiXRFRjpr/23bpIoYc/5pNfpDK9drnPfsgz1G2o0Lb7++smY+fMkPr5IGs0SkJ2 VyEw== X-Gm-Message-State: AOAM531TCgJCG8TEKZXieKoICRAfybqjUg5D15cEOxPoeD9OdI11BOVO 52jYyuT8c/DGgYWIhBP6Nj+4SHN/OGCB3Q== X-Google-Smtp-Source: ABdhPJyYQAlPkWPe+gqoUGlNfHE7oYJZEFMg870rGwEEbpENWmHftF1EVHgWQXkkcroONE42fFfffg== X-Received: by 2002:a63:4b54:: with SMTP id k20mr552059pgl.290.1610385602043; Mon, 11 Jan 2021 09:20:02 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 07/23] tcg: Expand TempOptInfo to 64-bits Date: Mon, 11 Jan 2021 07:19:30 -1000 Message-Id: <20210111171946.219469-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::42c; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" This propagates the extended value of TCGTemp.val that we did before. In addition, it will be required for vector constants. Signed-off-by: Richard Henderson --- tcg/optimize.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 0da9750b65..433d2540f4 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -39,8 +39,8 @@ typedef struct TempOptInfo { bool is_const; TCGTemp *prev_copy; TCGTemp *next_copy; - tcg_target_ulong val; - tcg_target_ulong mask; + uint64_t val; + uint64_t mask; } TempOptInfo; =20 static inline TempOptInfo *ts_info(TCGTemp *ts) @@ -166,11 +166,11 @@ static bool args_are_copies(TCGArg arg1, TCGArg arg2) return ts_are_copies(arg_temp(arg1), arg_temp(arg2)); } =20 -static void tcg_opt_gen_movi(TCGContext *s, TCGOp *op, TCGArg dst, TCGArg = val) +static void tcg_opt_gen_movi(TCGContext *s, TCGOp *op, TCGArg dst, uint64_= t val) { const TCGOpDef *def; TCGOpcode new_op; - tcg_target_ulong mask; + uint64_t mask; TempOptInfo *di =3D arg_info(dst); =20 def =3D &tcg_op_defs[op->opc]; @@ -204,7 +204,7 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, T= CGArg dst, TCGArg src) const TCGOpDef *def; TempOptInfo *di; TempOptInfo *si; - tcg_target_ulong mask; + uint64_t mask; TCGOpcode new_op; =20 if (ts_are_copies(dst_ts, src_ts)) { @@ -247,7 +247,7 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, T= CGArg dst, TCGArg src) } } =20 -static TCGArg do_constant_folding_2(TCGOpcode op, TCGArg x, TCGArg y) +static uint64_t do_constant_folding_2(TCGOpcode op, uint64_t x, uint64_t y) { uint64_t l64, h64; =20 @@ -410,10 +410,10 @@ static TCGArg do_constant_folding_2(TCGOpcode op, TCG= Arg x, TCGArg y) } } =20 -static TCGArg do_constant_folding(TCGOpcode op, TCGArg x, TCGArg y) +static uint64_t do_constant_folding(TCGOpcode op, uint64_t x, uint64_t y) { const TCGOpDef *def =3D &tcg_op_defs[op]; - TCGArg res =3D do_constant_folding_2(op, x, y); + uint64_t res =3D do_constant_folding_2(op, x, y); if (!(def->flags & TCG_OPF_64BIT)) { res =3D (int32_t)res; } @@ -501,8 +501,9 @@ static bool do_constant_folding_cond_eq(TCGCond c) static TCGArg do_constant_folding_cond(TCGOpcode op, TCGArg x, TCGArg y, TCGCond c) { - tcg_target_ulong xv =3D arg_info(x)->val; - tcg_target_ulong yv =3D arg_info(y)->val; + uint64_t xv =3D arg_info(x)->val; + uint64_t yv =3D arg_info(y)->val; + if (arg_is_const(x) && arg_is_const(y)) { const TCGOpDef *def =3D &tcg_op_defs[op]; tcg_debug_assert(!(def->flags & TCG_OPF_VECTOR)); @@ -613,9 +614,8 @@ void tcg_optimize(TCGContext *s) infos =3D tcg_malloc(sizeof(TempOptInfo) * nb_temps); =20 QTAILQ_FOREACH_SAFE(op, &s->ops, link, op_next) { - tcg_target_ulong mask, partmask, affected; + uint64_t mask, partmask, affected, tmp; int nb_oargs, nb_iargs, i; - TCGArg tmp; TCGOpcode opc =3D op->opc; const TCGOpDef *def =3D &tcg_op_defs[opc]; =20 @@ -1225,14 +1225,15 @@ void tcg_optimize(TCGContext *s) =20 CASE_OP_32_64(extract2): if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { - TCGArg v1 =3D arg_info(op->args[1])->val; - TCGArg v2 =3D arg_info(op->args[2])->val; + uint64_t v1 =3D arg_info(op->args[1])->val; + uint64_t v2 =3D arg_info(op->args[2])->val; + int shr =3D op->args[3]; =20 if (opc =3D=3D INDEX_op_extract2_i64) { - tmp =3D (v1 >> op->args[3]) | (v2 << (64 - op->args[3]= )); + tmp =3D (v1 >> shr) | (v2 << (64 - shr)); } else { - tmp =3D (int32_t)(((uint32_t)v1 >> op->args[3]) | - ((uint32_t)v2 << (32 - op->args[3]))); + tmp =3D (int32_t)(((uint32_t)v1 >> shr) | + ((uint32_t)v2 << (32 - shr))); } tcg_opt_gen_movi(s, op, op->args[0], tmp); break; @@ -1271,9 +1272,10 @@ void tcg_optimize(TCGContext *s) break; } if (arg_is_const(op->args[3]) && arg_is_const(op->args[4])) { - tcg_target_ulong tv =3D arg_info(op->args[3])->val; - tcg_target_ulong fv =3D arg_info(op->args[4])->val; + uint64_t tv =3D arg_info(op->args[3])->val; + uint64_t fv =3D arg_info(op->args[4])->val; TCGCond cond =3D op->args[5]; + if (fv =3D=3D 1 && tv =3D=3D 0) { cond =3D tcg_invert_cond(cond); } else if (!(tv =3D=3D 1 && fv =3D=3D 0)) { --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386411; cv=none; d=zohomail.com; s=zohoarc; b=RYowlr4v0j/Elb9XgOq2NH9lxW53bhTtVrpBgYKoqA+KPc819Z73m0j63YQD5DBw0PBsZIw/X/p0BoUXRl5zQ0TQyuPmwzFztwXkJr+JaDUUsxpQY6EgMi+8ve1L0vuSu88DU2N9pyZ6Z9cGNh7J6dClVeSz9PwxfkQz77cYvLM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386411; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=LsIdAJbKACMjuuIjOJp26kSOqsc3HuJuSVDCVt9lL6E=; b=cGJwR36x5jsofqVnKUY+UrpFU4R7FT8YMnrKwqDBuL+gP7nrxlsTnPS0qOUMZZDAf6K1DkhVA1GI9GiI+5iAiWhgYt6g4pWtvoxAB+XVZk8aIDj9n9Z5UqIL1eJv/7TPDiRqfmL1yVFQn8D6L1LhfVIyo28Ndt1er1UEtZ2A6YM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610386411117360.3101133173427; Mon, 11 Jan 2021 09:33:31 -0800 (PST) Received: from localhost ([::1]:58044 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz14L-0006g4-Tc for importer@patchew.org; Mon, 11 Jan 2021 12:33:29 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51758) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0re-0003Ev-Og for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:24 -0500 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]:37493) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rO-00008d-Ne for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:18 -0500 Received: by mail-pl1-x634.google.com with SMTP id be12so186811plb.4 for ; Mon, 11 Jan 2021 09:20:05 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=LsIdAJbKACMjuuIjOJp26kSOqsc3HuJuSVDCVt9lL6E=; b=pdYXOiRKzcjcmjzwm+zqU0GmSNY/FhN3hd8xqJxEKVQ85yJ7AQZlnfJRXJ5WgXPvY4 IVHHh8av02Kwmh0vVdWAXjr3ziU1whUDFa6Z9z20wKnidr5iNh7pZEIegoYHNMoNl8Wl T4sdr7Yiz1heTy4qWqTv/HgDu9gG3X5rVflR2Geik+HkDK8iYkwjlPPEL9xy4g3V7raU aBfUvpCqNJpRHv6V1kJEgYQi6hoYz1ok4P6CrtKi4nwXhyUVmvKdg4zdmBfEuugwEPhA q+6w3JD/vPRz1l/WLMD57eRFkDUkz0nzRurU4+851+809Ls8M/KCNtsdFBvNx50/SiA+ zBeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LsIdAJbKACMjuuIjOJp26kSOqsc3HuJuSVDCVt9lL6E=; b=OitSJrXkwyxxcjjaHvXvBpjfd7w8hhpsfdGLYoRGIGgjS4H7cRulgNHJ+dMU/7km8B EuVCjf6e6HKDhnW8P0oOMiIIGQu9lSq3TdfZuBa931i4erPz7NwPyqDqILw196fSdORP JPw0cxodBLsg8yvyY94uutKVj10S0adAviRLeVcHtWBS+04ve6z0Ca7uPq/XTfTm2p5Q P4Iq+xvBkbghnM3LGSW0E/5g6CODE1FEalk6py63RgJHn4e8lxJJZVX4Tsk1A8kbtraB KeX63UynNiZGAim3RySz5miqbgpu+M+2X4Bj3S2sOiTmSCI1r/GItASoKK6m6O3cP+4n 3UiQ== X-Gm-Message-State: AOAM533RzSCip8JGJPa5rzQfRg3fGOjN0/XeXW1xj1ONyYZXocc3WL2w ET2b9CGCPZn1/RhcluCCBuXst3VMDhLV5g== X-Google-Smtp-Source: ABdhPJxxeZEycL6xez9JDkRiBs3cotj2QSxYO2SIQidBm/Wlbn+51n8zqYR/pdqMPUeokWlCz8Tr8Q== X-Received: by 2002:a17:90b:60b:: with SMTP id gb11mr305243pjb.122.1610385603557; Mon, 11 Jan 2021 09:20:03 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 08/23] tcg: Introduce TYPE_CONST temporaries Date: Mon, 11 Jan 2021 07:19:31 -1000 Message-Id: <20210111171946.219469-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x634.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" These will hold a single constant for the duration of the TB. They are hashed, so that each value has one temp across the TB. Not used yet, this is all infrastructure. Signed-off-by: Richard Henderson --- include/tcg/tcg.h | 24 ++++- tcg/optimize.c | 13 ++- tcg/tcg.c | 224 ++++++++++++++++++++++++++++++++++++---------- 3 files changed, 211 insertions(+), 50 deletions(-) diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h index e7adc7e265..eeeb70ad43 100644 --- a/include/tcg/tcg.h +++ b/include/tcg/tcg.h @@ -492,6 +492,8 @@ typedef enum TCGTempKind { TEMP_GLOBAL, /* Temp is in a fixed register. */ TEMP_FIXED, + /* Temp is a fixed constant. */ + TEMP_CONST, } TCGTempKind; =20 typedef struct TCGTemp { @@ -665,6 +667,7 @@ struct TCGContext { QSIMPLEQ_HEAD(, TCGOp) plugin_ops; #endif =20 + GHashTable *const_table[TCG_TYPE_COUNT]; TCGTempSet free_temps[TCG_TYPE_COUNT * 2]; TCGTemp temps[TCG_MAX_TEMPS]; /* globals first, temps after */ =20 @@ -681,7 +684,7 @@ struct TCGContext { =20 static inline bool temp_readonly(TCGTemp *ts) { - return ts->kind =3D=3D TEMP_FIXED; + return ts->kind >=3D TEMP_FIXED; } =20 extern TCGContext tcg_init_ctx; @@ -1079,6 +1082,7 @@ TCGOp *tcg_op_insert_after(TCGContext *s, TCGOp *op, = TCGOpcode opc); =20 void tcg_optimize(TCGContext *s); =20 +/* Allocate a new temporary and initialize it with a constant. */ TCGv_i32 tcg_const_i32(int32_t val); TCGv_i64 tcg_const_i64(int64_t val); TCGv_i32 tcg_const_local_i32(int32_t val); @@ -1088,6 +1092,24 @@ TCGv_vec tcg_const_ones_vec(TCGType); TCGv_vec tcg_const_zeros_vec_matching(TCGv_vec); TCGv_vec tcg_const_ones_vec_matching(TCGv_vec); =20 +/* + * Locate or create a read-only temporary that is a constant. + * This kind of temporary need not and should not be freed. + */ +TCGTemp *tcg_constant_internal(TCGType type, int64_t val); + +static inline TCGv_i32 tcg_constant_i32(int32_t val) +{ + return temp_tcgv_i32(tcg_constant_internal(TCG_TYPE_I32, val)); +} + +static inline TCGv_i64 tcg_constant_i64(int64_t val) +{ + return temp_tcgv_i64(tcg_constant_internal(TCG_TYPE_I64, val)); +} + +TCGv_vec tcg_constant_vec(TCGType type, unsigned vece, int64_t val); + #if UINTPTR_MAX =3D=3D UINT32_MAX # define tcg_const_ptr(x) ((TCGv_ptr)tcg_const_i32((intptr_t)(x))) # define tcg_const_local_ptr(x) ((TCGv_ptr)tcg_const_local_i32((intptr_t)= (x))) diff --git a/tcg/optimize.c b/tcg/optimize.c index 433d2540f4..16b0aa7229 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -99,8 +99,17 @@ static void init_ts_info(TempOptInfo *infos, ts->state_ptr =3D ti; ti->next_copy =3D ts; ti->prev_copy =3D ts; - ti->is_const =3D false; - ti->mask =3D -1; + if (ts->kind =3D=3D TEMP_CONST) { + ti->is_const =3D true; + ti->val =3D ti->mask =3D ts->val; + if (TCG_TARGET_REG_BITS > 32 && ts->type =3D=3D TCG_TYPE_I32) { + /* High bits of a 32-bit quantity are garbage. */ + ti->mask |=3D ~0xffffffffull; + } + } else { + ti->is_const =3D false; + ti->mask =3D -1; + } set_bit(idx, temps_used->l); } } diff --git a/tcg/tcg.c b/tcg/tcg.c index 545dd2b0b2..802f0b8a32 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -1184,6 +1184,13 @@ void tcg_func_start(TCGContext *s) /* No temps have been previously allocated for size or locality. */ memset(s->free_temps, 0, sizeof(s->free_temps)); =20 + /* No constant temps have been previously allocated. */ + for (int i =3D 0; i < TCG_TYPE_COUNT; ++i) { + if (s->const_table[i]) { + g_hash_table_remove_all(s->const_table[i]); + } + } + s->nb_ops =3D 0; s->nb_labels =3D 0; s->current_frame_offset =3D s->frame_start; @@ -1255,13 +1262,19 @@ TCGTemp *tcg_global_mem_new_internal(TCGType type, = TCGv_ptr base, bigendian =3D 1; #endif =20 - if (base_ts->kind !=3D TEMP_FIXED) { + switch (base_ts->kind) { + case TEMP_FIXED: + break; + case TEMP_GLOBAL: /* We do not support double-indirect registers. */ tcg_debug_assert(!base_ts->indirect_reg); base_ts->indirect_base =3D 1; s->nb_indirects +=3D (TCG_TARGET_REG_BITS =3D=3D 32 && type =3D=3D= TCG_TYPE_I64 ? 2 : 1); indirect_reg =3D 1; + break; + default: + g_assert_not_reached(); } =20 if (TCG_TARGET_REG_BITS =3D=3D 32 && type =3D=3D TCG_TYPE_I64) { @@ -1386,6 +1399,11 @@ void tcg_temp_free_internal(TCGTemp *ts) TCGContext *s =3D tcg_ctx; int k, idx; =20 + /* In order to simplify users of tcg_constant_*, silently ignore free.= */ + if (ts->kind =3D=3D TEMP_CONST) { + return; + } + #if defined(CONFIG_DEBUG_TCG) s->temps_in_use--; if (s->temps_in_use < 0) { @@ -1402,6 +1420,60 @@ void tcg_temp_free_internal(TCGTemp *ts) set_bit(idx, s->free_temps[k].l); } =20 +TCGTemp *tcg_constant_internal(TCGType type, int64_t val) +{ + TCGContext *s =3D tcg_ctx; + GHashTable *h =3D s->const_table[type]; + TCGTemp *ts; + + if (h =3D=3D NULL) { + h =3D g_hash_table_new(g_int64_hash, g_int64_equal); + s->const_table[type] =3D h; + } + + ts =3D g_hash_table_lookup(h, &val); + if (ts =3D=3D NULL) { + ts =3D tcg_temp_alloc(s); + + if (TCG_TARGET_REG_BITS =3D=3D 32 && type =3D=3D TCG_TYPE_I64) { + TCGTemp *ts2 =3D tcg_temp_alloc(s); + + ts->base_type =3D TCG_TYPE_I64; + ts->type =3D TCG_TYPE_I32; + ts->kind =3D TEMP_CONST; + ts->temp_allocated =3D 1; + /* + * Retain the full value of the 64-bit constant in the low + * part, so that the hash table works. Actual uses will + * truncate the value to the low part. + */ + ts->val =3D val; + + tcg_debug_assert(ts2 =3D=3D ts + 1); + ts2->base_type =3D TCG_TYPE_I64; + ts2->type =3D TCG_TYPE_I32; + ts2->kind =3D TEMP_CONST; + ts2->temp_allocated =3D 1; + ts2->val =3D val >> 32; + } else { + ts->base_type =3D type; + ts->type =3D type; + ts->kind =3D TEMP_CONST; + ts->temp_allocated =3D 1; + ts->val =3D val; + } + g_hash_table_insert(h, &ts->val, ts); + } + + return ts; +} + +TCGv_vec tcg_constant_vec(TCGType type, unsigned vece, int64_t val) +{ + val =3D dup_const(vece, val); + return temp_tcgv_vec(tcg_constant_internal(type, val)); +} + TCGv_i32 tcg_const_i32(int32_t val) { TCGv_i32 t0; @@ -1937,6 +2009,9 @@ static void tcg_reg_alloc_start(TCGContext *s) TCGTempVal val =3D TEMP_VAL_MEM; =20 switch (ts->kind) { + case TEMP_CONST: + val =3D TEMP_VAL_CONST; + break; case TEMP_FIXED: val =3D TEMP_VAL_REG; break; @@ -1973,6 +2048,26 @@ static char *tcg_get_arg_str_ptr(TCGContext *s, char= *buf, int buf_size, case TEMP_NORMAL: snprintf(buf, buf_size, "tmp%d", idx - s->nb_globals); break; + case TEMP_CONST: + switch (ts->type) { + case TCG_TYPE_I32: + snprintf(buf, buf_size, "$0x%x", (int32_t)ts->val); + break; +#if TCG_TARGET_REG_BITS > 32 + case TCG_TYPE_I64: + snprintf(buf, buf_size, "$0x%" PRIx64, ts->val); + break; +#endif + case TCG_TYPE_V64: + case TCG_TYPE_V128: + case TCG_TYPE_V256: + snprintf(buf, buf_size, "v%d$0x%" PRIx64, + 64 << (ts->type - TCG_TYPE_V64), ts->val); + break; + default: + g_assert_not_reached(); + } + break; } return buf; } @@ -2574,6 +2669,7 @@ static void la_bb_end(TCGContext *s, int ng, int nt) state =3D TS_DEAD | TS_MEM; break; case TEMP_NORMAL: + case TEMP_CONST: state =3D TS_DEAD; break; default: @@ -2608,14 +2704,24 @@ static void la_bb_sync(TCGContext *s, int ng, int n= t) la_global_sync(s, ng); =20 for (int i =3D ng; i < nt; ++i) { - if (s->temps[i].kind =3D=3D TEMP_LOCAL) { - int state =3D s->temps[i].state; - s->temps[i].state =3D state | TS_MEM; + TCGTemp *ts =3D &s->temps[i]; + int state; + + switch (ts->kind) { + case TEMP_LOCAL: + state =3D ts->state; + ts->state =3D state | TS_MEM; if (state !=3D TS_DEAD) { continue; } - } else { + break; + case TEMP_NORMAL: s->temps[i].state =3D TS_DEAD; + break; + case TEMP_CONST: + continue; + default: + g_assert_not_reached(); } la_reset_pref(&s->temps[i]); } @@ -3254,15 +3360,28 @@ static void temp_load(TCGContext *, TCGTemp *, TCGR= egSet, TCGRegSet, TCGRegSet); mark it free; otherwise mark it dead. */ static void temp_free_or_dead(TCGContext *s, TCGTemp *ts, int free_or_dead) { - if (temp_readonly(ts)) { + TCGTempVal new_type; + + switch (ts->kind) { + case TEMP_FIXED: return; + case TEMP_GLOBAL: + case TEMP_LOCAL: + new_type =3D TEMP_VAL_MEM; + break; + case TEMP_NORMAL: + new_type =3D free_or_dead < 0 ? TEMP_VAL_MEM : TEMP_VAL_DEAD; + break; + case TEMP_CONST: + new_type =3D TEMP_VAL_CONST; + break; + default: + g_assert_not_reached(); } if (ts->val_type =3D=3D TEMP_VAL_REG) { s->reg_to_temp[ts->reg] =3D NULL; } - ts->val_type =3D (free_or_dead < 0 - || ts->kind !=3D TEMP_NORMAL - ? TEMP_VAL_MEM : TEMP_VAL_DEAD); + ts->val_type =3D new_type; } =20 /* Mark a temporary as dead. */ @@ -3278,10 +3397,7 @@ static inline void temp_dead(TCGContext *s, TCGTemp = *ts) static void temp_sync(TCGContext *s, TCGTemp *ts, TCGRegSet allocated_regs, TCGRegSet preferred_regs, int free_or_dead) { - if (temp_readonly(ts)) { - return; - } - if (!ts->mem_coherent) { + if (!temp_readonly(ts) && !ts->mem_coherent) { if (!ts->mem_allocated) { temp_allocate_frame(s, ts); } @@ -3499,12 +3615,22 @@ static void tcg_reg_alloc_bb_end(TCGContext *s, TCG= RegSet allocated_regs) =20 for (i =3D s->nb_globals; i < s->nb_temps; i++) { TCGTemp *ts =3D &s->temps[i]; - if (ts->kind =3D=3D TEMP_LOCAL) { + + switch (ts->kind) { + case TEMP_LOCAL: temp_save(s, ts, allocated_regs); - } else { + break; + case TEMP_NORMAL: /* The liveness analysis already ensures that temps are dead. Keep an tcg_debug_assert for safety. */ tcg_debug_assert(ts->val_type =3D=3D TEMP_VAL_DEAD); + break; + case TEMP_CONST: + /* Similarly, we should have freed any allocated register. */ + tcg_debug_assert(ts->val_type =3D=3D TEMP_VAL_CONST); + break; + default: + g_assert_not_reached(); } } =20 @@ -3525,10 +3651,17 @@ static void tcg_reg_alloc_cbranch(TCGContext *s, TC= GRegSet allocated_regs) * The liveness analysis already ensures that temps are dead. * Keep tcg_debug_asserts for safety. */ - if (ts->kind =3D=3D TEMP_LOCAL) { + switch (ts->kind) { + case TEMP_LOCAL: tcg_debug_assert(ts->val_type !=3D TEMP_VAL_REG || ts->mem_coh= erent); - } else { + break; + case TEMP_NORMAL: tcg_debug_assert(ts->val_type =3D=3D TEMP_VAL_DEAD); + break; + case TEMP_CONST: + break; + default: + g_assert_not_reached(); } } } @@ -3819,45 +3952,42 @@ static void tcg_reg_alloc_op(TCGContext *s, const T= CGOp *op) i_preferred_regs =3D o_preferred_regs =3D 0; if (arg_ct->ialias) { o_preferred_regs =3D op->output_pref[arg_ct->alias_index]; - if (ts->kind =3D=3D TEMP_FIXED) { - /* if fixed register, we must allocate a new register - if the alias is not the same register */ - if (arg !=3D op->args[arg_ct->alias_index]) { - goto allocate_in_reg; - } - } else { - /* if the input is aliased to an output and if it is - not dead after the instruction, we must allocate - a new register and move it */ - if (!IS_DEAD_ARG(i)) { - goto allocate_in_reg; - } =20 - /* check if the current register has already been allocated - for another input aliased to an output */ - if (ts->val_type =3D=3D TEMP_VAL_REG) { - int k2, i2; - reg =3D ts->reg; - for (k2 =3D 0 ; k2 < k ; k2++) { - i2 =3D def->args_ct[nb_oargs + k2].sort_index; - if (def->args_ct[i2].ialias && reg =3D=3D new_args= [i2]) { - goto allocate_in_reg; - } + /* + * If the input is readonly, then it cannot also be an + * output and aliased to itself. If the input is not + * dead after the instruction, we must allocate a new + * register and move it. + */ + if (temp_readonly(ts) || !IS_DEAD_ARG(i)) { + goto allocate_in_reg; + } + + /* + * Check if the current register has already been allocated + * for another input aliased to an output. + */ + if (ts->val_type =3D=3D TEMP_VAL_REG) { + reg =3D ts->reg; + for (int k2 =3D 0; k2 < k; k2++) { + int i2 =3D def->args_ct[nb_oargs + k2].sort_index; + if (def->args_ct[i2].ialias && reg =3D=3D new_args[i2]= ) { + goto allocate_in_reg; } } - i_preferred_regs =3D o_preferred_regs; } + i_preferred_regs =3D o_preferred_regs; } =20 temp_load(s, ts, arg_ct->regs, i_allocated_regs, i_preferred_regs); reg =3D ts->reg; =20 - if (tcg_regset_test_reg(arg_ct->regs, reg)) { - /* nothing to do : the constraint is satisfied */ - } else { - allocate_in_reg: - /* allocate a new register matching the constraint=20 - and move the temporary register into it */ + if (!tcg_regset_test_reg(arg_ct->regs, reg)) { + allocate_in_reg: + /* + * Allocate a new register matching the constraint + * and move the temporary register into it. + */ temp_load(s, ts, tcg_target_available_regs[ts->type], i_allocated_regs, 0); reg =3D tcg_reg_alloc(s, arg_ct->regs, i_allocated_regs, --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386207; cv=none; d=zohomail.com; s=zohoarc; b=MPKStDNPjh7H310tfTBDRTPWqKuFDjfYAajEpmwb3w2j5uAEgm6KygiI/sbg/U1PuUscPUR/Qa8EFugTpXK7out+GfO/Mik7wood14wvZw8gNCqGqm2NRzsmyQ6iZl0JxIZnG7VQrnlfvwVLw5twVAKL4WICA3ZwnlQ8iGS3Bms= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386207; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ukQ7RjPHGqGDNjwPl9c9BeoLOp2dRJAKhrKe0DnYWUg=; b=Miipss2LG/nNGX1XY85FxupbDRp+GP2ilJoR5jEpZzlYEerUg0lrnlmKZkqs3Ca40iFlj6dPqXXEj6MgJWiNZwQEB4cERPgyVgQEDPI5fJ9S0znK0MhQ1jVOT0gXcgbW42nquM68PctWDQ4b4kV4eGtqeoeK8NK6/zUNpbSumOU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610386207980892.5003962508829; Mon, 11 Jan 2021 09:30:07 -0800 (PST) Received: from localhost ([::1]:52424 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz10z-00049j-CC for importer@patchew.org; Mon, 11 Jan 2021 12:30:05 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51690) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rV-0003BN-0R for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:21 -0500 Received: from mail-pg1-x536.google.com ([2607:f8b0:4864:20::536]:40034) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rO-00008l-Oa for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:11 -0500 Received: by mail-pg1-x536.google.com with SMTP id 15so84920pgx.7 for ; Mon, 11 Jan 2021 09:20:06 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=ukQ7RjPHGqGDNjwPl9c9BeoLOp2dRJAKhrKe0DnYWUg=; b=i/vh50ktTCwwrFRsqMJkmI2wbnZd3bZNG0wJrFtbdNZF0Zoy2qkWzzazKDfrM8prXv anWcqCuHAsRPsymn9oPL6WewNsthrkVpXIT1yV9XN4KudEP21rLCIbO9HOl6vr9/YZ9X dsEhmkGLp2B4yuVfKvlEwZ6IyzIojUq+/1SIAi16XDIeFw8xpR9fBsl4lZ/7HaSWhRW7 k3AT9HnTJR77vmmZaNvddEolRUxZMYKMLbPBuRSY15gihGK4KbHqpJK9f0Gn7liWbxMw uZ2/unxZwgMJrWXxjHlsCUCZsUBv9/425lvY/yOaeLt1f5qJsW2J01WPnRHgrJKnQrE7 nQuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ukQ7RjPHGqGDNjwPl9c9BeoLOp2dRJAKhrKe0DnYWUg=; b=uRjzUO4pmd3uzpzWFKsi3NgfrIypKMdmmC8Ai/DhvMylj9nqJBHf3+mOQ3y/XAot07 z/tv0zdAxSCGG4J0hyAVmr2thIsThyDtTPK96WVc7bNueqqGAkh8eN604BKDXFefU5KN QzC2DZ5bJAiCGAOoK+hXAqQtBRQ6jYuc2JdUJUlAcBHURaC3O5HD+o7ZjjH9Zp5VaqxK y4ZS7kWbWoITT5iW0+XuzCdx/GiNRMhE6AvXGZzB1hoJGEvrzyzYS1aWvYj5fUeOIaQz 30QTV3EMeBMe5sDhomSPlSnIvM2M/futPumqnccQBuCXC1iHYKFADu5MKcsHzM6rYNBy SsJQ== X-Gm-Message-State: AOAM530OQb+CbBlLmurB6iU1zYo9moj7/i6FgPU4f+Wfahl8m8oPDCRN eHw8yO6iFiIKJTaiZ49W9y0ibA5rJFnm+A== X-Google-Smtp-Source: ABdhPJyDZDV3/ufu762r6BiGXVEeBaJTbjh6ovByMP3cwDK8sDwsHM6gjCQayJKEgd4MnLXNbyzntw== X-Received: by 2002:a63:3648:: with SMTP id d69mr518522pga.155.1610385604955; Mon, 11 Jan 2021 09:20:04 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 09/23] tcg/optimize: Improve find_better_copy Date: Mon, 11 Jan 2021 07:19:32 -1000 Message-Id: <20210111171946.219469-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::536; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x536.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Prefer TEMP_CONST over anything else. Signed-off-by: Richard Henderson --- tcg/optimize.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 16b0aa7229..e42f9c89a8 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -122,31 +122,28 @@ static void init_arg_info(TempOptInfo *infos, =20 static TCGTemp *find_better_copy(TCGContext *s, TCGTemp *ts) { - TCGTemp *i; + TCGTemp *i, *g, *l; =20 - /* If this is already a global, we can't do better. */ - if (ts->kind >=3D TEMP_GLOBAL) { + /* If this is already readonly, we can't do better. */ + if (temp_readonly(ts)) { return ts; } =20 - /* Search for a global first. */ + g =3D l =3D NULL; for (i =3D ts_info(ts)->next_copy; i !=3D ts; i =3D ts_info(i)->next_c= opy) { - if (i->kind >=3D TEMP_GLOBAL) { + if (temp_readonly(i)) { return i; - } - } - - /* If it is a temp, search for a temp local. */ - if (ts->kind =3D=3D TEMP_NORMAL) { - for (i =3D ts_info(ts)->next_copy; i !=3D ts; i =3D ts_info(i)->ne= xt_copy) { - if (i->kind >=3D TEMP_LOCAL) { - return i; + } else if (i->kind > ts->kind) { + if (i->kind =3D=3D TEMP_GLOBAL) { + g =3D i; + } else if (i->kind =3D=3D TEMP_LOCAL) { + l =3D i; } } } =20 - /* Failure to find a better representation, return the same temp. */ - return ts; + /* If we didn't find a better representation, return the same temp. */ + return g ? g : l ? l : ts; } =20 static bool ts_are_copies(TCGTemp *ts1, TCGTemp *ts2) --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610385952; cv=none; d=zohomail.com; s=zohoarc; b=KkBYROIdeOfHgUU++/GIuRl4aD4Loc0bzp2QNW/0ptct4HKR10PZRx3JE5lEruQYZJR563dCpSnT8a9aIHQpk9bpJrcwuSTCfBnN/CkZ8PrBwoPZc4HNrf3XRID/NG688lpdUAeu+K8Qh9ne7RdqXJx5A+RjO+jIuFWPJCxQjVo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610385952; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=cRVnylJXcFc8ozdMeUWi6zX6AVte8Tt6BWKvI+IXZu0=; b=BZLnOs2TMl2yxiCRO+eEYXihKSFC/DbhoZt/WzLThZBZufQurxBUmX56aIeAJroL0m3IWZQ7bSaIofSEMwjXaem4b+xIKHwdyuNoplDiITGSKxHxPb+80J1k00/ODtswBJ9ZfPJ4YZN9KqQg//xI7A7MxLN+7A2QVg1Oup5N6kk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610385952714916.4095723433338; Mon, 11 Jan 2021 09:25:52 -0800 (PST) Received: from localhost ([::1]:40960 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz0wx-0007iw-AP for importer@patchew.org; Mon, 11 Jan 2021 12:25:51 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51692) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rV-0003BU-1Z for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:21 -0500 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]:45762) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rQ-00008z-CZ for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:12 -0500 Received: by mail-pf1-x432.google.com with SMTP id c13so298934pfi.12 for ; Mon, 11 Jan 2021 09:20:07 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cRVnylJXcFc8ozdMeUWi6zX6AVte8Tt6BWKvI+IXZu0=; b=dagHZ9bEQCvyrIZL1mIzun0pPvJxm1IxbSpbz7pc2ncwrqOT4KddEMGpUhqE1vxVeN RhbTsK4u6snxSXfw/MA6gyMlDYC75kLtQODanL6ctrfM6p2QwiaALhzrJhvcMqdneELv Umi4tpCC6ZX7XCBpYzBMwNcAMRlEZxjF9J7FTvPS5azaIYIOtu87pKVPLHLZewhAtST0 eYVetmDcm+kEkP0I8VQlQt82Yq11gQ4MZdfq+RfITPwz6RRwMyFbnde5+k5RS9Fd2YcO S4T8M9Q/cXowmre3gyBLt49+M1EnlBVRndu8Fkg3Gma6G5N8HCRiyBWK6sqL9/IfPylp 1o7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cRVnylJXcFc8ozdMeUWi6zX6AVte8Tt6BWKvI+IXZu0=; b=QVHuJ7OFLb0/2pIZzm2sfzEUwFWLJGmxtvgKmg+ZvzqzPDCLP+G4xlMvW5eiZWihuV A6PJuBrkXFWVxMOiDmE68FUSb5fEHhUxIrwz+3WVcVMZPzHgmnS3Rr3+p6ndRu1US6Ie YXYmJqtj1whgBHZbWLQcfsjKt8TEXQHn84+uQKC0XLk5mcg6C68am0Za5DA6j7EDmhku rjgyBDcxToAnuOScEwgl4vvBitSU1xJYc2QnFUV5hprdcQ1lAq26eEoW0pmZ94pRK3IB WtOo8n7Yw+cpEtaRPWUgnrsUsqysxQ3fLd/UlOsMF76XTbiHnA5odCt33MrRulavxVsn Ba8w== X-Gm-Message-State: AOAM530eOI5zbGhavuH0IB87Pbn4nkYVQBaMxw08RLsIge2XgwpfqogZ Ka7lUUk2NsoEUcWQPeer4l+UdG0yhTuVwg== X-Google-Smtp-Source: ABdhPJx2RTZq12DWL+q/Rv6C+ufV12j17Kz7S3tcY34BGrPybfbLzCQZ+6GepRGEDWp/fhK/ghLXBA== X-Received: by 2002:a65:67cf:: with SMTP id b15mr482002pgs.429.1610385606726; Mon, 11 Jan 2021 09:20:06 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 10/23] tcg/optimize: Adjust TempOptInfo allocation Date: Mon, 11 Jan 2021 07:19:33 -1000 Message-Id: <20210111171946.219469-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::432; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x432.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Do not allocate a large block for indexing. Instead, allocate for each temporary as they are seen. In general, this will use less memory, if we consider that most TBs do not touch every target register. This also allows us to allocate TempOptInfo for new temps created during optimization. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- tcg/optimize.c | 60 ++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index e42f9c89a8..49bf1386c7 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -89,35 +89,41 @@ static void reset_temp(TCGArg arg) } =20 /* Initialize and activate a temporary. */ -static void init_ts_info(TempOptInfo *infos, - TCGTempSet *temps_used, TCGTemp *ts) +static void init_ts_info(TCGTempSet *temps_used, TCGTemp *ts) { size_t idx =3D temp_idx(ts); - if (!test_bit(idx, temps_used->l)) { - TempOptInfo *ti =3D &infos[idx]; + TempOptInfo *ti; =20 + if (test_bit(idx, temps_used->l)) { + return; + } + set_bit(idx, temps_used->l); + + ti =3D ts->state_ptr; + if (ti =3D=3D NULL) { + ti =3D tcg_malloc(sizeof(TempOptInfo)); ts->state_ptr =3D ti; - ti->next_copy =3D ts; - ti->prev_copy =3D ts; - if (ts->kind =3D=3D TEMP_CONST) { - ti->is_const =3D true; - ti->val =3D ti->mask =3D ts->val; - if (TCG_TARGET_REG_BITS > 32 && ts->type =3D=3D TCG_TYPE_I32) { - /* High bits of a 32-bit quantity are garbage. */ - ti->mask |=3D ~0xffffffffull; - } - } else { - ti->is_const =3D false; - ti->mask =3D -1; + } + + ti->next_copy =3D ts; + ti->prev_copy =3D ts; + if (ts->kind =3D=3D TEMP_CONST) { + ti->is_const =3D true; + ti->val =3D ts->val; + ti->mask =3D ts->val; + if (TCG_TARGET_REG_BITS > 32 && ts->type =3D=3D TCG_TYPE_I32) { + /* High bits of a 32-bit quantity are garbage. */ + ti->mask |=3D ~0xffffffffull; } - set_bit(idx, temps_used->l); + } else { + ti->is_const =3D false; + ti->mask =3D -1; } } =20 -static void init_arg_info(TempOptInfo *infos, - TCGTempSet *temps_used, TCGArg arg) +static void init_arg_info(TCGTempSet *temps_used, TCGArg arg) { - init_ts_info(infos, temps_used, arg_temp(arg)); + init_ts_info(temps_used, arg_temp(arg)); } =20 static TCGTemp *find_better_copy(TCGContext *s, TCGTemp *ts) @@ -604,9 +610,8 @@ static bool swap_commutative2(TCGArg *p1, TCGArg *p2) /* Propagate constants and copies, fold constant expressions. */ void tcg_optimize(TCGContext *s) { - int nb_temps, nb_globals; + int nb_temps, nb_globals, i; TCGOp *op, *op_next, *prev_mb =3D NULL; - TempOptInfo *infos; TCGTempSet temps_used; =20 /* Array VALS has an element for each temp. @@ -616,12 +621,15 @@ void tcg_optimize(TCGContext *s) =20 nb_temps =3D s->nb_temps; nb_globals =3D s->nb_globals; + bitmap_zero(temps_used.l, nb_temps); - infos =3D tcg_malloc(sizeof(TempOptInfo) * nb_temps); + for (i =3D 0; i < nb_temps; ++i) { + s->temps[i].state_ptr =3D NULL; + } =20 QTAILQ_FOREACH_SAFE(op, &s->ops, link, op_next) { uint64_t mask, partmask, affected, tmp; - int nb_oargs, nb_iargs, i; + int nb_oargs, nb_iargs; TCGOpcode opc =3D op->opc; const TCGOpDef *def =3D &tcg_op_defs[opc]; =20 @@ -633,14 +641,14 @@ void tcg_optimize(TCGContext *s) for (i =3D 0; i < nb_oargs + nb_iargs; i++) { TCGTemp *ts =3D arg_temp(op->args[i]); if (ts) { - init_ts_info(infos, &temps_used, ts); + init_ts_info(&temps_used, ts); } } } else { nb_oargs =3D def->nb_oargs; nb_iargs =3D def->nb_iargs; for (i =3D 0; i < nb_oargs + nb_iargs; i++) { - init_arg_info(infos, &temps_used, op->args[i]); + init_arg_info(&temps_used, op->args[i]); } } =20 --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386508; cv=none; d=zohomail.com; s=zohoarc; b=IRDqbqXZVjbqBXBQaQ5BE9nm5g7ZPcmUhH+/L+kwcG6eO4jsUnBs6mfnbVHShCV7IZiqIWYpUhfuyLukllgWxL3iVHvI5BlFpEHZQBXBVmggR2gc092eMR5pF4Qr+U1/wqv51tj0LX5Smc9UWMGOmQWufE3yKuYd20W3t0LkFSE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386508; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=uEiBPhKLKz+SNXjEHNJYg16zyVS+pzInRZgKwDfY3iQ=; b=JHmJMmIH1m6B8/PDYbPQSFbMXmAEqv2t/Zd5Fjbm5Zoj++itsjX/TuEDH25GTBGd85ATI9VMQaYuxejh8VayuA+etHDXt9fPC/MsOkYdm1Tk+5XUW7lLY95YhZijlwa4Xdhl73iE9H3/2QGujCts13tuLyQa5AyYfXdm8bExC3w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610386508978879.5798070552313; Mon, 11 Jan 2021 09:35:08 -0800 (PST) Received: from localhost ([::1]:60966 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz15v-0007wI-Mh for importer@patchew.org; Mon, 11 Jan 2021 12:35:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51764) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0re-0003F1-P5 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:24 -0500 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]:42917) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rS-00009H-3L for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:22 -0500 Received: by mail-pg1-x52c.google.com with SMTP id g15so78575pgu.9 for ; Mon, 11 Jan 2021 09:20:09 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=uEiBPhKLKz+SNXjEHNJYg16zyVS+pzInRZgKwDfY3iQ=; b=NjyKL9tMdtgErTHWKJSpaMvIZ99v6bqpdVreCgz7BkszBdusxLxj4vKpj+ztqspsHO h2Txvh5CX1Xl0A5jLbUg0G4ptN9jMDdRmisgx9YAEdUULXwnByt0EdDih6erpgrdGNoK SMT4KPn2CXrc+7PA8Zc2NNPd8XQuiT/jjYhzBrHKQTjy+fVReuZ/7em2zQFmi89l0gCK ML557ZHfphga9GR6vaq0qyWwkizndfdWxFZ3dyLbbDWgPooNOVSgAT27snuMmly9VmVg 2dpkHwq+e3A3Ao7LLIizQcgEDFhrSlW/nfx+F7Yoe9DCuOXF+1JKA1SEFh5OCBkLjVhI fzcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uEiBPhKLKz+SNXjEHNJYg16zyVS+pzInRZgKwDfY3iQ=; b=i2mEiUzj30vMrbvP1496eu+cnZyfTyMigrLt2lSfoZVxz+3WWo//r7XW2n8lIDgqyh 1UtKPJ7LIjV7ems30TTzTX8/rh9jfo0QMcoN60pkTxNP/BuXg9OObn3o8MRVBzyRfpq7 4J9umLG3AX4qUHJdkGXC6lY7aKs2mKoUxwsrTF/7NgqNu5pC5V1EdqCeWsESEKarS8Zp xEyf/iX3rtfk6QHcVCtRuwhwPEdeVQxp/+/XeLXsGiTqzIXCXeZ5xFIphJAoV0N//K9d vKT7peDWSREXgY8wx1dnIkM7U/BSWSw/+yIfo1cWDHZhu2lgLBa4XTApMlMv8bCDX+OR uSEw== X-Gm-Message-State: AOAM531dDCwgYBZVTvvXodsSmynqcvYt1qnbIdkIWwl1q6yXUgKbp8R2 yTD5wb+44dG/cMzgX2uSHWvU5h0XI7EY2w== X-Google-Smtp-Source: ABdhPJzqYOoEzqdcp9LleCl+JdSAM7u2THYbvkBDaWHI/5GwGaFckyVfvapCaa6UuSX/IMSLCPyP6w== X-Received: by 2002:a63:745a:: with SMTP id e26mr497071pgn.321.1610385608313; Mon, 11 Jan 2021 09:20:08 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 11/23] tcg/optimize: Use tcg_constant_internal with constant folding Date: Mon, 11 Jan 2021 07:19:34 -1000 Message-Id: <20210111171946.219469-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52c; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/optimize.c | 108 ++++++++++++++++++++++--------------------------- 1 file changed, 49 insertions(+), 59 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index 49bf1386c7..bda727d5ed 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -178,37 +178,6 @@ static bool args_are_copies(TCGArg arg1, TCGArg arg2) return ts_are_copies(arg_temp(arg1), arg_temp(arg2)); } =20 -static void tcg_opt_gen_movi(TCGContext *s, TCGOp *op, TCGArg dst, uint64_= t val) -{ - const TCGOpDef *def; - TCGOpcode new_op; - uint64_t mask; - TempOptInfo *di =3D arg_info(dst); - - def =3D &tcg_op_defs[op->opc]; - if (def->flags & TCG_OPF_VECTOR) { - new_op =3D INDEX_op_dupi_vec; - } else if (def->flags & TCG_OPF_64BIT) { - new_op =3D INDEX_op_movi_i64; - } else { - new_op =3D INDEX_op_movi_i32; - } - op->opc =3D new_op; - /* TCGOP_VECL and TCGOP_VECE remain unchanged. */ - op->args[0] =3D dst; - op->args[1] =3D val; - - reset_temp(dst); - di->is_const =3D true; - di->val =3D val; - mask =3D val; - if (TCG_TARGET_REG_BITS > 32 && new_op =3D=3D INDEX_op_movi_i32) { - /* High bits of the destination are now garbage. */ - mask |=3D ~0xffffffffull; - } - di->mask =3D mask; -} - static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, TCGArg dst, TCGArg s= rc) { TCGTemp *dst_ts =3D arg_temp(dst); @@ -259,6 +228,27 @@ static void tcg_opt_gen_mov(TCGContext *s, TCGOp *op, = TCGArg dst, TCGArg src) } } =20 +static void tcg_opt_gen_movi(TCGContext *s, TCGTempSet *temps_used, + TCGOp *op, TCGArg dst, uint64_t val) +{ + const TCGOpDef *def =3D &tcg_op_defs[op->opc]; + TCGType type; + TCGTemp *tv; + + if (def->flags & TCG_OPF_VECTOR) { + type =3D TCGOP_VECL(op) + TCG_TYPE_V64; + } else if (def->flags & TCG_OPF_64BIT) { + type =3D TCG_TYPE_I64; + } else { + type =3D TCG_TYPE_I32; + } + + /* Convert movi to mov with constant temp. */ + tv =3D tcg_constant_internal(type, val); + init_ts_info(temps_used, tv); + tcg_opt_gen_mov(s, op, dst, temp_arg(tv)); +} + static uint64_t do_constant_folding_2(TCGOpcode op, uint64_t x, uint64_t y) { uint64_t l64, h64; @@ -622,7 +612,7 @@ void tcg_optimize(TCGContext *s) nb_temps =3D s->nb_temps; nb_globals =3D s->nb_globals; =20 - bitmap_zero(temps_used.l, nb_temps); + memset(&temps_used, 0, sizeof(temps_used)); for (i =3D 0; i < nb_temps; ++i) { s->temps[i].state_ptr =3D NULL; } @@ -727,7 +717,7 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(rotr): if (arg_is_const(op->args[1]) && arg_info(op->args[1])->val =3D=3D 0) { - tcg_opt_gen_movi(s, op, op->args[0], 0); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], 0); continue; } break; @@ -1054,7 +1044,7 @@ void tcg_optimize(TCGContext *s) =20 if (partmask =3D=3D 0) { tcg_debug_assert(nb_oargs =3D=3D 1); - tcg_opt_gen_movi(s, op, op->args[0], 0); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], 0); continue; } if (affected =3D=3D 0) { @@ -1071,7 +1061,7 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64(mulsh): if (arg_is_const(op->args[2]) && arg_info(op->args[2])->val =3D=3D 0) { - tcg_opt_gen_movi(s, op, op->args[0], 0); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], 0); continue; } break; @@ -1098,7 +1088,7 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64_VEC(sub): CASE_OP_32_64_VEC(xor): if (args_are_copies(op->args[1], op->args[2])) { - tcg_opt_gen_movi(s, op, op->args[0], 0); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], 0); continue; } break; @@ -1115,14 +1105,14 @@ void tcg_optimize(TCGContext *s) break; CASE_OP_32_64(movi): case INDEX_op_dupi_vec: - tcg_opt_gen_movi(s, op, op->args[0], op->args[1]); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], op->args[1]); break; =20 case INDEX_op_dup_vec: if (arg_is_const(op->args[1])) { tmp =3D arg_info(op->args[1])->val; tmp =3D dup_const(TCGOP_VECE(op), tmp); - tcg_opt_gen_movi(s, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); break; } goto do_default; @@ -1132,7 +1122,7 @@ void tcg_optimize(TCGContext *s) if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { tmp =3D arg_info(op->args[1])->val; if (tmp =3D=3D arg_info(op->args[2])->val) { - tcg_opt_gen_movi(s, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); break; } } else if (args_are_copies(op->args[1], op->args[2])) { @@ -1160,7 +1150,7 @@ void tcg_optimize(TCGContext *s) case INDEX_op_extrh_i64_i32: if (arg_is_const(op->args[1])) { tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va= l, 0); - tcg_opt_gen_movi(s, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); break; } goto do_default; @@ -1190,7 +1180,7 @@ void tcg_optimize(TCGContext *s) if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { tmp =3D do_constant_folding(opc, arg_info(op->args[1])->va= l, arg_info(op->args[2])->val); - tcg_opt_gen_movi(s, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); break; } goto do_default; @@ -1201,7 +1191,7 @@ void tcg_optimize(TCGContext *s) TCGArg v =3D arg_info(op->args[1])->val; if (v !=3D 0) { tmp =3D do_constant_folding(opc, v, 0); - tcg_opt_gen_movi(s, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); } else { tcg_opt_gen_mov(s, op, op->args[0], op->args[2]); } @@ -1214,7 +1204,7 @@ void tcg_optimize(TCGContext *s) tmp =3D deposit64(arg_info(op->args[1])->val, op->args[3], op->args[4], arg_info(op->args[2])->val); - tcg_opt_gen_movi(s, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); break; } goto do_default; @@ -1223,7 +1213,7 @@ void tcg_optimize(TCGContext *s) if (arg_is_const(op->args[1])) { tmp =3D extract64(arg_info(op->args[1])->val, op->args[2], op->args[3]); - tcg_opt_gen_movi(s, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); break; } goto do_default; @@ -1232,7 +1222,7 @@ void tcg_optimize(TCGContext *s) if (arg_is_const(op->args[1])) { tmp =3D sextract64(arg_info(op->args[1])->val, op->args[2], op->args[3]); - tcg_opt_gen_movi(s, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); break; } goto do_default; @@ -1249,7 +1239,7 @@ void tcg_optimize(TCGContext *s) tmp =3D (int32_t)(((uint32_t)v1 >> shr) | ((uint32_t)v2 << (32 - shr))); } - tcg_opt_gen_movi(s, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); break; } goto do_default; @@ -1258,7 +1248,7 @@ void tcg_optimize(TCGContext *s) tmp =3D do_constant_folding_cond(opc, op->args[1], op->args[2], op->args[3]); if (tmp !=3D 2) { - tcg_opt_gen_movi(s, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); break; } goto do_default; @@ -1268,7 +1258,7 @@ void tcg_optimize(TCGContext *s) op->args[1], op->args[2]); if (tmp !=3D 2) { if (tmp) { - bitmap_zero(temps_used.l, nb_temps); + memset(&temps_used, 0, sizeof(temps_used)); op->opc =3D INDEX_op_br; op->args[0] =3D op->args[3]; } else { @@ -1314,7 +1304,7 @@ void tcg_optimize(TCGContext *s) uint64_t a =3D ((uint64_t)ah << 32) | al; uint64_t b =3D ((uint64_t)bh << 32) | bl; TCGArg rl, rh; - TCGOp *op2 =3D tcg_op_insert_before(s, op, INDEX_op_movi_i= 32); + TCGOp *op2 =3D tcg_op_insert_before(s, op, INDEX_op_mov_i3= 2); =20 if (opc =3D=3D INDEX_op_add2_i32) { a +=3D b; @@ -1324,8 +1314,8 @@ void tcg_optimize(TCGContext *s) =20 rl =3D op->args[0]; rh =3D op->args[1]; - tcg_opt_gen_movi(s, op, rl, (int32_t)a); - tcg_opt_gen_movi(s, op2, rh, (int32_t)(a >> 32)); + tcg_opt_gen_movi(s, &temps_used, op, rl, (int32_t)a); + tcg_opt_gen_movi(s, &temps_used, op2, rh, (int32_t)(a >> 3= 2)); break; } goto do_default; @@ -1336,12 +1326,12 @@ void tcg_optimize(TCGContext *s) uint32_t b =3D arg_info(op->args[3])->val; uint64_t r =3D (uint64_t)a * b; TCGArg rl, rh; - TCGOp *op2 =3D tcg_op_insert_before(s, op, INDEX_op_movi_i= 32); + TCGOp *op2 =3D tcg_op_insert_before(s, op, INDEX_op_mov_i3= 2); =20 rl =3D op->args[0]; rh =3D op->args[1]; - tcg_opt_gen_movi(s, op, rl, (int32_t)r); - tcg_opt_gen_movi(s, op2, rh, (int32_t)(r >> 32)); + tcg_opt_gen_movi(s, &temps_used, op, rl, (int32_t)r); + tcg_opt_gen_movi(s, &temps_used, op2, rh, (int32_t)(r >> 3= 2)); break; } goto do_default; @@ -1352,7 +1342,7 @@ void tcg_optimize(TCGContext *s) if (tmp !=3D 2) { if (tmp) { do_brcond_true: - bitmap_zero(temps_used.l, nb_temps); + memset(&temps_used, 0, sizeof(temps_used)); op->opc =3D INDEX_op_br; op->args[0] =3D op->args[5]; } else { @@ -1368,7 +1358,7 @@ void tcg_optimize(TCGContext *s) /* Simplify LT/GE comparisons vs zero to a single compare vs the high word of the input. */ do_brcond_high: - bitmap_zero(temps_used.l, nb_temps); + memset(&temps_used, 0, sizeof(temps_used)); op->opc =3D INDEX_op_brcond_i32; op->args[0] =3D op->args[1]; op->args[1] =3D op->args[3]; @@ -1394,7 +1384,7 @@ void tcg_optimize(TCGContext *s) goto do_default; } do_brcond_low: - bitmap_zero(temps_used.l, nb_temps); + memset(&temps_used, 0, sizeof(temps_used)); op->opc =3D INDEX_op_brcond_i32; op->args[1] =3D op->args[2]; op->args[2] =3D op->args[4]; @@ -1429,7 +1419,7 @@ void tcg_optimize(TCGContext *s) op->args[5]); if (tmp !=3D 2) { do_setcond_const: - tcg_opt_gen_movi(s, op, op->args[0], tmp); + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); } else if ((op->args[5] =3D=3D TCG_COND_LT || op->args[5] =3D=3D TCG_COND_GE) && arg_is_const(op->args[3]) @@ -1514,7 +1504,7 @@ void tcg_optimize(TCGContext *s) block, otherwise we only trash the output args. "mask" is the non-zero bits mask for the first output arg. */ if (def->flags & TCG_OPF_BB_END) { - bitmap_zero(temps_used.l, nb_temps); + memset(&temps_used, 0, sizeof(temps_used)); } else { do_reset_output: for (i =3D 0; i < nb_oargs; i++) { --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386645; cv=none; d=zohomail.com; s=zohoarc; b=iCUk+KBnm7cg0di2FVSXYMeU5mxAAi+jI91s63npznQNvpr20Gb+TXiRpA8fWSkmTzd5d81vJ87fs9Q0TO7Uv4UKE2Mo2j+ZTDnoj4VjJwQe7tP6FGnn7uIV0eQUA7yAZ6Kl1jdgtrdFB4lrWi0gVIL7IDp/+/gx9U/vnUxaAZ0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386645; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=mSdOJnq5o42NhYADknuNWjZocBsJJt/CxyEeh2zDN58=; b=QMoWL02/8S2kTl3ap6szGmFya5Yo3CGKOSyTE1oPxsQFi5BELudzImJJgtbiYxOqCSOL4eisvKzKc+Z/Jl4he4Rt+pbiGdnEIgL4mZzTY3BmSu4YkB5gdB53MClWZjwHqJQoA7U/rHweXWopiXoKkz2v51alBeRRN2KUdfstTRs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610386645461887.0605964272618; Mon, 11 Jan 2021 09:37:25 -0800 (PST) Received: from localhost ([::1]:38344 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz188-0001yA-5v for importer@patchew.org; Mon, 11 Jan 2021 12:37:24 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51804) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rh-0003GL-2L for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:25 -0500 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]:33157) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rT-00009V-TW for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:24 -0500 Received: by mail-pl1-x634.google.com with SMTP id b8so199775plx.0 for ; Mon, 11 Jan 2021 09:20:10 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=mSdOJnq5o42NhYADknuNWjZocBsJJt/CxyEeh2zDN58=; b=INmTOLG9mza0lGnsPZOLiT4aWjsMGCiU52Yx/IxTtMuPeogVchxfS9EuVc6KqHMP+3 LVRH4oq+swhbOyyHYFY3oSPmNQlez7lPxilNn0QrcvlnuhKTWuPERWohYu6gD1MW3VZa zcZNI+djoFB8K8ZQqdSr+Mmxam45pR+KhBgbv8WixSfxlfDNeeMcGya3fQJmekkjCzn7 Diu0EBzfURMeKTMGdLTgYATE6AOrxN8rqfvg9v0K0GgjF+7lBeioXvC2mBEN/wrbgQXQ ndg764ahVMvI38TWqQ9T5UiHhphQqYjlt36uUmBbRPTfpHSXEbfGAlMuSaQulvJfvnOS aSsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mSdOJnq5o42NhYADknuNWjZocBsJJt/CxyEeh2zDN58=; b=l3vqMKVixEfUJFs2etioqToWlKq3zx2iMC8te//gxtSQozRTrndtqlFkrdWFPA/in1 8JDwYSm8KIt3jpgGIVXPq5e3k+n2YCU4WI87kTOE1bPvUT5bL2askfzISkHtDeNwTAFX RGild2vUuS5qClcp17K0HS/t1B2Y6XKh7DWPI5KU6WdX+mLmBP8WRKK5G6Gk3R8c8X0o UN38Gm1fkJrb28C8yMJbzN5dNo8N4qzzX9Trkkk3EUhlPo6YKvjMt1jyumE5TzT6FxLS eKmu4L8n8ryTwzsrrTSzNHRVmuuoXWNazxnGn24lfZIRPtPH8MCG6Aeb8HEuF6AxwaPG HOqg== X-Gm-Message-State: AOAM532lsQToYrlO7TTxulHPR9OM6oPwihESKt8rwvUPkQC23XHWgxVB mnc5wHzRQuqX2tunvtpMfQp9TGyzsXTAEQ== X-Google-Smtp-Source: ABdhPJzgsYq/Ez0DbLy0rJ4PfvtHcT+v38QdoklWsBHYLgCnqlP81IHhBu2N9OT3jBhndSDmROccMw== X-Received: by 2002:a17:90a:520e:: with SMTP id v14mr279579pjh.9.1610385609859; Mon, 11 Jan 2021 09:20:09 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 12/23] tcg: Convert tcg_gen_dupi_vec to TCG_CONST Date: Mon, 11 Jan 2021 07:19:35 -1000 Message-Id: <20210111171946.219469-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x634.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Because we now store uint64_t in TCGTemp, we can now always store the full 64-bit duplicate immediate. So remove the difference between 32- and 64-bit hosts. Signed-off-by: Richard Henderson --- tcg/optimize.c | 9 ++++----- tcg/tcg-op-vec.c | 39 ++++++++++----------------------------- tcg/tcg.c | 7 +------ 3 files changed, 15 insertions(+), 40 deletions(-) diff --git a/tcg/optimize.c b/tcg/optimize.c index bda727d5ed..dbb03ef96b 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1120,11 +1120,10 @@ void tcg_optimize(TCGContext *s) case INDEX_op_dup2_vec: assert(TCG_TARGET_REG_BITS =3D=3D 32); if (arg_is_const(op->args[1]) && arg_is_const(op->args[2])) { - tmp =3D arg_info(op->args[1])->val; - if (tmp =3D=3D arg_info(op->args[2])->val) { - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], tmp); - break; - } + tcg_opt_gen_movi(s, &temps_used, op, op->args[0], + deposit64(arg_info(op->args[1])->val, 32,= 32, + arg_info(op->args[2])->val)); + break; } else if (args_are_copies(op->args[1], op->args[2])) { op->opc =3D INDEX_op_dup_vec; TCGOP_VECE(op) =3D MO_32; diff --git a/tcg/tcg-op-vec.c b/tcg/tcg-op-vec.c index cdbf11c573..9fbed1366c 100644 --- a/tcg/tcg-op-vec.c +++ b/tcg/tcg-op-vec.c @@ -216,25 +216,17 @@ void tcg_gen_mov_vec(TCGv_vec r, TCGv_vec a) } } =20 -#define MO_REG (TCG_TARGET_REG_BITS =3D=3D 64 ? MO_64 : MO_32) - -static void do_dupi_vec(TCGv_vec r, unsigned vece, TCGArg a) -{ - TCGTemp *rt =3D tcgv_vec_temp(r); - vec_gen_2(INDEX_op_dupi_vec, rt->base_type, vece, temp_arg(rt), a); -} - TCGv_vec tcg_const_zeros_vec(TCGType type) { TCGv_vec ret =3D tcg_temp_new_vec(type); - do_dupi_vec(ret, MO_REG, 0); + tcg_gen_dupi_vec(MO_64, ret, 0); return ret; } =20 TCGv_vec tcg_const_ones_vec(TCGType type) { TCGv_vec ret =3D tcg_temp_new_vec(type); - do_dupi_vec(ret, MO_REG, -1); + tcg_gen_dupi_vec(MO_64, ret, -1); return ret; } =20 @@ -252,39 +244,28 @@ TCGv_vec tcg_const_ones_vec_matching(TCGv_vec m) =20 void tcg_gen_dup64i_vec(TCGv_vec r, uint64_t a) { - if (TCG_TARGET_REG_BITS =3D=3D 64) { - do_dupi_vec(r, MO_64, a); - } else if (a =3D=3D dup_const(MO_32, a)) { - do_dupi_vec(r, MO_32, a); - } else { - TCGv_i64 c =3D tcg_const_i64(a); - tcg_gen_dup_i64_vec(MO_64, r, c); - tcg_temp_free_i64(c); - } + tcg_gen_dupi_vec(MO_64, r, a); } =20 void tcg_gen_dup32i_vec(TCGv_vec r, uint32_t a) { - do_dupi_vec(r, MO_REG, dup_const(MO_32, a)); + tcg_gen_dupi_vec(MO_32, r, a); } =20 void tcg_gen_dup16i_vec(TCGv_vec r, uint32_t a) { - do_dupi_vec(r, MO_REG, dup_const(MO_16, a)); + tcg_gen_dupi_vec(MO_16, r, a); } =20 void tcg_gen_dup8i_vec(TCGv_vec r, uint32_t a) { - do_dupi_vec(r, MO_REG, dup_const(MO_8, a)); + tcg_gen_dupi_vec(MO_8, r, a); } =20 void tcg_gen_dupi_vec(unsigned vece, TCGv_vec r, uint64_t a) { - if (vece =3D=3D MO_64) { - tcg_gen_dup64i_vec(r, a); - } else { - do_dupi_vec(r, MO_REG, dup_const(vece, a)); - } + TCGTemp *rt =3D tcgv_vec_temp(r); + tcg_gen_mov_vec(r, tcg_constant_vec(rt->base_type, vece, a)); } =20 void tcg_gen_dup_i64_vec(unsigned vece, TCGv_vec r, TCGv_i64 a) @@ -489,8 +470,8 @@ void tcg_gen_abs_vec(unsigned vece, TCGv_vec r, TCGv_ve= c a) if (tcg_can_emit_vec_op(INDEX_op_sari_vec, type, vece) > 0) { tcg_gen_sari_vec(vece, t, a, (8 << vece) - 1); } else { - do_dupi_vec(t, MO_REG, 0); - tcg_gen_cmp_vec(TCG_COND_LT, vece, t, a, t); + tcg_gen_cmp_vec(TCG_COND_LT, vece, t, a, + tcg_constant_vec(type, vece, 0)); } tcg_gen_xor_vec(vece, r, a, t); tcg_gen_sub_vec(vece, r, r, t); diff --git a/tcg/tcg.c b/tcg/tcg.c index 802f0b8a32..ad1348d811 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -3539,16 +3539,11 @@ static void temp_load(TCGContext *s, TCGTemp *ts, T= CGRegSet desired_regs, * The targets will, in general, have to do this search anyway, * do this generically. */ - if (TCG_TARGET_REG_BITS =3D=3D 32) { - val =3D dup_const(MO_32, val); - vece =3D MO_32; - } if (val =3D=3D dup_const(MO_8, val)) { vece =3D MO_8; } else if (val =3D=3D dup_const(MO_16, val)) { vece =3D MO_16; - } else if (TCG_TARGET_REG_BITS =3D=3D 64 && - val =3D=3D dup_const(MO_32, val)) { + } else if (val =3D=3D dup_const(MO_32, val)) { vece =3D MO_32; } =20 --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610387058; cv=none; d=zohomail.com; s=zohoarc; b=TaVUnyzDS44l28RRBjVR/uYdXrzVecf2ZVFSHl0Xs/mfmhjDioy+GUyXL2iTqtiGYvAjkU8UANZB3Hhq8PyGtyJxIiR7LTKX6kZj1UIGOS/swZpXIPOlZWQtjeGOshy1/ximwyordWVbKWea0zN8JzRgTjbEW+MT076ggI5WcuQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610387058; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=tYsbmjolK+Eg4JFu4uyWsu7Q9CaREMLO0zlw/InU6fk=; b=QgchJIc8Z7sFWODnqB8nXV/HaZeod/q8N+LLMTO3ZM5TdXh9RKZ3k6tX4A4bWT51ftm+WJQCvDeietRjYHfdMjkPndGDhvsr8IqjX0u6kckR3adPqJH61Ix34UfS9/8/cKmadyivVjkGrz2o3iZYLrMXI1Qu9SqMoPrdZCpth8w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610387058663544.9811981147919; Mon, 11 Jan 2021 09:44:18 -0800 (PST) Received: from localhost ([::1]:34446 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz1En-0003wY-IO for importer@patchew.org; Mon, 11 Jan 2021 12:44:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51914) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rq-0003Mk-Rr for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:36 -0500 Received: from mail-pj1-x1034.google.com ([2607:f8b0:4864:20::1034]:36020) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rY-00009i-Uo for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:29 -0500 Received: by mail-pj1-x1034.google.com with SMTP id l23so10982789pjg.1 for ; Mon, 11 Jan 2021 09:20:12 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tYsbmjolK+Eg4JFu4uyWsu7Q9CaREMLO0zlw/InU6fk=; b=jp1yhE/g5lGhItOm5LeZ4lrD9g+ZEjGe3Aktwavr6oq/NcxAnzWDbL84tEhqz/vNMA 2UAjVUE5IDPZqULGaoOHbJgbbwTvMPW4Y4JqS1Aj1BN82brxUfWCZ01816FRhcqcfgLD o3gaBzdtpTbqidcfSkkm/t5OXedboJXng/D86JlXQk+wboWw/lP/18mlcA6p+g3Fye3Z 6un4lLZHGu+OjtZe7+QAKJzx7ze4/brzjS+CTM4VS03LYdWKWbtvL0qYEQnMt4msDJnW 29JjldvrwMLeVRi5Elt8CrafIRcT2IEKO6klfOKjVGcdk/IOICJFs07w2S+Nbw9jVer4 0ZgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tYsbmjolK+Eg4JFu4uyWsu7Q9CaREMLO0zlw/InU6fk=; b=d73ROPKvXZJp4HE2FS5ZhnlzQt0lapTNoUWwHCWiMuSbBaBhaOmxiBBdMx4qwEwSRZ 3dTNRZDBS+3qYc/YFob0Q2ADFubPSFIyGyMkt8TG/3n39thNrHZlNaU7mgKM7TgCB64y JyRyJV/YTJZaqxbnK6h5k/HBgc36PPfx+jW0+qWoBwIA9NMnaDwjzf5EVaeRpRMq2n5r XBjypZpB9JC+3RFDNTEf9TCsW9m4TAtX1KDBKs7PyK1MQUGs+EqiDTlxhbGImwt34tu1 OH8TNqMXGIQpCSypS6SmbflzVotX/NgiAMuSpttVM4fReFXGHoR/g3g1AxuNDE6S427r oLKg== X-Gm-Message-State: AOAM5324Mbidvh2w63kxiDzJWWKq37V82ug+Ak762sJyVzAqe/ZWafRI 4LEj2uxA6m3DJJX5XVbDGcb5UiEWjm0qkw== X-Google-Smtp-Source: ABdhPJyvYuFMrWV4Jkg7pJUaL2NKyKf6ewa7yWjHI1kqAfUcBw1Dxrq+Puj1of1YUz0rChNIOYJ4gA== X-Received: by 2002:a17:90a:17e2:: with SMTP id q89mr235977pja.209.1610385611382; Mon, 11 Jan 2021 09:20:11 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 13/23] tcg: Use tcg_constant_i32 with icount expander Date: Mon, 11 Jan 2021 07:19:36 -1000 Message-Id: <20210111171946.219469-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1034; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1034.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) We must do this before we adjust tcg_out_movi_i32, lest the under-the-hood poking that we do for icount be broken. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- include/exec/gen-icount.h | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/include/exec/gen-icount.h b/include/exec/gen-icount.h index aa4b44354a..298e01eef4 100644 --- a/include/exec/gen-icount.h +++ b/include/exec/gen-icount.h @@ -34,7 +34,7 @@ static inline void gen_io_end(void) =20 static inline void gen_tb_start(const TranslationBlock *tb) { - TCGv_i32 count, imm; + TCGv_i32 count; =20 tcg_ctx->exitreq_label =3D gen_new_label(); if (tb_cflags(tb) & CF_USE_ICOUNT) { @@ -48,15 +48,13 @@ static inline void gen_tb_start(const TranslationBlock = *tb) offsetof(ArchCPU, env)); =20 if (tb_cflags(tb) & CF_USE_ICOUNT) { - imm =3D tcg_temp_new_i32(); - /* We emit a movi with a dummy immediate argument. Keep the insn i= ndex - * of the movi so that we later (when we know the actual insn coun= t) - * can update the immediate argument with the actual insn count. = */ - tcg_gen_movi_i32(imm, 0xdeadbeef); + /* + * We emit a sub with a dummy immediate argument. Keep the insn in= dex + * of the sub so that we later (when we know the actual insn count) + * can update the argument with the actual insn count. + */ + tcg_gen_sub_i32(count, count, tcg_constant_i32(0)); icount_start_insn =3D tcg_last_op(); - - tcg_gen_sub_i32(count, count, imm); - tcg_temp_free_i32(imm); } =20 tcg_gen_brcondi_i32(TCG_COND_LT, count, 0, tcg_ctx->exitreq_label); @@ -74,9 +72,12 @@ static inline void gen_tb_start(const TranslationBlock *= tb) static inline void gen_tb_end(const TranslationBlock *tb, int num_insns) { if (tb_cflags(tb) & CF_USE_ICOUNT) { - /* Update the num_insn immediate parameter now that we know - * the actual insn count. */ - tcg_set_insn_param(icount_start_insn, 1, num_insns); + /* + * Update the num_insn immediate parameter now that we know + * the actual insn count. + */ + tcg_set_insn_param(icount_start_insn, 2, + tcgv_i32_arg(tcg_constant_i32(num_insns))); } =20 gen_set_label(tcg_ctx->exitreq_label); --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386608; cv=none; d=zohomail.com; s=zohoarc; b=e869HwfSmTWlU/tGiRkz9kAPZRkcUA9Y9FNZ4lCjch1hE5QaHou/UjLHwH/79kDJYXlWhzKKlbRv8pyYQmjz5bYYs/KWIBx5QxbCi+TNpfqcMMvUX70YhzT8wnlUmkiDRT29kC+ogE5yf6O2rVcndLwG6Yz/xyJNTzic2Ffjs4k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386608; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=SP7y7BmDV8PvBtP7aflncUZbvfpV0QEs/q9zdjQfYwI=; b=USdBeONEfDlWZ+ObVN/Ga1Z0uq1H1aHge4cgEdlWl0S03Zz6Ux8QR9EPHsUUtBGEYVyaDkJdeu+lTOdb2/c9n3Tc0KubN8+VZKRFVCT0rRXoUwamyz3r5Qw2KB2JIoAKGlZCeO5m8tcqhRQLOJSJDwyRdTVxEaF9F5ELwNT8YQ0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=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 1610386608850828.7847170268963; Mon, 11 Jan 2021 09:36:48 -0800 (PST) Received: from localhost ([::1]:36226 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz17X-00017H-Ix for importer@patchew.org; Mon, 11 Jan 2021 12:36:47 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51828) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0ri-0003I7-7j for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:26 -0500 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]:38343) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rY-0000A0-VI for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:25 -0500 Received: by mail-pg1-x52b.google.com with SMTP id q7so91590pgm.5 for ; Mon, 11 Jan 2021 09:20:14 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=SP7y7BmDV8PvBtP7aflncUZbvfpV0QEs/q9zdjQfYwI=; b=YJe7okE8Q4XDxG6iSKXc/0nm8UmLQSPd4qYA2CtoCvECvg3k7cAbA5HT5Addl7g3rq ASToN7uUQfjTkZhZlakQcYimjm66aufJPjTFP/XLhTDwuiC9JbHPRkh8avw/sptVz8L4 rkYg9O0AroiF0L1nX3dFFrtbzWNGrzMxL1FFyOJcWp7CGca7qn2rXEE6GyFwRCRieyno s1fnL9FmQPzHclbuA3SsiSMXvuYFMlu9cXjlBFt0cvMz+5l/+B7dhksxkzWzy3PQNL/H iw0vLB/kiU76YYj4aAvlD32ACL4SdYNaeBy/a4eJRbA8bdjj35Wta+BgEpTZRKzcpY39 ltjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=SP7y7BmDV8PvBtP7aflncUZbvfpV0QEs/q9zdjQfYwI=; b=RWWp4Ju7e7NWmvSyFb1SageeTW61qkp00gmeMIqLV1bWk6BH7VMgXf+0GSLzQz7HX1 m9rXg1xfluNlL4wGpBVXkNrIN67xHKOtFDiBRkMQJRe9PTvIUqBybfUwojgI3iOZZ55s Te6C6zByPFHfKBCr3cGG71sHW1c9jLwlfkUsseWEfcNdW79xeNDUK2UvI4vtJ45UHj3J yJWzd+qTMV1entnsOeUgwoQ08BQmLoDemY+N/ZllXz5yXqOwClIjXyiS7hOWLnDK14dk uDIZgTEIWkutn4dEeCu4zqpqmWlIDPPq6qRIQ2l3REr7nWq/2xm+d9QPlcLsGwHHnSRm U5/w== X-Gm-Message-State: AOAM5314NTgj1S/9256LOtNX9bXoYDOaMoJ5Q0fr396BtTV4TVs9vkHm EOr7/xCL7AEOkDaiRciNkmrdoKpj2BVv6Q== X-Google-Smtp-Source: ABdhPJx+KFsByxIpNla9J4jeP/ff/eun4yXmRqspzZ6FJvy33ped6ZGiNu0Ax1Mz51mWxtW+rNlowg== X-Received: by 2002:aa7:8d98:0:b029:1a5:929c:1bb2 with SMTP id i24-20020aa78d980000b02901a5929c1bb2mr662378pfr.4.1610385612880; Mon, 11 Jan 2021 09:20:12 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 14/23] tcg: Use tcg_constant_{i32, i64} with tcg int expanders Date: Mon, 11 Jan 2021 07:19:37 -1000 Message-Id: <20210111171946.219469-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52b; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- include/tcg/tcg-op.h | 13 +-- tcg/tcg-op.c | 227 ++++++++++++++++++++----------------------- 2 files changed, 109 insertions(+), 131 deletions(-) diff --git a/include/tcg/tcg-op.h b/include/tcg/tcg-op.h index 901b19f32a..ed8de045e2 100644 --- a/include/tcg/tcg-op.h +++ b/include/tcg/tcg-op.h @@ -271,6 +271,7 @@ void tcg_gen_mb(TCGBar); =20 /* 32 bit ops */ =20 +void tcg_gen_movi_i32(TCGv_i32 ret, int32_t arg); void tcg_gen_addi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2); void tcg_gen_subfi_i32(TCGv_i32 ret, int32_t arg1, TCGv_i32 arg2); void tcg_gen_subi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2); @@ -349,11 +350,6 @@ static inline void tcg_gen_mov_i32(TCGv_i32 ret, TCGv_= i32 arg) } } =20 -static inline void tcg_gen_movi_i32(TCGv_i32 ret, int32_t arg) -{ - tcg_gen_op2i_i32(INDEX_op_movi_i32, ret, arg); -} - static inline void tcg_gen_ld8u_i32(TCGv_i32 ret, TCGv_ptr arg2, tcg_target_long offset) { @@ -467,6 +463,7 @@ static inline void tcg_gen_not_i32(TCGv_i32 ret, TCGv_i= 32 arg) =20 /* 64 bit ops */ =20 +void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg); void tcg_gen_addi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2); void tcg_gen_subfi_i64(TCGv_i64 ret, int64_t arg1, TCGv_i64 arg2); void tcg_gen_subi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2); @@ -550,11 +547,6 @@ static inline void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_= i64 arg) } } =20 -static inline void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg) -{ - tcg_gen_op2i_i64(INDEX_op_movi_i64, ret, arg); -} - static inline void tcg_gen_ld8u_i64(TCGv_i64 ret, TCGv_ptr arg2, tcg_target_long offset) { @@ -698,7 +690,6 @@ static inline void tcg_gen_sub_i64(TCGv_i64 ret, TCGv_i= 64 arg1, TCGv_i64 arg2) =20 void tcg_gen_discard_i64(TCGv_i64 arg); void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_i64 arg); -void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg); void tcg_gen_ld8u_i64(TCGv_i64 ret, TCGv_ptr arg2, tcg_target_long offset); void tcg_gen_ld8s_i64(TCGv_i64 ret, TCGv_ptr arg2, tcg_target_long offset); void tcg_gen_ld16u_i64(TCGv_i64 ret, TCGv_ptr arg2, tcg_target_long offset= ); diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c index 0374b5d56d..70475773f4 100644 --- a/tcg/tcg-op.c +++ b/tcg/tcg-op.c @@ -104,15 +104,18 @@ void tcg_gen_mb(TCGBar mb_type) =20 /* 32 bit ops */ =20 +void tcg_gen_movi_i32(TCGv_i32 ret, int32_t arg) +{ + tcg_gen_mov_i32(ret, tcg_constant_i32(arg)); +} + void tcg_gen_addi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) { /* some cases can be optimized here */ if (arg2 =3D=3D 0) { tcg_gen_mov_i32(ret, arg1); } else { - TCGv_i32 t0 =3D tcg_const_i32(arg2); - tcg_gen_add_i32(ret, arg1, t0); - tcg_temp_free_i32(t0); + tcg_gen_add_i32(ret, arg1, tcg_constant_i32(arg2)); } } =20 @@ -122,9 +125,7 @@ void tcg_gen_subfi_i32(TCGv_i32 ret, int32_t arg1, TCGv= _i32 arg2) /* Don't recurse with tcg_gen_neg_i32. */ tcg_gen_op2_i32(INDEX_op_neg_i32, ret, arg2); } else { - TCGv_i32 t0 =3D tcg_const_i32(arg1); - tcg_gen_sub_i32(ret, t0, arg2); - tcg_temp_free_i32(t0); + tcg_gen_sub_i32(ret, tcg_constant_i32(arg1), arg2); } } =20 @@ -134,15 +135,12 @@ void tcg_gen_subi_i32(TCGv_i32 ret, TCGv_i32 arg1, in= t32_t arg2) if (arg2 =3D=3D 0) { tcg_gen_mov_i32(ret, arg1); } else { - TCGv_i32 t0 =3D tcg_const_i32(arg2); - tcg_gen_sub_i32(ret, arg1, t0); - tcg_temp_free_i32(t0); + tcg_gen_sub_i32(ret, arg1, tcg_constant_i32(arg2)); } } =20 void tcg_gen_andi_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) { - TCGv_i32 t0; /* Some cases can be optimized here. */ switch (arg2) { case 0: @@ -165,9 +163,8 @@ void tcg_gen_andi_i32(TCGv_i32 ret, TCGv_i32 arg1, int3= 2_t arg2) } break; } - t0 =3D tcg_const_i32(arg2); - tcg_gen_and_i32(ret, arg1, t0); - tcg_temp_free_i32(t0); + + tcg_gen_and_i32(ret, arg1, tcg_constant_i32(arg2)); } =20 void tcg_gen_ori_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) @@ -178,9 +175,7 @@ void tcg_gen_ori_i32(TCGv_i32 ret, TCGv_i32 arg1, int32= _t arg2) } else if (arg2 =3D=3D 0) { tcg_gen_mov_i32(ret, arg1); } else { - TCGv_i32 t0 =3D tcg_const_i32(arg2); - tcg_gen_or_i32(ret, arg1, t0); - tcg_temp_free_i32(t0); + tcg_gen_or_i32(ret, arg1, tcg_constant_i32(arg2)); } } =20 @@ -193,9 +188,7 @@ void tcg_gen_xori_i32(TCGv_i32 ret, TCGv_i32 arg1, int3= 2_t arg2) /* Don't recurse with tcg_gen_not_i32. */ tcg_gen_op2_i32(INDEX_op_not_i32, ret, arg1); } else { - TCGv_i32 t0 =3D tcg_const_i32(arg2); - tcg_gen_xor_i32(ret, arg1, t0); - tcg_temp_free_i32(t0); + tcg_gen_xor_i32(ret, arg1, tcg_constant_i32(arg2)); } } =20 @@ -205,9 +198,7 @@ void tcg_gen_shli_i32(TCGv_i32 ret, TCGv_i32 arg1, int3= 2_t arg2) if (arg2 =3D=3D 0) { tcg_gen_mov_i32(ret, arg1); } else { - TCGv_i32 t0 =3D tcg_const_i32(arg2); - tcg_gen_shl_i32(ret, arg1, t0); - tcg_temp_free_i32(t0); + tcg_gen_shl_i32(ret, arg1, tcg_constant_i32(arg2)); } } =20 @@ -217,9 +208,7 @@ void tcg_gen_shri_i32(TCGv_i32 ret, TCGv_i32 arg1, int3= 2_t arg2) if (arg2 =3D=3D 0) { tcg_gen_mov_i32(ret, arg1); } else { - TCGv_i32 t0 =3D tcg_const_i32(arg2); - tcg_gen_shr_i32(ret, arg1, t0); - tcg_temp_free_i32(t0); + tcg_gen_shr_i32(ret, arg1, tcg_constant_i32(arg2)); } } =20 @@ -229,9 +218,7 @@ void tcg_gen_sari_i32(TCGv_i32 ret, TCGv_i32 arg1, int3= 2_t arg2) if (arg2 =3D=3D 0) { tcg_gen_mov_i32(ret, arg1); } else { - TCGv_i32 t0 =3D tcg_const_i32(arg2); - tcg_gen_sar_i32(ret, arg1, t0); - tcg_temp_free_i32(t0); + tcg_gen_sar_i32(ret, arg1, tcg_constant_i32(arg2)); } } =20 @@ -250,9 +237,7 @@ void tcg_gen_brcondi_i32(TCGCond cond, TCGv_i32 arg1, i= nt32_t arg2, TCGLabel *l) if (cond =3D=3D TCG_COND_ALWAYS) { tcg_gen_br(l); } else if (cond !=3D TCG_COND_NEVER) { - TCGv_i32 t0 =3D tcg_const_i32(arg2); - tcg_gen_brcond_i32(cond, arg1, t0, l); - tcg_temp_free_i32(t0); + tcg_gen_brcond_i32(cond, arg1, tcg_constant_i32(arg2), l); } } =20 @@ -271,9 +256,7 @@ void tcg_gen_setcond_i32(TCGCond cond, TCGv_i32 ret, void tcg_gen_setcondi_i32(TCGCond cond, TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) { - TCGv_i32 t0 =3D tcg_const_i32(arg2); - tcg_gen_setcond_i32(cond, ret, arg1, t0); - tcg_temp_free_i32(t0); + tcg_gen_setcond_i32(cond, ret, arg1, tcg_constant_i32(arg2)); } =20 void tcg_gen_muli_i32(TCGv_i32 ret, TCGv_i32 arg1, int32_t arg2) @@ -283,9 +266,7 @@ void tcg_gen_muli_i32(TCGv_i32 ret, TCGv_i32 arg1, int3= 2_t arg2) } else if (is_power_of_2(arg2)) { tcg_gen_shli_i32(ret, arg1, ctz32(arg2)); } else { - TCGv_i32 t0 =3D tcg_const_i32(arg2); - tcg_gen_mul_i32(ret, arg1, t0); - tcg_temp_free_i32(t0); + tcg_gen_mul_i32(ret, arg1, tcg_constant_i32(arg2)); } } =20 @@ -433,9 +414,7 @@ void tcg_gen_clz_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_= i32 arg2) =20 void tcg_gen_clzi_i32(TCGv_i32 ret, TCGv_i32 arg1, uint32_t arg2) { - TCGv_i32 t =3D tcg_const_i32(arg2); - tcg_gen_clz_i32(ret, arg1, t); - tcg_temp_free_i32(t); + tcg_gen_clz_i32(ret, arg1, tcg_constant_i32(arg2)); } =20 void tcg_gen_ctz_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2) @@ -468,10 +447,9 @@ void tcg_gen_ctz_i32(TCGv_i32 ret, TCGv_i32 arg1, TCGv= _i32 arg2) tcg_gen_clzi_i32(t, t, 32); tcg_gen_xori_i32(t, t, 31); } - z =3D tcg_const_i32(0); + z =3D tcg_constant_i32(0); tcg_gen_movcond_i32(TCG_COND_EQ, ret, arg1, z, arg2, t); tcg_temp_free_i32(t); - tcg_temp_free_i32(z); } else { gen_helper_ctz_i32(ret, arg1, arg2); } @@ -487,9 +465,7 @@ void tcg_gen_ctzi_i32(TCGv_i32 ret, TCGv_i32 arg1, uint= 32_t arg2) tcg_gen_ctpop_i32(ret, t); tcg_temp_free_i32(t); } else { - TCGv_i32 t =3D tcg_const_i32(arg2); - tcg_gen_ctz_i32(ret, arg1, t); - tcg_temp_free_i32(t); + tcg_gen_ctz_i32(ret, arg1, tcg_constant_i32(arg2)); } } =20 @@ -547,9 +523,7 @@ void tcg_gen_rotli_i32(TCGv_i32 ret, TCGv_i32 arg1, int= 32_t arg2) if (arg2 =3D=3D 0) { tcg_gen_mov_i32(ret, arg1); } else if (TCG_TARGET_HAS_rot_i32) { - TCGv_i32 t0 =3D tcg_const_i32(arg2); - tcg_gen_rotl_i32(ret, arg1, t0); - tcg_temp_free_i32(t0); + tcg_gen_rotl_i32(ret, arg1, tcg_constant_i32(arg2)); } else { TCGv_i32 t0, t1; t0 =3D tcg_temp_new_i32(); @@ -653,9 +627,8 @@ void tcg_gen_deposit_z_i32(TCGv_i32 ret, TCGv_i32 arg, tcg_gen_andi_i32(ret, arg, (1u << len) - 1); } else if (TCG_TARGET_HAS_deposit_i32 && TCG_TARGET_deposit_i32_valid(ofs, len)) { - TCGv_i32 zero =3D tcg_const_i32(0); + TCGv_i32 zero =3D tcg_constant_i32(0); tcg_gen_op5ii_i32(INDEX_op_deposit_i32, ret, zero, arg, ofs, len); - tcg_temp_free_i32(zero); } else { /* To help two-operand hosts we prefer to zero-extend first, which allows ARG to stay live. */ @@ -1052,7 +1025,7 @@ void tcg_gen_bswap32_i32(TCGv_i32 ret, TCGv_i32 arg) } else { TCGv_i32 t0 =3D tcg_temp_new_i32(); TCGv_i32 t1 =3D tcg_temp_new_i32(); - TCGv_i32 t2 =3D tcg_const_i32(0x00ff00ff); + TCGv_i32 t2 =3D tcg_constant_i32(0x00ff00ff); =20 /* arg =3D abcd */ tcg_gen_shri_i32(t0, arg, 8); /* t0 =3D .abc */ @@ -1067,7 +1040,6 @@ void tcg_gen_bswap32_i32(TCGv_i32 ret, TCGv_i32 arg) =20 tcg_temp_free_i32(t0); tcg_temp_free_i32(t1); - tcg_temp_free_i32(t2); } } =20 @@ -1114,8 +1086,15 @@ void tcg_gen_discard_i64(TCGv_i64 arg) =20 void tcg_gen_mov_i64(TCGv_i64 ret, TCGv_i64 arg) { - tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg)); - tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg)); + TCGTemp *ts =3D tcgv_i64_temp(arg); + + /* Canonicalize TCGv_i64 TEMP_CONST into TCGv_i32 TEMP_CONST. */ + if (ts->kind =3D=3D TEMP_CONST) { + tcg_gen_movi_i64(ret, ts->val); + } else { + tcg_gen_mov_i32(TCGV_LOW(ret), TCGV_LOW(arg)); + tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg)); + } } =20 void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg) @@ -1237,6 +1216,14 @@ void tcg_gen_mul_i64(TCGv_i64 ret, TCGv_i64 arg1, TC= Gv_i64 arg2) tcg_temp_free_i64(t0); tcg_temp_free_i32(t1); } + +#else + +void tcg_gen_movi_i64(TCGv_i64 ret, int64_t arg) +{ + tcg_gen_mov_i64(ret, tcg_constant_i64(arg)); +} + #endif /* TCG_TARGET_REG_SIZE =3D=3D 32 */ =20 void tcg_gen_addi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) @@ -1244,10 +1231,12 @@ void tcg_gen_addi_i64(TCGv_i64 ret, TCGv_i64 arg1, = int64_t arg2) /* some cases can be optimized here */ if (arg2 =3D=3D 0) { tcg_gen_mov_i64(ret, arg1); + } else if (TCG_TARGET_REG_BITS =3D=3D 64) { + tcg_gen_add_i64(ret, arg1, tcg_constant_i64(arg2)); } else { - TCGv_i64 t0 =3D tcg_const_i64(arg2); - tcg_gen_add_i64(ret, arg1, t0); - tcg_temp_free_i64(t0); + tcg_gen_add2_i32(TCGV_LOW(ret), TCGV_HIGH(ret), + TCGV_LOW(arg1), TCGV_HIGH(arg1), + tcg_constant_i32(arg2), tcg_constant_i32(arg2 >> = 32)); } } =20 @@ -1256,10 +1245,12 @@ void tcg_gen_subfi_i64(TCGv_i64 ret, int64_t arg1, = TCGv_i64 arg2) if (arg1 =3D=3D 0 && TCG_TARGET_HAS_neg_i64) { /* Don't recurse with tcg_gen_neg_i64. */ tcg_gen_op2_i64(INDEX_op_neg_i64, ret, arg2); + } else if (TCG_TARGET_REG_BITS =3D=3D 64) { + tcg_gen_sub_i64(ret, tcg_constant_i64(arg1), arg2); } else { - TCGv_i64 t0 =3D tcg_const_i64(arg1); - tcg_gen_sub_i64(ret, t0, arg2); - tcg_temp_free_i64(t0); + tcg_gen_sub2_i32(TCGV_LOW(ret), TCGV_HIGH(ret), + tcg_constant_i32(arg1), tcg_constant_i32(arg1 >> = 32), + TCGV_LOW(arg2), TCGV_HIGH(arg2)); } } =20 @@ -1268,17 +1259,17 @@ void tcg_gen_subi_i64(TCGv_i64 ret, TCGv_i64 arg1, = int64_t arg2) /* some cases can be optimized here */ if (arg2 =3D=3D 0) { tcg_gen_mov_i64(ret, arg1); + } else if (TCG_TARGET_REG_BITS =3D=3D 64) { + tcg_gen_sub_i64(ret, arg1, tcg_constant_i64(arg2)); } else { - TCGv_i64 t0 =3D tcg_const_i64(arg2); - tcg_gen_sub_i64(ret, arg1, t0); - tcg_temp_free_i64(t0); + tcg_gen_sub2_i32(TCGV_LOW(ret), TCGV_HIGH(ret), + TCGV_LOW(arg1), TCGV_HIGH(arg1), + tcg_constant_i32(arg2), tcg_constant_i32(arg2 >> = 32)); } } =20 void tcg_gen_andi_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) { - TCGv_i64 t0; - if (TCG_TARGET_REG_BITS =3D=3D 32) { tcg_gen_andi_i32(TCGV_LOW(ret), TCGV_LOW(arg1), arg2); tcg_gen_andi_i32(TCGV_HIGH(ret), TCGV_HIGH(arg1), arg2 >> 32); @@ -1313,9 +1304,8 @@ void tcg_gen_andi_i64(TCGv_i64 ret, TCGv_i64 arg1, in= t64_t arg2) } break; } - t0 =3D tcg_const_i64(arg2); - tcg_gen_and_i64(ret, arg1, t0); - tcg_temp_free_i64(t0); + + tcg_gen_and_i64(ret, arg1, tcg_constant_i64(arg2)); } =20 void tcg_gen_ori_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) @@ -1331,9 +1321,7 @@ void tcg_gen_ori_i64(TCGv_i64 ret, TCGv_i64 arg1, int= 64_t arg2) } else if (arg2 =3D=3D 0) { tcg_gen_mov_i64(ret, arg1); } else { - TCGv_i64 t0 =3D tcg_const_i64(arg2); - tcg_gen_or_i64(ret, arg1, t0); - tcg_temp_free_i64(t0); + tcg_gen_or_i64(ret, arg1, tcg_constant_i64(arg2)); } } =20 @@ -1351,9 +1339,7 @@ void tcg_gen_xori_i64(TCGv_i64 ret, TCGv_i64 arg1, in= t64_t arg2) /* Don't recurse with tcg_gen_not_i64. */ tcg_gen_op2_i64(INDEX_op_not_i64, ret, arg1); } else { - TCGv_i64 t0 =3D tcg_const_i64(arg2); - tcg_gen_xor_i64(ret, arg1, t0); - tcg_temp_free_i64(t0); + tcg_gen_xor_i64(ret, arg1, tcg_constant_i64(arg2)); } } =20 @@ -1415,9 +1401,7 @@ void tcg_gen_shli_i64(TCGv_i64 ret, TCGv_i64 arg1, in= t64_t arg2) } else if (arg2 =3D=3D 0) { tcg_gen_mov_i64(ret, arg1); } else { - TCGv_i64 t0 =3D tcg_const_i64(arg2); - tcg_gen_shl_i64(ret, arg1, t0); - tcg_temp_free_i64(t0); + tcg_gen_shl_i64(ret, arg1, tcg_constant_i64(arg2)); } } =20 @@ -1429,9 +1413,7 @@ void tcg_gen_shri_i64(TCGv_i64 ret, TCGv_i64 arg1, in= t64_t arg2) } else if (arg2 =3D=3D 0) { tcg_gen_mov_i64(ret, arg1); } else { - TCGv_i64 t0 =3D tcg_const_i64(arg2); - tcg_gen_shr_i64(ret, arg1, t0); - tcg_temp_free_i64(t0); + tcg_gen_shr_i64(ret, arg1, tcg_constant_i64(arg2)); } } =20 @@ -1443,9 +1425,7 @@ void tcg_gen_sari_i64(TCGv_i64 ret, TCGv_i64 arg1, in= t64_t arg2) } else if (arg2 =3D=3D 0) { tcg_gen_mov_i64(ret, arg1); } else { - TCGv_i64 t0 =3D tcg_const_i64(arg2); - tcg_gen_sar_i64(ret, arg1, t0); - tcg_temp_free_i64(t0); + tcg_gen_sar_i64(ret, arg1, tcg_constant_i64(arg2)); } } =20 @@ -1468,12 +1448,17 @@ void tcg_gen_brcond_i64(TCGCond cond, TCGv_i64 arg1= , TCGv_i64 arg2, TCGLabel *l) =20 void tcg_gen_brcondi_i64(TCGCond cond, TCGv_i64 arg1, int64_t arg2, TCGLab= el *l) { - if (cond =3D=3D TCG_COND_ALWAYS) { + if (TCG_TARGET_REG_BITS =3D=3D 64) { + tcg_gen_brcond_i64(cond, arg1, tcg_constant_i64(arg2), l); + } else if (cond =3D=3D TCG_COND_ALWAYS) { tcg_gen_br(l); } else if (cond !=3D TCG_COND_NEVER) { - TCGv_i64 t0 =3D tcg_const_i64(arg2); - tcg_gen_brcond_i64(cond, arg1, t0, l); - tcg_temp_free_i64(t0); + l->refs++; + tcg_gen_op6ii_i32(INDEX_op_brcond2_i32, + TCGV_LOW(arg1), TCGV_HIGH(arg1), + tcg_constant_i32(arg2), + tcg_constant_i32(arg2 >> 32), + cond, label_arg(l)); } } =20 @@ -1499,9 +1484,19 @@ void tcg_gen_setcond_i64(TCGCond cond, TCGv_i64 ret, void tcg_gen_setcondi_i64(TCGCond cond, TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) { - TCGv_i64 t0 =3D tcg_const_i64(arg2); - tcg_gen_setcond_i64(cond, ret, arg1, t0); - tcg_temp_free_i64(t0); + if (TCG_TARGET_REG_BITS =3D=3D 64) { + tcg_gen_setcond_i64(cond, ret, arg1, tcg_constant_i64(arg2)); + } else if (cond =3D=3D TCG_COND_ALWAYS) { + tcg_gen_movi_i64(ret, 1); + } else if (cond =3D=3D TCG_COND_NEVER) { + tcg_gen_movi_i64(ret, 0); + } else { + tcg_gen_op6i_i32(INDEX_op_setcond2_i32, TCGV_LOW(ret), + TCGV_LOW(arg1), TCGV_HIGH(arg1), + tcg_constant_i32(arg2), + tcg_constant_i32(arg2 >> 32), cond); + tcg_gen_movi_i32(TCGV_HIGH(ret), 0); + } } =20 void tcg_gen_muli_i64(TCGv_i64 ret, TCGv_i64 arg1, int64_t arg2) @@ -1690,7 +1685,7 @@ void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg) } else { TCGv_i64 t0 =3D tcg_temp_new_i64(); TCGv_i64 t1 =3D tcg_temp_new_i64(); - TCGv_i64 t2 =3D tcg_const_i64(0x00ff00ff); + TCGv_i64 t2 =3D tcg_constant_i64(0x00ff00ff); =20 /* arg =3D ....abcd */ tcg_gen_shri_i64(t0, arg, 8); /* t0 =3D .....abc */ @@ -1706,7 +1701,6 @@ void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg) =20 tcg_temp_free_i64(t0); tcg_temp_free_i64(t1); - tcg_temp_free_i64(t2); } } =20 @@ -1850,16 +1844,16 @@ void tcg_gen_clzi_i64(TCGv_i64 ret, TCGv_i64 arg1, = uint64_t arg2) if (TCG_TARGET_REG_BITS =3D=3D 32 && TCG_TARGET_HAS_clz_i32 && arg2 <=3D 0xffffffffu) { - TCGv_i32 t =3D tcg_const_i32((uint32_t)arg2 - 32); - tcg_gen_clz_i32(t, TCGV_LOW(arg1), t); + TCGv_i32 t =3D tcg_temp_new_i32(); + tcg_gen_clzi_i32(t, TCGV_LOW(arg1), arg2 - 32); tcg_gen_addi_i32(t, t, 32); tcg_gen_clz_i32(TCGV_LOW(ret), TCGV_HIGH(arg1), t); tcg_gen_movi_i32(TCGV_HIGH(ret), 0); tcg_temp_free_i32(t); } else { - TCGv_i64 t =3D tcg_const_i64(arg2); - tcg_gen_clz_i64(ret, arg1, t); - tcg_temp_free_i64(t); + TCGv_i64 t0 =3D tcg_const_i64(arg2); + tcg_gen_clz_i64(ret, arg1, t0); + tcg_temp_free_i64(t0); } } =20 @@ -1881,7 +1875,7 @@ void tcg_gen_ctz_i64(TCGv_i64 ret, TCGv_i64 arg1, TCG= v_i64 arg2) tcg_gen_clzi_i64(t, t, 64); tcg_gen_xori_i64(t, t, 63); } - z =3D tcg_const_i64(0); + z =3D tcg_constant_i64(0); tcg_gen_movcond_i64(TCG_COND_EQ, ret, arg1, z, arg2, t); tcg_temp_free_i64(t); tcg_temp_free_i64(z); @@ -1895,8 +1889,8 @@ void tcg_gen_ctzi_i64(TCGv_i64 ret, TCGv_i64 arg1, ui= nt64_t arg2) if (TCG_TARGET_REG_BITS =3D=3D 32 && TCG_TARGET_HAS_ctz_i32 && arg2 <=3D 0xffffffffu) { - TCGv_i32 t32 =3D tcg_const_i32((uint32_t)arg2 - 32); - tcg_gen_ctz_i32(t32, TCGV_HIGH(arg1), t32); + TCGv_i32 t32 =3D tcg_temp_new_i32(); + tcg_gen_ctzi_i32(t32, TCGV_HIGH(arg1), arg2 - 32); tcg_gen_addi_i32(t32, t32, 32); tcg_gen_ctz_i32(TCGV_LOW(ret), TCGV_LOW(arg1), t32); tcg_gen_movi_i32(TCGV_HIGH(ret), 0); @@ -1911,9 +1905,9 @@ void tcg_gen_ctzi_i64(TCGv_i64 ret, TCGv_i64 arg1, ui= nt64_t arg2) tcg_gen_ctpop_i64(ret, t); tcg_temp_free_i64(t); } else { - TCGv_i64 t64 =3D tcg_const_i64(arg2); - tcg_gen_ctz_i64(ret, arg1, t64); - tcg_temp_free_i64(t64); + TCGv_i64 t0 =3D tcg_const_i64(arg2); + tcg_gen_ctz_i64(ret, arg1, t0); + tcg_temp_free_i64(t0); } } =20 @@ -1969,9 +1963,7 @@ void tcg_gen_rotli_i64(TCGv_i64 ret, TCGv_i64 arg1, i= nt64_t arg2) if (arg2 =3D=3D 0) { tcg_gen_mov_i64(ret, arg1); } else if (TCG_TARGET_HAS_rot_i64) { - TCGv_i64 t0 =3D tcg_const_i64(arg2); - tcg_gen_rotl_i64(ret, arg1, t0); - tcg_temp_free_i64(t0); + tcg_gen_rotl_i64(ret, arg1, tcg_constant_i64(arg2)); } else { TCGv_i64 t0, t1; t0 =3D tcg_temp_new_i64(); @@ -2089,9 +2081,8 @@ void tcg_gen_deposit_z_i64(TCGv_i64 ret, TCGv_i64 arg, tcg_gen_andi_i64(ret, arg, (1ull << len) - 1); } else if (TCG_TARGET_HAS_deposit_i64 && TCG_TARGET_deposit_i64_valid(ofs, len)) { - TCGv_i64 zero =3D tcg_const_i64(0); + TCGv_i64 zero =3D tcg_constant_i64(0); tcg_gen_op5ii_i64(INDEX_op_deposit_i64, ret, zero, arg, ofs, len); - tcg_temp_free_i64(zero); } else { if (TCG_TARGET_REG_BITS =3D=3D 32) { if (ofs >=3D 32) { @@ -3117,9 +3108,8 @@ void tcg_gen_atomic_cmpxchg_i32(TCGv_i32 retv, TCGv a= ddr, TCGv_i32 cmpv, =20 #ifdef CONFIG_SOFTMMU { - TCGv_i32 oi =3D tcg_const_i32(make_memop_idx(memop & ~MO_SIGN,= idx)); - gen(retv, cpu_env, addr, cmpv, newv, oi); - tcg_temp_free_i32(oi); + TCGMemOpIdx oi =3D make_memop_idx(memop & ~MO_SIGN, idx); + gen(retv, cpu_env, addr, cmpv, newv, tcg_constant_i32(oi)); } #else gen(retv, cpu_env, addr, cmpv, newv); @@ -3162,9 +3152,8 @@ void tcg_gen_atomic_cmpxchg_i64(TCGv_i64 retv, TCGv a= ddr, TCGv_i64 cmpv, =20 #ifdef CONFIG_SOFTMMU { - TCGv_i32 oi =3D tcg_const_i32(make_memop_idx(memop, idx)); - gen(retv, cpu_env, addr, cmpv, newv, oi); - tcg_temp_free_i32(oi); + TCGMemOpIdx oi =3D make_memop_idx(memop, idx); + gen(retv, cpu_env, addr, cmpv, newv, tcg_constant_i32(oi)); } #else gen(retv, cpu_env, addr, cmpv, newv); @@ -3226,9 +3215,8 @@ static void do_atomic_op_i32(TCGv_i32 ret, TCGv addr,= TCGv_i32 val, =20 #ifdef CONFIG_SOFTMMU { - TCGv_i32 oi =3D tcg_const_i32(make_memop_idx(memop & ~MO_SIGN, idx= )); - gen(ret, cpu_env, addr, val, oi); - tcg_temp_free_i32(oi); + TCGMemOpIdx oi =3D make_memop_idx(memop & ~MO_SIGN, idx); + gen(ret, cpu_env, addr, val, tcg_constant_i32(oi)); } #else gen(ret, cpu_env, addr, val); @@ -3272,9 +3260,8 @@ static void do_atomic_op_i64(TCGv_i64 ret, TCGv addr,= TCGv_i64 val, =20 #ifdef CONFIG_SOFTMMU { - TCGv_i32 oi =3D tcg_const_i32(make_memop_idx(memop & ~MO_SIGN,= idx)); - gen(ret, cpu_env, addr, val, oi); - tcg_temp_free_i32(oi); + TCGMemOpIdx oi =3D make_memop_idx(memop & ~MO_SIGN, idx); + gen(ret, cpu_env, addr, val, tcg_constant_i32(oi)); } #else gen(ret, cpu_env, addr, val); --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386410; cv=none; d=zohomail.com; s=zohoarc; b=Hes0XSc1g+Z92w/rMuz32r9/C8kngMPRzlUe5BXakW2hfF3dRAeHM91N0i8N4PlDzb7PE6Qi9+EkP7DZYebb0KHfFDghKHbLhhk47qxs/6uTLrhvYrLfyTYeomKlovMRUKMLuLDcE+GaoW82G797r/Kr5DuqvqwTY7RUgIcragw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386410; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=HakP3QzMMgoP+5PWHWKQnZl86G7xrmBYKlGdyeWSyq0=; b=AD/06zQl5YQA0YKNgAbYKMyx8dzgnoyeNbP9ZPGsaofm/z+ay6jXy6z0phVsfGVSnmQeux1ha5COBxzWx/fZLfir6nSRmyNanO7zNJVP0CKmEveBLOXv8sH+muJwh16Ihq9XAiuDZsUoWAZDLYcKA2CzlRp15HeydJaIxJLgG8Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610386410826394.8259171810088; Mon, 11 Jan 2021 09:33:30 -0800 (PST) Received: from localhost ([::1]:58118 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz14L-0006hj-CK for importer@patchew.org; Mon, 11 Jan 2021 12:33:29 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51806) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rh-0003GX-5Z for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:25 -0500 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]:40730) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rd-0000Az-24 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:24 -0500 Received: by mail-pl1-x62b.google.com with SMTP id q4so177839plr.7 for ; Mon, 11 Jan 2021 09:20:15 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HakP3QzMMgoP+5PWHWKQnZl86G7xrmBYKlGdyeWSyq0=; b=CLtHVyFlqzowouvrontOt6i3fEY3xqaDnFchEvmmMi3vvuZ0S0KFh6HYfkoSd0b1bZ W9CjU3ptNUhPP2zeXdH30HwHyhKdW9cs5qJEXKUECoKfS+rPwGIKizAGOZ3kw4fAWAGT A/bDbJcCd7FtS3uZj7L62xQ0s/C+iUL9zN8W6hFBWjfiTubDG5ohU/fcKP7IwWRUyuJu oMBrYQNHR7NDXPPc7r0t34823u6v8sXaQK/+P0xdOQiqNzC+L4oNbFujnEDR0cZfN6/a 9A2ax0i72rr1mKtKoI0lg6+NY9iwHYR+Bn6eSGdAOiot64fnRdnGKA7Wh06e040uiy2S woPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HakP3QzMMgoP+5PWHWKQnZl86G7xrmBYKlGdyeWSyq0=; b=fWs055q9dMsi7XZ+rHHYbD1eFLKNyLL8ZNZaafdgdAKnk7JbzqqSp8EwkTm3jvhJFp aEiafK8e8vagQLBaEkMTqONEn/8LJCaqtQCkoyvyBan0879UqzPOwUfgnZQJmh5lCgiu CSKDGfstJ36axqQr8KYH6ph1DcXCyUH2JYswn/pm8lhCzXqExRO7yXNQLxqSZLVABG3P M38NiZ9DrptnzsJmeI14h1WXgmPu8d0V1GV6O4mIFKZWRnp5Axs3J/UkKr7qz8uOT6PI XVt1xai70UINCSCrnOyS0qX5SLcneoU6sjoxAVGmSIbBw1ANW3s400zXHh3QRCxnJiP/ CKFg== X-Gm-Message-State: AOAM532BiNZjCn695tUS+YxGQ2bEcqJqk58RjrkFxYxrWCIlzKypl39j HvbNFQL0gpVR0YU1DcYUcX94tl2Jn9727w== X-Google-Smtp-Source: ABdhPJyrcVOFZMsCKCHBf+ucxD5VA8dfghBujeZtCuH3S8uGFhXCm/ECGnyKKxTHhcH5NzOYnOvXKg== X-Received: by 2002:a17:90a:300c:: with SMTP id g12mr312264pjb.4.1610385614680; Mon, 11 Jan 2021 09:20:14 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 15/23] tcg: Use tcg_constant_{i32,i64} with tcg plugins Date: Mon, 11 Jan 2021 07:19:38 -1000 Message-Id: <20210111171946.219469-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::62b; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- accel/tcg/plugin-gen.c | 49 +++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/accel/tcg/plugin-gen.c b/accel/tcg/plugin-gen.c index 51580d51a0..e5dc9d0ca9 100644 --- a/accel/tcg/plugin-gen.c +++ b/accel/tcg/plugin-gen.c @@ -284,8 +284,8 @@ static TCGOp *copy_extu_i32_i64(TCGOp **begin_op, TCGOp= *op) if (TCG_TARGET_REG_BITS =3D=3D 32) { /* mov_i32 */ op =3D copy_op(begin_op, op, INDEX_op_mov_i32); - /* movi_i32 */ - op =3D copy_op(begin_op, op, INDEX_op_movi_i32); + /* mov_i32 w/ $0 */ + op =3D copy_op(begin_op, op, INDEX_op_mov_i32); } else { /* extu_i32_i64 */ op =3D copy_op(begin_op, op, INDEX_op_extu_i32_i64); @@ -306,39 +306,34 @@ static TCGOp *copy_mov_i64(TCGOp **begin_op, TCGOp *o= p) return op; } =20 -static TCGOp *copy_movi_i64(TCGOp **begin_op, TCGOp *op, uint64_t v) -{ - if (TCG_TARGET_REG_BITS =3D=3D 32) { - /* 2x movi_i32 */ - op =3D copy_op(begin_op, op, INDEX_op_movi_i32); - op->args[1] =3D v; - - op =3D copy_op(begin_op, op, INDEX_op_movi_i32); - op->args[1] =3D v >> 32; - } else { - /* movi_i64 */ - op =3D copy_op(begin_op, op, INDEX_op_movi_i64); - op->args[1] =3D v; - } - return op; -} - static TCGOp *copy_const_ptr(TCGOp **begin_op, TCGOp *op, void *ptr) { if (UINTPTR_MAX =3D=3D UINT32_MAX) { - /* movi_i32 */ - op =3D copy_op(begin_op, op, INDEX_op_movi_i32); - op->args[1] =3D (uintptr_t)ptr; + /* mov_i32 */ + op =3D copy_op(begin_op, op, INDEX_op_mov_i32); + op->args[1] =3D tcgv_i32_arg(tcg_constant_i32((uintptr_t)ptr)); } else { - /* movi_i64 */ - op =3D copy_movi_i64(begin_op, op, (uint64_t)(uintptr_t)ptr); + /* mov_i64 */ + op =3D copy_op(begin_op, op, INDEX_op_mov_i64); + op->args[1] =3D tcgv_i64_arg(tcg_constant_i64((uintptr_t)ptr)); } return op; } =20 static TCGOp *copy_const_i64(TCGOp **begin_op, TCGOp *op, uint64_t v) { - return copy_movi_i64(begin_op, op, v); + if (TCG_TARGET_REG_BITS =3D=3D 32) { + /* 2x mov_i32 */ + op =3D copy_op(begin_op, op, INDEX_op_mov_i32); + op->args[1] =3D tcgv_i32_arg(tcg_constant_i32(v)); + op =3D copy_op(begin_op, op, INDEX_op_mov_i32); + op->args[1] =3D tcgv_i32_arg(tcg_constant_i32(v >> 32)); + } else { + /* mov_i64 */ + op =3D copy_op(begin_op, op, INDEX_op_mov_i64); + op->args[1] =3D tcgv_i64_arg(tcg_constant_i64(v)); + } + return op; } =20 static TCGOp *copy_extu_tl_i64(TCGOp **begin_op, TCGOp *op) @@ -486,8 +481,8 @@ static TCGOp *append_mem_cb(const struct qemu_plugin_dy= n_cb *cb, =20 tcg_debug_assert(type =3D=3D PLUGIN_GEN_CB_MEM); =20 - /* const_i32 =3D=3D movi_i32 ("info", so it remains as is) */ - op =3D copy_op(&begin_op, op, INDEX_op_movi_i32); + /* const_i32 =3D=3D mov_i32 ("info", so it remains as is) */ + op =3D copy_op(&begin_op, op, INDEX_op_mov_i32); =20 /* const_ptr */ op =3D copy_const_ptr(&begin_op, op, cb->userp); --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386676; cv=none; d=zohomail.com; s=zohoarc; b=LOSloPfLJn0qNVFo+AAagLBHt1ncug2rkXJhOztNRVYWKkCltD9aDAdvuPitizm/hgVqMKR0kyTbroUZPitiariW42g9QD5NCDLB/EUfnfEPNrd6U84ZyqZEiwK7ij5xK1Ndg7sDhBVBfxO/YOEW9JzixRwaFL0BcwHZaIhc7/U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386676; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gINepdGckOBPQozHF12k+VkgG8lWS2hW2lWUZ4aP3Vk=; b=Nu9ySoe9tPPtFKvBcq+s4H1Iv1QqG0Wd+ZyodyyqCTvammHg854+FXQQ90xcLue5KXaiNUTIdiZ4X9CEAUUB5CgSP8CLzLMdppoYeNfW4X7DLnLGZ5vsM9a2UEE6mO8dVqMC+JTps5pJfpD1aIrxM1sPjDjN/cr+BFUUUyoPx8M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=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 1610386676919243.9007819385904; Mon, 11 Jan 2021 09:37:56 -0800 (PST) Received: from localhost ([::1]:41498 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz18c-0003Gy-Kf for importer@patchew.org; Mon, 11 Jan 2021 12:37:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51846) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0ri-0003JV-Ry for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:26 -0500 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]:38871) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0re-0000Bz-Fq for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:26 -0500 Received: by mail-pf1-x430.google.com with SMTP id d2so322939pfq.5 for ; Mon, 11 Jan 2021 09:20:17 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=gINepdGckOBPQozHF12k+VkgG8lWS2hW2lWUZ4aP3Vk=; b=RmufYeEW+byGTIpl9THyUnx6+eZnTldWYKVzlUBkuX3XAqxfDBAhZcWdlvyXMBzh1g e/lcet32M49JeerQBYo/hoD8pisp0nPCae4kRW7PdPfwZpTBLh/ghLOf29fJqShwzA1R 9uBhSVGH44j4SSoo6wmTS6eFKnGHxPJJVr6kaxWpzbIochtSVda61o/DfZPAKeyLGGxr 4cNaNr7BQCI4HzT9KYpzcQNTPJrszhka/H6f7RJCYo8qucECy9GKTez1Vws91AwbNK1u VAAKcfcqMs1ZH0m57ngJ0oqkcJGs9fhbaYwCtpKUiywoM/Nh2/tKSae5NGhIOJQGU4f9 vDyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gINepdGckOBPQozHF12k+VkgG8lWS2hW2lWUZ4aP3Vk=; b=YEGLmmzwZpLHeg7Ycm6nzxcXAd3uzmVx0jLo/dU8oaiOsCSw0yS+JVmGDYMop3xGCu BlsGVvI2ZcNvbahll8d30yR7+JrOjUT8YkHYY2uE+42ws0p3JZLnNar+Vms2cYjm41IB t1RQjmZTMtGw/mmwYI/GSHkP/7qn4njA20c0xaxuP0f7uExAzEWM/iB39sUWhtEameL2 djJg75S6NQNLdyB1gGdVgz+b8vR5GBBmJ+OTLgrITVKKW9/8Jn/U5FlX8OsbLunHRieb ab7RmLdGB/gMDrD7v1lzxJkKR0IX14dHKtuLXvb7oqC1r0uP2X8OTs2p7zzs/viihmK/ sN6w== X-Gm-Message-State: AOAM533G8WirWAGiNpRMoEJbAqcGVJ4lLjC2KysNdlr0wKsEuvKQe5Cp 6pfTB1Y/h7YgtXgEeliiT9pdT/6NlGXLIg== X-Google-Smtp-Source: ABdhPJwpLusjbd5OgU3f776ydOzNBhvRgY4UBVaqPB8kogcy3PwuBw+gYqmXtffo80YG7g9QqpshIA== X-Received: by 2002:a62:5205:0:b029:19e:a0f:2c81 with SMTP id g5-20020a6252050000b029019e0a0f2c81mr392236pfb.50.1610385616218; Mon, 11 Jan 2021 09:20:16 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 16/23] tcg: Use tcg_constant_{i32, i64, vec} with gvec expanders Date: Mon, 11 Jan 2021 07:19:39 -1000 Message-Id: <20210111171946.219469-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::430; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- include/tcg/tcg.h | 1 + tcg/tcg-op-gvec.c | 129 ++++++++++++++++++---------------------------- tcg/tcg.c | 8 +++ 3 files changed, 60 insertions(+), 78 deletions(-) diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h index eeeb70ad43..504c5e9bb0 100644 --- a/include/tcg/tcg.h +++ b/include/tcg/tcg.h @@ -1109,6 +1109,7 @@ static inline TCGv_i64 tcg_constant_i64(int64_t val) } =20 TCGv_vec tcg_constant_vec(TCGType type, unsigned vece, int64_t val); +TCGv_vec tcg_constant_vec_matching(TCGv_vec match, unsigned vece, int64_t = val); =20 #if UINTPTR_MAX =3D=3D UINT32_MAX # define tcg_const_ptr(x) ((TCGv_ptr)tcg_const_i32((intptr_t)(x))) diff --git a/tcg/tcg-op-gvec.c b/tcg/tcg-op-gvec.c index 1a41dfa908..498a959839 100644 --- a/tcg/tcg-op-gvec.c +++ b/tcg/tcg-op-gvec.c @@ -115,7 +115,7 @@ void tcg_gen_gvec_2_ool(uint32_t dofs, uint32_t aofs, gen_helper_gvec_2 *fn) { TCGv_ptr a0, a1; - TCGv_i32 desc =3D tcg_const_i32(simd_desc(oprsz, maxsz, data)); + TCGv_i32 desc =3D tcg_constant_i32(simd_desc(oprsz, maxsz, data)); =20 a0 =3D tcg_temp_new_ptr(); a1 =3D tcg_temp_new_ptr(); @@ -127,7 +127,6 @@ void tcg_gen_gvec_2_ool(uint32_t dofs, uint32_t aofs, =20 tcg_temp_free_ptr(a0); tcg_temp_free_ptr(a1); - tcg_temp_free_i32(desc); } =20 /* Generate a call to a gvec-style helper with two vector operands @@ -137,7 +136,7 @@ void tcg_gen_gvec_2i_ool(uint32_t dofs, uint32_t aofs, = TCGv_i64 c, gen_helper_gvec_2i *fn) { TCGv_ptr a0, a1; - TCGv_i32 desc =3D tcg_const_i32(simd_desc(oprsz, maxsz, data)); + TCGv_i32 desc =3D tcg_constant_i32(simd_desc(oprsz, maxsz, data)); =20 a0 =3D tcg_temp_new_ptr(); a1 =3D tcg_temp_new_ptr(); @@ -149,7 +148,6 @@ void tcg_gen_gvec_2i_ool(uint32_t dofs, uint32_t aofs, = TCGv_i64 c, =20 tcg_temp_free_ptr(a0); tcg_temp_free_ptr(a1); - tcg_temp_free_i32(desc); } =20 /* Generate a call to a gvec-style helper with three vector operands. */ @@ -158,7 +156,7 @@ void tcg_gen_gvec_3_ool(uint32_t dofs, uint32_t aofs, u= int32_t bofs, gen_helper_gvec_3 *fn) { TCGv_ptr a0, a1, a2; - TCGv_i32 desc =3D tcg_const_i32(simd_desc(oprsz, maxsz, data)); + TCGv_i32 desc =3D tcg_constant_i32(simd_desc(oprsz, maxsz, data)); =20 a0 =3D tcg_temp_new_ptr(); a1 =3D tcg_temp_new_ptr(); @@ -173,7 +171,6 @@ void tcg_gen_gvec_3_ool(uint32_t dofs, uint32_t aofs, u= int32_t bofs, tcg_temp_free_ptr(a0); tcg_temp_free_ptr(a1); tcg_temp_free_ptr(a2); - tcg_temp_free_i32(desc); } =20 /* Generate a call to a gvec-style helper with four vector operands. */ @@ -182,7 +179,7 @@ void tcg_gen_gvec_4_ool(uint32_t dofs, uint32_t aofs, u= int32_t bofs, int32_t data, gen_helper_gvec_4 *fn) { TCGv_ptr a0, a1, a2, a3; - TCGv_i32 desc =3D tcg_const_i32(simd_desc(oprsz, maxsz, data)); + TCGv_i32 desc =3D tcg_constant_i32(simd_desc(oprsz, maxsz, data)); =20 a0 =3D tcg_temp_new_ptr(); a1 =3D tcg_temp_new_ptr(); @@ -200,7 +197,6 @@ void tcg_gen_gvec_4_ool(uint32_t dofs, uint32_t aofs, u= int32_t bofs, tcg_temp_free_ptr(a1); tcg_temp_free_ptr(a2); tcg_temp_free_ptr(a3); - tcg_temp_free_i32(desc); } =20 /* Generate a call to a gvec-style helper with five vector operands. */ @@ -209,7 +205,7 @@ void tcg_gen_gvec_5_ool(uint32_t dofs, uint32_t aofs, u= int32_t bofs, uint32_t maxsz, int32_t data, gen_helper_gvec_5 *f= n) { TCGv_ptr a0, a1, a2, a3, a4; - TCGv_i32 desc =3D tcg_const_i32(simd_desc(oprsz, maxsz, data)); + TCGv_i32 desc =3D tcg_constant_i32(simd_desc(oprsz, maxsz, data)); =20 a0 =3D tcg_temp_new_ptr(); a1 =3D tcg_temp_new_ptr(); @@ -230,7 +226,6 @@ void tcg_gen_gvec_5_ool(uint32_t dofs, uint32_t aofs, u= int32_t bofs, tcg_temp_free_ptr(a2); tcg_temp_free_ptr(a3); tcg_temp_free_ptr(a4); - tcg_temp_free_i32(desc); } =20 /* Generate a call to a gvec-style helper with three vector operands @@ -240,7 +235,7 @@ void tcg_gen_gvec_2_ptr(uint32_t dofs, uint32_t aofs, int32_t data, gen_helper_gvec_2_ptr *fn) { TCGv_ptr a0, a1; - TCGv_i32 desc =3D tcg_const_i32(simd_desc(oprsz, maxsz, data)); + TCGv_i32 desc =3D tcg_constant_i32(simd_desc(oprsz, maxsz, data)); =20 a0 =3D tcg_temp_new_ptr(); a1 =3D tcg_temp_new_ptr(); @@ -252,7 +247,6 @@ void tcg_gen_gvec_2_ptr(uint32_t dofs, uint32_t aofs, =20 tcg_temp_free_ptr(a0); tcg_temp_free_ptr(a1); - tcg_temp_free_i32(desc); } =20 /* Generate a call to a gvec-style helper with three vector operands @@ -262,7 +256,7 @@ void tcg_gen_gvec_3_ptr(uint32_t dofs, uint32_t aofs, u= int32_t bofs, int32_t data, gen_helper_gvec_3_ptr *fn) { TCGv_ptr a0, a1, a2; - TCGv_i32 desc =3D tcg_const_i32(simd_desc(oprsz, maxsz, data)); + TCGv_i32 desc =3D tcg_constant_i32(simd_desc(oprsz, maxsz, data)); =20 a0 =3D tcg_temp_new_ptr(); a1 =3D tcg_temp_new_ptr(); @@ -277,7 +271,6 @@ void tcg_gen_gvec_3_ptr(uint32_t dofs, uint32_t aofs, u= int32_t bofs, tcg_temp_free_ptr(a0); tcg_temp_free_ptr(a1); tcg_temp_free_ptr(a2); - tcg_temp_free_i32(desc); } =20 /* Generate a call to a gvec-style helper with four vector operands @@ -288,7 +281,7 @@ void tcg_gen_gvec_4_ptr(uint32_t dofs, uint32_t aofs, u= int32_t bofs, gen_helper_gvec_4_ptr *fn) { TCGv_ptr a0, a1, a2, a3; - TCGv_i32 desc =3D tcg_const_i32(simd_desc(oprsz, maxsz, data)); + TCGv_i32 desc =3D tcg_constant_i32(simd_desc(oprsz, maxsz, data)); =20 a0 =3D tcg_temp_new_ptr(); a1 =3D tcg_temp_new_ptr(); @@ -306,7 +299,6 @@ void tcg_gen_gvec_4_ptr(uint32_t dofs, uint32_t aofs, u= int32_t bofs, tcg_temp_free_ptr(a1); tcg_temp_free_ptr(a2); tcg_temp_free_ptr(a3); - tcg_temp_free_i32(desc); } =20 /* Generate a call to a gvec-style helper with five vector operands @@ -317,7 +309,7 @@ void tcg_gen_gvec_5_ptr(uint32_t dofs, uint32_t aofs, u= int32_t bofs, gen_helper_gvec_5_ptr *fn) { TCGv_ptr a0, a1, a2, a3, a4; - TCGv_i32 desc =3D tcg_const_i32(simd_desc(oprsz, maxsz, data)); + TCGv_i32 desc =3D tcg_constant_i32(simd_desc(oprsz, maxsz, data)); =20 a0 =3D tcg_temp_new_ptr(); a1 =3D tcg_temp_new_ptr(); @@ -338,7 +330,6 @@ void tcg_gen_gvec_5_ptr(uint32_t dofs, uint32_t aofs, u= int32_t bofs, tcg_temp_free_ptr(a2); tcg_temp_free_ptr(a3); tcg_temp_free_ptr(a4); - tcg_temp_free_i32(desc); } =20 /* Return true if we want to implement something of OPRSZ bytes @@ -605,9 +596,9 @@ static void do_dup(unsigned vece, uint32_t dofs, uint32= _t oprsz, || (TCG_TARGET_REG_BITS =3D=3D 64 && (in_c =3D=3D 0 || in_c =3D=3D -1 || !check_size_impl(oprsz, 4)))) { - t_64 =3D tcg_const_i64(in_c); + t_64 =3D tcg_constant_i64(in_c); } else { - t_32 =3D tcg_const_i32(in_c); + t_32 =3D tcg_constant_i32(in_c); } } =20 @@ -648,11 +639,11 @@ static void do_dup(unsigned vece, uint32_t dofs, uint= 32_t oprsz, t_val =3D tcg_temp_new_i32(); tcg_gen_extrl_i64_i32(t_val, in_64); } else { - t_val =3D tcg_const_i32(in_c); + t_val =3D tcg_constant_i32(in_c); } gen_helper_memset(t_ptr, t_ptr, t_val, t_size); =20 - if (!in_32) { + if (in_64) { tcg_temp_free_i32(t_val); } tcg_temp_free_ptr(t_size); @@ -660,15 +651,14 @@ static void do_dup(unsigned vece, uint32_t dofs, uint= 32_t oprsz, return; } =20 - t_desc =3D tcg_const_i32(simd_desc(oprsz, maxsz, 0)); + t_desc =3D tcg_constant_i32(simd_desc(oprsz, maxsz, 0)); =20 if (vece =3D=3D MO_64) { if (in_64) { gen_helper_gvec_dup64(t_ptr, t_desc, in_64); } else { - t_64 =3D tcg_const_i64(in_c); + t_64 =3D tcg_constant_i64(in_c); gen_helper_gvec_dup64(t_ptr, t_desc, t_64); - tcg_temp_free_i64(t_64); } } else { typedef void dup_fn(TCGv_ptr, TCGv_i32, TCGv_i32); @@ -680,24 +670,23 @@ static void do_dup(unsigned vece, uint32_t dofs, uint= 32_t oprsz, =20 if (in_32) { fns[vece](t_ptr, t_desc, in_32); - } else { + } else if (in_64) { t_32 =3D tcg_temp_new_i32(); - if (in_64) { - tcg_gen_extrl_i64_i32(t_32, in_64); - } else if (vece =3D=3D MO_8) { - tcg_gen_movi_i32(t_32, in_c & 0xff); - } else if (vece =3D=3D MO_16) { - tcg_gen_movi_i32(t_32, in_c & 0xffff); - } else { - tcg_gen_movi_i32(t_32, in_c); - } + tcg_gen_extrl_i64_i32(t_32, in_64); fns[vece](t_ptr, t_desc, t_32); tcg_temp_free_i32(t_32); + } else { + if (vece =3D=3D MO_8) { + in_c &=3D 0xff; + } else if (vece =3D=3D MO_16) { + in_c &=3D 0xffff; + } + t_32 =3D tcg_constant_i32(in_c); + fns[vece](t_ptr, t_desc, t_32); } } =20 tcg_temp_free_ptr(t_ptr); - tcg_temp_free_i32(t_desc); return; =20 done: @@ -1247,10 +1236,9 @@ void tcg_gen_gvec_2i(uint32_t dofs, uint32_t aofs, u= int32_t oprsz, if (g->fno) { tcg_gen_gvec_2_ool(dofs, aofs, oprsz, maxsz, c, g->fno); } else { - TCGv_i64 tcg_c =3D tcg_const_i64(c); + TCGv_i64 tcg_c =3D tcg_constant_i64(c); tcg_gen_gvec_2i_ool(dofs, aofs, tcg_c, oprsz, maxsz, c, g->fnoi); - tcg_temp_free_i64(tcg_c); } oprsz =3D maxsz; } @@ -1744,16 +1732,14 @@ static void gen_addv_mask(TCGv_i64 d, TCGv_i64 a, T= CGv_i64 b, TCGv_i64 m) =20 void tcg_gen_vec_add8_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b) { - TCGv_i64 m =3D tcg_const_i64(dup_const(MO_8, 0x80)); + TCGv_i64 m =3D tcg_constant_i64(dup_const(MO_8, 0x80)); gen_addv_mask(d, a, b, m); - tcg_temp_free_i64(m); } =20 void tcg_gen_vec_add16_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b) { - TCGv_i64 m =3D tcg_const_i64(dup_const(MO_16, 0x8000)); + TCGv_i64 m =3D tcg_constant_i64(dup_const(MO_16, 0x8000)); gen_addv_mask(d, a, b, m); - tcg_temp_free_i64(m); } =20 void tcg_gen_vec_add32_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b) @@ -1837,9 +1823,8 @@ void tcg_gen_gvec_adds(unsigned vece, uint32_t dofs, = uint32_t aofs, void tcg_gen_gvec_addi(unsigned vece, uint32_t dofs, uint32_t aofs, int64_t c, uint32_t oprsz, uint32_t maxsz) { - TCGv_i64 tmp =3D tcg_const_i64(c); + TCGv_i64 tmp =3D tcg_constant_i64(c); tcg_gen_gvec_adds(vece, dofs, aofs, tmp, oprsz, maxsz); - tcg_temp_free_i64(tmp); } =20 static const TCGOpcode vecop_list_sub[] =3D { INDEX_op_sub_vec, 0 }; @@ -1897,16 +1882,14 @@ static void gen_subv_mask(TCGv_i64 d, TCGv_i64 a, T= CGv_i64 b, TCGv_i64 m) =20 void tcg_gen_vec_sub8_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b) { - TCGv_i64 m =3D tcg_const_i64(dup_const(MO_8, 0x80)); + TCGv_i64 m =3D tcg_constant_i64(dup_const(MO_8, 0x80)); gen_subv_mask(d, a, b, m); - tcg_temp_free_i64(m); } =20 void tcg_gen_vec_sub16_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b) { - TCGv_i64 m =3D tcg_const_i64(dup_const(MO_16, 0x8000)); + TCGv_i64 m =3D tcg_constant_i64(dup_const(MO_16, 0x8000)); gen_subv_mask(d, a, b, m); - tcg_temp_free_i64(m); } =20 void tcg_gen_vec_sub32_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b) @@ -2017,9 +2000,8 @@ void tcg_gen_gvec_muls(unsigned vece, uint32_t dofs, = uint32_t aofs, void tcg_gen_gvec_muli(unsigned vece, uint32_t dofs, uint32_t aofs, int64_t c, uint32_t oprsz, uint32_t maxsz) { - TCGv_i64 tmp =3D tcg_const_i64(c); + TCGv_i64 tmp =3D tcg_constant_i64(c); tcg_gen_gvec_muls(vece, dofs, aofs, tmp, oprsz, maxsz); - tcg_temp_free_i64(tmp); } =20 void tcg_gen_gvec_ssadd(unsigned vece, uint32_t dofs, uint32_t aofs, @@ -2076,18 +2058,16 @@ void tcg_gen_gvec_sssub(unsigned vece, uint32_t dof= s, uint32_t aofs, =20 static void tcg_gen_usadd_i32(TCGv_i32 d, TCGv_i32 a, TCGv_i32 b) { - TCGv_i32 max =3D tcg_const_i32(-1); + TCGv_i32 max =3D tcg_constant_i32(-1); tcg_gen_add_i32(d, a, b); tcg_gen_movcond_i32(TCG_COND_LTU, d, d, a, max, d); - tcg_temp_free_i32(max); } =20 static void tcg_gen_usadd_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b) { - TCGv_i64 max =3D tcg_const_i64(-1); + TCGv_i64 max =3D tcg_constant_i64(-1); tcg_gen_add_i64(d, a, b); tcg_gen_movcond_i64(TCG_COND_LTU, d, d, a, max, d); - tcg_temp_free_i64(max); } =20 void tcg_gen_gvec_usadd(unsigned vece, uint32_t dofs, uint32_t aofs, @@ -2120,18 +2100,16 @@ void tcg_gen_gvec_usadd(unsigned vece, uint32_t dof= s, uint32_t aofs, =20 static void tcg_gen_ussub_i32(TCGv_i32 d, TCGv_i32 a, TCGv_i32 b) { - TCGv_i32 min =3D tcg_const_i32(0); + TCGv_i32 min =3D tcg_constant_i32(0); tcg_gen_sub_i32(d, a, b); tcg_gen_movcond_i32(TCG_COND_LTU, d, a, b, min, d); - tcg_temp_free_i32(min); } =20 static void tcg_gen_ussub_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b) { - TCGv_i64 min =3D tcg_const_i64(0); + TCGv_i64 min =3D tcg_constant_i64(0); tcg_gen_sub_i64(d, a, b); tcg_gen_movcond_i64(TCG_COND_LTU, d, a, b, min, d); - tcg_temp_free_i64(min); } =20 void tcg_gen_gvec_ussub(unsigned vece, uint32_t dofs, uint32_t aofs, @@ -2292,16 +2270,14 @@ static void gen_negv_mask(TCGv_i64 d, TCGv_i64 b, T= CGv_i64 m) =20 void tcg_gen_vec_neg8_i64(TCGv_i64 d, TCGv_i64 b) { - TCGv_i64 m =3D tcg_const_i64(dup_const(MO_8, 0x80)); + TCGv_i64 m =3D tcg_constant_i64(dup_const(MO_8, 0x80)); gen_negv_mask(d, b, m); - tcg_temp_free_i64(m); } =20 void tcg_gen_vec_neg16_i64(TCGv_i64 d, TCGv_i64 b) { - TCGv_i64 m =3D tcg_const_i64(dup_const(MO_16, 0x8000)); + TCGv_i64 m =3D tcg_constant_i64(dup_const(MO_16, 0x8000)); gen_negv_mask(d, b, m); - tcg_temp_free_i64(m); } =20 void tcg_gen_vec_neg32_i64(TCGv_i64 d, TCGv_i64 b) @@ -2570,9 +2546,8 @@ void tcg_gen_gvec_ands(unsigned vece, uint32_t dofs, = uint32_t aofs, void tcg_gen_gvec_andi(unsigned vece, uint32_t dofs, uint32_t aofs, int64_t c, uint32_t oprsz, uint32_t maxsz) { - TCGv_i64 tmp =3D tcg_const_i64(dup_const(vece, c)); + TCGv_i64 tmp =3D tcg_constant_i64(dup_const(vece, c)); tcg_gen_gvec_2s(dofs, aofs, oprsz, maxsz, tmp, &gop_ands); - tcg_temp_free_i64(tmp); } =20 static const GVecGen2s gop_xors =3D { @@ -2595,9 +2570,8 @@ void tcg_gen_gvec_xors(unsigned vece, uint32_t dofs, = uint32_t aofs, void tcg_gen_gvec_xori(unsigned vece, uint32_t dofs, uint32_t aofs, int64_t c, uint32_t oprsz, uint32_t maxsz) { - TCGv_i64 tmp =3D tcg_const_i64(dup_const(vece, c)); + TCGv_i64 tmp =3D tcg_constant_i64(dup_const(vece, c)); tcg_gen_gvec_2s(dofs, aofs, oprsz, maxsz, tmp, &gop_xors); - tcg_temp_free_i64(tmp); } =20 static const GVecGen2s gop_ors =3D { @@ -2620,9 +2594,8 @@ void tcg_gen_gvec_ors(unsigned vece, uint32_t dofs, u= int32_t aofs, void tcg_gen_gvec_ori(unsigned vece, uint32_t dofs, uint32_t aofs, int64_t c, uint32_t oprsz, uint32_t maxsz) { - TCGv_i64 tmp =3D tcg_const_i64(dup_const(vece, c)); + TCGv_i64 tmp =3D tcg_constant_i64(dup_const(vece, c)); tcg_gen_gvec_2s(dofs, aofs, oprsz, maxsz, tmp, &gop_ors); - tcg_temp_free_i64(tmp); } =20 void tcg_gen_vec_shl8i_i64(TCGv_i64 d, TCGv_i64 a, int64_t c) @@ -3110,9 +3083,9 @@ static void tcg_gen_shlv_mod_vec(unsigned vece, TCGv_= vec d, TCGv_vec a, TCGv_vec b) { TCGv_vec t =3D tcg_temp_new_vec_matching(d); + TCGv_vec m =3D tcg_constant_vec_matching(d, vece, (8 << vece) - 1); =20 - tcg_gen_dupi_vec(vece, t, (8 << vece) - 1); - tcg_gen_and_vec(vece, t, t, b); + tcg_gen_and_vec(vece, t, b, m); tcg_gen_shlv_vec(vece, d, a, t); tcg_temp_free_vec(t); } @@ -3173,9 +3146,9 @@ static void tcg_gen_shrv_mod_vec(unsigned vece, TCGv_= vec d, TCGv_vec a, TCGv_vec b) { TCGv_vec t =3D tcg_temp_new_vec_matching(d); + TCGv_vec m =3D tcg_constant_vec_matching(d, vece, (8 << vece) - 1); =20 - tcg_gen_dupi_vec(vece, t, (8 << vece) - 1); - tcg_gen_and_vec(vece, t, t, b); + tcg_gen_and_vec(vece, t, b, m); tcg_gen_shrv_vec(vece, d, a, t); tcg_temp_free_vec(t); } @@ -3236,9 +3209,9 @@ static void tcg_gen_sarv_mod_vec(unsigned vece, TCGv_= vec d, TCGv_vec a, TCGv_vec b) { TCGv_vec t =3D tcg_temp_new_vec_matching(d); + TCGv_vec m =3D tcg_constant_vec_matching(d, vece, (8 << vece) - 1); =20 - tcg_gen_dupi_vec(vece, t, (8 << vece) - 1); - tcg_gen_and_vec(vece, t, t, b); + tcg_gen_and_vec(vece, t, b, m); tcg_gen_sarv_vec(vece, d, a, t); tcg_temp_free_vec(t); } @@ -3299,9 +3272,9 @@ static void tcg_gen_rotlv_mod_vec(unsigned vece, TCGv= _vec d, TCGv_vec a, TCGv_vec b) { TCGv_vec t =3D tcg_temp_new_vec_matching(d); + TCGv_vec m =3D tcg_constant_vec_matching(d, vece, (8 << vece) - 1); =20 - tcg_gen_dupi_vec(vece, t, (8 << vece) - 1); - tcg_gen_and_vec(vece, t, t, b); + tcg_gen_and_vec(vece, t, b, m); tcg_gen_rotlv_vec(vece, d, a, t); tcg_temp_free_vec(t); } @@ -3358,9 +3331,9 @@ static void tcg_gen_rotrv_mod_vec(unsigned vece, TCGv= _vec d, TCGv_vec a, TCGv_vec b) { TCGv_vec t =3D tcg_temp_new_vec_matching(d); + TCGv_vec m =3D tcg_constant_vec_matching(d, vece, (8 << vece) - 1); =20 - tcg_gen_dupi_vec(vece, t, (8 << vece) - 1); - tcg_gen_and_vec(vece, t, t, b); + tcg_gen_and_vec(vece, t, b, m); tcg_gen_rotrv_vec(vece, d, a, t); tcg_temp_free_vec(t); } diff --git a/tcg/tcg.c b/tcg/tcg.c index ad1348d811..1cadfe070c 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -1474,6 +1474,14 @@ TCGv_vec tcg_constant_vec(TCGType type, unsigned vec= e, int64_t val) return temp_tcgv_vec(tcg_constant_internal(type, val)); } =20 +TCGv_vec tcg_constant_vec_matching(TCGv_vec match, unsigned vece, int64_t = val) +{ + TCGTemp *t =3D tcgv_vec_temp(match); + + tcg_debug_assert(t->temp_allocated !=3D 0); + return tcg_constant_vec(t->base_type, vece, val); +} + TCGv_i32 tcg_const_i32(int32_t val) { TCGv_i32 t0; --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386977; cv=none; d=zohomail.com; s=zohoarc; b=NNBUO6fVsz7pBc4He03CdEKGwlm/75unr1M6S70xLuuykdrnSpFYjUapbscu+c1Syy9qg1OUO5IciIP6w2JCR5C0EobgnxOB5UV3oa1T0U9kmmyugcm7AqYfGdDuivvHz5csSTqiDQQ5ximD79Ko/HQeCHzdaXqEi8OG5zVWxt4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386977; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Hx+ccawlJdzu7GbQDl+NdiAx6KUHgVaeD5cM1vlFohs=; b=Nj/1RQEaGqai3BsUOtXsxrw9qQippbrIELbaRUIuZGm4qWEimEBWaUQVliNbQU83jT0jQhuJ8MwQMAI3xOwTeynVpF9P4gKGPrIDXWD87mmyeThiv9A2hiYeS7cGdX7g5GDOhHiRqutzKLuyHuyS/RHBSdPAPhJKFZELopHpL4s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610386977815556.7963221993924; Mon, 11 Jan 2021 09:42:57 -0800 (PST) Received: from localhost ([::1]:58686 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz1DU-0002Cd-Eq for importer@patchew.org; Mon, 11 Jan 2021 12:42:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51928) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rs-0003Mt-93 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:37 -0500 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]:40220) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0re-0000DF-H0 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:34 -0500 Received: by mail-pj1-x102e.google.com with SMTP id m5so10973089pjv.5 for ; Mon, 11 Jan 2021 09:20:18 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Hx+ccawlJdzu7GbQDl+NdiAx6KUHgVaeD5cM1vlFohs=; b=wobriLJzJ6gfevHbCw3GrQRYWeV07F1rVS4DNcjigW5gLPbUrURgrqOhabaaLzcCg2 hzFmiNSKeV+iD5uPGMBvGMsEvShThPPhjho3X3/KMIvw17mi975bCgzSkMpmYzuVB8j7 8Z+Mq01NTxajNjx/WsI6fy/wh8Gu6HljqWyjddc03n6vzKP+Tcgk9408DmtDd5G9cTAt 6y73GKGSD+/j9MmoVoU2xWqucKEolLLJRayn6FwJnc/hi++S362l1JiiwCksow69JfTh gS0BomZ0kPXKeJTxrrhYvC+XbdIMSnUQYpJcumtzD5SoO39a0bk5N7WMZ8NjW5dxMqjI zp6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Hx+ccawlJdzu7GbQDl+NdiAx6KUHgVaeD5cM1vlFohs=; b=FiQu8fpeJbDUTrt8PvPpd05Pf6V0rhiSjw9ybwdJCGXxJvue6YmUNq+BXB2yU0lyX6 et9UqErmOFy7WjVmJz132aARSvDQ3/0OFohbQeyKu4bgxYuvjOGbqsxoA+YlCXoyHUnI cXA0SaJsxt3WKHuC9o6gT/3H8TKWhRRlPc44CpSwMvfAeP5c0RlsA6egAxf3S+hiy5P2 A0Kez/C9QcQkFLVnnKNHduvmCgwyVttZ/HWfjsf5131CX6PIDAa1YrrsUgVkY3EhYSf9 JO2II94cL5OSVGxDF9tOblqm7mSI+GaXttmX1N04VDSGjHviM98U/+/NZDGsWz/FBP9v Y0dA== X-Gm-Message-State: AOAM530g+Ct293FXpJDYiCaCJ8+xAbVHLNtLWpp5jdA/V4Sutq4CWZwq JRtD+UbD/yl+8ztOS2jd7b1NS3qAyK8HdQ== X-Google-Smtp-Source: ABdhPJwNMbqFDV/xvBTnxoi9AZqEGCSnjK6uLYhPPFaf0pmvkum5elEKP7fNmPpx++6y2RaV7Ktngw== X-Received: by 2002:a17:902:694c:b029:da:afba:beab with SMTP id k12-20020a170902694cb02900daafbabeabmr339412plt.32.1610385617728; Mon, 11 Jan 2021 09:20:17 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 17/23] tcg/tci: Add special tci_movi_{i32,i64} opcodes Date: Mon, 11 Jan 2021 07:19:40 -1000 Message-Id: <20210111171946.219469-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) The normal movi opcodes are going away. We need something for TCI to use internally. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- include/tcg/tcg-opc.h | 8 ++++++++ tcg/tci.c | 4 ++-- tcg/tci/tcg-target.c.inc | 4 ++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/include/tcg/tcg-opc.h b/include/tcg/tcg-opc.h index 70a76646c4..43711634f6 100644 --- a/include/tcg/tcg-opc.h +++ b/include/tcg/tcg-opc.h @@ -278,6 +278,14 @@ DEF(last_generic, 0, 0, 0, TCG_OPF_NOT_PRESENT) #include "tcg-target.opc.h" #endif =20 +#ifdef TCG_TARGET_INTERPRETER +/* These opcodes are only for use between the tci generator and interprete= r. */ +DEF(tci_movi_i32, 1, 0, 1, TCG_OPF_NOT_PRESENT) +#if TCG_TARGET_REG_BITS =3D=3D 64 +DEF(tci_movi_i64, 1, 0, 1, TCG_OPF_64BIT | TCG_OPF_NOT_PRESENT) +#endif +#endif + #undef TLADDR_ARGS #undef DATA64_ARGS #undef IMPL diff --git a/tcg/tci.c b/tcg/tci.c index 2bcc4409be..2311aa7d3a 100644 --- a/tcg/tci.c +++ b/tcg/tci.c @@ -593,7 +593,7 @@ uintptr_t QEMU_DISABLE_CFI tcg_qemu_tb_exec(CPUArchStat= e *env, t1 =3D tci_read_r32(regs, &tb_ptr); tci_write_reg32(regs, t0, t1); break; - case INDEX_op_movi_i32: + case INDEX_op_tci_movi_i32: t0 =3D *tb_ptr++; t1 =3D tci_read_i32(&tb_ptr); tci_write_reg32(regs, t0, t1); @@ -864,7 +864,7 @@ uintptr_t QEMU_DISABLE_CFI tcg_qemu_tb_exec(CPUArchStat= e *env, t1 =3D tci_read_r64(regs, &tb_ptr); tci_write_reg64(regs, t0, t1); break; - case INDEX_op_movi_i64: + case INDEX_op_tci_movi_i64: t0 =3D *tb_ptr++; t1 =3D tci_read_i64(&tb_ptr); tci_write_reg64(regs, t0, t1); diff --git a/tcg/tci/tcg-target.c.inc b/tcg/tci/tcg-target.c.inc index d5a4d9d37c..e9e5f94c04 100644 --- a/tcg/tci/tcg-target.c.inc +++ b/tcg/tci/tcg-target.c.inc @@ -529,13 +529,13 @@ static void tcg_out_movi(TCGContext *s, TCGType type, uint8_t *old_code_ptr =3D s->code_ptr; uint32_t arg32 =3D arg; if (type =3D=3D TCG_TYPE_I32 || arg =3D=3D arg32) { - tcg_out_op_t(s, INDEX_op_movi_i32); + tcg_out_op_t(s, INDEX_op_tci_movi_i32); tcg_out_r(s, t0); tcg_out32(s, arg32); } else { tcg_debug_assert(type =3D=3D TCG_TYPE_I64); #if TCG_TARGET_REG_BITS =3D=3D 64 - tcg_out_op_t(s, INDEX_op_movi_i64); + tcg_out_op_t(s, INDEX_op_tci_movi_i64); tcg_out_r(s, t0); tcg_out64(s, arg); #else --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386801; cv=none; d=zohomail.com; s=zohoarc; b=HHhYknAxp2x0a9VAz7UHaK6Fh6LZAzNwFQf0YfDYbHyq15ILu9X1fi0pc4dyeawlshfmjhtIxdSzQEoM3JGLNKros73LO8H6afsv2seaU18JyGR6/FSfNy0kARRmsb6jQVQgahohJypk2ZL8ll82WXYxR3xMsyP/RRg5tn/bYNg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386801; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=PUT18bxTLpzRRRoEviVs6pgnmvprIFhDnDdP6GN/+R0=; b=IwJJNJcRAm1K6HLg+eFoC5i7KBTNmlrKTQ+P6ZG6w7KhLgWX1Hloe2QRt8mAF0g3Lad+BPANv1NWdBQG8GdxaGrt9hUNgE9HrgPv9HVDEnZvf4vCz/G8OBJZ4rpZd/TqK/kE6LF1JXwMm8smj8flnVI2ZRv6eiV0MaDvEVvno9w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=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 1610386801031192.84311003289417; Mon, 11 Jan 2021 09:40:01 -0800 (PST) Received: from localhost ([::1]:47088 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz1Ad-0005eK-Q7 for importer@patchew.org; Mon, 11 Jan 2021 12:39:59 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51850) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rj-0003Jq-8V for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:27 -0500 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]:40739) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0re-0000ET-Gl for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:27 -0500 Received: by mail-pl1-x634.google.com with SMTP id q4so177969plr.7 for ; Mon, 11 Jan 2021 09:20:20 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PUT18bxTLpzRRRoEviVs6pgnmvprIFhDnDdP6GN/+R0=; b=uVobjYbkRgyuKUjqa4s3rP6gQ+hJ//IpWBY60PSAztZEA3RdISdtov3Mzfpk8FMW9P T2izSzfBlsPClxkKvInlVVfNlUSjo23Nxu2OEowYQiQv0TuJs2Ttvi/IH36GdEpF4lUe Fv6P2tQww1JIuJCwn6lA/y0VRqQeaC5dSP4XELxq8vXtj5DDKl3jxsim9300+EdvISl7 oh7pw1iBTfLetprSug9ucTG1tAZmv7+ojd1Ic0/H70RwK1vG8CPasEjHC9fHiIaj1u3N xA3hKWloldFyvYjpYL9nOFzijGjSGWuPDL1CyPmT+PZixB/DnGxQtylF1BJJj9gczTSG RoKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=PUT18bxTLpzRRRoEviVs6pgnmvprIFhDnDdP6GN/+R0=; b=dz8GKtfFD/iSTmm9HlhmPfGvyd5uJ/yCHp10m1+Rc3Ts+48LCz9TOH7/4FDiiWppMs /TygJCDV1DduJ+8sDDUAUp6kt8iunuYMS89esrOzv6kurOJ5f+UCLjjyX/+ndPbYs7F8 /vW0qQWEkcVtoo+yHVeYZ3XVMacTF1jAtJcoTvXdJqLH0cpU+xRKx2qeq7ROX6duQmKE G4CMfjqWu5Hr8wFDlfJLxrLlMoM6wz4wlcdvE4iS7J5vLH7L8es8ji5l328nvxQkg0qz FKYnLDEr6as9RXyIH3HKfPshU1rPzaqhoNqbOTpvODVOULI9wNdUZwtPDYo3PkzFTrKk cmNA== X-Gm-Message-State: AOAM530Zlu1D6vrAbyLjp7kvXRICFdGy2rsRXPW0rJPrDwMT9dys3GSh UX1E88+tfQdLHXFSID87A1MX4Ri07eKAuw== X-Google-Smtp-Source: ABdhPJzcDsHrP46ZY7QsSVCdDu9amuIE5Q5+KBfEJJkp7KUiPKTm3RQI8Q3sbHcdKaJxkjqz57duIQ== X-Received: by 2002:a17:902:9005:b029:da:f580:c5f7 with SMTP id a5-20020a1709029005b02900daf580c5f7mr702446plp.85.1610385619663; Mon, 11 Jan 2021 09:20:19 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 18/23] tcg: Remove movi and dupi opcodes Date: Mon, 11 Jan 2021 07:19:41 -1000 Message-Id: <20210111171946.219469-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::634; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x634.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Aleksandar Markovic , =?UTF-8?q?Alex=20Benn=C3=A9e?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) These are now completely covered by mov from a TYPE_CONST temporary. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Aleksandar Markovic Signed-off-by: Richard Henderson --- include/tcg/tcg-opc.h | 3 --- tcg/optimize.c | 4 ---- tcg/tcg-op-vec.c | 1 - tcg/tcg.c | 18 +----------------- tcg/aarch64/tcg-target.c.inc | 3 --- tcg/arm/tcg-target.c.inc | 1 - tcg/i386/tcg-target.c.inc | 3 --- tcg/mips/tcg-target.c.inc | 2 -- tcg/ppc/tcg-target.c.inc | 3 --- tcg/riscv/tcg-target.c.inc | 2 -- tcg/s390/tcg-target.c.inc | 2 -- tcg/sparc/tcg-target.c.inc | 2 -- tcg/tci/tcg-target.c.inc | 2 -- 13 files changed, 1 insertion(+), 45 deletions(-) diff --git a/include/tcg/tcg-opc.h b/include/tcg/tcg-opc.h index 43711634f6..900984c005 100644 --- a/include/tcg/tcg-opc.h +++ b/include/tcg/tcg-opc.h @@ -45,7 +45,6 @@ DEF(br, 0, 0, 1, TCG_OPF_BB_END) DEF(mb, 0, 0, 1, 0) =20 DEF(mov_i32, 1, 1, 0, TCG_OPF_NOT_PRESENT) -DEF(movi_i32, 1, 0, 1, TCG_OPF_NOT_PRESENT) DEF(setcond_i32, 1, 2, 1, 0) DEF(movcond_i32, 1, 4, 1, IMPL(TCG_TARGET_HAS_movcond_i32)) /* load/store */ @@ -111,7 +110,6 @@ DEF(ctz_i32, 1, 2, 0, IMPL(TCG_TARGET_HAS_ctz_i32)) DEF(ctpop_i32, 1, 1, 0, IMPL(TCG_TARGET_HAS_ctpop_i32)) =20 DEF(mov_i64, 1, 1, 0, TCG_OPF_64BIT | TCG_OPF_NOT_PRESENT) -DEF(movi_i64, 1, 0, 1, TCG_OPF_64BIT | TCG_OPF_NOT_PRESENT) DEF(setcond_i64, 1, 2, 1, IMPL64) DEF(movcond_i64, 1, 4, 1, IMPL64 | IMPL(TCG_TARGET_HAS_movcond_i64)) /* load/store */ @@ -221,7 +219,6 @@ DEF(qemu_st8_i32, 0, TLADDR_ARGS + 1, 1, #define IMPLVEC TCG_OPF_VECTOR | IMPL(TCG_TARGET_MAYBE_vec) =20 DEF(mov_vec, 1, 1, 0, TCG_OPF_VECTOR | TCG_OPF_NOT_PRESENT) -DEF(dupi_vec, 1, 0, 1, TCG_OPF_VECTOR | TCG_OPF_NOT_PRESENT) =20 DEF(dup_vec, 1, 1, 0, IMPLVEC) DEF(dup2_vec, 1, 2, 0, IMPLVEC | IMPL(TCG_TARGET_REG_BITS =3D=3D 32)) diff --git a/tcg/optimize.c b/tcg/optimize.c index dbb03ef96b..37c902283e 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -1103,10 +1103,6 @@ void tcg_optimize(TCGContext *s) CASE_OP_32_64_VEC(mov): tcg_opt_gen_mov(s, op, op->args[0], op->args[1]); break; - CASE_OP_32_64(movi): - case INDEX_op_dupi_vec: - tcg_opt_gen_movi(s, &temps_used, op, op->args[0], op->args[1]); - break; =20 case INDEX_op_dup_vec: if (arg_is_const(op->args[1])) { diff --git a/tcg/tcg-op-vec.c b/tcg/tcg-op-vec.c index 9fbed1366c..ce0d2f6e0e 100644 --- a/tcg/tcg-op-vec.c +++ b/tcg/tcg-op-vec.c @@ -83,7 +83,6 @@ bool tcg_can_emit_vecop_list(const TCGOpcode *list, case INDEX_op_xor_vec: case INDEX_op_mov_vec: case INDEX_op_dup_vec: - case INDEX_op_dupi_vec: case INDEX_op_dup2_vec: case INDEX_op_ld_vec: case INDEX_op_st_vec: diff --git a/tcg/tcg.c b/tcg/tcg.c index 1cadfe070c..5b0e42be91 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -1564,7 +1564,6 @@ bool tcg_op_supported(TCGOpcode op) return TCG_TARGET_HAS_goto_ptr; =20 case INDEX_op_mov_i32: - case INDEX_op_movi_i32: case INDEX_op_setcond_i32: case INDEX_op_brcond_i32: case INDEX_op_ld8u_i32: @@ -1658,7 +1657,6 @@ bool tcg_op_supported(TCGOpcode op) return TCG_TARGET_REG_BITS =3D=3D 32; =20 case INDEX_op_mov_i64: - case INDEX_op_movi_i64: case INDEX_op_setcond_i64: case INDEX_op_brcond_i64: case INDEX_op_ld8u_i64: @@ -1764,7 +1762,6 @@ bool tcg_op_supported(TCGOpcode op) =20 case INDEX_op_mov_vec: case INDEX_op_dup_vec: - case INDEX_op_dupi_vec: case INDEX_op_dupm_vec: case INDEX_op_ld_vec: case INDEX_op_st_vec: @@ -3670,7 +3667,7 @@ static void tcg_reg_alloc_cbranch(TCGContext *s, TCGR= egSet allocated_regs) } =20 /* - * Specialized code generation for INDEX_op_movi_*. + * Specialized code generation for INDEX_op_mov_* with a constant. */ static void tcg_reg_alloc_do_movi(TCGContext *s, TCGTemp *ots, tcg_target_ulong val, TCGLifeData arg_li= fe, @@ -3693,14 +3690,6 @@ static void tcg_reg_alloc_do_movi(TCGContext *s, TCG= Temp *ots, } } =20 -static void tcg_reg_alloc_movi(TCGContext *s, const TCGOp *op) -{ - TCGTemp *ots =3D arg_temp(op->args[0]); - tcg_target_ulong val =3D op->args[1]; - - tcg_reg_alloc_do_movi(s, ots, val, op->life, op->output_pref[0]); -} - /* * Specialized code generation for INDEX_op_mov_*. */ @@ -4481,11 +4470,6 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb) case INDEX_op_mov_vec: tcg_reg_alloc_mov(s, op); break; - case INDEX_op_movi_i32: - case INDEX_op_movi_i64: - case INDEX_op_dupi_vec: - tcg_reg_alloc_movi(s, op); - break; case INDEX_op_dup_vec: tcg_reg_alloc_dup(s, op); break; diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc index be6d3ea2a8..e370b7e61c 100644 --- a/tcg/aarch64/tcg-target.c.inc +++ b/tcg/aarch64/tcg-target.c.inc @@ -2257,8 +2257,6 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, =20 case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i64: - case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */ - case INDEX_op_movi_i64: case INDEX_op_call: /* Always emitted via tcg_out_call. */ default: g_assert_not_reached(); @@ -2466,7 +2464,6 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode o= pc, break; =20 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. */ default: g_assert_not_reached(); diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc index 0fd1126454..c2b26b3c45 100644 --- a/tcg/arm/tcg-target.c.inc +++ b/tcg/arm/tcg-target.c.inc @@ -2068,7 +2068,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcod= e opc, break; =20 case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ - case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */ case INDEX_op_call: /* Always emitted via tcg_out_call. */ default: tcg_abort(); diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc index 9f81e11773..1706b7c776 100644 --- a/tcg/i386/tcg-target.c.inc +++ b/tcg/i386/tcg-target.c.inc @@ -2666,8 +2666,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcod= e opc, break; case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i64: - case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */ - case INDEX_op_movi_i64: case INDEX_op_call: /* Always emitted via tcg_out_call. */ default: tcg_abort(); @@ -2953,7 +2951,6 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode o= pc, break; =20 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. */ default: g_assert_not_reached(); diff --git a/tcg/mips/tcg-target.c.inc b/tcg/mips/tcg-target.c.inc index add157f6c3..7293169ab2 100644 --- a/tcg/mips/tcg-target.c.inc +++ b/tcg/mips/tcg-target.c.inc @@ -2141,8 +2141,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcod= e opc, break; case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i64: - case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */ - case INDEX_op_movi_i64: case INDEX_op_call: /* Always emitted via tcg_out_call. */ default: tcg_abort(); diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc index d00ec20203..1fbb1b6db0 100644 --- a/tcg/ppc/tcg-target.c.inc +++ b/tcg/ppc/tcg-target.c.inc @@ -2977,8 +2977,6 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, = const TCGArg *args, =20 case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i64: - case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */ - case INDEX_op_movi_i64: case INDEX_op_call: /* Always emitted via tcg_out_call. */ default: tcg_abort(); @@ -3326,7 +3324,6 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode o= pc, return; =20 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. */ default: g_assert_not_reached(); diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc index c60b91ba58..71c0badc02 100644 --- a/tcg/riscv/tcg-target.c.inc +++ b/tcg/riscv/tcg-target.c.inc @@ -1563,8 +1563,6 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, =20 case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i64: - case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */ - case INDEX_op_movi_i64: case INDEX_op_call: /* Always emitted via tcg_out_call. */ default: g_assert_not_reached(); diff --git a/tcg/s390/tcg-target.c.inc b/tcg/s390/tcg-target.c.inc index d7ef079055..8517e55232 100644 --- a/tcg/s390/tcg-target.c.inc +++ b/tcg/s390/tcg-target.c.inc @@ -2295,8 +2295,6 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcod= e opc, =20 case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i64: - case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */ - case INDEX_op_movi_i64: case INDEX_op_call: /* Always emitted via tcg_out_call. */ default: tcg_abort(); diff --git a/tcg/sparc/tcg-target.c.inc b/tcg/sparc/tcg-target.c.inc index 922ae96481..28b5b6559a 100644 --- a/tcg/sparc/tcg-target.c.inc +++ b/tcg/sparc/tcg-target.c.inc @@ -1586,8 +1586,6 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, =20 case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i64: - case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */ - case INDEX_op_movi_i64: case INDEX_op_call: /* Always emitted via tcg_out_call. */ default: tcg_abort(); diff --git a/tcg/tci/tcg-target.c.inc b/tcg/tci/tcg-target.c.inc index e9e5f94c04..15981265db 100644 --- a/tcg/tci/tcg-target.c.inc +++ b/tcg/tci/tcg-target.c.inc @@ -814,8 +814,6 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, co= nst TCGArg *args, break; case INDEX_op_mov_i32: /* Always emitted via tcg_out_mov. */ case INDEX_op_mov_i64: - case INDEX_op_movi_i32: /* Always emitted via tcg_out_movi. */ - case INDEX_op_movi_i64: case INDEX_op_call: /* Always emitted via tcg_out_call. */ default: tcg_abort(); --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386938; cv=none; d=zohomail.com; s=zohoarc; b=mn50rrS4Dg50evf4lzq0KdOv9PKjCv1P7eGsUCD4ogChAUyP81S3ho0wfsQwlIglo5BfliZI8CnHOtt+Crvtqcn5w/1T2yb8wJCpP6zGHpTghxO8CLFcOSWPSVcyVOnZJaWqoTLm4WSqLtIZ3gX7K+xQ8rbZZxBAe0rGWTjLbfY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386938; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=rT+Iuuo6F5MmSbW+tCwYHH0uffarzjIWxAQZUPXloBE=; b=XttxQFRAXNJgcznhqpb81yeRaUI6+0F6agoPs2U6FNuMerq9hcAvpnT84zDKXthw/G4SX3X/arFRouuYP8XrAZFavb2a1onBIcG+2jXqHs2KPCUKc+eOyeZlrP9N57FhcPFUqSWrHYFJ6dBSx124Q81SsMsyLDaR4spXqv5msbE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610386938606994.3232520713743; Mon, 11 Jan 2021 09:42:18 -0800 (PST) Received: from localhost ([::1]:55978 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz1Cr-00013N-DF for importer@patchew.org; Mon, 11 Jan 2021 12:42:17 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51876) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rk-0003Lk-Sd for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:28 -0500 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]:52997) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0re-0000Fp-S3 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:28 -0500 Received: by mail-pj1-x102b.google.com with SMTP id v1so8191326pjr.2 for ; Mon, 11 Jan 2021 09:20:22 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=rT+Iuuo6F5MmSbW+tCwYHH0uffarzjIWxAQZUPXloBE=; b=dln7UCaTm+XQuSJ4RaOPH9maRuDzhGxjmSfgxt/nTJsmgbOGvNmRIkSVOpiujs5DP5 XHZ9PwQaEKlYZvnmPfu8xoPuIpKkUVcBn7x5dZedaN1KYXrVUczbMHAFgcQh+5LsEjvg oXC4FgpPHB8z6/LBijKetSYAS2k4xcRiT02/tJB/XmeD3g26AnZNrwCYER7qU5su3IXb 3zLaoShlNALxp2I66iHz+8I51t9pGw1VIllkypu+SvM3WYbfswChEJjLWjHAJfehdtOn A4W84vW79ISGu/418WOkbtELAJavr7nSFoVS6XRZAoBPY/xujuq87uyDZW7kqt8sziuH hj/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rT+Iuuo6F5MmSbW+tCwYHH0uffarzjIWxAQZUPXloBE=; b=OU17wYu31WF/y4SnBAptx6fbWNqz9NsvTZMw+xeuFqJ0ji9NoJM5PzPJ8r564YcHur t1jj3nvyPmWocp6CyA4TknmXKqpDZ3bXNE7jIBU4ZEw0L/6M23DlYTmJbjATwjlaGDQD 0EkYEalLRiqW1DX1koMw38qfqLDTtsxhvDQBICo7ZYKaqh/6nHPxtSLUCOWsxdN3hJWc ibFaoGDlKWkTi5VvJtaT5PBL+QzOb1cpTA5etLFxfrwkXtQANP/lW25etLJaYIh4kHGN jPM7pjS8+HTm6ozplz4z/DPkfFKKgd+k8PUpeGYy0OW4fj3Pn1GKwoeprY+vvhkvaLI/ qMwA== X-Gm-Message-State: AOAM530jHY/hhIc2zLl9V2EpTz2B3WZnL9phAAKVAX0V9mjoBYEyp1QR z2IkeRKOqW8UWXG/G8z3rO14MRpY4hAmJQ== X-Google-Smtp-Source: ABdhPJzfBfnR0Lh5sBKliFVHLh3VM+lAfBTH1E5cjzRl5CZQU+iZVxKqWjKFKVBA3kDt9gLZfODozw== X-Received: by 2002:a17:902:b781:b029:db:e4ee:b8c7 with SMTP id e1-20020a170902b781b02900dbe4eeb8c7mr703302pls.69.1610385621193; Mon, 11 Jan 2021 09:20:21 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 19/23] tcg: Add tcg_reg_alloc_dup2 Date: Mon, 11 Jan 2021 07:19:42 -1000 Message-Id: <20210111171946.219469-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102b; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" There are several ways we can expand a vector dup of a 64-bit element on a 32-bit host. Signed-off-by: Richard Henderson --- tcg/tcg.c | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/tcg/tcg.c b/tcg/tcg.c index 5b0e42be91..8f8badb61c 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -4084,6 +4084,98 @@ static void tcg_reg_alloc_op(TCGContext *s, const TC= GOp *op) } } =20 +static bool tcg_reg_alloc_dup2(TCGContext *s, const TCGOp *op) +{ + const TCGLifeData arg_life =3D op->life; + TCGTemp *ots, *itsl, *itsh; + TCGType vtype =3D TCGOP_VECL(op) + TCG_TYPE_V64; + + /* This opcode is only valid for 32-bit hosts, for 64-bit elements. */ + tcg_debug_assert(TCG_TARGET_REG_BITS =3D=3D 32); + tcg_debug_assert(TCGOP_VECE(op) =3D=3D MO_64); + + ots =3D arg_temp(op->args[0]); + itsl =3D arg_temp(op->args[1]); + itsh =3D arg_temp(op->args[2]); + + /* ENV should not be modified. */ + tcg_debug_assert(!temp_readonly(ots)); + + /* Allocate the output register now. */ + if (ots->val_type !=3D TEMP_VAL_REG) { + TCGRegSet allocated_regs =3D s->reserved_regs; + TCGRegSet dup_out_regs =3D + tcg_op_defs[INDEX_op_dup_vec].args_ct[0].regs; + + /* Make sure to not spill the input registers. */ + if (!IS_DEAD_ARG(1) && itsl->val_type =3D=3D TEMP_VAL_REG) { + tcg_regset_set_reg(allocated_regs, itsl->reg); + } + if (!IS_DEAD_ARG(2) && itsh->val_type =3D=3D TEMP_VAL_REG) { + tcg_regset_set_reg(allocated_regs, itsh->reg); + } + + ots->reg =3D tcg_reg_alloc(s, dup_out_regs, allocated_regs, + op->output_pref[0], ots->indirect_base); + ots->val_type =3D TEMP_VAL_REG; + ots->mem_coherent =3D 0; + s->reg_to_temp[ots->reg] =3D ots; + } + + /* Promote dup2 of immediates to dupi_vec. */ + if (itsl->val_type =3D=3D TEMP_VAL_CONST && itsh->val_type =3D=3D TEMP= _VAL_CONST) { + uint64_t val =3D deposit64(itsl->val, 32, 32, itsh->val); + MemOp vece =3D MO_64; + + if (val =3D=3D dup_const(MO_8, val)) { + vece =3D MO_8; + } else if (val =3D=3D dup_const(MO_16, val)) { + vece =3D MO_16; + } else if (val =3D=3D dup_const(MO_32, val)) { + vece =3D MO_32; + } + + tcg_out_dupi_vec(s, vtype, vece, ots->reg, val); + goto done; + } + + /* If the two inputs form one 64-bit value, try dupm_vec. */ + if (itsl + 1 =3D=3D itsh && itsl->base_type =3D=3D TCG_TYPE_I64) { + if (!itsl->mem_coherent) { + temp_sync(s, itsl, s->reserved_regs, 0, 0); + } + if (!itsh->mem_coherent) { + temp_sync(s, itsh, s->reserved_regs, 0, 0); + } +#ifdef HOST_WORDS_BIGENDIAN + TCGTemp *its =3D itsh; +#else + TCGTemp *its =3D itsl; +#endif + if (tcg_out_dupm_vec(s, vtype, MO_64, ots->reg, + its->mem_base->reg, its->mem_offset)) { + goto done; + } + } + + /* Fall back to generic expansion. */ + return false; + + done: + if (IS_DEAD_ARG(1)) { + temp_dead(s, itsl); + } + if (IS_DEAD_ARG(2)) { + temp_dead(s, itsh); + } + if (NEED_SYNC_ARG(0)) { + temp_sync(s, ots, s->reserved_regs, 0, IS_DEAD_ARG(0)); + } else if (IS_DEAD_ARG(0)) { + temp_dead(s, ots); + } + return true; +} + #ifdef TCG_TARGET_STACK_GROWSUP #define STACK_DIR(x) (-(x)) #else @@ -4501,6 +4593,11 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb) case INDEX_op_call: tcg_reg_alloc_call(s, op); break; + case INDEX_op_dup2_vec: + if (tcg_reg_alloc_dup2(s, op)) { + break; + } + /* fall through */ default: /* Sanity check that we've not introduced any unhandled opcode= s. */ tcg_debug_assert(tcg_op_supported(opc)); --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610387117; cv=none; d=zohomail.com; s=zohoarc; b=PEAU5fzBVPgQZOZb2Yu62N5sFnvsXKDTyflQlKtiitZI1t+pPQiXwyQXUvu0XYUf/rlKEt/eMwQbDZJWXmSUnQdsLd1NfE6gT+WgBINpOM9bZaZ4CyOlnLQNC7zmHfp8RHTq60/6dC3RGw2SU2ieaTZBDDLupG4BcLJijRuHCCs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610387117; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=n4Y1AVJg0zWvq5Giznzup81YTmaTrkJ+QjTkRk5gpqc=; b=m8oo5muHT5Xhn+Z91V/tZobRcj73/QKNCBNftd/H4hqb3ezrCDA37x7jFfMPoHDOFPW6/kN+JNXcPhesCC7Uxl3Iu4TYwFPQYCl9I3gc9NzwNfRO5F0Peio6Y52kk7YRWvqrc2Fj3tTzGSQxUX8PgZLbmR3M0qlp90fpxGcATzM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610387117451566.3269450789653; Mon, 11 Jan 2021 09:45:17 -0800 (PST) Received: from localhost ([::1]:36910 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz1Fk-000552-2C for importer@patchew.org; Mon, 11 Jan 2021 12:45:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51948) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rt-0003N7-P7 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:42 -0500 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]:33516) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rg-0000Kz-QP for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:37 -0500 Received: by mail-pg1-x52b.google.com with SMTP id n25so109528pgb.0 for ; Mon, 11 Jan 2021 09:20:24 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n4Y1AVJg0zWvq5Giznzup81YTmaTrkJ+QjTkRk5gpqc=; b=HRfb0utnJtM/NFaTQB2eQrNyKgKz149OKWFVJqlcwbhAhWeLovTP78Oe0fwfGPHjeL 6XY28n1cY1Hnabm8DQJ5Z3BrLZ8UAC61WBB5Ez61gfxoCCIhNnuLMHzISc0pG4s3gm6r y0LwaXDzmSdA7pMWdfQgrtcIy3VA9eUtvBg80+Xr7cjC1AX94vOcginFKBCNa705fy93 jUjCLef4p6wZJu1cnhPs5KMsmKacCBCVSO6xY/+4scIZ59j2c1Hl5oQDillejCzy/4RX npa3jht3lAvsBPMG2wK2ZVsTArmYcdjksHN7lG+oSuQCdLmqwuGeSoHjX7FrEtapSfLT zoVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=n4Y1AVJg0zWvq5Giznzup81YTmaTrkJ+QjTkRk5gpqc=; b=nafbKdxnwRQS7KfXw/y7EkcM5epZKn3y3DweV6jXEv44B5VqaJ2WZGRZw5/icjlp1H u+TmR+mWRt9O6d6JRJymYgvNEMnmn3bobS/TH9c72eIUZ6rrC8VN9Fx436Y3qrwMsXNR JdZ2mUif0+chswWtreUA7qeU5nInzLd0q7t2kkqkptS1WgjZKLASLBWh0V4pZyP9aY4L wtA0CFCFRvf0JPnVV8cxRsofz7XriAlALArdlLNt/RqOpu0ux/YgTT7L6BLC1FkKAQee KHcA5lGYRzrk7Z9ucuTJqk39IzEewWrdSSZRqC9X0DLUq1bkUj1dPy6H1wrA+hKP4ALo yTTw== X-Gm-Message-State: AOAM531muHO5vHS8kKmuhj9zJXKxGvBH64cWswtCG6ebOJKqq/GhhpRL gTYfH+4Qql57pM7Uk9C3dGJVOJqmoibzcA== X-Google-Smtp-Source: ABdhPJzFefeMAtufSnBBhtULKHn2P2txLqqIaizRvnGe4SpNW5kkk7sBRy5K586LyJUS4A8dtjjPOw== X-Received: by 2002:a62:19cc:0:b029:19e:321b:a22e with SMTP id 195-20020a6219cc0000b029019e321ba22emr355255pfz.73.1610385623070; Mon, 11 Jan 2021 09:20:23 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 20/23] tcg/i386: Use tcg_constant_vec with tcg vec expanders Date: Mon, 11 Jan 2021 07:19:43 -1000 Message-Id: <20210111171946.219469-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52b; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- tcg/i386/tcg-target.c.inc | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc index 1706b7c776..050f3cb0b1 100644 --- a/tcg/i386/tcg-target.c.inc +++ b/tcg/i386/tcg-target.c.inc @@ -3486,7 +3486,7 @@ static void expand_vec_rotv(TCGType type, unsigned ve= ce, TCGv_vec v0, static void expand_vec_mul(TCGType type, unsigned vece, TCGv_vec v0, TCGv_vec v1, TCGv_vec v2) { - TCGv_vec t1, t2, t3, t4; + TCGv_vec t1, t2, t3, t4, zero; =20 tcg_debug_assert(vece =3D=3D MO_8); =20 @@ -3504,11 +3504,11 @@ static void expand_vec_mul(TCGType type, unsigned v= ece, case TCG_TYPE_V64: t1 =3D tcg_temp_new_vec(TCG_TYPE_V128); t2 =3D tcg_temp_new_vec(TCG_TYPE_V128); - tcg_gen_dup16i_vec(t2, 0); + zero =3D tcg_constant_vec(TCG_TYPE_V128, MO_8, 0); vec_gen_3(INDEX_op_x86_punpckl_vec, TCG_TYPE_V128, MO_8, - tcgv_vec_arg(t1), tcgv_vec_arg(v1), tcgv_vec_arg(t2)); + tcgv_vec_arg(t1), tcgv_vec_arg(v1), tcgv_vec_arg(zero)); vec_gen_3(INDEX_op_x86_punpckl_vec, TCG_TYPE_V128, MO_8, - tcgv_vec_arg(t2), tcgv_vec_arg(t2), tcgv_vec_arg(v2)); + tcgv_vec_arg(t2), tcgv_vec_arg(zero), tcgv_vec_arg(v2)); tcg_gen_mul_vec(MO_16, t1, t1, t2); tcg_gen_shri_vec(MO_16, t1, t1, 8); vec_gen_3(INDEX_op_x86_packus_vec, TCG_TYPE_V128, MO_8, @@ -3523,15 +3523,15 @@ static void expand_vec_mul(TCGType type, unsigned v= ece, t2 =3D tcg_temp_new_vec(type); t3 =3D tcg_temp_new_vec(type); t4 =3D tcg_temp_new_vec(type); - tcg_gen_dup16i_vec(t4, 0); + zero =3D tcg_constant_vec(TCG_TYPE_V128, MO_8, 0); vec_gen_3(INDEX_op_x86_punpckl_vec, type, MO_8, - tcgv_vec_arg(t1), tcgv_vec_arg(v1), tcgv_vec_arg(t4)); + tcgv_vec_arg(t1), tcgv_vec_arg(v1), tcgv_vec_arg(zero)); vec_gen_3(INDEX_op_x86_punpckl_vec, type, MO_8, - tcgv_vec_arg(t2), tcgv_vec_arg(t4), tcgv_vec_arg(v2)); + tcgv_vec_arg(t2), tcgv_vec_arg(zero), tcgv_vec_arg(v2)); vec_gen_3(INDEX_op_x86_punpckh_vec, type, MO_8, - tcgv_vec_arg(t3), tcgv_vec_arg(v1), tcgv_vec_arg(t4)); + tcgv_vec_arg(t3), tcgv_vec_arg(v1), tcgv_vec_arg(zero)); vec_gen_3(INDEX_op_x86_punpckh_vec, type, MO_8, - tcgv_vec_arg(t4), tcgv_vec_arg(t4), tcgv_vec_arg(v2)); + tcgv_vec_arg(t4), tcgv_vec_arg(zero), tcgv_vec_arg(v2)); tcg_gen_mul_vec(MO_16, t1, t1, t2); tcg_gen_mul_vec(MO_16, t3, t3, t4); tcg_gen_shri_vec(MO_16, t1, t1, 8); @@ -3559,7 +3559,7 @@ static bool expand_vec_cmp_noinv(TCGType type, unsign= ed vece, TCGv_vec v0, NEED_UMIN =3D 8, NEED_UMAX =3D 16, }; - TCGv_vec t1, t2; + TCGv_vec t1, t2, t3; uint8_t fixup; =20 switch (cond) { @@ -3630,9 +3630,9 @@ static bool expand_vec_cmp_noinv(TCGType type, unsign= ed vece, TCGv_vec v0, } 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)); - tcg_gen_sub_vec(vece, t1, v1, t2); - tcg_gen_sub_vec(vece, t2, v2, t2); + t3 =3D tcg_constant_vec(type, vece, 1ull << ((8 << vece) - 1)); + tcg_gen_sub_vec(vece, t1, v1, t3); + tcg_gen_sub_vec(vece, t2, v2, t3); v1 =3D t1; v2 =3D t2; cond =3D tcg_signed_cond(cond); --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386881; cv=none; d=zohomail.com; s=zohoarc; b=PUE22PK/fW05H5FHHgQnLoI4mA2qwLxcmxwJ6nUQZtchjtr3FSoi7lIu4AY/90URJEIAb2FQyd2pxi8IyN0680s0NTR144qvkdtqfZyzA/6VIj5//YHymTQtuYdVsmTYPCMm+uIyn1AII0mHjjWpQjZ88xOwPh3+WWjmbg5keo0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386881; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=0x8eNDWEM7nOVHNLi9Be+OYkh0XXgSMfT6fpLIKIzjI=; b=RqpDNO6Dsnrho6Ygb2TWSncjq7/ipCXV5GgeTww8psCUHuwkaTEQI29nipsy29Kj/QvXRvoKoz2nJs3spz3V73x5+FJ91R/SSRMEsKb28vgODdpCJoNr9rYXYOK/VxWy+NJ4TdvngV1nPBlBrGhw3w4lcB51FzpOkjSRZC0ZcOQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610386881267698.6098048949913; Mon, 11 Jan 2021 09:41:21 -0800 (PST) Received: from localhost ([::1]:50404 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz1Bv-00073Z-Pq for importer@patchew.org; Mon, 11 Jan 2021 12:41:19 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51960) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0rv-0003NM-Nl for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:46 -0500 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]:36070) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0ri-0000Mv-3A for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:39 -0500 Received: by mail-pf1-x431.google.com with SMTP id t22so326436pfl.3 for ; Mon, 11 Jan 2021 09:20:25 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0x8eNDWEM7nOVHNLi9Be+OYkh0XXgSMfT6fpLIKIzjI=; b=yJMU8lfWlViiRhe5NypYOBGHv/+mgCemNJ0FtQfUwBJVCsSBJpmLs1P61VQU9uYZjY mMaYKcQBDShgRBQ0x+eWtg+b/vhWTOAdEcm5PgGeHEWLz5yfTPXa11Pc1AvJ9lapbv4X LQjmlQ3L70In0injN3XPfL3Bhs3YUY9eJPRs9In8JHJTcwBCnTo764ATF0T+rVqrfJZD Eem1YAri7KubilJ7RCQ2wLhK4V1ZZOpoQ19vJVQps/A3KOPwEqORkqdt1/hsdN/VdEQX OvJgByzWR3s1pfcK/gqVpViWDAxcR4SFM/9/5nBMwDqlIo0WnwDr6hRMLCejBGOF0KJr nM6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0x8eNDWEM7nOVHNLi9Be+OYkh0XXgSMfT6fpLIKIzjI=; b=c+U43aGzXyceXRa5IvwrH970+8flzHQIFCYf5Ks9PLsiiZct+X/SyBbx9FWFBk4QFX iPayyqKr36ONtNY5UkwVwsoPpBC8BAuWC7MV+fhpsD+SgqMVBrdoPzReZkc1MO6Kzpdk /A1QQTZhL1nO2enx7/y+SFEV0YZEMSGPNzaI5iEbF+HGsgMpO5PpEekUUQPNw4aYkPMp +GN1Wi5KjCVBTvBcZz9e9rQ++VBIzdMknz6v3SBjc1PUUzGDtE7O8OaINg6JzbKN/60H 9JqOvlq6gRsOTnOn5s2ksAhEN4D5KCU1Rnlph3LM3JKPmfSuSPuudGC2BUDNCsmLl2rr ZHtA== X-Gm-Message-State: AOAM530Iqp7ei/BzcRxD/HxxB1pXdZiRBozaWu1hcvkykfAwWbStKh+F 1gdxfn+po1qlevhSr+BQykFtKvXzf4mquQ== X-Google-Smtp-Source: ABdhPJzW9nEb4k/g3jq3ASZTRQXjH0MK0/RaiTFy+q2J+YOOHfuLXIwLwqsd5iI8QXVttYfuuPMjXg== X-Received: by 2002:aa7:8517:0:b029:19d:d70f:86ec with SMTP id v23-20020aa785170000b029019dd70f86ecmr377698pfn.19.1610385624609; Mon, 11 Jan 2021 09:20:24 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 21/23] tcg: Remove tcg_gen_dup{8,16,32,64}i_vec Date: Mon, 11 Jan 2021 07:19:44 -1000 Message-Id: <20210111171946.219469-22-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::431; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x431.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Alex=20Benn=C3=A9e?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) These interfaces have been replaced by tcg_gen_dupi_vec and tcg_constant_vec. Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Richard Henderson --- include/tcg/tcg-op.h | 4 ---- tcg/tcg-op-vec.c | 20 -------------------- 2 files changed, 24 deletions(-) diff --git a/include/tcg/tcg-op.h b/include/tcg/tcg-op.h index ed8de045e2..2cd1faf9c4 100644 --- a/include/tcg/tcg-op.h +++ b/include/tcg/tcg-op.h @@ -959,10 +959,6 @@ void tcg_gen_mov_vec(TCGv_vec, TCGv_vec); void tcg_gen_dup_i32_vec(unsigned vece, TCGv_vec, TCGv_i32); void tcg_gen_dup_i64_vec(unsigned vece, TCGv_vec, TCGv_i64); void tcg_gen_dup_mem_vec(unsigned vece, TCGv_vec, TCGv_ptr, tcg_target_lon= g); -void tcg_gen_dup8i_vec(TCGv_vec, uint32_t); -void tcg_gen_dup16i_vec(TCGv_vec, uint32_t); -void tcg_gen_dup32i_vec(TCGv_vec, uint32_t); -void tcg_gen_dup64i_vec(TCGv_vec, uint64_t); void tcg_gen_dupi_vec(unsigned vece, TCGv_vec, uint64_t); void tcg_gen_add_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b); void tcg_gen_sub_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b); diff --git a/tcg/tcg-op-vec.c b/tcg/tcg-op-vec.c index ce0d2f6e0e..d19aa7373e 100644 --- a/tcg/tcg-op-vec.c +++ b/tcg/tcg-op-vec.c @@ -241,26 +241,6 @@ TCGv_vec tcg_const_ones_vec_matching(TCGv_vec m) return tcg_const_ones_vec(t->base_type); } =20 -void tcg_gen_dup64i_vec(TCGv_vec r, uint64_t a) -{ - tcg_gen_dupi_vec(MO_64, r, a); -} - -void tcg_gen_dup32i_vec(TCGv_vec r, uint32_t a) -{ - tcg_gen_dupi_vec(MO_32, r, a); -} - -void tcg_gen_dup16i_vec(TCGv_vec r, uint32_t a) -{ - tcg_gen_dupi_vec(MO_16, r, a); -} - -void tcg_gen_dup8i_vec(TCGv_vec r, uint32_t a) -{ - tcg_gen_dupi_vec(MO_8, r, a); -} - void tcg_gen_dupi_vec(unsigned vece, TCGv_vec r, uint64_t a) { TCGTemp *rt =3D tcgv_vec_temp(r); --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610386674; cv=none; d=zohomail.com; s=zohoarc; b=i60QAzqOkY9qwVZU2EiGxEnYDBS2nvtyQUZZ0N2x9xjmMAq3VczkCaC/HYteotkJVKz4dR4FoHHSz2ijNkuYelWyNA215joZ80sMJKEy2XNwBdv6FYGxqVb+S6SpTGmBx3kXwIXjNX2yrL9tpqYIqq89JMxUkC5DmBMODy3KMdQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610386674; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=VLAvWvNnNgLaMZdiybYsc0aBns7VEvbUJaVjvegbPqs=; b=I8gJBMc5iRzQ2DSi8BJKeFrU1PVe0lpi2alTNcIIpoBh6G2OGu+6rVR1dJNW4OcMNPStE+kyGeR0YHDA4i4zPC1XEdJRl9Lo4vZkcCbUZP2uTKMJboAH49Rf8kRD4gPdYyvNlyLF3pKB+FVKxsZ9lyyS+HfE+jU0kbNI8APao8c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610386674206549.335453539135; Mon, 11 Jan 2021 09:37:54 -0800 (PST) Received: from localhost ([::1]:41298 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz18a-0003C2-VD for importer@patchew.org; Mon, 11 Jan 2021 12:37:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51976) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0s3-0003PO-K7 for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:47 -0500 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]:54623) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rk-0000NU-Bk for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:46 -0500 Received: by mail-pj1-x102e.google.com with SMTP id f14so8175976pju.4 for ; Mon, 11 Jan 2021 09:20:27 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=VLAvWvNnNgLaMZdiybYsc0aBns7VEvbUJaVjvegbPqs=; b=l1SfREUWrV9sgwvRTwhKkn2XzPX+OiDX1GybN2nOllY/IttV4kBmQGPKQzCwBp7614 HjJ5IfFozAlrnDEfhAheYMFBFNORX/iDZrT+K29C5/voP2DNXh+mrCxwOtFxaCSFfTp6 6yiAe0Yu8P8fW7op7WdApKM1gchtILIHTG1cr8F1KBEjAPFqEEOQCY+16lgXSGZ5E8Ib 6oo+lK0f5dAOe0VVBC8lxg4/yRJd5iidxQ49p1W3FqXc23wS8CdrfGe6YKqLewxuiuiJ 9YrJl9705w7DgD/etkfcP/qRa20O9bVLJbLFOnmM109aFr5xZAPg7cV2oPQQvWXb+WJd jiVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VLAvWvNnNgLaMZdiybYsc0aBns7VEvbUJaVjvegbPqs=; b=H9hWIdtbHy0UcuyChEswiPRRZYwBUyYivFjCMrBRxv12ToZUIXJkwgkI9X7xMdmb4f yLIQmDe8R51iah1VDPyJhsCsXEYms/qYogzqVS6zs9DUM9rkxfmThb5J7FhOHYRdV/Uo x1tH7iy1VXPKJSqiPdVgbGiXTBD0yHiORWGgmZTQ9ooFF8xxjSi9ZB6zJMa3RfmF2EMf ZEL0pWbldG3vcthx76CLAcBjfbbObmx0ZrdjlYetda1UsatwBEr0yp/O1PjvVXDBkCY8 nImKzYa9ALev9UP6MSsvwe+3Bxate70Rjmw57Q+Y6pTsB+xUXprndxoVPOmQlDZ+ENej a51g== X-Gm-Message-State: AOAM530mKIXHoI7JCnH0NOQt+2A1/1Fnw6Vv+gLvIsgA6nxeecM/dPew 2BjppFLfvlydFPHMcJenXXTgvP0U4U6MIg== X-Google-Smtp-Source: ABdhPJzqX52yrcgW6Bap16OcIazSdVV6kom/jqonIccS1n2lGJAIWPG7nVeeXl8xL65S7VZsv0eyyw== X-Received: by 2002:a17:90a:f3c5:: with SMTP id ha5mr266829pjb.61.1610385626006; Mon, 11 Jan 2021 09:20:26 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 22/23] tcg/ppc: Use tcg_constant_vec with tcg vec expanders Date: Mon, 11 Jan 2021 07:19:45 -1000 Message-Id: <20210111171946.219469-23-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Improve expand_vec_shi to use sign-extraction for MO_32. This allows a single VSPLTISB instruction to load all of the valid shift constants. Signed-off-by: Richard Henderson --- tcg/ppc/tcg-target.c.inc | 44 ++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc index 1fbb1b6db0..cf64892295 100644 --- a/tcg/ppc/tcg-target.c.inc +++ b/tcg/ppc/tcg-target.c.inc @@ -3336,13 +3336,22 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode= opc, static void expand_vec_shi(TCGType type, unsigned vece, TCGv_vec v0, TCGv_vec v1, TCGArg imm, TCGOpcode opci) { - TCGv_vec t1 =3D tcg_temp_new_vec(type); + TCGv_vec t1; =20 - /* Splat w/bytes for xxspltib. */ - tcg_gen_dupi_vec(MO_8, t1, imm & ((8 << vece) - 1)); + if (vece =3D=3D MO_32) { + /* + * Only 5 bits are significant, and VSPLTISB can represent -16..15. + * So using negative numbers gets us the 4th bit easily. + */ + imm =3D sextract32(imm, 0, 5); + } else { + imm &=3D (8 << vece) - 1; + } + + /* Splat w/bytes for xxspltib when 2.07 allows MO_64. */ + t1 =3D tcg_constant_vec(type, MO_8, imm); vec_gen_3(opci, type, vece, tcgv_vec_arg(v0), tcgv_vec_arg(v1), tcgv_vec_arg(t1)); - tcg_temp_free_vec(t1); } =20 static void expand_vec_cmp(TCGType type, unsigned vece, TCGv_vec v0, @@ -3400,7 +3409,7 @@ static void expand_vec_mul(TCGType type, unsigned vec= e, TCGv_vec v0, { TCGv_vec t1 =3D tcg_temp_new_vec(type); TCGv_vec t2 =3D tcg_temp_new_vec(type); - TCGv_vec t3, t4; + TCGv_vec c0, c16; =20 switch (vece) { case MO_8: @@ -3419,21 +3428,22 @@ static void expand_vec_mul(TCGType type, unsigned v= ece, TCGv_vec v0, =20 case MO_32: tcg_debug_assert(!have_isa_2_07); - t3 =3D tcg_temp_new_vec(type); - t4 =3D tcg_temp_new_vec(type); - tcg_gen_dupi_vec(MO_8, t4, -16); + /* + * Only 5 bits are significant, and VSPLTISB can represent -16..15. + * So using -16 is a quick way to represent 16. + */ + c16 =3D tcg_constant_vec(type, MO_8, -16); + c0 =3D tcg_constant_vec(type, MO_8, 0); + vec_gen_3(INDEX_op_rotlv_vec, type, MO_32, tcgv_vec_arg(t1), - tcgv_vec_arg(v2), tcgv_vec_arg(t4)); + tcgv_vec_arg(v2), tcgv_vec_arg(c16)); vec_gen_3(INDEX_op_ppc_mulou_vec, type, MO_16, tcgv_vec_arg(t2), tcgv_vec_arg(v1), tcgv_vec_arg(v2)); - tcg_gen_dupi_vec(MO_8, t3, 0); - vec_gen_4(INDEX_op_ppc_msum_vec, type, MO_16, tcgv_vec_arg(t3), - tcgv_vec_arg(v1), tcgv_vec_arg(t1), tcgv_vec_arg(t3)); - vec_gen_3(INDEX_op_shlv_vec, type, MO_32, tcgv_vec_arg(t3), - tcgv_vec_arg(t3), tcgv_vec_arg(t4)); - tcg_gen_add_vec(MO_32, v0, t2, t3); - tcg_temp_free_vec(t3); - tcg_temp_free_vec(t4); + vec_gen_4(INDEX_op_ppc_msum_vec, type, MO_16, tcgv_vec_arg(t1), + tcgv_vec_arg(v1), tcgv_vec_arg(t1), tcgv_vec_arg(c0)); + vec_gen_3(INDEX_op_shlv_vec, type, MO_32, tcgv_vec_arg(t1), + tcgv_vec_arg(t1), tcgv_vec_arg(c16)); + tcg_gen_add_vec(MO_32, v0, t1, t2); break; =20 default: --=20 2.25.1 From nobody Thu May 16 07:04:31 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1610387207; cv=none; d=zohomail.com; s=zohoarc; b=IvO5I8IzaD7jgUAM+GX+PRTFxve25h+FYgvXZL63b/21wbOnwi3s5Z1a5mpeLmL4P1/ba8a5w6si54AJtpjY/3Hrqp21or6ykoeVvpseo+4ULHIYRIj1cv31WM3MUltoKcbJHCZamvoUsv79kXHD8QyLq2hcy7w+ScfsMKZUimA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610387207; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=iIaMM78IeHTe5CD2a93HOKAFcWJMpXbVz88KGEPcLL4=; b=BkJ/oZi1Bsw0zcg9CevSXznVxLp1qEh1oJb5ab1tG0yH/XgWxzNYXOPZeaikW9M68KZgQqrPOTiHA/bkHQEZlAM3hH3bZX8iCS7tjDMZsPU93o4Dfw+dSC1ODd2GXHf2oN17FGfAT+qhQFg0Hzz9vKcMRiTDAkjTweV3+Sv1yEU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1610387207502967.4917748766966; Mon, 11 Jan 2021 09:46:47 -0800 (PST) Received: from localhost ([::1]:40174 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kz1HC-0006js-Bk for importer@patchew.org; Mon, 11 Jan 2021 12:46:46 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:51964) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kz0ry-0003NQ-Ui for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:46 -0500 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:40024) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kz0rm-0000Nt-Gy for qemu-devel@nongnu.org; Mon, 11 Jan 2021 12:20:42 -0500 Received: by mail-pg1-x529.google.com with SMTP id 15so85545pgx.7 for ; Mon, 11 Jan 2021 09:20:28 -0800 (PST) Received: from localhost.localdomain (rrcs-173-197-107-21.west.biz.rr.com. [173.197.107.21]) by smtp.gmail.com with ESMTPSA id k64sm206666pfd.75.2021.01.11.09.20.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 09:20:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=iIaMM78IeHTe5CD2a93HOKAFcWJMpXbVz88KGEPcLL4=; b=U5QVe5cxFIm0/FHeSvhJftiMY7vPjp5/ZvhN7DSATKWA78jb6MSV1SgevDo8KizSit JXggddzr+YKEVzBv/lmJxAzGCSG6KJxP2Nnxyf2rOkMT5/38lRl6zyxGSczbUqDSiiOd tJyLI2KFEMb0bV3Z6BIvGddyw7p+Xm71Ojhv5ryZQiDqRe9iKnPCY3WqE0+hF7SUpzM0 DlNjx0oaSk/ZBL9s9q8yFthhncfuoKanJMkg40/av5GswYftMD52Qsx1wRzCKItdlCWY GAzADdoAJHKGHEe/vNEqe05cg0ypKCvNvsXMH2GaCAXdMhF08GFhKVbTkZivee05BL0V EPug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iIaMM78IeHTe5CD2a93HOKAFcWJMpXbVz88KGEPcLL4=; b=n6SutHyOMDFYYnQZtewE1MMz3rulsI+JmkfQnPEQm2xj2PwNtTjob3hRO1NTic49KO IAuECH3HL4xkZCxdpeLh+qiIEkHw4mxP3msJVlNVfv3XKm2rXIJfedUHc4KdaaHY3TaZ b5V9Zl+d7/UzNs9R6/4k0Bkqto7IlfqSIPD5DtXUU2Pz6gpPXPkd6RQOrkDiKWDds1CG KRM2euyoR1+Hf1+VLkeIy8tkRNngsS0UQ0ZfLmaEwzJ1RAr1dVTZjMhf2VOciTglQx6O QhTEi8KAayjqPPfZi/RdaVsqmwcdYJ/JyYH1AnGNKq+U6ALOAnNzpHdlBIZadYR0/1qY 1w/Q== X-Gm-Message-State: AOAM532N7Zt3dj10wlSwNPWK3A4DqgHaVXIJ66GWr0vzoPoxxqNGqnH2 0Iw2e2fDTq8RvF3G3b9Wfs1tusRXKEQZ+g== X-Google-Smtp-Source: ABdhPJwShRGWAz0Wi83xbfrbWqFL3WQDXXugFTv8y131GR2Cn7F14tIGXMmZAaajBGB4lbGhcK/zYQ== X-Received: by 2002:aa7:87d2:0:b029:1a5:43da:b93c with SMTP id i18-20020aa787d20000b02901a543dab93cmr631138pfo.6.1610385627463; Mon, 11 Jan 2021 09:20:27 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v6 23/23] tcg/aarch64: Use tcg_constant_vec with tcg vec expanders Date: Mon, 11 Jan 2021 07:19:46 -1000 Message-Id: <20210111171946.219469-24-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210111171946.219469-1-richard.henderson@linaro.org> References: <20210111171946.219469-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Improve rotrv_vec to reduce "t1 =3D -v2, t2 =3D t1 + c" to "t1 =3D -v2, t2 =3D c - v2". This avoids a serial dependency between t1 and t2. Signed-off-by: Richard Henderson --- tcg/aarch64/tcg-target.c.inc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc index e370b7e61c..23954ec7cf 100644 --- a/tcg/aarch64/tcg-target.c.inc +++ b/tcg/aarch64/tcg-target.c.inc @@ -2516,7 +2516,7 @@ void tcg_expand_vec_op(TCGOpcode opc, TCGType type, u= nsigned vece, TCGArg a0, ...) { va_list va; - TCGv_vec v0, v1, v2, t1, t2; + TCGv_vec v0, v1, v2, t1, t2, c1; TCGArg a2; =20 va_start(va, a0); @@ -2548,8 +2548,8 @@ void tcg_expand_vec_op(TCGOpcode opc, TCGType type, u= nsigned vece, =20 case INDEX_op_rotlv_vec: t1 =3D tcg_temp_new_vec(type); - tcg_gen_dupi_vec(vece, t1, 8 << vece); - tcg_gen_sub_vec(vece, t1, v2, t1); + c1 =3D tcg_constant_vec(type, vece, 8 << vece); + tcg_gen_sub_vec(vece, t1, v2, c1); /* Right shifts are negative left shifts for AArch64. */ vec_gen_3(INDEX_op_shlv_vec, type, vece, tcgv_vec_arg(t1), tcgv_vec_arg(v1), tcgv_vec_arg(t1)); @@ -2562,9 +2562,9 @@ void tcg_expand_vec_op(TCGOpcode opc, TCGType type, u= nsigned vece, case INDEX_op_rotrv_vec: t1 =3D tcg_temp_new_vec(type); t2 =3D tcg_temp_new_vec(type); + c1 =3D tcg_constant_vec(type, vece, 8 << vece); tcg_gen_neg_vec(vece, t1, v2); - tcg_gen_dupi_vec(vece, t2, 8 << vece); - tcg_gen_add_vec(vece, t2, t1, t2); + tcg_gen_sub_vec(vece, t2, c1, v2); /* Right shifts are negative left shifts for AArch64. */ vec_gen_3(INDEX_op_shlv_vec, type, vece, tcgv_vec_arg(t1), tcgv_vec_arg(v1), tcgv_vec_arg(t1)); --=20 2.25.1