From nobody Mon Apr 29 05:28:34 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=1631741589; cv=none; d=zohomail.com; s=zohoarc; b=LisAzPLl08aWoMLA+YvHPh1oNnQcgSB6FIAXzkY7ZbWxlf8eTLlad0fxTOo2lY0mektdHy2YWBICvw+KQZfTySn9jwENP+9UlwJ9OFJ0BIYvFeuURlvAXBuR34i2/MeBQGSxGy8MHnENYvw6De7A7zMbKBFBD7QjUi/f2HHi5mI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631741589; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=lhsY62Axz8P4uEG2iGxE1nxCZRsB4mKyTgfXOvjyYjw=; b=JjKY9pmA03EGOReO5ysSyGsqcN00kK48bOaflfO7JqbsNYn34NousGa40fKMUJEFMwF8Qyxb/bPgrTSwG42fWngiGZ3Z7VeR7Y2axCsszA0nIJcVJiV1EDeNBSaoPWVv/Y8xGwggYoo9UvmLmYBwFpkSehLP9B9fQ8S++kj5hXc= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163174158987137.337877887010904; Wed, 15 Sep 2021 14:33:09 -0700 (PDT) Received: from localhost ([::1]:56952 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQcWi-0006JH-Qc for importer@patchew.org; Wed, 15 Sep 2021 17:33:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42550) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcV0-0003Rs-3u for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:22 -0400 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]:33504) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcUy-0003Ey-FN for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:21 -0400 Received: by mail-pl1-x62c.google.com with SMTP id t4so2517797plo.0 for ; Wed, 15 Sep 2021 14:31:20 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lhsY62Axz8P4uEG2iGxE1nxCZRsB4mKyTgfXOvjyYjw=; b=RnVhU2bOgKcxanTAI/ECu9oJqtuU43f3EmGR217Qs4/QS9gI4jMjLCoVyEvmwuFBJD w9ZCey+QNsk5FYk354k0aITMGOSQqrypGD9fxHXvhSK8BiL9SGOWLePcYJpRENWoEEOc yNco/gvg4IrnbnstAnm8olPWP2TJCeN5yOprdYYFKityuzIV1Q05+40bJ074i5Qn8X0t Gfy8kJdWnnWSoyy1/77qIb9OL/ibngoxTTSmUCoUsI3ccCr0ylzeOaZm0YyaplZNs6yu sGm0Xo9gvltVvBu6hvUzWEp9q+hwyfIv4q1z6KOaDY8TmAnSmDWsO8dEZNAE4TRd+tG3 jLpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lhsY62Axz8P4uEG2iGxE1nxCZRsB4mKyTgfXOvjyYjw=; b=Su7Yg8nEQ1mmFUliIS2lQtDRfDxr/c3kws6i+xC1zhljSq08Ao4Cai1dwzLOypYor2 SMUQV29aPk0y+iv44Kt9zhzVyhIpv1HpcTEww/04ci8KF/Vx39+C5fyjXsN0IAUD0qse 5IgKNIWEfVmXRuNNkC2JbTAGP40wnNjyE7b5LPUb/b1twUiso/13G+y55lWMd1WvnToX u8gkQ7zIeUC4Ft0ZJzdM4ApNNI/sH81v7mSJlwI49nuJLOLGSuZaVrQVFGkclVzn3VbZ XMjXm3Lx3hdQ5AzgXjNBufD/o+pWSo4XUqr6ozgc64PIMeUNXXhyYQ40zRRKVkZwSqMy c6hQ== X-Gm-Message-State: AOAM530cDXSroGLpyOyCnlI3AQasQG9SApAyr8YOENMh6dPsEO03K6Fg tbNJFt498dLppUPwTc58ZQFtkBvc0UWWpw== X-Google-Smtp-Source: ABdhPJxlhnDHEIz23lNt2y6dhYKSQGWsYDv1yI9MrBjzxYy9rFY08/1RFOaE3voMV514KYGEm2+ksw== X-Received: by 2002:a17:90b:4d90:: with SMTP id oj16mr1378237pjb.170.1631741479026; Wed, 15 Sep 2021 14:31:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 01/16] tcg: Expand usadd/ussub with umin/umax Date: Wed, 15 Sep 2021 14:30:59 -0700 Message-Id: <20210915213114.1923776-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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::62c; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62c.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: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631741591229100002 Content-Type: text/plain; charset="utf-8" For usadd, we only have to consider overflow. Since ~B + B =3D=3D -1, the maximum value for A that saturates is ~B. For ussub, we only have to consider underflow. The minimum value that saturates to 0 from A - B is B. Signed-off-by: Richard Henderson --- tcg/tcg-op-vec.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/tcg/tcg-op-vec.c b/tcg/tcg-op-vec.c index 15e026ae49..7705a49c0b 100644 --- a/tcg/tcg-op-vec.c +++ b/tcg/tcg-op-vec.c @@ -119,6 +119,18 @@ bool tcg_can_emit_vecop_list(const TCGOpcode *list, continue; } break; + case INDEX_op_usadd_vec: + if (tcg_can_emit_vec_op(INDEX_op_umin_vec, type, vece) || + tcg_can_emit_vec_op(INDEX_op_cmp_vec, type, vece)) { + continue; + } + break; + case INDEX_op_ussub_vec: + if (tcg_can_emit_vec_op(INDEX_op_umax_vec, type, vece) || + tcg_can_emit_vec_op(INDEX_op_cmp_vec, type, vece)) { + continue; + } + break; case INDEX_op_cmpsel_vec: case INDEX_op_smin_vec: case INDEX_op_smax_vec: @@ -603,7 +615,18 @@ void tcg_gen_ssadd_vec(unsigned vece, TCGv_vec r, TCGv= _vec a, TCGv_vec b) =20 void tcg_gen_usadd_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3_nofail(vece, r, a, b, INDEX_op_usadd_vec); + if (!do_op3(vece, r, a, b, INDEX_op_usadd_vec)) { + const TCGOpcode *hold_list =3D tcg_swap_vecop_list(NULL); + TCGv_vec t =3D tcg_temp_new_vec_matching(r); + + /* usadd(a, b) =3D min(a, ~b) + b */ + tcg_gen_not_vec(vece, t, b); + tcg_gen_umin_vec(vece, t, t, a); + tcg_gen_add_vec(vece, r, r, b); + + tcg_temp_free_vec(t); + tcg_swap_vecop_list(hold_list); + } } =20 void tcg_gen_sssub_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) @@ -613,7 +636,17 @@ void tcg_gen_sssub_vec(unsigned vece, TCGv_vec r, TCGv= _vec a, TCGv_vec b) =20 void tcg_gen_ussub_vec(unsigned vece, TCGv_vec r, TCGv_vec a, TCGv_vec b) { - do_op3_nofail(vece, r, a, b, INDEX_op_ussub_vec); + if (!do_op3(vece, r, a, b, INDEX_op_ussub_vec)) { + const TCGOpcode *hold_list =3D tcg_swap_vecop_list(NULL); + TCGv_vec t =3D tcg_temp_new_vec_matching(r); + + /* ussub(a, b) =3D max(a, b) - b */ + tcg_gen_umax_vec(vece, t, a, b); + tcg_gen_sub_vec(vece, r, t, b); + + tcg_temp_free_vec(t); + tcg_swap_vecop_list(hold_list); + } } =20 static void do_minmax(unsigned vece, TCGv_vec r, TCGv_vec a, --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631741932; cv=none; d=zohomail.com; s=zohoarc; b=kcUyQVdiUWFdm1VDhCnzEPTLF/Tw8cuHBE5O/QjXM1N7jEfKJWA3tb8ORLERYLTIolZsuzSGkVmNOkG7lzb27HamsWBk2BJTdnNmwwQpNJ9Y1MJtyo8MXN6ZQ59fX4VfxpXav2LFRPVnAIbf3hx+3lPhZao9lcTXvIM1TTty7tw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631741932; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=BtrRAfu5Qz6RZ7D6DQZXk+fHRvNXJBlXWfLYd+BVVxM=; b=dtyEL/A5rGJauroI8hmPrY5yj6Mh2G4nmJyCggHfTD9Hgzp08MDbaUJwUJHwt1QenR+SeR/78NCSk3cV3JYZf+kamsWI67HQgMdDDfzvnOAy1+5bKxv0rbmC1YyHAuE+wgh3TjuRbJ+K6qOgA+71UMPSajy0ClXz4NeJ/dVnqnM= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631741932491495.0615050084474; Wed, 15 Sep 2021 14:38:52 -0700 (PDT) Received: from localhost ([::1]:47630 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQccF-00029n-Dw for importer@patchew.org; Wed, 15 Sep 2021 17:38:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42594) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcV1-0003Tw-Gf for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:23 -0400 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]:52953) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcUy-0003FR-VD for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:23 -0400 Received: by mail-pj1-x1029.google.com with SMTP id v19so3085090pjh.2 for ; Wed, 15 Sep 2021 14:31:20 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BtrRAfu5Qz6RZ7D6DQZXk+fHRvNXJBlXWfLYd+BVVxM=; b=TwNGrNDjAhC9Gf6/FAIu+8V/r6KNGL+JH4CMuC43kN34agdajwK5pVXYWfAuPmmZKU QpjQnv7o/1hNEWkRrF8a+wwTvdut1A3ird0mO5P6G5x+ioaVUQ3bIKL5FPS1MTXZdWdk Q9G5XAGM+jitlJbdlZiCBm6J4BtGhVQR0W8witxUzZpIF5EF1ZFjcinnDc0SBYAyuTnW +YXyYp3hczRqST0D0d5ZuPCNxFyn42p+TAhAT/RF5nlooBwDc/uP36o0zP7M1xmQsSj7 MMn+9cgHAIxrsD4RBsG1qgrdb4/nsTOX+yezV3M1u2/YqV6JYSyBAVID6Tx9HR1UzZg4 F0uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BtrRAfu5Qz6RZ7D6DQZXk+fHRvNXJBlXWfLYd+BVVxM=; b=SNbSRMQ+2bYx1wq2xA5J53fwOPnSEJkatjA/2Ju+wIs2wiO1Tgw/gzqwuzej+b2AiR JyBpoBI/qIu9W0Bn+mRhX3j0sWwGY1Hz6wNpGxaceBEoAHFEtti+t+lnKT7CzDM6+CSo GtHsFBioGspV0y3dpTZceFkVMb9Qy2+LDD87vq2WNpFGcYtlwrKtTgPVrGyxN6oIwlGB UIQs//DM5oWUIZPCVr9ol4FXAIharmykbugR86u7fNYbTtQcU5EbF0dACW9F2wQa7Q3A /tmX2Sr7++REmj5vK/OeFp+bLZr0iM7fMsckMpXe4y6y7JXsy+mRjffP+9lL4LRk1LZm pTig== X-Gm-Message-State: AOAM532gUkO4pSHa9AOg3UIsBLKSk4BNFIbnweC4oDEcFJLC/71n2v1v 0+S5fr3cASC5a7oJ+11DTYkpknw/EXbCdw== X-Google-Smtp-Source: ABdhPJwo7mDvOHIyu82XX92ZbxVacewnTm0U5a4R0DdvlfMUL5ZPCg+Z1kxAaoUUTwI2Mg08pbvztA== X-Received: by 2002:a17:90a:e009:: with SMTP id u9mr1947512pjy.218.1631741479667; Wed, 15 Sep 2021 14:31:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 02/16] tcg/s390x: Rename from tcg/s390 Date: Wed, 15 Sep 2021 14:31:00 -0700 Message-Id: <20210915213114.1923776-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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::1029; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1029.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: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631741934501100001 Content-Type: text/plain; charset="utf-8" This emphasizes that we don't support s390, only 64-bit s390x hosts. Reviewed-by: David Hildenbrand Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Thomas Huth --- meson.build | 2 -- tcg/{s390 =3D> s390x}/tcg-target-con-set.h | 0 tcg/{s390 =3D> s390x}/tcg-target-con-str.h | 0 tcg/{s390 =3D> s390x}/tcg-target.h | 0 tcg/{s390 =3D> s390x}/tcg-target.c.inc | 0 5 files changed, 2 deletions(-) rename tcg/{s390 =3D> s390x}/tcg-target-con-set.h (100%) rename tcg/{s390 =3D> s390x}/tcg-target-con-str.h (100%) rename tcg/{s390 =3D> s390x}/tcg-target.h (100%) rename tcg/{s390 =3D> s390x}/tcg-target.c.inc (100%) diff --git a/meson.build b/meson.build index 2711cbb789..1cf370ab56 100644 --- a/meson.build +++ b/meson.build @@ -265,8 +265,6 @@ if not get_option('tcg').disabled() tcg_arch =3D 'tci' elif config_host['ARCH'] =3D=3D 'sparc64' tcg_arch =3D 'sparc' - elif config_host['ARCH'] =3D=3D 's390x' - tcg_arch =3D 's390' elif config_host['ARCH'] in ['x86_64', 'x32'] tcg_arch =3D 'i386' elif config_host['ARCH'] =3D=3D 'ppc64' diff --git a/tcg/s390/tcg-target-con-set.h b/tcg/s390x/tcg-target-con-set.h similarity index 100% rename from tcg/s390/tcg-target-con-set.h rename to tcg/s390x/tcg-target-con-set.h diff --git a/tcg/s390/tcg-target-con-str.h b/tcg/s390x/tcg-target-con-str.h similarity index 100% rename from tcg/s390/tcg-target-con-str.h rename to tcg/s390x/tcg-target-con-str.h diff --git a/tcg/s390/tcg-target.h b/tcg/s390x/tcg-target.h similarity index 100% rename from tcg/s390/tcg-target.h rename to tcg/s390x/tcg-target.h diff --git a/tcg/s390/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc similarity index 100% rename from tcg/s390/tcg-target.c.inc rename to tcg/s390x/tcg-target.c.inc --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631742060; cv=none; d=zohomail.com; s=zohoarc; b=cJRFCdh+l6WsQtvDPy/uuyMyvgQZP+AzVjUWspF6eWqQc42GfuSMfkebNsgATtCImd92mlOgmmU5iP4Uda0mycWS54l+IbTLJNIIduDzC+qgGsFrd515SwNSmDE8NDvyvkvlHroQOXdmYI/8zqvBtWwxKRZHO47h4C9FLV8kpIw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631742060; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=/GwSt1/JeAEfKCV5LE5JTYEOKuVjlXjOZ/7KEwaE90Y=; b=jfTmcfufDboY6Iz9n/CGOkHL2TjhA1JIpR+7oUCWEaWBCyQq8ycVYdQkd3PY0hU+DzODS9SordTBXm2794voFoHwSDq34oOCxHGqJWsVAnW6MxKjAQiM/jGh543x7huXfLvqB4ADcCpFbIQKxeqFcIBCeIqMNBy/FP3BLi6ruPg= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631742060616343.33899988331234; Wed, 15 Sep 2021 14:41:00 -0700 (PDT) Received: from localhost ([::1]:54068 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQceJ-0006S8-Im for importer@patchew.org; Wed, 15 Sep 2021 17:40:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42612) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcV2-0003WM-Hx for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:24 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]:34732) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcUz-0003GU-P8 for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:24 -0400 Received: by mail-pg1-x52f.google.com with SMTP id f129so4089396pgc.1 for ; Wed, 15 Sep 2021 14:31:21 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/GwSt1/JeAEfKCV5LE5JTYEOKuVjlXjOZ/7KEwaE90Y=; b=rDpeVbD3anFPf2DjLZll5lRFyIQ1KENmu4samkJ0NPL0Xd4GfXQ0/nh3oQukbtz8Y2 ppFBHCnXmgtmyGkjCjLRmZfLEHDjbUkeHEBbT4vQVj5/vOOSOGWXCyLMaCZgUzFJRvAw l/HStZTAGBLrZC4qWlNoz2Ewvxs8jyjquuG/bnW2ejsgxI/MVTRMXxC+0gDfb+b0AX1s Yst8RxrEOootZZ2dQpzKlYF8vewAG/wIIPlxoWO+hugbwh4ORdqC6w1AEONFX1E9Oahu eE5/rgowcre9KShWsBIQq602KRwC69JZE0dg/uFVhZuE5ntycS4e9zUN8FICj0m6i4Ih o8Pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/GwSt1/JeAEfKCV5LE5JTYEOKuVjlXjOZ/7KEwaE90Y=; b=y4TPRuHEj+HulyuwmbcXGnpIdAtUb+y25yM+245zK1ddY/a6zAYT54CU78ZAqNiwil W2gP8HDa+ICgx0zMJf/1uIKSNmZke0eu27+Hevp0euxjrFXc3qxSuqnVfBO2Hc4zjBv2 gjf6Vr13QAiraUtHBJrUxIVGeTzbbC6n3SB3XWnvSePqyVY9f5cQQ+0F4mxvMmCnDCI2 Sbv5NXfH/+1XmFL8Vup/toSar4WQn2LbVFfD/6hn6eSjigaNrWgEwwjwuDhORIgBmi7q tLtk++wSBCIKO2Kwtg5rul83vTo6imkJ4QdaHVlwxSYVUQO5fEUN9a8pkLcqycwFo9IX jqMQ== X-Gm-Message-State: AOAM533CSl3jXWfHw3ZepMrMXLx/yMTohwGfBP0NEhfMs/paAuJYeaN3 89QQJ81QgOY0RbFxKKzG4tm5Ennj1XjQFA== X-Google-Smtp-Source: ABdhPJyAgpmaebJxBkY3MYYsHqGWhuRRzP4OGGA0p+m4J53nhASBqulZTauLPcJheeFTBkbfi4WN2A== X-Received: by 2002:aa7:9e9a:0:b0:43e:d9b:cd93 with SMTP id p26-20020aa79e9a000000b0043e0d9bcd93mr1567050pfq.50.1631741480265; Wed, 15 Sep 2021 14:31:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 03/16] tcg/s390x: Change FACILITY representation Date: Wed, 15 Sep 2021 14:31:01 -0700 Message-Id: <20210915213114.1923776-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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::52f; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52f.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: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631742062189100001 Content-Type: text/plain; charset="utf-8" We will shortly need to be able to check facilities beyond the first 64. Instead of explicitly masking against s390_facilities, create a HAVE_FACILITY macro that indexes an array. Reviewed-by: David Hildenbrand Signed-off-by: Richard Henderson --- v2: Change name to HAVE_FACILITY (david) --- tcg/s390x/tcg-target.h | 29 ++++++++------- tcg/s390x/tcg-target.c.inc | 74 +++++++++++++++++++------------------- 2 files changed, 52 insertions(+), 51 deletions(-) diff --git a/tcg/s390x/tcg-target.h b/tcg/s390x/tcg-target.h index 2e4ede2ea2..18d0d330e6 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -55,16 +55,19 @@ typedef enum TCGReg { /* A list of relevant facilities used by this translator. Some of these are required for proper operation, and these are checked at startup. */ =20 -#define FACILITY_ZARCH_ACTIVE (1ULL << (63 - 2)) -#define FACILITY_LONG_DISP (1ULL << (63 - 18)) -#define FACILITY_EXT_IMM (1ULL << (63 - 21)) -#define FACILITY_GEN_INST_EXT (1ULL << (63 - 34)) -#define FACILITY_LOAD_ON_COND (1ULL << (63 - 45)) +#define FACILITY_ZARCH_ACTIVE 2 +#define FACILITY_LONG_DISP 18 +#define FACILITY_EXT_IMM 21 +#define FACILITY_GEN_INST_EXT 34 +#define FACILITY_LOAD_ON_COND 45 #define FACILITY_FAST_BCR_SER FACILITY_LOAD_ON_COND #define FACILITY_DISTINCT_OPS FACILITY_LOAD_ON_COND -#define FACILITY_LOAD_ON_COND2 (1ULL << (63 - 53)) +#define FACILITY_LOAD_ON_COND2 53 =20 -extern uint64_t s390_facilities; +extern uint64_t s390_facilities[1]; + +#define HAVE_FACILITY(X) \ + ((s390_facilities[FACILITY_##X / 64] >> (63 - FACILITY_##X % 64)) & 1) =20 /* optional instructions */ #define TCG_TARGET_HAS_div2_i32 1 @@ -85,8 +88,8 @@ extern uint64_t s390_facilities; #define TCG_TARGET_HAS_clz_i32 0 #define TCG_TARGET_HAS_ctz_i32 0 #define TCG_TARGET_HAS_ctpop_i32 0 -#define TCG_TARGET_HAS_deposit_i32 (s390_facilities & FACILITY_GEN_INST= _EXT) -#define TCG_TARGET_HAS_extract_i32 (s390_facilities & FACILITY_GEN_INST= _EXT) +#define TCG_TARGET_HAS_deposit_i32 HAVE_FACILITY(GEN_INST_EXT) +#define TCG_TARGET_HAS_extract_i32 HAVE_FACILITY(GEN_INST_EXT) #define TCG_TARGET_HAS_sextract_i32 0 #define TCG_TARGET_HAS_extract2_i32 0 #define TCG_TARGET_HAS_movcond_i32 1 @@ -98,7 +101,7 @@ extern uint64_t s390_facilities; #define TCG_TARGET_HAS_mulsh_i32 0 #define TCG_TARGET_HAS_extrl_i64_i32 0 #define TCG_TARGET_HAS_extrh_i64_i32 0 -#define TCG_TARGET_HAS_direct_jump (s390_facilities & FACILITY_GEN_INST= _EXT) +#define TCG_TARGET_HAS_direct_jump HAVE_FACILITY(GEN_INST_EXT) #define TCG_TARGET_HAS_qemu_st8_i32 0 =20 #define TCG_TARGET_HAS_div2_i64 1 @@ -119,11 +122,11 @@ extern uint64_t s390_facilities; #define TCG_TARGET_HAS_eqv_i64 0 #define TCG_TARGET_HAS_nand_i64 0 #define TCG_TARGET_HAS_nor_i64 0 -#define TCG_TARGET_HAS_clz_i64 (s390_facilities & FACILITY_EXT_IMM) +#define TCG_TARGET_HAS_clz_i64 HAVE_FACILITY(EXT_IMM) #define TCG_TARGET_HAS_ctz_i64 0 #define TCG_TARGET_HAS_ctpop_i64 0 -#define TCG_TARGET_HAS_deposit_i64 (s390_facilities & FACILITY_GEN_INST= _EXT) -#define TCG_TARGET_HAS_extract_i64 (s390_facilities & FACILITY_GEN_INST= _EXT) +#define TCG_TARGET_HAS_deposit_i64 HAVE_FACILITY(GEN_INST_EXT) +#define TCG_TARGET_HAS_extract_i64 HAVE_FACILITY(GEN_INST_EXT) #define TCG_TARGET_HAS_sextract_i64 0 #define TCG_TARGET_HAS_extract2_i64 0 #define TCG_TARGET_HAS_movcond_i64 1 diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index b82cf19f09..f7e4a619e7 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -66,7 +66,7 @@ We don't need this when we have pc-relative loads with the general instructions extension facility. */ #define TCG_REG_TB TCG_REG_R12 -#define USE_REG_TB (!(s390_facilities & FACILITY_GEN_INST_EXT)) +#define USE_REG_TB (!HAVE_FACILITY(GEN_INST_EXT)) =20 #ifndef CONFIG_SOFTMMU #define TCG_GUEST_BASE_REG TCG_REG_R13 @@ -377,7 +377,7 @@ static void * const qemu_st_helpers[16] =3D { #endif =20 static const tcg_insn_unit *tb_ret_addr; -uint64_t s390_facilities; +uint64_t s390_facilities[1]; =20 static bool patch_reloc(tcg_insn_unit *src_rw, int type, intptr_t value, intptr_t addend) @@ -577,7 +577,7 @@ static void tcg_out_movi_int(TCGContext *s, TCGType typ= e, TCGReg ret, } =20 /* Try all 48-bit insns that can load it in one go. */ - if (s390_facilities & FACILITY_EXT_IMM) { + if (HAVE_FACILITY(EXT_IMM)) { if (sval =3D=3D (int32_t)sval) { tcg_out_insn(s, RIL, LGFI, ret, sval); return; @@ -620,7 +620,7 @@ static void tcg_out_movi_int(TCGContext *s, TCGType typ= e, TCGReg ret, } =20 /* Otherwise, stuff it in the constant pool. */ - if (s390_facilities & FACILITY_GEN_INST_EXT) { + if (HAVE_FACILITY(GEN_INST_EXT)) { tcg_out_insn(s, RIL, LGRL, ret, 0); new_pool_label(s, sval, R_390_PC32DBL, s->code_ptr - 2, 2); } else if (USE_REG_TB && !in_prologue) { @@ -706,7 +706,7 @@ static void tcg_out_ld_abs(TCGContext *s, TCGType type, { intptr_t addr =3D (intptr_t)abs; =20 - if ((s390_facilities & FACILITY_GEN_INST_EXT) && !(addr & 1)) { + if (HAVE_FACILITY(GEN_INST_EXT) && !(addr & 1)) { ptrdiff_t disp =3D tcg_pcrel_diff(s, abs) >> 1; if (disp =3D=3D (int32_t)disp) { if (type =3D=3D TCG_TYPE_I32) { @@ -740,7 +740,7 @@ static inline void tcg_out_risbg(TCGContext *s, TCGReg = dest, TCGReg src, =20 static void tgen_ext8s(TCGContext *s, TCGType type, TCGReg dest, TCGReg sr= c) { - if (s390_facilities & FACILITY_EXT_IMM) { + if (HAVE_FACILITY(EXT_IMM)) { tcg_out_insn(s, RRE, LGBR, dest, src); return; } @@ -760,7 +760,7 @@ static void tgen_ext8s(TCGContext *s, TCGType type, TCG= Reg dest, TCGReg src) =20 static void tgen_ext8u(TCGContext *s, TCGType type, TCGReg dest, TCGReg sr= c) { - if (s390_facilities & FACILITY_EXT_IMM) { + if (HAVE_FACILITY(EXT_IMM)) { tcg_out_insn(s, RRE, LLGCR, dest, src); return; } @@ -780,7 +780,7 @@ static void tgen_ext8u(TCGContext *s, TCGType type, TCG= Reg dest, TCGReg src) =20 static void tgen_ext16s(TCGContext *s, TCGType type, TCGReg dest, TCGReg s= rc) { - if (s390_facilities & FACILITY_EXT_IMM) { + if (HAVE_FACILITY(EXT_IMM)) { tcg_out_insn(s, RRE, LGHR, dest, src); return; } @@ -800,7 +800,7 @@ static void tgen_ext16s(TCGContext *s, TCGType type, TC= GReg dest, TCGReg src) =20 static void tgen_ext16u(TCGContext *s, TCGType type, TCGReg dest, TCGReg s= rc) { - if (s390_facilities & FACILITY_EXT_IMM) { + if (HAVE_FACILITY(EXT_IMM)) { tcg_out_insn(s, RRE, LLGHR, dest, src); return; } @@ -888,7 +888,7 @@ static void tgen_andi(TCGContext *s, TCGType type, TCGR= eg dest, uint64_t val) tgen_ext32u(s, dest, dest); return; } - if (s390_facilities & FACILITY_EXT_IMM) { + if (HAVE_FACILITY(EXT_IMM)) { if ((val & valid) =3D=3D 0xff) { tgen_ext8u(s, TCG_TYPE_I64, dest, dest); return; @@ -909,7 +909,7 @@ static void tgen_andi(TCGContext *s, TCGType type, TCGR= eg dest, uint64_t val) } =20 /* Try all 48-bit insns that can perform it in one go. */ - if (s390_facilities & FACILITY_EXT_IMM) { + if (HAVE_FACILITY(EXT_IMM)) { for (i =3D 0; i < 2; i++) { tcg_target_ulong mask =3D ~(0xffffffffull << i*32); if (((val | ~valid) & mask) =3D=3D mask) { @@ -918,7 +918,7 @@ static void tgen_andi(TCGContext *s, TCGType type, TCGR= eg dest, uint64_t val) } } } - if ((s390_facilities & FACILITY_GEN_INST_EXT) && risbg_mask(val)) { + if (HAVE_FACILITY(GEN_INST_EXT) && risbg_mask(val)) { tgen_andi_risbg(s, dest, dest, val); return; } @@ -967,7 +967,7 @@ static void tgen_ori(TCGContext *s, TCGType type, TCGRe= g dest, uint64_t val) } =20 /* Try all 48-bit insns that can perform it in one go. */ - if (s390_facilities & FACILITY_EXT_IMM) { + if (HAVE_FACILITY(EXT_IMM)) { for (i =3D 0; i < 2; i++) { tcg_target_ulong mask =3D (0xffffffffull << i*32); if ((val & mask) !=3D 0 && (val & ~mask) =3D=3D 0) { @@ -992,7 +992,7 @@ static void tgen_ori(TCGContext *s, TCGType type, TCGRe= g dest, uint64_t val) /* Perform the OR via sequential modifications to the high and low parts. Do this via recursion to handle 16-bit vs 32-bit masks in each half. */ - tcg_debug_assert(s390_facilities & FACILITY_EXT_IMM); + tcg_debug_assert(HAVE_FACILITY(EXT_IMM)); tgen_ori(s, type, dest, val & 0x00000000ffffffffull); tgen_ori(s, type, dest, val & 0xffffffff00000000ull); } @@ -1001,7 +1001,7 @@ static void tgen_ori(TCGContext *s, TCGType type, TCG= Reg dest, uint64_t val) static void tgen_xori(TCGContext *s, TCGType type, TCGReg dest, uint64_t v= al) { /* Try all 48-bit insns that can perform it in one go. */ - if (s390_facilities & FACILITY_EXT_IMM) { + if (HAVE_FACILITY(EXT_IMM)) { if ((val & 0xffffffff00000000ull) =3D=3D 0) { tcg_out_insn(s, RIL, XILF, dest, val); return; @@ -1025,7 +1025,7 @@ static void tgen_xori(TCGContext *s, TCGType type, TC= GReg dest, uint64_t val) tcg_tbrel_diff(s, NULL)); } else { /* Perform the xor by parts. */ - tcg_debug_assert(s390_facilities & FACILITY_EXT_IMM); + tcg_debug_assert(HAVE_FACILITY(EXT_IMM)); if (val & 0xffffffff) { tcg_out_insn(s, RIL, XILF, dest, val); } @@ -1059,7 +1059,7 @@ static int tgen_cmp(TCGContext *s, TCGType type, TCGC= ond c, TCGReg r1, goto exit; } =20 - if (s390_facilities & FACILITY_EXT_IMM) { + if (HAVE_FACILITY(EXT_IMM)) { if (type =3D=3D TCG_TYPE_I32) { op =3D (is_unsigned ? RIL_CLFI : RIL_CFI); tcg_out_insn_RIL(s, op, r1, c2); @@ -1122,7 +1122,7 @@ static void tgen_setcond(TCGContext *s, TCGType type,= TCGCond cond, bool have_loc; =20 /* With LOC2, we can always emit the minimum 3 insns. */ - if (s390_facilities & FACILITY_LOAD_ON_COND2) { + if (HAVE_FACILITY(LOAD_ON_COND2)) { /* Emit: d =3D 0, d =3D (cc ? 1 : d). */ cc =3D tgen_cmp(s, type, cond, c1, c2, c2const, false); tcg_out_movi(s, TCG_TYPE_I64, dest, 0); @@ -1130,7 +1130,7 @@ static void tgen_setcond(TCGContext *s, TCGType type,= TCGCond cond, return; } =20 - have_loc =3D (s390_facilities & FACILITY_LOAD_ON_COND) !=3D 0; + have_loc =3D HAVE_FACILITY(LOAD_ON_COND); =20 /* For HAVE_LOC, only the paths through GTU/GT/LEU/LE are smaller. */ restart: @@ -1216,7 +1216,7 @@ static void tgen_movcond(TCGContext *s, TCGType type,= TCGCond c, TCGReg dest, TCGArg v3, int v3const) { int cc; - if (s390_facilities & FACILITY_LOAD_ON_COND) { + if (HAVE_FACILITY(LOAD_ON_COND)) { cc =3D tgen_cmp(s, type, c, c1, c2, c2const, false); if (v3const) { tcg_out_insn(s, RIE, LOCGHI, dest, v3, cc); @@ -1249,7 +1249,7 @@ static void tgen_clz(TCGContext *s, TCGReg dest, TCGR= eg a1, } else { tcg_out_mov(s, TCG_TYPE_I64, dest, a2); } - if (s390_facilities & FACILITY_LOAD_ON_COND) { + if (HAVE_FACILITY(LOAD_ON_COND)) { /* Emit: if (one bit found) dest =3D r0. */ tcg_out_insn(s, RRF, LOCGR, dest, TCG_REG_R0, 2); } else { @@ -1325,7 +1325,7 @@ static void tgen_brcond(TCGContext *s, TCGType type, = TCGCond c, { int cc; =20 - if (s390_facilities & FACILITY_GEN_INST_EXT) { + if (HAVE_FACILITY(GEN_INST_EXT)) { bool is_unsigned =3D is_unsigned_cond(c); bool in_range; S390Opcode opc; @@ -1519,7 +1519,7 @@ static TCGReg tcg_out_tlb_read(TCGContext *s, TCGReg = addr_reg, MemOp opc, cross pages using the address of the last byte of the access. */ a_off =3D (a_bits >=3D s_bits ? 0 : s_mask - a_mask); tlb_mask =3D (uint64_t)TARGET_PAGE_MASK | a_mask; - if ((s390_facilities & FACILITY_GEN_INST_EXT) && a_off =3D=3D 0) { + if (HAVE_FACILITY(GEN_INST_EXT) && a_off =3D=3D 0) { tgen_andi_risbg(s, TCG_REG_R3, addr_reg, tlb_mask); } else { tcg_out_insn(s, RX, LA, TCG_REG_R3, addr_reg, TCG_REG_NONE, a_off); @@ -1810,7 +1810,7 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcod= e opc, tcg_out_insn(s, RI, AHI, a0, a2); break; } - if (s390_facilities & FACILITY_EXT_IMM) { + if (HAVE_FACILITY(EXT_IMM)) { tcg_out_insn(s, RIL, AFI, a0, a2); break; } @@ -2056,7 +2056,7 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcod= e opc, tcg_out_insn(s, RI, AGHI, a0, a2); break; } - if (s390_facilities & FACILITY_EXT_IMM) { + if (HAVE_FACILITY(EXT_IMM)) { if (a2 =3D=3D (int32_t)a2) { tcg_out_insn(s, RIL, AGFI, a0, a2); break; @@ -2281,8 +2281,7 @@ static inline void tcg_out_op(TCGContext *s, TCGOpcod= e opc, /* The host memory model is quite strong, we simply need to serialize the instruction stream. */ if (args[0] & TCG_MO_ST_LD) { - tcg_out_insn(s, RR, BCR, - s390_facilities & FACILITY_FAST_BCR_SER ? 14 : 15= , 0); + tcg_out_insn(s, RR, BCR, HAVE_FACILITY(FAST_BCR_SER) ? 14 : 15= , 0); } break; =20 @@ -2345,7 +2344,7 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpc= ode op) case INDEX_op_or_i64: case INDEX_op_xor_i32: case INDEX_op_xor_i64: - return (s390_facilities & FACILITY_DISTINCT_OPS + return (HAVE_FACILITY(DISTINCT_OPS) ? C_O1_I2(r, r, ri) : C_O1_I2(r, 0, ri)); =20 @@ -2353,19 +2352,19 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGO= pcode op) /* If we have the general-instruction-extensions, then we have MULTIPLY SINGLE IMMEDIATE with a signed 32-bit, otherwise we have only MULTIPLY HALFWORD IMMEDIATE, with a signed 16-bit. */ - return (s390_facilities & FACILITY_GEN_INST_EXT + return (HAVE_FACILITY(GEN_INST_EXT) ? C_O1_I2(r, 0, ri) : C_O1_I2(r, 0, rI)); =20 case INDEX_op_mul_i64: - return (s390_facilities & FACILITY_GEN_INST_EXT + return (HAVE_FACILITY(GEN_INST_EXT) ? C_O1_I2(r, 0, rJ) : C_O1_I2(r, 0, rI)); =20 case INDEX_op_shl_i32: case INDEX_op_shr_i32: case INDEX_op_sar_i32: - return (s390_facilities & FACILITY_DISTINCT_OPS + return (HAVE_FACILITY(DISTINCT_OPS) ? C_O1_I2(r, r, ri) : C_O1_I2(r, 0, ri)); =20 @@ -2409,7 +2408,7 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpc= ode op) =20 case INDEX_op_movcond_i32: case INDEX_op_movcond_i64: - return (s390_facilities & FACILITY_LOAD_ON_COND2 + return (HAVE_FACILITY(LOAD_ON_COND2) ? C_O1_I4(r, r, ri, rI, 0) : C_O1_I4(r, r, ri, r, 0)); =20 @@ -2424,13 +2423,13 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGO= pcode op) =20 case INDEX_op_add2_i32: case INDEX_op_sub2_i32: - return (s390_facilities & FACILITY_EXT_IMM + return (HAVE_FACILITY(EXT_IMM) ? C_O2_I4(r, r, 0, 1, ri, r) : C_O2_I4(r, r, 0, 1, r, r)); =20 case INDEX_op_add2_i64: case INDEX_op_sub2_i64: - return (s390_facilities & FACILITY_EXT_IMM + return (HAVE_FACILITY(EXT_IMM) ? C_O2_I4(r, r, 0, 1, rA, r) : C_O2_I4(r, r, 0, 1, r, r)); =20 @@ -2446,13 +2445,12 @@ static void query_s390_facilities(void) /* Is STORE FACILITY LIST EXTENDED available? Honestly, I believe this is present on all 64-bit systems, but let's check for it anyway. */ if (hwcap & HWCAP_S390_STFLE) { - register int r0 __asm__("0"); - register void *r1 __asm__("1"); + register int r0 __asm__("0") =3D ARRAY_SIZE(s390_facilities) - 1; + register void *r1 __asm__("1") =3D s390_facilities; =20 /* stfle 0(%r1) */ - r1 =3D &s390_facilities; asm volatile(".word 0xb2b0,0x1000" - : "=3Dr"(r0) : "0"(0), "r"(r1) : "memory", "cc"); + : "=3Dr"(r0) : "r"(r0), "r"(r1) : "memory", "cc"); } } =20 --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631741589; cv=none; d=zohomail.com; s=zohoarc; b=Q0lP5TCIEaOU/BIrYg99IGVwE6mvjOtgJGckEzTnG0lydmhAMacpVa1lHRw02LzYjUE8K3KTY1a4FXiupBk0GG5kZBeA7b9dxfZuL2BvYiTandm7KyFZ4HZbu6ZdOxU/CsFMSAD5PgwRT4yDbuPUkhw9GtXm8Gi0H78U9+Av0h8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631741589; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=96nVQLEZ53b4QwC1lGa1oK9CmjyQGeWueQtnt7IuwWU=; b=iHPV2Mmzd87uwUOnWHib0CnZ5VN57Tu4YAGTMBt+O4WGqGmTJ3wQTcSxF4k8+kL/zjkFY9/o13hfeq0ZpnPL4Lt7RZHU+I5zO16d56D9hInBCQ5MwbcYeW/EZPdGfI+hBGY9izXjpMY6Q0lNa2LDgObqCzXEpQ/Tw1kozAE8y1M= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631741589426567.4739278894863; Wed, 15 Sep 2021 14:33:09 -0700 (PDT) Received: from localhost ([::1]:56744 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQcWh-0006Ac-O5 for importer@patchew.org; Wed, 15 Sep 2021 17:33:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42608) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcV2-0003Vz-CS for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:24 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]:41925) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcV0-0003Gj-Df for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:24 -0400 Received: by mail-pl1-x634.google.com with SMTP id v2so2458197plp.8 for ; Wed, 15 Sep 2021 14:31:21 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=96nVQLEZ53b4QwC1lGa1oK9CmjyQGeWueQtnt7IuwWU=; b=DLh2YYgVR3drrAyE3Rn0PiwfH4C95MENV9ru2qKh8ebpfjivxTDHBdxFAiOqAsbrbY qBdjdtdAATkbmqrIlf/JpM+RGrW48eZASSolE6B4o7Qv2sNTm3E9s2xV47UMzfynyBO4 G8ldafDFGnlmRot2NTFin0cPFHrNjhln+LK12ihdv+eU9oHJ0PhcFZ2mHQ6e1Wdn8Kus xaRuU51pr8lmu7H97JMcRhzkYMRhU6hQbnwFZedu347JzSBo5OmFX7bXcT9ssJuAaITb cF/rN5YMOHZZlfh9aQxY6g03gYWqJbgV1WMRui5tUr69GKuWGYCjFITkNFdnceqSymLD MSsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=96nVQLEZ53b4QwC1lGa1oK9CmjyQGeWueQtnt7IuwWU=; b=faBGk/EpeklvkDlrGTp13KSpAfhdeuzLT0aK2g3+ntjGk88MSJ+ihZWhboOR99YqMi PwSaQn4UFPrCDfUw9gbSpMA70uVNBFvKlo2hfi0Thuk7Kb2cZ++FGNrKnO8Xx6uLLZcy x+NimJDVAEIWXLQuN5R40XiINzvkeuNi0eygJYO1xuboJFsmDjq6hQ9By/80y8FBEZC0 93rkVEbFOtQZrAUacMY8AxYp4Va9ANrb59MaC3Fyqr2JUXgnqJnnPET4e74E+fbp1nj7 tI8PWXxivcCgpnWhgLKol6w28H0DeRje9MwOa+dZp4eRfEphPGXBym35LkIYhQEwiuVT ztog== X-Gm-Message-State: AOAM53121EUFrOCvTOHrcKkSIK2WddULt9Zrxp0od+yF6d44NEbVarUb 86iI6I4IWYE9/GojI8aQxzWYhKgKJ7j3nA== X-Google-Smtp-Source: ABdhPJwSLo8Y/U9LYakEFOVSXvcjdx2utKjrwsSWpkli4XxfF2lG/EtlHzd7MD/QVMAidoeRGH1FLA== X-Received: by 2002:a17:90a:a585:: with SMTP id b5mr10815022pjq.201.1631741480970; Wed, 15 Sep 2021 14:31:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 04/16] tcg/s390x: Merge TCG_AREG0 and TCG_REG_CALL_STACK into TCGReg Date: Wed, 15 Sep 2021 14:31:02 -0700 Message-Id: <20210915213114.1923776-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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: , Cc: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631741591201100001 Content-Type: text/plain; charset="utf-8" They are rightly values in the same enumeration. Reviewed-by: David Hildenbrand Signed-off-by: Richard Henderson --- tcg/s390x/tcg-target.h | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/tcg/s390x/tcg-target.h b/tcg/s390x/tcg-target.h index 18d0d330e6..0174357f1b 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -32,22 +32,13 @@ #define MAX_CODE_GEN_BUFFER_SIZE (3 * GiB) =20 typedef enum TCGReg { - TCG_REG_R0 =3D 0, - TCG_REG_R1, - TCG_REG_R2, - TCG_REG_R3, - TCG_REG_R4, - TCG_REG_R5, - TCG_REG_R6, - TCG_REG_R7, - TCG_REG_R8, - TCG_REG_R9, - TCG_REG_R10, - TCG_REG_R11, - TCG_REG_R12, - TCG_REG_R13, - TCG_REG_R14, - TCG_REG_R15 + TCG_REG_R0, TCG_REG_R1, TCG_REG_R2, TCG_REG_R3, + TCG_REG_R4, TCG_REG_R5, TCG_REG_R6, TCG_REG_R7, + TCG_REG_R8, TCG_REG_R9, TCG_REG_R10, TCG_REG_R11, + TCG_REG_R12, TCG_REG_R13, TCG_REG_R14, TCG_REG_R15, + + TCG_AREG0 =3D TCG_REG_R10, + TCG_REG_CALL_STACK =3D TCG_REG_R15 } TCGReg; =20 #define TCG_TARGET_NB_REGS 16 @@ -138,7 +129,6 @@ extern uint64_t s390_facilities[1]; #define TCG_TARGET_HAS_mulsh_i64 0 =20 /* used for function call generation */ -#define TCG_REG_CALL_STACK TCG_REG_R15 #define TCG_TARGET_STACK_ALIGN 8 #define TCG_TARGET_CALL_STACK_OFFSET 160 =20 @@ -147,10 +137,6 @@ extern uint64_t s390_facilities[1]; =20 #define TCG_TARGET_DEFAULT_MO (TCG_MO_ALL & ~TCG_MO_ST_LD) =20 -enum { - TCG_AREG0 =3D TCG_REG_R10, -}; - static inline void tb_target_set_jmp_target(uintptr_t tc_ptr, uintptr_t jm= p_rx, uintptr_t jmp_rw, uintptr_t ad= dr) { --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631741731; cv=none; d=zohomail.com; s=zohoarc; b=KJlY/PeXqK88VoPAnXzEl9N4vB5j6J56T44wqGL7Ubeg89RP/sJU05Pvjac4et0t5P1aSAxEzkFXFiJMJiuAp8YGvie3vSV2U9o7tq4mzEkD3VhormFwT/Mlhb+Ow6CXnOjVdKIvwvzrwZH685PYr50hlh2VykruZryoVXYy5SQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631741731; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=YF+YwhywbQ+WDMI8nngVff+28BPsfxJQ1K0OwwPJsgI=; b=YWl7AQw28bGmjnb2Goa473nN8/ipChUAIdnm5EvBkwrKOT/P5CW7sKrCPuk1UKd5O4Jpl5UrG6wptLpr6K0FlICWIaGc1rM+gZZE+vTLJdy5K3rVpBGcgr+DHzio14wExJlr6+v7IXmPnmyqxI2HkxOgC42l3L/vHh440jnMvHk= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631741731063191.8903339462089; Wed, 15 Sep 2021 14:35:31 -0700 (PDT) Received: from localhost ([::1]:37134 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQcYw-0003S2-Rz for importer@patchew.org; Wed, 15 Sep 2021 17:35:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42644) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcV3-0003ZG-OT for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:25 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]:44911) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcV1-0003Ha-42 for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:25 -0400 Received: by mail-pl1-x634.google.com with SMTP id d18so2439429pll.11 for ; Wed, 15 Sep 2021 14:31:22 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YF+YwhywbQ+WDMI8nngVff+28BPsfxJQ1K0OwwPJsgI=; b=SwNxBdO1s0O7Rhr334dtAS+YhV1ylX0Gat0A15KE1UFaBeQaQOajZMLR1gmVDQLGIr nVH//tR6Xpv+t6bXej7jFuZwcXicElsrsm9YKtHh9UXSiQQeU63K9TdnuTJ/bABhCBcc dmWjXDD/LL2PY13xQLYRWNg+/kXlTf+meE0UORU4e8fLkN6UK89S3dP2ntWR3+E2XiSz lQTJZHLITeMY8w+6nMZ7Z2AJLLwS9TJSFAA+SNzIeWqKKM29RMUUV3/eVLhMcZ1GMpwD /+8QXHBH9rF0TnJCCHKSBBrUj0StEjkrLC46xEhfaPsYpziXcZyoSkKTgyM9JtKw3aQL 1YJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YF+YwhywbQ+WDMI8nngVff+28BPsfxJQ1K0OwwPJsgI=; b=KweyyMz+YlrS08+fk6cp/jdr9ByyGVr3Vl15TP7pP0edlwYt1lCmUdJCCt/keIclM5 zWwdHZow3YDTrdtJJzV+/+VlAhTid0Mx+CGRck8qASNINy2r/LYVQMcuTh8F7pNj3Rma +25Cvkf97oYswazTQpvJoiA7sFIrdEaZr4BuKrtJ1y5xBlIP4eypgLYr406mDstGu5Zl T2Z0FVh3qTC7SXeEGSDv6CGnva4CRv2aGRPmy/Ol670JhptluA8csDM6927u7qEC7Ana VDvKyiS2yC9IszzWwE1xMWBV1geWOrScFD0eCaf+KD5FNAHLXQcLpKLJpnrDRdsSf7Te 4ZYg== X-Gm-Message-State: AOAM532W6xEC/3wejlj9bZFgYOvvvoih7in6nG/Jt+Mmdzm1avXd8OjA 2nz38AAr9NE8w7DL/E8QGYiM8b181A04Kw== X-Google-Smtp-Source: ABdhPJxfkD/r48q3HyVIZSSodiPxnl7FFJ7akwUh5UZhr7gt6YYv0gJ7kNkYyocnmoIvNFiNXuuWZA== X-Received: by 2002:a17:90a:be06:: with SMTP id a6mr10851907pjs.60.1631741481702; Wed, 15 Sep 2021 14:31:21 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 05/16] tcg/s390x: Add host vector framework Date: Wed, 15 Sep 2021 14:31:03 -0700 Message-Id: <20210915213114.1923776-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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: , Cc: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631741732197100001 Content-Type: text/plain; charset="utf-8" Add registers and function stubs. The functionality is disabled via squashing s390_facilities[2] to 0. We must still include results for the mandatory opcodes in tcg_target_op_def, as all opcodes are checked during tcg init. Reviewed-by: David Hildenbrand Signed-off-by: Richard Henderson --- tcg/s390x/tcg-target-con-set.h | 4 + tcg/s390x/tcg-target-con-str.h | 1 + tcg/s390x/tcg-target.h | 35 ++++++++- tcg/s390x/tcg-target.opc.h | 12 +++ tcg/s390x/tcg-target.c.inc | 137 ++++++++++++++++++++++++++++++++- 5 files changed, 184 insertions(+), 5 deletions(-) create mode 100644 tcg/s390x/tcg-target.opc.h diff --git a/tcg/s390x/tcg-target-con-set.h b/tcg/s390x/tcg-target-con-set.h index 31985e4903..ce9432cfe3 100644 --- a/tcg/s390x/tcg-target-con-set.h +++ b/tcg/s390x/tcg-target-con-set.h @@ -13,13 +13,17 @@ C_O0_I1(r) C_O0_I2(L, L) C_O0_I2(r, r) C_O0_I2(r, ri) +C_O0_I2(v, r) C_O1_I1(r, L) C_O1_I1(r, r) +C_O1_I1(v, r) +C_O1_I1(v, vr) C_O1_I2(r, 0, ri) C_O1_I2(r, 0, rI) C_O1_I2(r, 0, rJ) C_O1_I2(r, r, ri) C_O1_I2(r, rZ, r) +C_O1_I2(v, v, v) C_O1_I4(r, r, ri, r, 0) C_O1_I4(r, r, ri, rI, 0) C_O2_I2(b, a, 0, r) diff --git a/tcg/s390x/tcg-target-con-str.h b/tcg/s390x/tcg-target-con-str.h index 892d8f8c06..8bb0358ae5 100644 --- a/tcg/s390x/tcg-target-con-str.h +++ b/tcg/s390x/tcg-target-con-str.h @@ -10,6 +10,7 @@ */ REGS('r', ALL_GENERAL_REGS) REGS('L', ALL_GENERAL_REGS & ~SOFTMMU_RESERVE_REGS) +REGS('v', ALL_VECTOR_REGS) /* * A (single) even/odd pair for division. * TODO: Add something to the register allocator to allow diff --git a/tcg/s390x/tcg-target.h b/tcg/s390x/tcg-target.h index 0174357f1b..5a03c5f2f4 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -37,11 +37,20 @@ typedef enum TCGReg { TCG_REG_R8, TCG_REG_R9, TCG_REG_R10, TCG_REG_R11, TCG_REG_R12, TCG_REG_R13, TCG_REG_R14, TCG_REG_R15, =20 + TCG_REG_V0 =3D 32, TCG_REG_V1, TCG_REG_V2, TCG_REG_V3, + TCG_REG_V4, TCG_REG_V5, TCG_REG_V6, TCG_REG_V7, + TCG_REG_V8, TCG_REG_V9, TCG_REG_V10, TCG_REG_V11, + TCG_REG_V12, TCG_REG_V13, TCG_REG_V14, TCG_REG_V15, + TCG_REG_V16, TCG_REG_V17, TCG_REG_V18, TCG_REG_V19, + TCG_REG_V20, TCG_REG_V21, TCG_REG_V22, TCG_REG_V23, + TCG_REG_V24, TCG_REG_V25, TCG_REG_V26, TCG_REG_V27, + TCG_REG_V28, TCG_REG_V29, TCG_REG_V30, TCG_REG_V31, + TCG_AREG0 =3D TCG_REG_R10, TCG_REG_CALL_STACK =3D TCG_REG_R15 } TCGReg; =20 -#define TCG_TARGET_NB_REGS 16 +#define TCG_TARGET_NB_REGS 64 =20 /* A list of relevant facilities used by this translator. Some of these are required for proper operation, and these are checked at startup. */ @@ -54,8 +63,9 @@ typedef enum TCGReg { #define FACILITY_FAST_BCR_SER FACILITY_LOAD_ON_COND #define FACILITY_DISTINCT_OPS FACILITY_LOAD_ON_COND #define FACILITY_LOAD_ON_COND2 53 +#define FACILITY_VECTOR 129 =20 -extern uint64_t s390_facilities[1]; +extern uint64_t s390_facilities[3]; =20 #define HAVE_FACILITY(X) \ ((s390_facilities[FACILITY_##X / 64] >> (63 - FACILITY_##X % 64)) & 1) @@ -128,6 +138,27 @@ extern uint64_t s390_facilities[1]; #define TCG_TARGET_HAS_muluh_i64 0 #define TCG_TARGET_HAS_mulsh_i64 0 =20 +#define TCG_TARGET_HAS_v64 HAVE_FACILITY(VECTOR) +#define TCG_TARGET_HAS_v128 HAVE_FACILITY(VECTOR) +#define TCG_TARGET_HAS_v256 0 + +#define TCG_TARGET_HAS_andc_vec 0 +#define TCG_TARGET_HAS_orc_vec 0 +#define TCG_TARGET_HAS_not_vec 0 +#define TCG_TARGET_HAS_neg_vec 0 +#define TCG_TARGET_HAS_abs_vec 0 +#define TCG_TARGET_HAS_roti_vec 0 +#define TCG_TARGET_HAS_rots_vec 0 +#define TCG_TARGET_HAS_rotv_vec 0 +#define TCG_TARGET_HAS_shi_vec 0 +#define TCG_TARGET_HAS_shs_vec 0 +#define TCG_TARGET_HAS_shv_vec 0 +#define TCG_TARGET_HAS_mul_vec 0 +#define TCG_TARGET_HAS_sat_vec 0 +#define TCG_TARGET_HAS_minmax_vec 0 +#define TCG_TARGET_HAS_bitsel_vec 0 +#define TCG_TARGET_HAS_cmpsel_vec 0 + /* used for function call generation */ #define TCG_TARGET_STACK_ALIGN 8 #define TCG_TARGET_CALL_STACK_OFFSET 160 diff --git a/tcg/s390x/tcg-target.opc.h b/tcg/s390x/tcg-target.opc.h new file mode 100644 index 0000000000..67afc82a93 --- /dev/null +++ b/tcg/s390x/tcg-target.opc.h @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2021 Linaro + * + * This work is licensed under the terms of the GNU GPL, version 2 or + * (at your option) any later version. + * + * See the COPYING file in the top-level directory for details. + * + * Target-specific opcodes for host vector expansion. These will be + * emitted by tcg_expand_vec_op. For those familiar with GCC internals, + * consider these to be UNSPEC with names. + */ diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index f7e4a619e7..c438751834 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -43,6 +43,8 @@ #define TCG_CT_CONST_ZERO 0x800 =20 #define ALL_GENERAL_REGS MAKE_64BIT_MASK(0, 16) +#define ALL_VECTOR_REGS MAKE_64BIT_MASK(32, 32) + /* * For softmmu, we need to avoid conflicts with the first 3 * argument registers to perform the tlb lookup, and to call @@ -268,8 +270,13 @@ typedef enum S390Opcode { =20 #ifdef CONFIG_DEBUG_TCG static const char * const tcg_target_reg_names[TCG_TARGET_NB_REGS] =3D { - "%r0", "%r1", "%r2", "%r3", "%r4", "%r5", "%r6", "%r7", - "%r8", "%r9", "%r10" "%r11" "%r12" "%r13" "%r14" "%r15" + "%r0", "%r1", "%r2", "%r3", "%r4", "%r5", "%r6", "%r7", + "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15", + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + "%v0", "%v1", "%v2", "%v3", "%v4", "%v5", "%v6", "%v7", + "%v8", "%v9", "%v10", "%v11", "%v12", "%v13", "%v14", "%v15", + "%v16", "%v17", "%v18", "%v19", "%v20", "%v21", "%v22", "%v23", + "%v24", "%v25", "%v26", "%v27", "%v28", "%v29", "%v30", "%v31", }; #endif =20 @@ -295,6 +302,32 @@ static const int tcg_target_reg_alloc_order[] =3D { TCG_REG_R4, TCG_REG_R3, TCG_REG_R2, + + /* V8-V15 are call saved, and omitted. */ + TCG_REG_V0, + TCG_REG_V1, + TCG_REG_V2, + TCG_REG_V3, + TCG_REG_V4, + TCG_REG_V5, + TCG_REG_V6, + TCG_REG_V7, + TCG_REG_V16, + TCG_REG_V17, + TCG_REG_V18, + TCG_REG_V19, + TCG_REG_V20, + TCG_REG_V21, + TCG_REG_V22, + TCG_REG_V23, + TCG_REG_V24, + TCG_REG_V25, + TCG_REG_V26, + TCG_REG_V27, + TCG_REG_V28, + TCG_REG_V29, + TCG_REG_V30, + TCG_REG_V31, }; =20 static const int tcg_target_call_iarg_regs[] =3D { @@ -377,7 +410,7 @@ static void * const qemu_st_helpers[16] =3D { #endif =20 static const tcg_insn_unit *tb_ret_addr; -uint64_t s390_facilities[1]; +uint64_t s390_facilities[3]; =20 static bool patch_reloc(tcg_insn_unit *src_rw, int type, intptr_t value, intptr_t addend) @@ -2293,6 +2326,42 @@ static inline void tcg_out_op(TCGContext *s, TCGOpco= de opc, } } =20 +static bool tcg_out_dup_vec(TCGContext *s, TCGType type, unsigned vece, + TCGReg dst, TCGReg src) +{ + g_assert_not_reached(); +} + +static bool tcg_out_dupm_vec(TCGContext *s, TCGType type, unsigned vece, + TCGReg dst, TCGReg base, intptr_t offset) +{ + g_assert_not_reached(); +} + +static void tcg_out_dupi_vec(TCGContext *s, TCGType type, unsigned vece, + TCGReg dst, int64_t val) +{ + g_assert_not_reached(); +} + +static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc, + unsigned vecl, unsigned vece, + const TCGArg *args, const int *const_args) +{ + g_assert_not_reached(); +} + +int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type, unsigned vece) +{ + return 0; +} + +void tcg_expand_vec_op(TCGOpcode opc, TCGType type, unsigned vece, + TCGArg a0, ...) +{ + g_assert_not_reached(); +} + static TCGConstraintSetIndex tcg_target_op_def(TCGOpcode op) { switch (op) { @@ -2433,11 +2502,34 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGO= pcode op) ? C_O2_I4(r, r, 0, 1, rA, r) : C_O2_I4(r, r, 0, 1, r, r)); =20 + case INDEX_op_st_vec: + return C_O0_I2(v, r); + case INDEX_op_ld_vec: + case INDEX_op_dupm_vec: + return C_O1_I1(v, r); + case INDEX_op_dup_vec: + return C_O1_I1(v, vr); + case INDEX_op_add_vec: + case INDEX_op_sub_vec: + case INDEX_op_and_vec: + case INDEX_op_or_vec: + case INDEX_op_xor_vec: + case INDEX_op_cmp_vec: + return C_O1_I2(v, v, v); + default: g_assert_not_reached(); } } =20 +/* + * Mainline glibc added HWCAP_S390_VX before it was kernel abi. + * Some distros have fixed this up locally, others have not. + */ +#ifndef HWCAP_S390_VXRS +#define HWCAP_S390_VXRS 2048 +#endif + static void query_s390_facilities(void) { unsigned long hwcap =3D qemu_getauxval(AT_HWCAP); @@ -2452,6 +2544,16 @@ static void query_s390_facilities(void) asm volatile(".word 0xb2b0,0x1000" : "=3Dr"(r0) : "r"(r0), "r"(r1) : "memory", "cc"); } + + /* + * Use of vector registers requires os support beyond the facility bit. + * If the kernel does not advertise support, disable the facility bits. + * There is nothing else we currently care about in the 3rd word, so + * disable VECTOR with one store. + */ + if (1 || !(hwcap & HWCAP_S390_VXRS)) { + s390_facilities[2] =3D 0; + } } =20 static void tcg_target_init(TCGContext *s) @@ -2460,6 +2562,10 @@ static void tcg_target_init(TCGContext *s) =20 tcg_target_available_regs[TCG_TYPE_I32] =3D 0xffff; tcg_target_available_regs[TCG_TYPE_I64] =3D 0xffff; + if (HAVE_FACILITY(VECTOR)) { + tcg_target_available_regs[TCG_TYPE_V64] =3D 0xffffffff00000000ull; + tcg_target_available_regs[TCG_TYPE_V128] =3D 0xffffffff00000000ull; + } =20 tcg_target_call_clobber_regs =3D 0; tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_R0); @@ -2474,6 +2580,31 @@ static void tcg_target_init(TCGContext *s) /* The return register can be considered call-clobbered. */ tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_R14); =20 + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V0); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V1); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V2); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V3); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V4); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V5); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V6); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V7); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V16); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V17); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V18); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V19); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V20); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V21); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V22); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V23); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V24); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V25); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V26); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V27); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V28); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V29); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V30); + tcg_regset_set_reg(tcg_target_call_clobber_regs, TCG_REG_V31); + s->reserved_regs =3D 0; tcg_regset_set_reg(s->reserved_regs, TCG_TMP0); /* XXX many insns can't be used with R0, so we better avoid it for now= */ --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631741593; cv=none; d=zohomail.com; s=zohoarc; b=jT2Q08S4pgOJsOFB1JR+gG+daoZjj3rPqAa7J4ieVmGWFjYF+QErTThOvihOfYbaDF0AU2q0bUxX323iXPptoWuyfp6Nw96j5l7PIjTn9f17BkRdbwJNpf5FOWx+uUnpT/27tGuPryCXlQElZsHRsBxTyEBEx8U/5ctoe3YP8OM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631741593; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=uHvPFpIuiYqhsTXY34UD3Ql4hY+bg5Ikh0pMVxAghl0=; b=APMDIr0Anfn760cxerqahjPjSjpxedxeEjA+m7NVt5QTZb+vMJ0c2+OeQ78gvFvDIVtxwH0gz5S7rqeWXaf1PMZuQ6OX1Ee2I3pOwHg6vlTblmTprPNXIhk0fRleoTEj0vHOKUs5kq4vSyZ4ZhSCjESFggoZ2rW+UAjYcbTxwgQ= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631741593499447.91099993322155; Wed, 15 Sep 2021 14:33:13 -0700 (PDT) Received: from localhost ([::1]:57376 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQcWm-0006bt-BT for importer@patchew.org; Wed, 15 Sep 2021 17:33:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42646) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcV4-0003Zl-4O for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:26 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:55234) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcV1-0003ID-PY for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:25 -0400 Received: by mail-pj1-x1031.google.com with SMTP id i19so3074818pjv.4 for ; Wed, 15 Sep 2021 14:31:23 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=uHvPFpIuiYqhsTXY34UD3Ql4hY+bg5Ikh0pMVxAghl0=; b=sj0Ny+kXI27sKsIkWjYhChOR4uunuxyhwwoWHF7M1rcT9wzBjcgFL6VIUvBEK0S8Rz ZEJ8eTl6YuIJW36jnb7C3+sCjL2LTuU2DNl5P8U0BpQImDzUz9UQyv1dgkaCZP8dl4pR JB14BWru1BK1o6NXiyL/isVaDvD+QGXbPt6q0JAW11/5spWasj0C/CPS+dL57TOrFfnN ptBpZSAlUyHwnWiGyzYjGtUY3icAglcnqKRhfPOc9gW1AGBNEeXY3kKY5gQ1fcWSTNzP arIsPjC0wOhruWQG/Veg/klLX1BY02bxQzEtJvgipNDgpxToWCJ+LHH1gZF443peU6EO gKpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uHvPFpIuiYqhsTXY34UD3Ql4hY+bg5Ikh0pMVxAghl0=; b=B0MLn77TPmY6akxw+61L95s+xDpPqPNoeFr0QZ6/FX90xbaVjrR3y0YP08djawxbyp P9NMvg94NPrQFdsXyMmI7b5UVnopmJMO6fHmmajX0ghnOrLTEAdGbdo084yQv2lfbEne v1sL3w1Z/x8XBnaMyZjefHasthzZMVI+gcWs8bUKErMCGlMqEcmcoHhMgAbInSrZNLKz KSKyMb/ZjzUkhMBltes4lepo6xxMTz2j2g6ruDphcrNX5c1i09SRsZGIdm56qK0IwdKo 9UYm7OU7X5wulQZV40QEfOVWxM/4TXzSQgTdRzSb7b2YsH8rjwE6SvYuZCbMl7F5emO3 0Wag== X-Gm-Message-State: AOAM533I0sdbnrH3hj2QNoxuna807xnY89daACMr1o5JUN5LKEj//seH q5tBecLPYFb7xmE7891CwIeYwsNyab1t3g== X-Google-Smtp-Source: ABdhPJw+/sI2zsv821SzK3ldsojuPZSwdvlMSh7FyFOQ90jAtu8M/Ntj9qJbH25NA3lYlbgmduClww== X-Received: by 2002:a17:90a:bd08:: with SMTP id y8mr1956262pjr.123.1631741482458; Wed, 15 Sep 2021 14:31:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 06/16] tcg/s390x: Implement tcg_out_ld/st for vector types Date: Wed, 15 Sep 2021 14:31:04 -0700 Message-Id: <20210915213114.1923776-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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::1031; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1031.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: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631741595296100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: David Hildenbrand --- tcg/s390x/tcg-target.c.inc | 132 +++++++++++++++++++++++++++++++++---- 1 file changed, 120 insertions(+), 12 deletions(-) diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index c438751834..ea04aefe98 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -265,6 +265,12 @@ typedef enum S390Opcode { RX_STC =3D 0x42, RX_STH =3D 0x40, =20 + VRX_VL =3D 0xe706, + VRX_VLLEZ =3D 0xe704, + VRX_VST =3D 0xe70e, + VRX_VSTEF =3D 0xe70b, + VRX_VSTEG =3D 0xe70a, + NOP =3D 0x0707, } S390Opcode; =20 @@ -412,6 +418,16 @@ static void * const qemu_st_helpers[16] =3D { static const tcg_insn_unit *tb_ret_addr; uint64_t s390_facilities[3]; =20 +static inline bool is_general_reg(TCGReg r) +{ + return r <=3D TCG_REG_R15; +} + +static inline bool is_vector_reg(TCGReg r) +{ + return r >=3D TCG_REG_V0 && r <=3D TCG_REG_V31; +} + static bool patch_reloc(tcg_insn_unit *src_rw, int type, intptr_t value, intptr_t addend) { @@ -529,6 +545,31 @@ static void tcg_out_insn_RSY(TCGContext *s, S390Opcode= op, TCGReg r1, #define tcg_out_insn_RX tcg_out_insn_RS #define tcg_out_insn_RXY tcg_out_insn_RSY =20 +static int RXB(TCGReg v1, TCGReg v2, TCGReg v3, TCGReg v4) +{ + /* + * Shift bit 4 of each regno to its corresponding bit of RXB. + * RXB itself begins at bit 8 of the instruction so 8 - 4 =3D 4 + * is the left-shift of the 4th operand. + */ + return ((v1 & 0x10) << (4 + 3)) + | ((v2 & 0x10) << (4 + 2)) + | ((v3 & 0x10) << (4 + 1)) + | ((v4 & 0x10) << (4 + 0)); +} + +static void tcg_out_insn_VRX(TCGContext *s, S390Opcode op, TCGReg v1, + TCGReg b2, TCGReg x2, intptr_t d2, int m3) +{ + tcg_debug_assert(is_vector_reg(v1)); + tcg_debug_assert(d2 >=3D 0 && d2 <=3D 0xfff); + tcg_debug_assert(is_general_reg(x2)); + tcg_debug_assert(is_general_reg(b2)); + tcg_out16(s, (op & 0xff00) | ((v1 & 0xf) << 4) | x2); + tcg_out16(s, (b2 << 12) | d2); + tcg_out16(s, (op & 0x00ff) | RXB(v1, 0, 0, 0) | (m3 << 12)); +} + /* Emit an opcode with "type-checking" of the format. */ #define tcg_out_insn(S, FMT, OP, ...) \ glue(tcg_out_insn_,FMT)(S, glue(glue(FMT,_),OP), ## __VA_ARGS__) @@ -705,25 +746,92 @@ static void tcg_out_mem(TCGContext *s, S390Opcode opc= _rx, S390Opcode opc_rxy, } } =20 +static void tcg_out_vrx_mem(TCGContext *s, S390Opcode opc_vrx, + TCGReg data, TCGReg base, TCGReg index, + tcg_target_long ofs, int m3) +{ + if (ofs < 0 || ofs >=3D 0x1000) { + if (ofs >=3D -0x80000 && ofs < 0x80000) { + tcg_out_insn(s, RXY, LAY, TCG_TMP0, base, index, ofs); + base =3D TCG_TMP0; + index =3D TCG_REG_NONE; + ofs =3D 0; + } else { + tcg_out_movi(s, TCG_TYPE_PTR, TCG_TMP0, ofs); + if (index !=3D TCG_REG_NONE) { + tcg_out_insn(s, RRE, AGR, TCG_TMP0, index); + } + index =3D TCG_TMP0; + ofs =3D 0; + } + } + tcg_out_insn_VRX(s, opc_vrx, data, base, index, ofs, m3); +} =20 /* load data without address translation or endianness conversion */ -static inline void tcg_out_ld(TCGContext *s, TCGType type, TCGReg data, - TCGReg base, intptr_t ofs) +static void tcg_out_ld(TCGContext *s, TCGType type, TCGReg data, + TCGReg base, intptr_t ofs) { - if (type =3D=3D TCG_TYPE_I32) { - tcg_out_mem(s, RX_L, RXY_LY, data, base, TCG_REG_NONE, ofs); - } else { - tcg_out_mem(s, 0, RXY_LG, data, base, TCG_REG_NONE, ofs); + switch (type) { + case TCG_TYPE_I32: + if (likely(is_general_reg(data))) { + tcg_out_mem(s, RX_L, RXY_LY, data, base, TCG_REG_NONE, ofs); + break; + } + tcg_out_vrx_mem(s, VRX_VLLEZ, data, base, TCG_REG_NONE, ofs, MO_32= ); + break; + + case TCG_TYPE_I64: + if (likely(is_general_reg(data))) { + tcg_out_mem(s, 0, RXY_LG, data, base, TCG_REG_NONE, ofs); + break; + } + /* fallthru */ + + case TCG_TYPE_V64: + tcg_out_vrx_mem(s, VRX_VLLEZ, data, base, TCG_REG_NONE, ofs, MO_64= ); + break; + + case TCG_TYPE_V128: + /* Hint quadword aligned. */ + tcg_out_vrx_mem(s, VRX_VL, data, base, TCG_REG_NONE, ofs, 4); + break; + + default: + g_assert_not_reached(); } } =20 -static inline void tcg_out_st(TCGContext *s, TCGType type, TCGReg data, - TCGReg base, intptr_t ofs) +static void tcg_out_st(TCGContext *s, TCGType type, TCGReg data, + TCGReg base, intptr_t ofs) { - if (type =3D=3D TCG_TYPE_I32) { - tcg_out_mem(s, RX_ST, RXY_STY, data, base, TCG_REG_NONE, ofs); - } else { - tcg_out_mem(s, 0, RXY_STG, data, base, TCG_REG_NONE, ofs); + switch (type) { + case TCG_TYPE_I32: + if (likely(is_general_reg(data))) { + tcg_out_mem(s, RX_ST, RXY_STY, data, base, TCG_REG_NONE, ofs); + } else { + tcg_out_vrx_mem(s, VRX_VSTEF, data, base, TCG_REG_NONE, ofs, 1= ); + } + break; + + case TCG_TYPE_I64: + if (likely(is_general_reg(data))) { + tcg_out_mem(s, 0, RXY_STG, data, base, TCG_REG_NONE, ofs); + break; + } + /* fallthru */ + + case TCG_TYPE_V64: + tcg_out_vrx_mem(s, VRX_VSTEG, data, base, TCG_REG_NONE, ofs, 0); + break; + + case TCG_TYPE_V128: + /* Hint quadword aligned. */ + tcg_out_vrx_mem(s, VRX_VST, data, base, TCG_REG_NONE, ofs, 4); + break; + + default: + g_assert_not_reached(); } } =20 --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631741899; cv=none; d=zohomail.com; s=zohoarc; b=e9QumdKw4dBmY0Zwp20tjcPJgNbqDWD+VWT6FluDoCggF+rZaXvaWpcMQmjfCKlor1L8SbCM/Ve8ddbhNEcmlzy3vdzs4IkozWxbXYLooeyfjyzhyX3QoY7a/eepWbGJsNwo2OMY6GbMTsgAAwfVTQF4L9pHmJ6WBM7RS6Jar38= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631741899; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=tXv7oNi7xh6NpAOlqjCW4W7DgPGN1qKEQBh9TEf1NeA=; b=BSu3A8drwPcl/AdnUBCTv5Ul+vHdYpFog5A2JoJmHoFm2dA5Mggu/HTB4NypW6WdpX8JSV3Lf/bGfWjiCvrR69qg6uPzjT/b0Oes2EQAeeBwyRv222DdAJvKJ5OnS6gPG6g+tNx7RozVhrgrtpciY7cvjBTBoZNgszyYFp+nMWg= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631741899559650.4228860487137; Wed, 15 Sep 2021 14:38:19 -0700 (PDT) Received: from localhost ([::1]:45000 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQcbi-0000N8-DB for importer@patchew.org; Wed, 15 Sep 2021 17:38:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42648) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcV4-0003aS-EH for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:26 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:37607) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcV2-0003J0-Jv for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:26 -0400 Received: by mail-pg1-x530.google.com with SMTP id 17so4073061pgp.4 for ; Wed, 15 Sep 2021 14:31:24 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tXv7oNi7xh6NpAOlqjCW4W7DgPGN1qKEQBh9TEf1NeA=; b=K5ke8Os3s8EzwAmGh4eZKdefzrmYPARTB/4EDWz+gmDZ9DLdlrlD8SePwldaq0cGxU We1wkr3LJNj7XkAXr0ze7qAQlUhNu7B4sVf2hHNVpM05DJTl2+8GXdM+OCTglxZWA8zV 7NbexzNuCdRCZkFWMzQsxUmmmK6zIygbA3iff78yCAN+W9gGx5I4eCYeErrK/U8nRdSO bP4v5qJYmCzMv1VWs7SvQedM4H4Y9gfL5udOiFCBqNRmzsqPp76iwiOcr0lt5ULnQDrS CkjkpGLv+5pvSoGWy6uq921tgRquNWbUNYGyil/335b/9TEcGB9hrPxMctxXvznCkWi4 qtIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=tXv7oNi7xh6NpAOlqjCW4W7DgPGN1qKEQBh9TEf1NeA=; b=xXVM4KguAr6SGfeKtOXVQn+mKENQWYBfuMV1vPoR58LD3cwFFilY2rZS8XPyMmciGE 6vXudvXnxiv/pppaqGE5t4MOxQmOyw7SmgPJt49ipV68RZe+oGq9HV4eD+akF6qP6L1e 3hnFor8uwFj+3CJeoI+hIW5ivoEZAvHD/FlvYPRii0MS/cNLwNUYx3YGQgxaMjsxJbGF OlFw8KSZ1IjrpOAp6UbfxmuRbV75QCEMVJwmpl8xUP1xCorCVVxQdaSQAQyueOqB5h05 yv7MntPYmy8251uSeKvd/kJq09ePGr801bphLt96cFtqivxA8DC++4vFYxmIY9qjMvgc k4AA== X-Gm-Message-State: AOAM530xTnAiqrP3XROYgukqAnrpnBf+Mwo1N+najPduv6xcwUo6FPds 816opC0N6g5oVRVttXdcOvrtGRqmQ5ENVA== X-Google-Smtp-Source: ABdhPJzaABdLd5c2oevzAZPrtlYXdl5OoqyNOo7wFM52GOZ1/UfXdaZ9Dh4tR/peyloXvQwvi6LIbQ== X-Received: by 2002:a05:6a00:1706:b0:434:9def:d275 with SMTP id h6-20020a056a00170600b004349defd275mr1727745pfc.1.1631741483171; Wed, 15 Sep 2021 14:31:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 07/16] tcg/s390x: Implement tcg_out_mov for vector types Date: Wed, 15 Sep 2021 14:31:05 -0700 Message-Id: <20210915213114.1923776-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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::530; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x530.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: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631741902374100001 Content-Type: text/plain; charset="utf-8" Reviewed-by: David Hildenbrand Signed-off-by: Richard Henderson --- tcg/s390x/tcg-target.c.inc | 72 +++++++++++++++++++++++++++++++++++--- 1 file changed, 68 insertions(+), 4 deletions(-) diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index ea04aefe98..76061bfd80 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -265,6 +265,11 @@ typedef enum S390Opcode { RX_STC =3D 0x42, RX_STH =3D 0x40, =20 + VRRa_VLR =3D 0xe756, + + VRSb_VLVG =3D 0xe722, + VRSc_VLGV =3D 0xe721, + VRX_VL =3D 0xe706, VRX_VLLEZ =3D 0xe704, VRX_VST =3D 0xe70e, @@ -558,6 +563,39 @@ static int RXB(TCGReg v1, TCGReg v2, TCGReg v3, TCGReg= v4) | ((v4 & 0x10) << (4 + 0)); } =20 +static void tcg_out_insn_VRRa(TCGContext *s, S390Opcode op, + TCGReg v1, TCGReg v2, int m3) +{ + tcg_debug_assert(is_vector_reg(v1)); + tcg_debug_assert(is_vector_reg(v2)); + tcg_out16(s, (op & 0xff00) | ((v1 & 0xf) << 4) | (v2 & 0xf)); + tcg_out32(s, (op & 0x00ff) | RXB(v1, v2, 0, 0) | (m3 << 12)); +} + +static void tcg_out_insn_VRSb(TCGContext *s, S390Opcode op, TCGReg v1, + intptr_t d2, TCGReg b2, TCGReg r3, int m4) +{ + tcg_debug_assert(is_vector_reg(v1)); + tcg_debug_assert(d2 >=3D 0 && d2 <=3D 0xfff); + tcg_debug_assert(is_general_reg(b2)); + tcg_debug_assert(is_general_reg(r3)); + tcg_out16(s, (op & 0xff00) | ((v1 & 0xf) << 4) | r3); + tcg_out16(s, b2 << 12 | d2); + tcg_out16(s, (op & 0x00ff) | RXB(v1, 0, 0, 0) | (m4 << 12)); +} + +static void tcg_out_insn_VRSc(TCGContext *s, S390Opcode op, TCGReg r1, + intptr_t d2, TCGReg b2, TCGReg v3, int m4) +{ + tcg_debug_assert(is_general_reg(r1)); + tcg_debug_assert(d2 >=3D 0 && d2 <=3D 0xfff); + tcg_debug_assert(is_general_reg(b2)); + tcg_debug_assert(is_vector_reg(v3)); + tcg_out16(s, (op & 0xff00) | (r1 << 4) | (v3 & 0xf)); + tcg_out16(s, b2 << 12 | d2); + tcg_out16(s, (op & 0x00ff) | RXB(0, 0, v3, 0) | (m4 << 12)); +} + static void tcg_out_insn_VRX(TCGContext *s, S390Opcode op, TCGReg v1, TCGReg b2, TCGReg x2, intptr_t d2, int m3) { @@ -591,12 +629,38 @@ static void tcg_out_sh32(TCGContext* s, S390Opcode op= , TCGReg dest, =20 static bool tcg_out_mov(TCGContext *s, TCGType type, TCGReg dst, TCGReg sr= c) { - if (src !=3D dst) { - if (type =3D=3D TCG_TYPE_I32) { + if (src =3D=3D dst) { + return true; + } + switch (type) { + case TCG_TYPE_I32: + if (likely(is_general_reg(dst) && is_general_reg(src))) { tcg_out_insn(s, RR, LR, dst, src); - } else { - tcg_out_insn(s, RRE, LGR, dst, src); + break; } + /* fallthru */ + + case TCG_TYPE_I64: + if (likely(is_general_reg(dst))) { + if (likely(is_general_reg(src))) { + tcg_out_insn(s, RRE, LGR, dst, src); + } else { + tcg_out_insn(s, VRSc, VLGV, dst, 0, 0, src, 3); + } + break; + } else if (is_general_reg(src)) { + tcg_out_insn(s, VRSb, VLVG, dst, 0, 0, src, 3); + break; + } + /* fallthru */ + + case TCG_TYPE_V64: + case TCG_TYPE_V128: + tcg_out_insn(s, VRRa, VLR, dst, src, 0); + break; + + default: + g_assert_not_reached(); } return true; } --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631741594; cv=none; d=zohomail.com; s=zohoarc; b=Xcaqh5kJsGZE0nQF1yw6QDUF8IhVyCD6qyfeT2dGA39V5qF7BYWaqYorFE2g6RVzYSnHWqsDLZoSKyYM44SWS+bLW7Q105vzCq/a0N+SPczhMOYJi57/59WFPCl5PT0nFJT0smuDIvfAAThjudXMSzQuazdOLhXOJBK1Y0qo13s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631741594; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=stWSR7qRo/1NR9SkwqkGeYDwQgSo1q/XXGXGf1fWvmY=; b=dVwZSArdgDoacz0BW5fY7hAsK89Y4quNuFi74yZuHOvG3p7C0Iu5k4P+qtLnB5LlyqVBTo1nl52ZTzTwu61twLKgDVkABZZ4/YI98M0JWzs78hm5GUWINo2RAYPKUKJuLSl/58EbYTqnw3Z9Hs6zaW5tNmYJV2EpDhYWxvzTkEM= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631741594301297.23141436267883; Wed, 15 Sep 2021 14:33:14 -0700 (PDT) Received: from localhost ([::1]:57292 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQcWn-0006YE-9H for importer@patchew.org; Wed, 15 Sep 2021 17:33:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42666) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcV5-0003d0-H4 for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:27 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]:36615) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcV3-0003JX-Ib for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:27 -0400 Received: by mail-pf1-x432.google.com with SMTP id m26so3973374pff.3 for ; Wed, 15 Sep 2021 14:31:25 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=stWSR7qRo/1NR9SkwqkGeYDwQgSo1q/XXGXGf1fWvmY=; b=JtgJvWiKHN/9SZ4cMlbM2NiwPE/iSPyua3O90iVi8MJxD3j8nINW2PZsaI6dNXR6Oa N6PFRfUw545egu80IINCeSj71AC9+toGbO6TyBnRyHps8J1ZYDvIOCwgAbqhpEUYmHrC iZk+6K1MeSgLX95K5iYAAmeuWib6wg221QvGMVVcURll4a4Hj5Y2NaljE7UoSMOlpN9Q 2fenyK3BSYPK72CTzpZiwp6pycH/b+NwdFlB3rdYBiK3bKotB3KimKKpnu/WzGkfT1op h3ADDNh1nJcO9PZnjMu9T2xYQwggNmCTodh7psn3Fbz+rxCWolrBQZ7ksbAiBM5Lq+xw JTNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=stWSR7qRo/1NR9SkwqkGeYDwQgSo1q/XXGXGf1fWvmY=; b=nS/PpLtXlFTWk9emSwxo0toq4Zm0QUEcG9MUb914knCTrR9Xg8IPT4xAhv3JkuUcrz 6pyYyHnY/GDlreY78Y7Uq7hhbHg1uYmsAA98A/gkgNaEZKNeC56xt08n5ZtvgJv5YwmS mDjymdzWXL6HzgGRDjiqCpc5QdXue+EATfXtvGDzHY3PuMDaqwUr5BKTTOknrc/V5Wpp +BGX22cA5RqoUElMjvCPNGEdSqoTlF1MFTpYSFm5dtFkPycRdF59y9vcOsUkfjZ2IsnR AtF2+kBQNh+fTYnWLqW+towAYsXPgWE3tPjsDWySfm/gO8JXg4hkBNJ8acKZBgALic2L CHxw== X-Gm-Message-State: AOAM5331MOBWUcenS/o2wIw1TgcqR7v26T4LbMCYJg8DyP4a+tp7oowO mvGR4nFACNlFM3LK9WAFkHFMQuqXUMZivw== X-Google-Smtp-Source: ABdhPJwTct9xaj8wgv9+dqmbMxa4C84ljlV6ci8QYRNneDJMit0g3y1ph1YEVYzseT6k5izWaVHiAg== X-Received: by 2002:aa7:8088:0:b029:3c1:1672:2f25 with SMTP id v8-20020aa780880000b02903c116722f25mr1734894pff.22.1631741484016; Wed, 15 Sep 2021 14:31:24 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 08/16] tcg/s390x: Implement tcg_out_dup*_vec Date: Wed, 15 Sep 2021 14:31:06 -0700 Message-Id: <20210915213114.1923776-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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::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: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631741595343100002 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/s390x/tcg-target.c.inc | 122 ++++++++++++++++++++++++++++++++++++- 1 file changed, 119 insertions(+), 3 deletions(-) diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index 76061bfd80..b9de4dc821 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -265,13 +265,20 @@ typedef enum S390Opcode { RX_STC =3D 0x42, RX_STH =3D 0x40, =20 + VRIa_VGBM =3D 0xe744, + VRIa_VREPI =3D 0xe745, + VRIb_VGM =3D 0xe746, + VRIc_VREP =3D 0xe74d, + VRRa_VLR =3D 0xe756, + VRRf_VLVGP =3D 0xe762, =20 VRSb_VLVG =3D 0xe722, VRSc_VLGV =3D 0xe721, =20 VRX_VL =3D 0xe706, VRX_VLLEZ =3D 0xe704, + VRX_VLREP =3D 0xe705, VRX_VST =3D 0xe70e, VRX_VSTEF =3D 0xe70b, VRX_VSTEG =3D 0xe70a, @@ -563,6 +570,34 @@ static int RXB(TCGReg v1, TCGReg v2, TCGReg v3, TCGReg= v4) | ((v4 & 0x10) << (4 + 0)); } =20 +static void tcg_out_insn_VRIa(TCGContext *s, S390Opcode op, + TCGReg v1, uint16_t i2, int m3) +{ + tcg_debug_assert(is_vector_reg(v1)); + tcg_out16(s, (op & 0xff00) | ((v1 & 0xf) << 4)); + tcg_out16(s, i2); + tcg_out16(s, (op & 0x00ff) | RXB(v1, 0, 0, 0) | (m3 << 12)); +} + +static void tcg_out_insn_VRIb(TCGContext *s, S390Opcode op, + TCGReg v1, uint8_t i2, uint8_t i3, int m4) +{ + tcg_debug_assert(is_vector_reg(v1)); + tcg_out16(s, (op & 0xff00) | ((v1 & 0xf) << 4)); + tcg_out16(s, (i2 << 8) | (i3 & 0xff)); + tcg_out16(s, (op & 0x00ff) | RXB(v1, 0, 0, 0) | (m4 << 12)); +} + +static void tcg_out_insn_VRIc(TCGContext *s, S390Opcode op, + TCGReg v1, uint16_t i2, TCGReg v3, int m4) +{ + tcg_debug_assert(is_vector_reg(v1)); + tcg_debug_assert(is_vector_reg(v3)); + tcg_out16(s, (op & 0xff00) | ((v1 & 0xf) << 4) | (v3 & 0xf)); + tcg_out16(s, i2); + tcg_out16(s, (op & 0x00ff) | RXB(v1, 0, v3, 0) | (m4 << 12)); +} + static void tcg_out_insn_VRRa(TCGContext *s, S390Opcode op, TCGReg v1, TCGReg v2, int m3) { @@ -572,6 +607,17 @@ static void tcg_out_insn_VRRa(TCGContext *s, S390Opcod= e op, tcg_out32(s, (op & 0x00ff) | RXB(v1, v2, 0, 0) | (m3 << 12)); } =20 +static void tcg_out_insn_VRRf(TCGContext *s, S390Opcode op, + TCGReg v1, TCGReg r2, TCGReg r3) +{ + tcg_debug_assert(is_vector_reg(v1)); + tcg_debug_assert(is_general_reg(r2)); + tcg_debug_assert(is_general_reg(r3)); + tcg_out16(s, (op & 0xff00) | ((v1 & 0xf) << 4) | r2); + tcg_out16(s, r3 << 12); + tcg_out16(s, (op & 0x00ff) | RXB(v1, 0, 0, 0)); +} + static void tcg_out_insn_VRSb(TCGContext *s, S390Opcode op, TCGReg v1, intptr_t d2, TCGReg b2, TCGReg r3, int m4) { @@ -2501,19 +2547,89 @@ static inline void tcg_out_op(TCGContext *s, TCGOpc= ode opc, static bool tcg_out_dup_vec(TCGContext *s, TCGType type, unsigned vece, TCGReg dst, TCGReg src) { - g_assert_not_reached(); + if (is_general_reg(src)) { + /* Replicate general register into two MO_64. */ + tcg_out_insn(s, VRRf, VLVGP, dst, src, src); + if (vece =3D=3D MO_64) { + return true; + } + } + + /* + * Recall that the "standard" integer, within a vector, is the + * rightmost element of the leftmost doubleword, a-la VLLEZ. + */ + tcg_out_insn(s, VRIc, VREP, dst, (8 >> vece) - 1, src, vece); + return true; } =20 static bool tcg_out_dupm_vec(TCGContext *s, TCGType type, unsigned vece, TCGReg dst, TCGReg base, intptr_t offset) { - g_assert_not_reached(); + tcg_out_vrx_mem(s, VRX_VLREP, dst, base, TCG_REG_NONE, offset, vece); + return true; } =20 static void tcg_out_dupi_vec(TCGContext *s, TCGType type, unsigned vece, TCGReg dst, int64_t val) { - g_assert_not_reached(); + int i, mask, msb, lsb; + + /* Look for int16_t elements. */ + if (vece <=3D MO_16 || + (vece =3D=3D MO_32 ? (int32_t)val : val) =3D=3D (int16_t)val) { + tcg_out_insn(s, VRIa, VREPI, dst, val, vece); + return; + } + + /* Look for bit masks. */ + if (vece =3D=3D MO_32) { + if (risbg_mask((int32_t)val)) { + /* Handle wraparound by swapping msb and lsb. */ + if ((val & 0x80000001u) =3D=3D 0x80000001u) { + msb =3D 32 - ctz32(~val); + lsb =3D clz32(~val) - 1; + } else { + msb =3D clz32(val); + lsb =3D 31 - ctz32(val); + } + tcg_out_insn(s, VRIb, VGM, dst, lsb, msb, MO_32); + return; + } + } else { + if (risbg_mask(val)) { + /* Handle wraparound by swapping msb and lsb. */ + if ((val & 0x8000000000000001ull) =3D=3D 0x8000000000000001ull= ) { + /* Handle wraparound by swapping msb and lsb. */ + msb =3D 64 - ctz64(~val); + lsb =3D clz64(~val) - 1; + } else { + msb =3D clz64(val); + lsb =3D 63 - ctz64(val); + } + tcg_out_insn(s, VRIb, VGM, dst, lsb, msb, MO_64); + return; + } + } + + /* Look for all bytes 0x00 or 0xff. */ + for (i =3D mask =3D 0; i < 8; i++) { + uint8_t byte =3D val >> (i * 8); + if (byte =3D=3D 0xff) { + mask |=3D 1 << i; + } else if (byte !=3D 0) { + break; + } + } + if (i =3D=3D 8) { + tcg_out_insn(s, VRIa, VGBM, dst, mask * 0x0101, 0); + return; + } + + /* Otherwise, stuff it in the constant pool. */ + tcg_out_insn(s, RIL, LARL, TCG_TMP0, 0); + new_pool_label(s, val, R_390_PC32DBL, s->code_ptr - 2, 2); + tcg_out_insn(s, VRX, VLREP, dst, TCG_TMP0, TCG_REG_NONE, 0, MO_64); } =20 static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc, --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631741997; cv=none; d=zohomail.com; s=zohoarc; b=AUl0pLunIU8sgBztM5q1eZmA8zVPKHnp65ymzPawZhQQByoR7HgVrJaWtyEb37JE/SvnnXU2E1/CN/j+5VqIwvTPC+m5zmr0syrvInNQwATUxNGZ+jPpFinQjysoTUQRrpij3+uXCrEeCYPQdNnHe7p1wgwDqK/xV3QGEZlRlP8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631741997; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=lBPnLQ9IQAE0tbPruqlsYyygU17WfFAYId5oqOiMRVw=; b=Fu+h8a8cb2rPG1FXoCtXdVRQALaIu0n6ID2iipKkLlPqUQJGi3adOhZb4mwHADp6ITFhteOfhlxXadi23GSXx8BqAYixi0KrEH77eJ7OyLznc5Hu5gBENOFSUeGwtx2K51mWxZypWprM99jxTtavMje9bXPkUjrywoF8O1xxPiE= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631741997193640.6365023142523; Wed, 15 Sep 2021 14:39:57 -0700 (PDT) Received: from localhost ([::1]:51398 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQcdI-0004e8-1Q for importer@patchew.org; Wed, 15 Sep 2021 17:39:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42686) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcV6-0003fH-HK for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:28 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]:34694) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcV4-0003KN-EL for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:28 -0400 Received: by mail-pl1-x62f.google.com with SMTP id o8so2490790pll.1 for ; Wed, 15 Sep 2021 14:31:25 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lBPnLQ9IQAE0tbPruqlsYyygU17WfFAYId5oqOiMRVw=; b=oceMRM2TtwBX+Un+OUDefBdA5IaqHQLelDWfvc/B3V5qfj9awmw7J+8tUWRyNYPH1T +JTkjNAIVw5PoBaU7PGiHPvx1hjw1Q6L6n7CO36/iUIJacQqcS4N8cT86Sn6O1TXvjhi kqkt7maSql+uW6i7WkUE6KBkJLdkrM9MB7lzR+f5nLhvDI4CBQuokZXHJqEBAiO5dys/ u/jbjjZEknFV91CQggTOLUasv6M6FoJ7RHxEvVfjUXGUx7OpS1JRtpVirVUI6LmQBOiP aAmXWNnK2yt7xN8SyI3RftIfBVtuS0VlH5jg6zmUQVqtlPtoulhsXrLnM5fLPdZtsILf DxOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lBPnLQ9IQAE0tbPruqlsYyygU17WfFAYId5oqOiMRVw=; b=4j32mZBRsrGteHVg7kJauUk6mVLJQ7stHflgwb66Aw8mRG4sI3YkTDSUEh6hR2RjY7 tISxkYIAXd9XcH6CSwMfT1mHsrZQXYRzLHvxUj5QqjSN1sW3XckgVbsf9hHOnYaE6MIt 4ISKubHfCOkwAwpEcAozCEIat6RCVe+zwwLy/1X0moZ9wVKl7pe8VNUysSQt6y4q8fPK gPSdD6Lg594b/fRKqe8K6kxEny+ngJUu/0Guwy7eTe2cVA14kpx/lne2XceXSjYf4fuw 7yAutf31ITiqxQqX9g3O5DMElP6htqZmGB6VK0Mrwv4uLWg0QlOOypxosMv0GX/MCF3O ySyQ== X-Gm-Message-State: AOAM5309vh2OuVqjMWq315zTf2VukUTP1pMYwP3V6g42W6RxsQxHAcEE Jx/38JY1o3XQxIHV0yW3wItPY49uyw/c5Q== X-Google-Smtp-Source: ABdhPJz/bKust1NShtsuCoLjd55WdkKE9mrRo/uZc+x1hptlOBpM+VOpg74WHZJ8RDE/SbTuizF/Xg== X-Received: by 2002:a17:90a:53:: with SMTP id 19mr10444668pjb.159.1631741484924; Wed, 15 Sep 2021 14:31:24 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 09/16] tcg/s390x: Implement minimal vector operations Date: Wed, 15 Sep 2021 14:31:07 -0700 Message-Id: <20210915213114.1923776-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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::62f; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62f.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: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631741997951100001 Content-Type: text/plain; charset="utf-8" Implementing add, sub, and, or, xor as the minimal set. This allows us to actually enable vectors in query_s390_facilities. Reviewed-by: David Hildenbrand Signed-off-by: Richard Henderson --- tcg/s390x/tcg-target.c.inc | 154 ++++++++++++++++++++++++++++++++++++- 1 file changed, 150 insertions(+), 4 deletions(-) diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index b9de4dc821..28729b6ffa 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -271,6 +271,14 @@ typedef enum S390Opcode { VRIc_VREP =3D 0xe74d, =20 VRRa_VLR =3D 0xe756, + VRRc_VA =3D 0xe7f3, + VRRc_VCEQ =3D 0xe7f8, /* we leave the m5 cs field 0 */ + VRRc_VCH =3D 0xe7fb, /* " */ + VRRc_VCHL =3D 0xe7f9, /* " */ + VRRc_VN =3D 0xe768, + VRRc_VO =3D 0xe76a, + VRRc_VS =3D 0xe7f7, + VRRc_VX =3D 0xe76d, VRRf_VLVGP =3D 0xe762, =20 VRSb_VLVG =3D 0xe722, @@ -607,6 +615,17 @@ static void tcg_out_insn_VRRa(TCGContext *s, S390Opcod= e op, tcg_out32(s, (op & 0x00ff) | RXB(v1, v2, 0, 0) | (m3 << 12)); } =20 +static void tcg_out_insn_VRRc(TCGContext *s, S390Opcode op, + TCGReg v1, TCGReg v2, TCGReg v3, int m4) +{ + tcg_debug_assert(is_vector_reg(v1)); + tcg_debug_assert(is_vector_reg(v2)); + tcg_debug_assert(is_vector_reg(v3)); + tcg_out16(s, (op & 0xff00) | ((v1 & 0xf) << 4) | (v2 & 0xf)); + tcg_out16(s, v3 << 12); + tcg_out16(s, (op & 0x00ff) | RXB(v1, v2, v3, 0) | (m4 << 12)); +} + static void tcg_out_insn_VRRf(TCGContext *s, S390Opcode op, TCGReg v1, TCGReg r2, TCGReg r3) { @@ -2636,18 +2655,145 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcod= e opc, unsigned vecl, unsigned vece, const TCGArg *args, const int *const_args) { - g_assert_not_reached(); + TCGType type =3D vecl + TCG_TYPE_V64; + TCGArg a0 =3D args[0], a1 =3D args[1], a2 =3D args[2]; + + switch (opc) { + case INDEX_op_ld_vec: + tcg_out_ld(s, type, a0, a1, a2); + break; + case INDEX_op_st_vec: + tcg_out_st(s, type, a0, a1, a2); + break; + case INDEX_op_dupm_vec: + tcg_out_dupm_vec(s, type, vece, a0, a1, a2); + break; + + case INDEX_op_add_vec: + tcg_out_insn(s, VRRc, VA, a0, a1, a2, vece); + break; + case INDEX_op_sub_vec: + tcg_out_insn(s, VRRc, VS, a0, a1, a2, vece); + break; + case INDEX_op_and_vec: + tcg_out_insn(s, VRRc, VN, a0, a1, a2, 0); + break; + case INDEX_op_or_vec: + tcg_out_insn(s, VRRc, VO, a0, a1, a2, 0); + break; + case INDEX_op_xor_vec: + tcg_out_insn(s, VRRc, VX, a0, a1, a2, 0); + break; + + case INDEX_op_cmp_vec: + switch ((TCGCond)args[3]) { + case TCG_COND_EQ: + tcg_out_insn(s, VRRc, VCEQ, a0, a1, a2, vece); + break; + case TCG_COND_GT: + tcg_out_insn(s, VRRc, VCH, a0, a1, a2, vece); + break; + case TCG_COND_GTU: + tcg_out_insn(s, VRRc, VCHL, a0, a1, a2, vece); + break; + default: + g_assert_not_reached(); + } + break; + + case INDEX_op_mov_vec: /* Always emitted via tcg_out_mov. */ + case INDEX_op_dup_vec: /* Always emitted via tcg_out_dup_vec. */ + default: + g_assert_not_reached(); + } } =20 int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type, unsigned vece) { - return 0; + switch (opc) { + case INDEX_op_add_vec: + case INDEX_op_and_vec: + case INDEX_op_or_vec: + case INDEX_op_sub_vec: + case INDEX_op_xor_vec: + return 1; + case INDEX_op_cmp_vec: + return -1; + default: + return 0; + } +} + +static bool expand_vec_cmp_noinv(TCGType type, unsigned vece, TCGv_vec v0, + TCGv_vec v1, TCGv_vec v2, TCGCond cond) +{ + bool need_swap =3D false, need_inv =3D false; + + switch (cond) { + case TCG_COND_EQ: + case TCG_COND_GT: + case TCG_COND_GTU: + break; + case TCG_COND_NE: + case TCG_COND_LE: + case TCG_COND_LEU: + need_inv =3D true; + break; + case TCG_COND_LT: + case TCG_COND_LTU: + need_swap =3D true; + break; + case TCG_COND_GE: + case TCG_COND_GEU: + need_swap =3D need_inv =3D true; + break; + default: + g_assert_not_reached(); + } + + if (need_inv) { + cond =3D tcg_invert_cond(cond); + } + if (need_swap) { + TCGv_vec t1; + t1 =3D v1, v1 =3D v2, v2 =3D t1; + cond =3D tcg_swap_cond(cond); + } + + vec_gen_4(INDEX_op_cmp_vec, type, vece, tcgv_vec_arg(v0), + tcgv_vec_arg(v1), tcgv_vec_arg(v2), cond); + + return need_inv; +} + +static void expand_vec_cmp(TCGType type, unsigned vece, TCGv_vec v0, + TCGv_vec v1, TCGv_vec v2, TCGCond cond) +{ + if (expand_vec_cmp_noinv(type, vece, v0, v1, v2, cond)) { + tcg_gen_not_vec(vece, v0, v0); + } } =20 void tcg_expand_vec_op(TCGOpcode opc, TCGType type, unsigned vece, TCGArg a0, ...) { - g_assert_not_reached(); + va_list va; + TCGv_vec v0, v1, v2; + + va_start(va, a0); + v0 =3D temp_tcgv_vec(arg_temp(a0)); + v1 =3D temp_tcgv_vec(arg_temp(va_arg(va, TCGArg))); + v2 =3D temp_tcgv_vec(arg_temp(va_arg(va, TCGArg))); + + switch (opc) { + case INDEX_op_cmp_vec: + expand_vec_cmp(type, vece, v0, v1, v2, va_arg(va, TCGArg)); + break; + + default: + g_assert_not_reached(); + } + va_end(va); } =20 static TCGConstraintSetIndex tcg_target_op_def(TCGOpcode op) @@ -2839,7 +2985,7 @@ static void query_s390_facilities(void) * There is nothing else we currently care about in the 3rd word, so * disable VECTOR with one store. */ - if (1 || !(hwcap & HWCAP_S390_VXRS)) { + if (!(hwcap & HWCAP_S390_VXRS)) { s390_facilities[2] =3D 0; } } --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631741758; cv=none; d=zohomail.com; s=zohoarc; b=C8d/aMSXOqn4u0UjoalekGftSGu2lJ1APm9A6Ykkra42Oeun0l8pMOKSoPVgNiD+rQUS1teBb243P9hITHO7zeqi+iZoBJp5AKGNQI38U3uCA+ZIBmR3GcDKcj8oq/gx1JXotbwjc2ZNhFo7ySvLtokFieLACKnENjlnAxfTE6c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631741758; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=w1RnkvAZwO6WCjxNyzvr+0rpjDyxEsUj9prSkADd+q8=; b=IbqM85AvD8WbHfqFdKc+vHiR4ee2nKxano4Y7U9fjktmSln1Pcj73MJB/4PGkym6O/YcBO070r9NsXF8/teIPC6kEUCFAIMPA1YP94K3c7ygjeDj4ep5Nm4y9U2BDilP5ZZH/D4eL+0u0UKZCL3Fckzfgq0nqg6TxkR9s2M4HE0= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631741758173619.1890690092599; Wed, 15 Sep 2021 14:35:58 -0700 (PDT) Received: from localhost ([::1]:37616 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQcZR-0003lZ-5X for importer@patchew.org; Wed, 15 Sep 2021 17:35:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42742) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcV9-0003lK-FU for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:31 -0400 Received: from mail-pg1-x531.google.com ([2607:f8b0:4864:20::531]:44969) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcV6-0003MO-3q for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:30 -0400 Received: by mail-pg1-x531.google.com with SMTP id s11so4046714pgr.11 for ; Wed, 15 Sep 2021 14:31:26 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=w1RnkvAZwO6WCjxNyzvr+0rpjDyxEsUj9prSkADd+q8=; b=iFuFb4ytpeDel/VSS/E8YCfUYnTvVuERzremGcnR50lXUKk/k3ulBzNf0STA5NLT28 PXRGqvv1GLzZ8JoT0jzEg2GBaE7ydQHZU1R/hTwRIBrbA7mnXGAR3oIKwZnbON06FQa4 hPWJ6kHKxIGinJnpxDyXwf7rMwIMdZisVSrhaawA89/TIdtXFNjPEOFv5SZtgunCl+do BVXdkp8C1qwiLuC2SE4MIuO72rkob795lxVHtBH2k7ZBV/5MhbQTfajv39c+5KwTGi3M djqu9rCf+pBuwBWhhnLgeHAP5OS8r8X5lJlnrcK3u2spN/WkPqP5gKPYiW90Ot5EqLxz LMyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=w1RnkvAZwO6WCjxNyzvr+0rpjDyxEsUj9prSkADd+q8=; b=aHsqPAaguOofpN9qPF9uIwATtSo5UVmS5er1n/FZ5+HO0Q/OlsvZGUCDxifD6T6EMm yeHt1r/YQ9r/9V/XPR/DEm9pjc+W7dMjx2Gw9OuGww98mB5tA5vG1j8M/hleQL+Z+RqY M4e185y0ShwfgFyDTsctadAwfSpV+ya404KI6YXwde5V9PI6TEJ61mseh+09qAg4ndtG fSt1p6N14bD5Hy9kl1G0yQKfbPXlxVsmW2zvaDCJHut1vGyYVaRdnfatnhijblYZJN9h r6Ck+mGVzuYqwmDsA6ckyoX5PuYNGJrMIiAgoB2aGpJctk6kRTJFqiE1umGShl4UHyOp l3qw== X-Gm-Message-State: AOAM5315HXjKhZHz28+d9ak2TDdjQPwO+oZelcAqDbb+IKkOsSC3H+9W 1EK3dJp+y9hF8mrkSNc+L/SjhsuIZUWvWQ== X-Google-Smtp-Source: ABdhPJzt/HMqruSSBzk46t2TxrWc1itcs1wg3H1zuEgHJ8KeVkhLG/MbEgrQnKfpSS3CzQTQ9NiOGA== X-Received: by 2002:a05:6a00:4:b0:440:6476:bcb4 with SMTP id h4-20020a056a00000400b004406476bcb4mr236014pfk.0.1631741485690; Wed, 15 Sep 2021 14:31:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 10/16] tcg/s390x: Implement andc, orc, abs, neg, not vector operations Date: Wed, 15 Sep 2021 14:31:08 -0700 Message-Id: <20210915213114.1923776-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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::531; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x531.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: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631741758853100003 Content-Type: text/plain; charset="utf-8" These logical and arithmetic operations are optional but trivial. Signed-off-by: Richard Henderson Reviewed-by: David Hildenbrand --- tcg/s390x/tcg-target-con-set.h | 1 + tcg/s390x/tcg-target.h | 11 ++++++----- tcg/s390x/tcg-target.c.inc | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/tcg/s390x/tcg-target-con-set.h b/tcg/s390x/tcg-target-con-set.h index ce9432cfe3..cb953896d5 100644 --- a/tcg/s390x/tcg-target-con-set.h +++ b/tcg/s390x/tcg-target-con-set.h @@ -17,6 +17,7 @@ C_O0_I2(v, r) C_O1_I1(r, L) C_O1_I1(r, r) C_O1_I1(v, r) +C_O1_I1(v, v) C_O1_I1(v, vr) C_O1_I2(r, 0, ri) C_O1_I2(r, 0, rI) diff --git a/tcg/s390x/tcg-target.h b/tcg/s390x/tcg-target.h index 5a03c5f2f4..a42074e451 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -64,6 +64,7 @@ typedef enum TCGReg { #define FACILITY_DISTINCT_OPS FACILITY_LOAD_ON_COND #define FACILITY_LOAD_ON_COND2 53 #define FACILITY_VECTOR 129 +#define FACILITY_VECTOR_ENH1 135 =20 extern uint64_t s390_facilities[3]; =20 @@ -142,11 +143,11 @@ extern uint64_t s390_facilities[3]; #define TCG_TARGET_HAS_v128 HAVE_FACILITY(VECTOR) #define TCG_TARGET_HAS_v256 0 =20 -#define TCG_TARGET_HAS_andc_vec 0 -#define TCG_TARGET_HAS_orc_vec 0 -#define TCG_TARGET_HAS_not_vec 0 -#define TCG_TARGET_HAS_neg_vec 0 -#define TCG_TARGET_HAS_abs_vec 0 +#define TCG_TARGET_HAS_andc_vec 1 +#define TCG_TARGET_HAS_orc_vec HAVE_FACILITY(VECTOR_ENH1) +#define TCG_TARGET_HAS_not_vec 1 +#define TCG_TARGET_HAS_neg_vec 1 +#define TCG_TARGET_HAS_abs_vec 1 #define TCG_TARGET_HAS_roti_vec 0 #define TCG_TARGET_HAS_rots_vec 0 #define TCG_TARGET_HAS_rotv_vec 0 diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index 28729b6ffa..fa4a142818 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -270,13 +270,18 @@ typedef enum S390Opcode { VRIb_VGM =3D 0xe746, VRIc_VREP =3D 0xe74d, =20 + VRRa_VLC =3D 0xe7de, + VRRa_VLP =3D 0xe7df, VRRa_VLR =3D 0xe756, VRRc_VA =3D 0xe7f3, VRRc_VCEQ =3D 0xe7f8, /* we leave the m5 cs field 0 */ VRRc_VCH =3D 0xe7fb, /* " */ VRRc_VCHL =3D 0xe7f9, /* " */ VRRc_VN =3D 0xe768, + VRRc_VNC =3D 0xe769, + VRRc_VNO =3D 0xe76b, VRRc_VO =3D 0xe76a, + VRRc_VOC =3D 0xe76f, VRRc_VS =3D 0xe7f7, VRRc_VX =3D 0xe76d, VRRf_VLVGP =3D 0xe762, @@ -2669,6 +2674,16 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode = opc, tcg_out_dupm_vec(s, type, vece, a0, a1, a2); break; =20 + case INDEX_op_abs_vec: + tcg_out_insn(s, VRRa, VLP, a0, a1, vece); + break; + case INDEX_op_neg_vec: + tcg_out_insn(s, VRRa, VLC, a0, a1, vece); + break; + case INDEX_op_not_vec: + tcg_out_insn(s, VRRc, VNO, a0, a1, a1, 0); + break; + case INDEX_op_add_vec: tcg_out_insn(s, VRRc, VA, a0, a1, a2, vece); break; @@ -2678,9 +2693,15 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode = opc, case INDEX_op_and_vec: tcg_out_insn(s, VRRc, VN, a0, a1, a2, 0); break; + case INDEX_op_andc_vec: + tcg_out_insn(s, VRRc, VNC, a0, a1, a2, 0); + break; case INDEX_op_or_vec: tcg_out_insn(s, VRRc, VO, a0, a1, a2, 0); break; + case INDEX_op_orc_vec: + tcg_out_insn(s, VRRc, VOC, a0, a1, a2, 0); + break; case INDEX_op_xor_vec: tcg_out_insn(s, VRRc, VX, a0, a1, a2, 0); break; @@ -2711,9 +2732,14 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode = opc, int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type, unsigned vece) { switch (opc) { + case INDEX_op_abs_vec: case INDEX_op_add_vec: case INDEX_op_and_vec: + case INDEX_op_andc_vec: + case INDEX_op_neg_vec: + case INDEX_op_not_vec: case INDEX_op_or_vec: + case INDEX_op_orc_vec: case INDEX_op_sub_vec: case INDEX_op_xor_vec: return 1; @@ -2943,10 +2969,16 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGO= pcode op) return C_O1_I1(v, r); case INDEX_op_dup_vec: return C_O1_I1(v, vr); + case INDEX_op_abs_vec: + case INDEX_op_neg_vec: + case INDEX_op_not_vec: + return C_O1_I1(v, v); case INDEX_op_add_vec: case INDEX_op_sub_vec: case INDEX_op_and_vec: + case INDEX_op_andc_vec: case INDEX_op_or_vec: + case INDEX_op_orc_vec: case INDEX_op_xor_vec: case INDEX_op_cmp_vec: return C_O1_I2(v, v, v); --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631742217; cv=none; d=zohomail.com; s=zohoarc; b=YipTAeNgZcIP3jCvjfdyC0lDqJ8M49ghY7Ck6anUqNtf+6X9cBhjOFi858ul26MQ8IHAKRPWj9O1KGzEk1JZPNl4wnXM3TsFo62gyQMlw44Y66jJWVtPYrdRoQA9XzkPqGXhFsvf87O7D4F17abKjl6sYg+P6eNFoLcH1DKhsMo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631742217; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=3L4V7jrQTj2VAptBwGguXAPOCVzUlnPEm/E02vYLZxo=; b=QfwYuWT5SYZeOgVbelfNADlJKSe2O0Gp2TshAMheZvrW5WT2/9HCz637R1Bq6mdQA5afE2G4204nPYT+zqqzuqAWKtA45ul8uYrknAUtg/tq74L45ZpBL0wFGjdfF9/MlyxBQIEu7vDsbSkJkXP42AuYVWM0k/wzeRC/cfR9o5o= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631742217769155.61406238130905; Wed, 15 Sep 2021 14:43:37 -0700 (PDT) Received: from localhost ([::1]:58880 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQcgq-0001UP-NR for importer@patchew.org; Wed, 15 Sep 2021 17:43:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42704) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcV7-0003hC-KK for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:29 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]:45644) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcV5-0003NE-RZ for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:29 -0400 Received: by mail-pl1-x634.google.com with SMTP id d17so2435676plr.12 for ; Wed, 15 Sep 2021 14:31:27 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3L4V7jrQTj2VAptBwGguXAPOCVzUlnPEm/E02vYLZxo=; b=a1RLojNQkSk0sA5vX/LMkNpKtb/vEsQ9HS2EL2s0z3pYuckoXXv45qqseqLB50R/9s g/Q9xpRbUrwo/0VsYMupynxl7o+Di0DGsv2vjIZZtNHs0QsBp4YriFGL4wntOtNyPALP EkbYrb5ArrZd3wmrxFmhoKLwNB1uej6pFILVV+15PZgHO+zAbGS5naqpbQYf9RzwYRp7 8b9CtLCxZ0mJGZzGT7VrRFdk5O6u7387mr2AbB1DJbWutY8xKQgEOxceyHipmyZoNZEK t94ADJnz439rzbry52Ma418jBJtVwMg1wr5+mkVSci6gD1zddEXf0MaG8LE6B0pTgE5Y /w0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3L4V7jrQTj2VAptBwGguXAPOCVzUlnPEm/E02vYLZxo=; b=ZbeNrTwIrMzYsIQsJq6g13e9LxIz7+Poi8U+PMCifOPqPzX9nFKwrlPknm9oT9jyGW URssHNJXXPE09inK8D3N2BKYq4P1WT6AW9s/NWUFeqmAdqUt6rngzokYFWnTbf9d+8rG 1lqj5ja1ypVzyOZCj0HQcAlO1R3QcZ7WBnzdyIhAhIZnFl3vcPpkfFcfe8UmXpRkjeV7 NIeRBkNvI0DNDnlQNLyRTv4dE3ej3ZddhIbrqqmhZM6BXOUmdf9Adqv4rs5HK0x9Q1T7 by8HT1hYOAqvqdSXgt+yDHNptg3GfYXu6U9j+N7csqsnhHxBzC02Lq+DG73qcReuPhpg ZhTw== X-Gm-Message-State: AOAM5300oZUf4L0gY4ntUj/d1Q3uJi3cm4OuNvUxOtDG31Qqkoz1c1vi Wu8gE2TrYhQvlZrrxcd6Rg/KvJUH/64LsA== X-Google-Smtp-Source: ABdhPJwGhY0il1h/FD6eluSUWMhfRBBO0/jbgQjgAWaHRw20ItkuqrE6i63RnN9AUMa2PBbmmGpluA== X-Received: by 2002:a17:902:d2c9:b0:13b:721d:f790 with SMTP id n9-20020a170902d2c900b0013b721df790mr1483804plc.11.1631741486557; Wed, 15 Sep 2021 14:31:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 11/16] tcg/s390x: Implement TCG_TARGET_HAS_mul_vec Date: Wed, 15 Sep 2021 14:31:09 -0700 Message-Id: <20210915213114.1923776-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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: , Cc: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631742218814100001 Content-Type: text/plain; charset="utf-8" Reviewed-by: David Hildenbrand Signed-off-by: Richard Henderson --- tcg/s390x/tcg-target.h | 2 +- tcg/s390x/tcg-target.c.inc | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tcg/s390x/tcg-target.h b/tcg/s390x/tcg-target.h index a42074e451..1c581a2f60 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -154,7 +154,7 @@ extern uint64_t s390_facilities[3]; #define TCG_TARGET_HAS_shi_vec 0 #define TCG_TARGET_HAS_shs_vec 0 #define TCG_TARGET_HAS_shv_vec 0 -#define TCG_TARGET_HAS_mul_vec 0 +#define TCG_TARGET_HAS_mul_vec 1 #define TCG_TARGET_HAS_sat_vec 0 #define TCG_TARGET_HAS_minmax_vec 0 #define TCG_TARGET_HAS_bitsel_vec 0 diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index fa4a142818..aa75d779be 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -277,6 +277,7 @@ typedef enum S390Opcode { VRRc_VCEQ =3D 0xe7f8, /* we leave the m5 cs field 0 */ VRRc_VCH =3D 0xe7fb, /* " */ VRRc_VCHL =3D 0xe7f9, /* " */ + VRRc_VML =3D 0xe7a2, VRRc_VN =3D 0xe768, VRRc_VNC =3D 0xe769, VRRc_VNO =3D 0xe76b, @@ -2696,6 +2697,9 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode o= pc, case INDEX_op_andc_vec: tcg_out_insn(s, VRRc, VNC, a0, a1, a2, 0); break; + case INDEX_op_mul_vec: + tcg_out_insn(s, VRRc, VML, a0, a1, a2, vece); + break; case INDEX_op_or_vec: tcg_out_insn(s, VRRc, VO, a0, a1, a2, 0); break; @@ -2745,6 +2749,8 @@ int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type, = unsigned vece) return 1; case INDEX_op_cmp_vec: return -1; + case INDEX_op_mul_vec: + return vece < MO_64; default: return 0; } @@ -2981,6 +2987,7 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpc= ode op) case INDEX_op_orc_vec: case INDEX_op_xor_vec: case INDEX_op_cmp_vec: + case INDEX_op_mul_vec: return C_O1_I2(v, v, v); =20 default: --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631741758; cv=none; d=zohomail.com; s=zohoarc; b=iVXSpG59OTMUlB5OooOLtpgIFNAsfo4l3pAEmUaMi/ju+nLlphxsbx/IToz5zyh6vFy5NxZS7Ctc3BOi9uqD8gmir6smcMiejwlTr62JwDGFl2B4YKjANluKwvUCzijmVFOnPdYKp/Esf3rHf27VFTRFJuynm4Ak0M5+nuCqcKA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631741758; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=64gMRkqwAtqYSG6tPoLfYzIKNfFeigVeDL1aN6+NElE=; b=QleXlkBGWzmv5epsmbk9DQQZMtevoCojk7bK1NpGx7Z8atGrraNhOP3GI8KmN+F2bGA+DujD4n6avnjPPnGtOjdwflH0eCeqG9rYsZpftHrTi33WS4r7uzmbEilHqd85EkOhvibBxw8lv2dhjteB1vB0bMWBIgJKBYsWG2RjXBE= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163174175815463.02526403804097; Wed, 15 Sep 2021 14:35:58 -0700 (PDT) Received: from localhost ([::1]:37700 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQcZR-0003pC-4q for importer@patchew.org; Wed, 15 Sep 2021 17:35:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42730) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcV8-0003jt-KB for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:30 -0400 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]:35562) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcV6-0003O7-HG for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:30 -0400 Received: by mail-pl1-x630.google.com with SMTP id bb10so2483576plb.2 for ; Wed, 15 Sep 2021 14:31:28 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=64gMRkqwAtqYSG6tPoLfYzIKNfFeigVeDL1aN6+NElE=; b=AXqxWGglj5THQ5mblYM8dtCkPs5IsvGCxTrAnd+HHUdSg8oXG2MvUWGZV7/vcgeimv 04QDenPaBvI6KWSqkYD23DL1HqZEJj390ihtd/SUtP4mQSv2GllA8z3MPovotGs6nnpn xBsgvFy3hNG81ZW5UEOft1bxjGvw+eajEbIsWRcnoHkWSjEmpTmbmRoKCqZlYIYC8VYV wgQstuxUpSuU4Hn9G58vIkaLKjBhSf2v/Kax6CqYVNLOQBGG9wyc5F8Wtfk0O0d4cK/b UIz2qMe8t6Wn++/Fb7hiu8nq+P20rRpXHvrOyhXd7Nj+54sCEm2gv9Z5qaotrIp0ezmt OM/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=64gMRkqwAtqYSG6tPoLfYzIKNfFeigVeDL1aN6+NElE=; b=WpWF9ie9jEl0oU9ZTtC1pLmNtXnSpu3GbIhpVRnwXgy6ZGq/7c26aguGQyfyld/dxh HTJZzHZmUcxUzlrnHTxE4FYyNi9PqTe38UC3CrlvR9agDjv4J7Wopr0G69FwRWOT1J8L uDIeRRiJvmq5RAZCkYfcFDGGzi2xqVqMFEFWXyqaGmqFfZvwp9nUEVJvpb0scgnUNfdE 5ey7PS+dSYT3P5FOm9ZzIYEu2a/aT0tFZ+8AI2nO4V/We+IWbK9IsebI+nHxVXXNmK75 c1UgvlWn8EMFjRi1z0rG3l4qIRXCRAbL2r2UN6lSb7wO5lWeBIjMA2UTWpJFkJHYXDe0 5jjw== X-Gm-Message-State: AOAM532Dn94j3vWSPPCzM/LE/5AfauO6XlH4IrilB8FcB4pTjOGcfCca jJAcdQuIsyPT5gTi/jtD7JHsdFWwwLtoJQ== X-Google-Smtp-Source: ABdhPJyBiGJOuBGg7ZdguWpS/I1qa5WtRCkt+sq5hG/Kg/WjgaNrk2IfFokm/zD+M8M72c2R9LwAIA== X-Received: by 2002:a17:902:aa45:b0:13c:8599:95d1 with SMTP id c5-20020a170902aa4500b0013c859995d1mr1448057plr.39.1631741487177; Wed, 15 Sep 2021 14:31:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 12/16] tcg/s390x: Implement vector shift operations Date: Wed, 15 Sep 2021 14:31:10 -0700 Message-Id: <20210915213114.1923776-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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::630; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x630.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: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631741758863100004 Content-Type: text/plain; charset="utf-8" Reviewed-by: David Hildenbrand Signed-off-by: Richard Henderson --- tcg/s390x/tcg-target-con-set.h | 1 + tcg/s390x/tcg-target.h | 12 ++--- tcg/s390x/tcg-target.c.inc | 93 +++++++++++++++++++++++++++++++++- 3 files changed, 99 insertions(+), 7 deletions(-) diff --git a/tcg/s390x/tcg-target-con-set.h b/tcg/s390x/tcg-target-con-set.h index cb953896d5..49b98f33b9 100644 --- a/tcg/s390x/tcg-target-con-set.h +++ b/tcg/s390x/tcg-target-con-set.h @@ -24,6 +24,7 @@ C_O1_I2(r, 0, rI) C_O1_I2(r, 0, rJ) C_O1_I2(r, r, ri) C_O1_I2(r, rZ, r) +C_O1_I2(v, v, r) C_O1_I2(v, v, v) C_O1_I4(r, r, ri, r, 0) C_O1_I4(r, r, ri, rI, 0) diff --git a/tcg/s390x/tcg-target.h b/tcg/s390x/tcg-target.h index 1c581a2f60..d7d204b782 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -148,12 +148,12 @@ extern uint64_t s390_facilities[3]; #define TCG_TARGET_HAS_not_vec 1 #define TCG_TARGET_HAS_neg_vec 1 #define TCG_TARGET_HAS_abs_vec 1 -#define TCG_TARGET_HAS_roti_vec 0 -#define TCG_TARGET_HAS_rots_vec 0 -#define TCG_TARGET_HAS_rotv_vec 0 -#define TCG_TARGET_HAS_shi_vec 0 -#define TCG_TARGET_HAS_shs_vec 0 -#define TCG_TARGET_HAS_shv_vec 0 +#define TCG_TARGET_HAS_roti_vec 1 +#define TCG_TARGET_HAS_rots_vec 1 +#define TCG_TARGET_HAS_rotv_vec 1 +#define TCG_TARGET_HAS_shi_vec 1 +#define TCG_TARGET_HAS_shs_vec 1 +#define TCG_TARGET_HAS_shv_vec 1 #define TCG_TARGET_HAS_mul_vec 1 #define TCG_TARGET_HAS_sat_vec 0 #define TCG_TARGET_HAS_minmax_vec 0 diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index aa75d779be..a56733e09a 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -277,6 +277,10 @@ typedef enum S390Opcode { VRRc_VCEQ =3D 0xe7f8, /* we leave the m5 cs field 0 */ VRRc_VCH =3D 0xe7fb, /* " */ VRRc_VCHL =3D 0xe7f9, /* " */ + VRRc_VERLLV =3D 0xe773, + VRRc_VESLV =3D 0xe770, + VRRc_VESRAV =3D 0xe77a, + VRRc_VESRLV =3D 0xe778, VRRc_VML =3D 0xe7a2, VRRc_VN =3D 0xe768, VRRc_VNC =3D 0xe769, @@ -287,6 +291,10 @@ typedef enum S390Opcode { VRRc_VX =3D 0xe76d, VRRf_VLVGP =3D 0xe762, =20 + VRSa_VERLL =3D 0xe733, + VRSa_VESL =3D 0xe730, + VRSa_VESRA =3D 0xe73a, + VRSa_VESRL =3D 0xe738, VRSb_VLVG =3D 0xe722, VRSc_VLGV =3D 0xe721, =20 @@ -643,6 +651,18 @@ static void tcg_out_insn_VRRf(TCGContext *s, S390Opcod= e op, tcg_out16(s, (op & 0x00ff) | RXB(v1, 0, 0, 0)); } =20 +static void tcg_out_insn_VRSa(TCGContext *s, S390Opcode op, TCGReg v1, + intptr_t d2, TCGReg b2, TCGReg v3, int m4) +{ + tcg_debug_assert(is_vector_reg(v1)); + tcg_debug_assert(d2 >=3D 0 && d2 <=3D 0xfff); + tcg_debug_assert(is_general_reg(b2)); + tcg_debug_assert(is_vector_reg(v3)); + tcg_out16(s, (op & 0xff00) | ((v1 & 0xf) << 4) | (v3 & 0xf)); + tcg_out16(s, b2 << 12 | d2); + tcg_out16(s, (op & 0x00ff) | RXB(v1, 0, v3, 0) | (m4 << 12)); +} + static void tcg_out_insn_VRSb(TCGContext *s, S390Opcode op, TCGReg v1, intptr_t d2, TCGReg b2, TCGReg r3, int m4) { @@ -2710,6 +2730,43 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode = opc, tcg_out_insn(s, VRRc, VX, a0, a1, a2, 0); break; =20 + case INDEX_op_shli_vec: + tcg_out_insn(s, VRSa, VESL, a0, a2, TCG_REG_NONE, a1, vece); + break; + case INDEX_op_shri_vec: + tcg_out_insn(s, VRSa, VESRL, a0, a2, TCG_REG_NONE, a1, vece); + break; + case INDEX_op_sari_vec: + tcg_out_insn(s, VRSa, VESRA, a0, a2, TCG_REG_NONE, a1, vece); + break; + case INDEX_op_rotli_vec: + tcg_out_insn(s, VRSa, VERLL, a0, a2, TCG_REG_NONE, a1, vece); + break; + case INDEX_op_shls_vec: + tcg_out_insn(s, VRSa, VESL, a0, 0, a2, a1, vece); + break; + case INDEX_op_shrs_vec: + tcg_out_insn(s, VRSa, VESRL, a0, 0, a2, a1, vece); + break; + case INDEX_op_sars_vec: + tcg_out_insn(s, VRSa, VESRA, a0, 0, a2, a1, vece); + break; + case INDEX_op_rotls_vec: + tcg_out_insn(s, VRSa, VERLL, a0, 0, a2, a1, vece); + break; + case INDEX_op_shlv_vec: + tcg_out_insn(s, VRRc, VESLV, a0, a1, a2, vece); + break; + case INDEX_op_shrv_vec: + tcg_out_insn(s, VRRc, VESRLV, a0, a1, a2, vece); + break; + case INDEX_op_sarv_vec: + tcg_out_insn(s, VRRc, VESRAV, a0, a1, a2, vece); + break; + case INDEX_op_rotlv_vec: + tcg_out_insn(s, VRRc, VERLLV, a0, a1, a2, vece); + break; + case INDEX_op_cmp_vec: switch ((TCGCond)args[3]) { case TCG_COND_EQ: @@ -2744,10 +2801,23 @@ int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type= , unsigned vece) case INDEX_op_not_vec: case INDEX_op_or_vec: case INDEX_op_orc_vec: + case INDEX_op_rotli_vec: + case INDEX_op_rotls_vec: + case INDEX_op_rotlv_vec: + case INDEX_op_sari_vec: + case INDEX_op_sars_vec: + case INDEX_op_sarv_vec: + case INDEX_op_shli_vec: + case INDEX_op_shls_vec: + case INDEX_op_shlv_vec: + case INDEX_op_shri_vec: + case INDEX_op_shrs_vec: + case INDEX_op_shrv_vec: case INDEX_op_sub_vec: case INDEX_op_xor_vec: return 1; case INDEX_op_cmp_vec: + case INDEX_op_rotrv_vec: return -1; case INDEX_op_mul_vec: return vece < MO_64; @@ -2810,7 +2880,7 @@ void tcg_expand_vec_op(TCGOpcode opc, TCGType type, u= nsigned vece, TCGArg a0, ...) { va_list va; - TCGv_vec v0, v1, v2; + TCGv_vec v0, v1, v2, t0; =20 va_start(va, a0); v0 =3D temp_tcgv_vec(arg_temp(a0)); @@ -2822,6 +2892,13 @@ void tcg_expand_vec_op(TCGOpcode opc, TCGType type, = unsigned vece, expand_vec_cmp(type, vece, v0, v1, v2, va_arg(va, TCGArg)); break; =20 + case INDEX_op_rotrv_vec: + t0 =3D tcg_temp_new_vec(type); + tcg_gen_neg_vec(vece, t0, v2); + tcg_gen_rotlv_vec(vece, v0, v1, t0); + tcg_temp_free_vec(t0); + break; + default: g_assert_not_reached(); } @@ -2978,6 +3055,10 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOp= code op) case INDEX_op_abs_vec: case INDEX_op_neg_vec: case INDEX_op_not_vec: + case INDEX_op_rotli_vec: + case INDEX_op_sari_vec: + case INDEX_op_shli_vec: + case INDEX_op_shri_vec: return C_O1_I1(v, v); case INDEX_op_add_vec: case INDEX_op_sub_vec: @@ -2988,7 +3069,17 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOp= code op) case INDEX_op_xor_vec: case INDEX_op_cmp_vec: case INDEX_op_mul_vec: + case INDEX_op_rotlv_vec: + case INDEX_op_rotrv_vec: + case INDEX_op_shlv_vec: + case INDEX_op_shrv_vec: + case INDEX_op_sarv_vec: return C_O1_I2(v, v, v); + case INDEX_op_rotls_vec: + case INDEX_op_shls_vec: + case INDEX_op_shrs_vec: + case INDEX_op_sars_vec: + return C_O1_I2(v, v, r); =20 default: g_assert_not_reached(); --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631742377; cv=none; d=zohomail.com; s=zohoarc; b=kMgL7QHkCmRQO7EW6XOxBpEZlEuv6yLd3GNK2FWjR939a1olgLWzhGr8YcBjD7GDKaU0bs3y4dheUQ9KSZcBJqgOndbIxQpGJymg7292VHFs4LdYLpK0Vyp2ngDJ5fuYFWAK6HDXV2bgbvqeFnPUcof5+9in3PyRhfLgAlBn9Ak= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631742377; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=mfePQXj2iXr+Dra4mph7NTf9IcqJ7MxeNSx/JTfeSw4=; b=GQTDJmyVwo8CeZEsEAf923UggdtJZ/LpFcZwPcGTPRr2EFXtJ1Y02D1J1GpdixnBdWRfIAD8SUKiHfe6RSLkNwwcR7gBmFpZv0MSmJEkIj/cBOLUsmshukp+c+Gq9ucKw5cvuHTi/tRdC392e58myfySObUfvxgzGEk4H7EOPc4= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631742376956158.71598583124387; Wed, 15 Sep 2021 14:46:16 -0700 (PDT) Received: from localhost ([::1]:34710 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQcjP-0004Qx-KZ for importer@patchew.org; Wed, 15 Sep 2021 17:46:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42770) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcVA-0003p1-PV for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:32 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:43995) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcV7-0003PC-9N for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:32 -0400 Received: by mail-pj1-x1031.google.com with SMTP id k23-20020a17090a591700b001976d2db364so3212870pji.2 for ; Wed, 15 Sep 2021 14:31:28 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=mfePQXj2iXr+Dra4mph7NTf9IcqJ7MxeNSx/JTfeSw4=; b=M9bDHa7j2fG9Px8SLFLVCFtWm3X0FnybrJYa7EtvYke01yQpPSvAKs5ChoR3Pbs4v6 M+cIlyfkdQsmwJSJFDVI7THMs8n6qT3tVmJfQ7kp0YtMDE7YsWU6tmwwh8EgTXlHUkXR Orws94rg0hhIiS+yByv1a/htNDAc8IXuKkEwvAyS44Avzvvhr0gvZBRhVUPEsUllCJeD YBymcziQVGB3o6B72J7LEm5HUZR8zlR6wuwE5Vs+Qg5VLz1gxvKkgMy/sM7b+s7UmyY7 GxQrQpguZb5mH5iNlS7ObAUJxMwqBZquGSvaMYHeS46r+em/3Op55etBKXU7PLnodhjv 7j3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mfePQXj2iXr+Dra4mph7NTf9IcqJ7MxeNSx/JTfeSw4=; b=GMkhjgDaaS5ayGFNP4oXvpU4wPQ2R0I1Ld14R56iO6H6GHuHDSawkEQTdxED7HhgXZ p7Mdmtmn91Y2z5IMRcTCCBQwvMB17bEdIjxLsZKuvtjCyomstVImaPm1DWkvqzuWZUcb Fn95ZMq23FduesHKwvcdqqsatcVrnk2A3LNf06Wsc9D5LedCHlckCalEH98TRO/mzRrq LZNHom4KyKySUuAcxeM6O7ue93JRnhDvotMqVyHGxlxuqbKZb71va7DIltpVJxlF91Da Ut14SaY4GLLw0R4OtWT6+KXNE/Gjx+m9wXw2Q/eO6zpZWM8Ggqp8hpIxsX216IANnNW+ GGPA== X-Gm-Message-State: AOAM531WiKztgSHNpUp9Z4myntbuPFzvKd9j3D4klL1OxBfdwyrov8PX bWk/uKfTnDeBQ8gKbuYls4NjtK8kEY2eTg== X-Google-Smtp-Source: ABdhPJwnyFIJvCupjKKCip5qJWDGasE8FIK/ThbV2hxdKt5ujbthvKDBV/qWGa0Y70IupLTNsZLORw== X-Received: by 2002:a17:902:d508:b0:13a:8c8:dbc4 with SMTP id b8-20020a170902d50800b0013a08c8dbc4mr1559020plg.87.1631741487973; Wed, 15 Sep 2021 14:31:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 13/16] tcg/s390x: Implement TCG_TARGET_HAS_minmax_vec Date: Wed, 15 Sep 2021 14:31:11 -0700 Message-Id: <20210915213114.1923776-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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::1031; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1031.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: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631742379321100001 Content-Type: text/plain; charset="utf-8" Reviewed-by: David Hildenbrand Signed-off-by: Richard Henderson --- tcg/s390x/tcg-target.h | 2 +- tcg/s390x/tcg-target.c.inc | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/tcg/s390x/tcg-target.h b/tcg/s390x/tcg-target.h index d7d204b782..a79f4f187a 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -156,7 +156,7 @@ extern uint64_t s390_facilities[3]; #define TCG_TARGET_HAS_shv_vec 1 #define TCG_TARGET_HAS_mul_vec 1 #define TCG_TARGET_HAS_sat_vec 0 -#define TCG_TARGET_HAS_minmax_vec 0 +#define TCG_TARGET_HAS_minmax_vec 1 #define TCG_TARGET_HAS_bitsel_vec 0 #define TCG_TARGET_HAS_cmpsel_vec 0 =20 diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index a56733e09a..c3bd22b116 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -282,6 +282,10 @@ typedef enum S390Opcode { VRRc_VESRAV =3D 0xe77a, VRRc_VESRLV =3D 0xe778, VRRc_VML =3D 0xe7a2, + VRRc_VMN =3D 0xe7fe, + VRRc_VMNL =3D 0xe7fc, + VRRc_VMX =3D 0xe7ff, + VRRc_VMXL =3D 0xe7fd, VRRc_VN =3D 0xe768, VRRc_VNC =3D 0xe769, VRRc_VNO =3D 0xe76b, @@ -2767,6 +2771,19 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode = opc, tcg_out_insn(s, VRRc, VERLLV, a0, a1, a2, vece); break; =20 + case INDEX_op_smin_vec: + tcg_out_insn(s, VRRc, VMN, a0, a1, a2, vece); + break; + case INDEX_op_smax_vec: + tcg_out_insn(s, VRRc, VMX, a0, a1, a2, vece); + break; + case INDEX_op_umin_vec: + tcg_out_insn(s, VRRc, VMNL, a0, a1, a2, vece); + break; + case INDEX_op_umax_vec: + tcg_out_insn(s, VRRc, VMXL, a0, a1, a2, vece); + break; + case INDEX_op_cmp_vec: switch ((TCGCond)args[3]) { case TCG_COND_EQ: @@ -2813,7 +2830,11 @@ int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type,= unsigned vece) case INDEX_op_shri_vec: case INDEX_op_shrs_vec: case INDEX_op_shrv_vec: + case INDEX_op_smax_vec: + case INDEX_op_smin_vec: case INDEX_op_sub_vec: + case INDEX_op_umax_vec: + case INDEX_op_umin_vec: case INDEX_op_xor_vec: return 1; case INDEX_op_cmp_vec: @@ -3074,6 +3095,10 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOp= code op) case INDEX_op_shlv_vec: case INDEX_op_shrv_vec: case INDEX_op_sarv_vec: + case INDEX_op_smax_vec: + case INDEX_op_smin_vec: + case INDEX_op_umax_vec: + case INDEX_op_umin_vec: return C_O1_I2(v, v, v); case INDEX_op_rotls_vec: case INDEX_op_shls_vec: --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631742150; cv=none; d=zohomail.com; s=zohoarc; b=PZpjtHZw6GCoZd8swroM2EbFM8F+jHNzdsbES8dlYKbv9o+JSnaNucSSCjBvt7g4VqPkw8gHsYkLVI3/hdSWaIj29ZO8FGzYv32DwULx8XeP6H2NjawgnSAaU2030e8uBjvqpqQLPYNyh1wI2Jnnw2OrR/vwlDX0U2P6p+09qQs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631742150; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7a8K4wAh/GLFrxFi31++1e54f/jDvgDca/CGPsn23Aw=; b=k6ev747Ss2ArPKoHqmfV4JLuJ7ne2b/K4fH2CT6lle3ktZChpyXXGPMVjSNpagoQlm9jCCHUL3iyWQOYyR26iLlwZiJP2bLXykcjA3lMcPnnSg1SqLNRYCUrNcvGGlAfFg3325TMBSARUVXGEL7yhfTaZbRgFq6OT+hYjYChCNQ= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631742150365588.8499423681478; Wed, 15 Sep 2021 14:42:30 -0700 (PDT) Received: from localhost ([::1]:57004 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQcfl-00009H-Ag for importer@patchew.org; Wed, 15 Sep 2021 17:42:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42758) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcVA-0003o8-A7 for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:32 -0400 Received: from mail-pg1-x530.google.com ([2607:f8b0:4864:20::530]:40730) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcV8-0003Pa-73 for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:32 -0400 Received: by mail-pg1-x530.google.com with SMTP id h3so4057677pgb.7 for ; Wed, 15 Sep 2021 14:31:29 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7a8K4wAh/GLFrxFi31++1e54f/jDvgDca/CGPsn23Aw=; b=kWHVHT9nICsqb0QdVsfYkGdT9TiyyArhkG+Csh/o5T4VdBvxcWKqLI9vqlabd/kEsG yNNDZv19PfoPeCh+j2ws3PBVPBOExR/9YHbcFetlsm/+59ck2NOyIAb3SpLKMy3locQO ZwQzkwCsr/vVIsu3D3i+7ys3n1457KFydDDG5heCirzs3Fm3eMZ5aWzDeD55F9l81sIu FdbCcWpef58IkxLI7l7m8+YTzwfoXyJ9GPs7nrfxDYYsdiaPhUgkuaJ7dtMjPiHPtNa3 zmhIgNC7BYX5TWxqTwfqIdMijKfJRiTBBAeRMiSgzeY4tfCD13CV0pYWY7xk8rjqvP9R 3YlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7a8K4wAh/GLFrxFi31++1e54f/jDvgDca/CGPsn23Aw=; b=MnErPH/0h/wXRSQSp6uia0ffvBNDzFnimdBeWvaG0iSv7VrOu3AO7WkXapu+5vT9SV MjEJkBn6Et/BTLW+6bu57RNsTe7sB3o32ucATswZGGnYcG/v2EpEtSi5ZUfTE07UOOkc C8ANoEC31hPEbfligKlUG+5LyT0ZAubT3Nur7atPr3tMU0A/LzGNTk4Fhc65ehVFl9Ug eIPJWq4Bz5YQ6n4T+qQcEWqiijJkvk3vsKH8C5X3TpKC2pvZFHD6FlS9+SgaSUC0KtjZ 9HrZU61h0osHxDheANeCkKd8B7ZBSSEhEfo7Mcc94IRIvwfR9dlNtMghjoXBf7EewiiR /7Ow== X-Gm-Message-State: AOAM532QCYKrdMZEkYn0gAkmb1aFi0HC+Gs5k0vIDBGFX//PJsP6zlW0 5n2ezzEDf+G3c0b//QeVoaeNmDMYJDj4Ag== X-Google-Smtp-Source: ABdhPJw5lEk0FQU3/gbl7t1NmVADkBT46wY2RDsNoAY76vlMVzZJwY3DkMpEtK8Kixlna1pKJgy7mQ== X-Received: by 2002:a05:6a00:1acf:b0:416:4ed7:e4c7 with SMTP id f15-20020a056a001acf00b004164ed7e4c7mr1713687pfv.86.1631741488855; Wed, 15 Sep 2021 14:31:28 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 14/16] tcg/s390x: Implement TCG_TARGET_HAS_sat_vec Date: Wed, 15 Sep 2021 14:31:12 -0700 Message-Id: <20210915213114.1923776-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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::530; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x530.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: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631742152610100001 Content-Type: text/plain; charset="utf-8" The unsigned saturations are handled via generic code using min/max. The signed saturations are expanded using double-sized arithmetic and a saturating pack. Since all operations are done via expansion, do not actually set TCG_TARGET_HAS_sat_vec. Signed-off-by: Richard Henderson --- tcg/s390x/tcg-target.opc.h | 3 ++ tcg/s390x/tcg-target.c.inc | 63 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/tcg/s390x/tcg-target.opc.h b/tcg/s390x/tcg-target.opc.h index 67afc82a93..0eb2350fb3 100644 --- a/tcg/s390x/tcg-target.opc.h +++ b/tcg/s390x/tcg-target.opc.h @@ -10,3 +10,6 @@ * emitted by tcg_expand_vec_op. For those familiar with GCC internals, * consider these to be UNSPEC with names. */ +DEF(s390_vuph_vec, 1, 1, 0, IMPLVEC) +DEF(s390_vupl_vec, 1, 1, 0, IMPLVEC) +DEF(s390_vpks_vec, 1, 2, 0, IMPLVEC) diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index c3bd22b116..4a56532011 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -291,7 +291,10 @@ typedef enum S390Opcode { VRRc_VNO =3D 0xe76b, VRRc_VO =3D 0xe76a, VRRc_VOC =3D 0xe76f, + VRRc_VPKS =3D 0xe797, /* we leave the m5 cs field 0 */ VRRc_VS =3D 0xe7f7, + VRRa_VUPH =3D 0xe7d7, + VRRa_VUPL =3D 0xe7d6, VRRc_VX =3D 0xe76d, VRRf_VLVGP =3D 0xe762, =20 @@ -2800,6 +2803,16 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode = opc, } break; =20 + case INDEX_op_s390_vuph_vec: + tcg_out_insn(s, VRRa, VUPH, a0, a1, vece); + break; + case INDEX_op_s390_vupl_vec: + tcg_out_insn(s, VRRa, VUPL, a0, a1, vece); + break; + case INDEX_op_s390_vpks_vec: + tcg_out_insn(s, VRRc, VPKS, a0, a1, a2, vece); + break; + case INDEX_op_mov_vec: /* Always emitted via tcg_out_mov. */ case INDEX_op_dup_vec: /* Always emitted via tcg_out_dup_vec. */ default: @@ -2842,6 +2855,9 @@ int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type, = unsigned vece) return -1; case INDEX_op_mul_vec: return vece < MO_64; + case INDEX_op_ssadd_vec: + case INDEX_op_sssub_vec: + return vece < MO_64 ? -1 : 0; default: return 0; } @@ -2897,6 +2913,43 @@ static void expand_vec_cmp(TCGType type, unsigned ve= ce, TCGv_vec v0, } } =20 +static void expand_vec_sat(TCGType type, unsigned vece, TCGv_vec v0, + TCGv_vec v1, TCGv_vec v2, TCGOpcode add_sub_opc) +{ + TCGv_vec h1 =3D tcg_temp_new_vec(type); + TCGv_vec h2 =3D tcg_temp_new_vec(type); + TCGv_vec l1 =3D tcg_temp_new_vec(type); + TCGv_vec l2 =3D tcg_temp_new_vec(type); + + tcg_debug_assert (vece < MO_64); + + /* Unpack with sign-extension. */ + vec_gen_2(INDEX_op_s390_vuph_vec, type, vece, + tcgv_vec_arg(h1), tcgv_vec_arg(v1)); + vec_gen_2(INDEX_op_s390_vuph_vec, type, vece, + tcgv_vec_arg(h2), tcgv_vec_arg(v2)); + + vec_gen_2(INDEX_op_s390_vupl_vec, type, vece, + tcgv_vec_arg(l1), tcgv_vec_arg(v1)); + vec_gen_2(INDEX_op_s390_vupl_vec, type, vece, + tcgv_vec_arg(l2), tcgv_vec_arg(v2)); + + /* Arithmetic on a wider element size. */ + vec_gen_3(add_sub_opc, type, vece + 1, tcgv_vec_arg(h1), + tcgv_vec_arg(h1), tcgv_vec_arg(h2)); + vec_gen_3(add_sub_opc, type, vece + 1, tcgv_vec_arg(l1), + tcgv_vec_arg(l1), tcgv_vec_arg(l2)); + + /* Pack with saturation. */ + vec_gen_3(INDEX_op_s390_vpks_vec, type, vece + 1, + tcgv_vec_arg(v0), tcgv_vec_arg(h1), tcgv_vec_arg(l1)); + + tcg_temp_free_vec(h1); + tcg_temp_free_vec(h2); + tcg_temp_free_vec(l1); + tcg_temp_free_vec(l2); +} + void tcg_expand_vec_op(TCGOpcode opc, TCGType type, unsigned vece, TCGArg a0, ...) { @@ -2920,6 +2973,13 @@ void tcg_expand_vec_op(TCGOpcode opc, TCGType type, = unsigned vece, tcg_temp_free_vec(t0); break; =20 + case INDEX_op_ssadd_vec: + expand_vec_sat(type, vece, v0, v1, v2, INDEX_op_add_vec); + break; + case INDEX_op_sssub_vec: + expand_vec_sat(type, vece, v0, v1, v2, INDEX_op_sub_vec); + break; + default: g_assert_not_reached(); } @@ -3080,6 +3140,8 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpc= ode op) case INDEX_op_sari_vec: case INDEX_op_shli_vec: case INDEX_op_shri_vec: + case INDEX_op_s390_vuph_vec: + case INDEX_op_s390_vupl_vec: return C_O1_I1(v, v); case INDEX_op_add_vec: case INDEX_op_sub_vec: @@ -3099,6 +3161,7 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpc= ode op) case INDEX_op_smin_vec: case INDEX_op_umax_vec: case INDEX_op_umin_vec: + case INDEX_op_s390_vpks_vec: return C_O1_I2(v, v, v); case INDEX_op_rotls_vec: case INDEX_op_shls_vec: --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631741998; cv=none; d=zohomail.com; s=zohoarc; b=lya4AixQOD+6ESB4GdIuo23SpvEXPNMmeCkc0NN3yeAvpYzxapjXs9R5cmmzGcdrwhuWp04g8hi5zDbfrVKEoh9E1+9Yeyp+15uaEZklqLrSQBCzn7n2+YLekI80GWTJb02n2YmIaxMC9RExJGgv6RGF16O8KyC2Bmup43qswf0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631741998; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=CmeOMaQp0dhkNUXThoxWxOsqZKk4DRHfwOFRWEzeE1g=; b=LLrwq0JYoQ09E4H2I6tQI3gS+baHiDe/vfj+TLGrfHJbeGsTgqu6i2HuRsccZOhk9ys+Il515S/uCd1iUUOfAZF/fJ/AZrsozNvM7gFLUJ31JJiO6CaAn2H4rK2JuEdFP3tVNF6nuavpzP/F/r+wHoZwbwGwTHfQufGnAyOoxak= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163174199868086.39805237425628; Wed, 15 Sep 2021 14:39:58 -0700 (PDT) Received: from localhost ([::1]:51528 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQcdJ-0004jq-Gk for importer@patchew.org; Wed, 15 Sep 2021 17:39:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42778) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcVB-0003rK-EX for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:33 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:41577) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcV8-0003Qe-Uh for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:33 -0400 Received: by mail-pg1-x529.google.com with SMTP id k24so4061857pgh.8 for ; Wed, 15 Sep 2021 14:31:30 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CmeOMaQp0dhkNUXThoxWxOsqZKk4DRHfwOFRWEzeE1g=; b=moIQvuHZBHdT24jRpsF9tgmh4K/F8q5OmoRPZGkoQsCxBn+9MrKRESOpD9sXiGV9fl YP3oys7RLjNt1l97AkySk1mfJUy+Mr8wH5UunoLt5e5si4bBNE9VNOQ3L5vSZjdw5uRA H2Kf6XvmeoCmJL6MmG2B9FzqvL9l4P3q1/RnDnZhXvSh29LM8SQ/d9/oWYflaxWjyun2 RMCxH0eWfmEGF5bd0mU2aBvo4nGsj/j+hj0UCfrYorl89wWe0pXptD5/yTFt2vfj4QQH TUAdyLhIInwOBD4qCykOAoM4Z5dbWNe4jW8d+e4DS0VSjhFXHkIBkNZzcPaL/FT6ywoh RUDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CmeOMaQp0dhkNUXThoxWxOsqZKk4DRHfwOFRWEzeE1g=; b=eZzfg4RcWIN4/Xrw85p1q9Pn6iFknVF6nBPI+na39Te0eC/VerS05eZDw+jGMfM8Rw iYeZIUbKiNGoE1+oK2ik/TPREG6J+lw6IsHAd7ih8It8J48MWw+QhhheqEn6W54y3lDZ xeRW/lTws3BAQStwvt/5mooLMC6l+Raw3fCTbAlh8iswkoPjn639TGaSEpgxHBPmCI/H mW1wg5DBXfW+76800Gu7tXOjAVrMYmFDIUpZ678x/HGNVCmqwbAqr6E3CXtigGwDYzy+ YIDHIhZwxW66sLZmrtQ1bI0PLa3klub3GFOHkOU2jKAEVz6achovZG5wv3oBy+nPFN/V ir1w== X-Gm-Message-State: AOAM530nVzlw1T3QHXVIboO2qI2UE0RDLhC90h+8+xD15OUott6BT6L3 7Iod5xMDqcsM03b2PlAMaKrqVNu03Xu6rw== X-Google-Smtp-Source: ABdhPJz9w/C5dYs6RM4+fCgCI0qZuDEFhQvVXYv/wnzmX48nIVW87bOJZA00gFZqfQQO5ujGBwonHg== X-Received: by 2002:aa7:980a:0:b0:43e:670:8505 with SMTP id e10-20020aa7980a000000b0043e06708505mr1593129pfl.74.1631741489612; Wed, 15 Sep 2021 14:31:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 15/16] tcg/s390x: Implement TCG_TARGET_HAS_bitsel_vec Date: Wed, 15 Sep 2021 14:31:13 -0700 Message-Id: <20210915213114.1923776-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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: , Cc: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631742000058100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/s390x/tcg-target-con-set.h | 1 + tcg/s390x/tcg-target.h | 2 +- tcg/s390x/tcg-target.c.inc | 20 ++++++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/tcg/s390x/tcg-target-con-set.h b/tcg/s390x/tcg-target-con-set.h index 49b98f33b9..426dd92e51 100644 --- a/tcg/s390x/tcg-target-con-set.h +++ b/tcg/s390x/tcg-target-con-set.h @@ -26,6 +26,7 @@ C_O1_I2(r, r, ri) C_O1_I2(r, rZ, r) C_O1_I2(v, v, r) C_O1_I2(v, v, v) +C_O1_I3(v, v, v, v) C_O1_I4(r, r, ri, r, 0) C_O1_I4(r, r, ri, rI, 0) C_O2_I2(b, a, 0, r) diff --git a/tcg/s390x/tcg-target.h b/tcg/s390x/tcg-target.h index a79f4f187a..527ada0f63 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -157,7 +157,7 @@ extern uint64_t s390_facilities[3]; #define TCG_TARGET_HAS_mul_vec 1 #define TCG_TARGET_HAS_sat_vec 0 #define TCG_TARGET_HAS_minmax_vec 1 -#define TCG_TARGET_HAS_bitsel_vec 0 +#define TCG_TARGET_HAS_bitsel_vec 1 #define TCG_TARGET_HAS_cmpsel_vec 0 =20 /* used for function call generation */ diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index 4a56532011..5530c974a6 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -296,6 +296,7 @@ typedef enum S390Opcode { VRRa_VUPH =3D 0xe7d7, VRRa_VUPL =3D 0xe7d6, VRRc_VX =3D 0xe76d, + VRRe_VSEL =3D 0xe78d, VRRf_VLVGP =3D 0xe762, =20 VRSa_VERLL =3D 0xe733, @@ -647,6 +648,18 @@ static void tcg_out_insn_VRRc(TCGContext *s, S390Opcod= e op, tcg_out16(s, (op & 0x00ff) | RXB(v1, v2, v3, 0) | (m4 << 12)); } =20 +static void tcg_out_insn_VRRe(TCGContext *s, S390Opcode op, + TCGReg v1, TCGReg v2, TCGReg v3, TCGReg v4) +{ + tcg_debug_assert(is_vector_reg(v1)); + tcg_debug_assert(is_vector_reg(v2)); + tcg_debug_assert(is_vector_reg(v3)); + tcg_debug_assert(is_vector_reg(v4)); + tcg_out16(s, (op & 0xff00) | ((v1 & 0xf) << 4) | (v2 & 0xf)); + tcg_out16(s, v3 << 12); + tcg_out16(s, (op & 0x00ff) | RXB(v1, v2, v3, v4) | (v4 << 12)); +} + static void tcg_out_insn_VRRf(TCGContext *s, S390Opcode op, TCGReg v1, TCGReg r2, TCGReg r3) { @@ -2787,6 +2800,10 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode = opc, tcg_out_insn(s, VRRc, VMXL, a0, a1, a2, vece); break; =20 + case INDEX_op_bitsel_vec: + tcg_out_insn(s, VRRe, VSEL, a0, a1, a2, args[3]); + break; + case INDEX_op_cmp_vec: switch ((TCGCond)args[3]) { case TCG_COND_EQ: @@ -2827,6 +2844,7 @@ int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type, = unsigned vece) case INDEX_op_add_vec: case INDEX_op_and_vec: case INDEX_op_andc_vec: + case INDEX_op_bitsel_vec: case INDEX_op_neg_vec: case INDEX_op_not_vec: case INDEX_op_or_vec: @@ -3168,6 +3186,8 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpc= ode op) case INDEX_op_shrs_vec: case INDEX_op_sars_vec: return C_O1_I2(v, v, r); + case INDEX_op_bitsel_vec: + return C_O1_I3(v, v, v, v); =20 default: g_assert_not_reached(); --=20 2.25.1 From nobody Mon Apr 29 05:28:34 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=1631741901; cv=none; d=zohomail.com; s=zohoarc; b=Jh2n9sBGXLdmvZoHO6CKTqNwo8/lSZJR+lBk6sjFSw/Y81ijTOLYudev5SXY2RN1oCsnQksfb+tjXuxj/vAjXg4+1CVcuC5YB09pfrCYsRHPiciJbEOIE3JXNYEWoTmf9ntMmVvvrSxvfnOx9S+F87dTMK8NRQfFVA6mCyZcW1k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1631741901; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=0VVfddpuwAtx2pRoPpsQ0YwoF7o53EICFyxHEJHFwvM=; b=Rmpp858mPHbhuBmSA1Zw1ph9yacEG9sFyz7eHXPVfWV2YYtlQX6LlmdZWDFPoUxYVhjxXIMVCqxnF1MqEhXm50hB5it7hK8D7Qi3pMmwI1koANPW3sxzizDy5Si95famtsLq2f6pf+iA1NHRfUL8X6K1Pq/d3zBGKfifniS/xJA= 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) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1631741901294674.6460383283741; Wed, 15 Sep 2021 14:38:21 -0700 (PDT) Received: from localhost ([::1]:45126 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mQcbk-0000Sg-5K for importer@patchew.org; Wed, 15 Sep 2021 17:38:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42780) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mQcVB-0003rw-Hq for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:33 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:33337) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mQcV9-0003Rh-O9 for qemu-devel@nongnu.org; Wed, 15 Sep 2021 17:31:33 -0400 Received: by mail-pj1-x102a.google.com with SMTP id il14-20020a17090b164e00b0019c7a7c362dso264583pjb.0 for ; Wed, 15 Sep 2021 14:31:31 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id q20sm837879pgu.31.2021.09.15.14.31.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Sep 2021 14:31:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0VVfddpuwAtx2pRoPpsQ0YwoF7o53EICFyxHEJHFwvM=; b=aQgYJpC8tUkjKHBAgtIcLe34FZDNO0asLyPCFz1Ttgvna6Cxafot/NLqGtZRxdi40n bTaKoMe6DgEBzL6hVzwdjdB6/vvrTyTOWk/sofyM5RhbYNcoxUumUvn9n3TbNswU+c5R eLYGhzTZxzPXz7nwkauWLBp1IaOkS+fMFrUEzq200lkCJcynaLDr6w2z/EaKZ1PAxvF5 D7CkmveM8Gu7yQdI9ZgBe2ylQj70Gr0Ttt/qPUBwFNK3LgBer8rIVA5T5Rp8KcYBP+TO hdWwQdysfbsQDPZksZdZjTjOvCxtE3xbWlbYwBIwC+pWalEkLq0W+uU8PncObmEY41/A cotw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0VVfddpuwAtx2pRoPpsQ0YwoF7o53EICFyxHEJHFwvM=; b=8P+RVyxu8FSl06BI1rio3ZPmPIISmBpsgaEl8eDAapUaDygA2Y5gAbdIs4CWflQXWM IiyR7tcLgNs094DQeGbQDoa/JDuNaIerIDz1swQ1/HNwTCMin+5QZfCwFbP+rYsLvqyM TMwduzdC1FbQ5yguL7fbC9edCcslk/INyFyqu1RszLp3krcNik0XvPC801EEciseDJ6b +xRqkMkorj+YeYSgQe09gaCfgB1vsqPYfYGQ5A1IFBFPnoKTmYhB4OoAbugisKtUSBIf iBMqwW5q0W2ll4F11+G5aOoLjXBiQHuwv1R1nepTV87XnSz+2uyYJa3QEHXjPxQ7A6AW aYkA== X-Gm-Message-State: AOAM533D07WuqG2b6TDHeITpsatz9HqKrjZTPZ0LkhVkf4pvAe4pl0zy n+0yHN+2AVgEq4uADHIs0ZrreLJkKDvcxw== X-Google-Smtp-Source: ABdhPJwQAmMpSMdNwwN6yu7PUaa76U6W8kK94dmw4iYccgC15Q9heq5ocZuogOF86qVYBYpRdgpnkw== X-Received: by 2002:a17:902:9309:b0:13a:5519:6fa3 with SMTP id bc9-20020a170902930900b0013a55196fa3mr1600676plb.5.1631741490383; Wed, 15 Sep 2021 14:31:30 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v5 16/16] tcg/s390x: Implement TCG_TARGET_HAS_cmpsel_vec Date: Wed, 15 Sep 2021 14:31:14 -0700 Message-Id: <20210915213114.1923776-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210915213114.1923776-1-richard.henderson@linaro.org> References: <20210915213114.1923776-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::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.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: david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1631741902376100002 Content-Type: text/plain; charset="utf-8" This is via expansion; don't actually set TCG_TARGET_HAS_cmpsel_vec. Signed-off-by: Richard Henderson --- tcg/s390x/tcg-target.c.inc | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index 5530c974a6..aef24d0795 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -2869,6 +2869,7 @@ int tcg_can_emit_vec_op(TCGOpcode opc, TCGType type, = unsigned vece) case INDEX_op_xor_vec: return 1; case INDEX_op_cmp_vec: + case INDEX_op_cmpsel_vec: case INDEX_op_rotrv_vec: return -1; case INDEX_op_mul_vec: @@ -2931,6 +2932,21 @@ static void expand_vec_cmp(TCGType type, unsigned ve= ce, TCGv_vec v0, } } =20 +static void expand_vec_cmpsel(TCGType type, unsigned vece, TCGv_vec v0, + TCGv_vec c1, TCGv_vec c2, + TCGv_vec v3, TCGv_vec v4, TCGCond cond) +{ + TCGv_vec t =3D tcg_temp_new_vec(type); + + if (expand_vec_cmp_noinv(type, vece, t, c1, c2, cond)) { + /* Invert the sense of the compare by swapping arguments. */ + tcg_gen_bitsel_vec(vece, v0, t, v4, v3); + } else { + tcg_gen_bitsel_vec(vece, v0, t, v3, v4); + } + tcg_temp_free_vec(t); +} + static void expand_vec_sat(TCGType type, unsigned vece, TCGv_vec v0, TCGv_vec v1, TCGv_vec v2, TCGOpcode add_sub_opc) { @@ -2972,7 +2988,7 @@ void tcg_expand_vec_op(TCGOpcode opc, TCGType type, u= nsigned vece, TCGArg a0, ...) { va_list va; - TCGv_vec v0, v1, v2, t0; + TCGv_vec v0, v1, v2, v3, v4, t0; =20 va_start(va, a0); v0 =3D temp_tcgv_vec(arg_temp(a0)); @@ -2984,6 +3000,12 @@ void tcg_expand_vec_op(TCGOpcode opc, TCGType type, = unsigned vece, expand_vec_cmp(type, vece, v0, v1, v2, va_arg(va, TCGArg)); break; =20 + case INDEX_op_cmpsel_vec: + v3 =3D temp_tcgv_vec(arg_temp(va_arg(va, TCGArg))); + v4 =3D temp_tcgv_vec(arg_temp(va_arg(va, TCGArg))); + expand_vec_cmpsel(type, vece, v0, v1, v2, v3, v4, va_arg(va, TCGAr= g)); + break; + case INDEX_op_rotrv_vec: t0 =3D tcg_temp_new_vec(type); tcg_gen_neg_vec(vece, t0, v2); --=20 2.25.1