From nobody Wed Apr 24 06:17:33 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=1620067037; cv=none; d=zohomail.com; s=zohoarc; b=AVskKr1dQ/8jBKTgnUMSahg6gCNvIRxRwxoBuGVzQyVIb5w7LWb/nLeQR1th7M1P5DwOsDyTGanCEvbtmOVnFYkN1G8EzSJkk7fihTsjycLoOTmE+RKpF3G/nkfNzAqIfGOx8sqtNW1L0JnS1ORv+m95Hxosr5BBtLz7jrhlc9A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067037; 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=3VNyYvz+OCo9AvrZ7B6/sX/KbxOpD2Lebaf6p47Cp2o=; b=bExvVDY9roeZeA9kLCpTh08UGQ5l/B4MiL4Ow+dGFn/inTIsXP0jo5jro+Bp81uJFTPTQ17IbaGxbb4imDnTJ/TW5yIERc28xnl5swOA8MhN6vWL5ZRBpI1lONRz0YxYXTOABfmM0emKOqebZhUElKhTz9GjFy2ogUmIDkKO+Z0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067037056623.8516965664694; Mon, 3 May 2021 11:37:17 -0700 (PDT) Received: from localhost ([::1]:53482 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddRT-0007V1-JC for importer@patchew.org; Mon, 03 May 2021 14:37:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39376) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQ9-0005jC-6i for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:54 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]:43787) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQ3-0008Eo-Ka for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:52 -0400 Received: by mail-pg1-x52f.google.com with SMTP id p12so4279076pgj.10 for ; Mon, 03 May 2021 11:35:44 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3VNyYvz+OCo9AvrZ7B6/sX/KbxOpD2Lebaf6p47Cp2o=; b=DfHeiaTbOJlSI4Dv0+mOuenpER40mM8AGxLTJl7gqRhuokr1+xn8SXT+LnGSE4ywg8 akkYwIBxz/MZ5dniz+5DeUaEihm7FO1OVBJaaCpiuL9pKSTieCH+L9oW5ZQ3NnGdSZmF joevtmYNrCr/YijcY3oNvz3kNc2fu8HSgVc5vetEZK5jPysEtbn1/8ECEe4wR42Mg3ej C0W6lcTKhwakaldUkkMV/C2w7YAdyPfJ4MMklcRDBWoRJ8QU3znxkmRSp1nZS2OyX7vv ltpmPmfKLhcKRopIiQxoRAR/SIO6jH5mmxSDrEq/tXz4ZKbtwJXx0pSagdZt8jPFzXOf eInQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3VNyYvz+OCo9AvrZ7B6/sX/KbxOpD2Lebaf6p47Cp2o=; b=hEMpXOfBDhRmbMtDaSz9HbXVuiMmdtNJ5zLGh/ucBw2B8YSfeTS/rdkcu0LbV5GyVj FonUHfJhpnfEZnxrbthhleKwYu8xNnCZkVKnqwskZKtMM7tl+Sk+4KWLb4cb8igzZElN pJ0voXflXqUfPf3G6Xi03iHxbFNvDI5ZUkAO9oMZUjltP+Ml2Cf16kXSwiO9m/32c0nI x2CUPryHiQmDDc05fE4HFX5SMlVThNqWkzYs3X8cIsn1//Har4Opt7pqK1pta1Zggfd+ eBjdjQQ5oyuPAq7pCNBrsyVkJup8ly/S1rk4IwIw43NWVwg2MKyU5MxPKsH1kez59/c7 nz/g== X-Gm-Message-State: AOAM5317psQs1tybVYsYT2IHLH7Jg9cs6Zu3IbkbQm2zbrNoZw9qv6UC oVw93ED0xEyeLbrJJZ6GAV5jNtuPp46HtA== X-Google-Smtp-Source: ABdhPJySbpiGoxAW65te7RAcm6kzy/AiDP9eYC2mXwH2Fh56jy05gPtBrH15dXM+61D6oEqSwhKgvQ== X-Received: by 2002:a17:90a:f2cf:: with SMTP id gt15mr21303pjb.64.1620066943225; Mon, 03 May 2021 11:35:43 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 01/16] tcg/s390x: Rename from tcg/s390 Date: Mon, 3 May 2021 11:35:26 -0700 Message-Id: <20210503183541.2014496-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-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: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" This emphasizes that we don't support s390, only 64-bit s390x hosts. Signed-off-by: Richard Henderson Reviewed-by: David Hildenbrand --- 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 d8bb1ec5aa..7ce0bf5dfd 100644 --- a/meson.build +++ b/meson.build @@ -248,8 +248,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 Wed Apr 24 06:17:33 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=1620067502; cv=none; d=zohomail.com; s=zohoarc; b=NnSuQyXuhbeJFH+7Va/YMXifE5XBFadkCfOW1ud6XfqEygfZKBRG2CmV1C/gqWxyicgQaK9J9btvMMBHpcv0inKdpzK2V3F8VSrj5XUrE1C/limA1ThZ0wV40ui2HIOHM2v3GVUggsVL8Ewzm7E8nFbuYn2SyhIfBy8/3r06B7M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067502; 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=iHOClLkC4V+jbCCqGH9c6B6DK7OoGOiJMvucdy9WWvA=; b=PGr1nidpyTUyUJzQBGqe2oJPbRN+P5gyjD9qR8zSjwuhBCDvl1rsuOuKN6gqhNlPoj7ylaTutc9CWomu/xwPCsN6+cKq5tRnpTj5eX9eLjP6kF+TOrSffPZkLYy446/EUTmwwBduLo4bFPEIiml8ES8qFNxaxmjWBleFLtclZ38= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067502153903.6251792339507; Mon, 3 May 2021 11:45:02 -0700 (PDT) Received: from localhost ([::1]:50888 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddYz-0001Kh-3H for importer@patchew.org; Mon, 03 May 2021 14:45:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39488) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQG-0005oY-Uu for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:01 -0400 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]:43696) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQ6-0008FR-T2 for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:00 -0400 Received: by mail-pf1-x434.google.com with SMTP id e15so4807883pfv.10 for ; Mon, 03 May 2021 11:35:45 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iHOClLkC4V+jbCCqGH9c6B6DK7OoGOiJMvucdy9WWvA=; b=SDOUbcHO8ComhteZrpmrreemOSJmFmwEeZZKuTyAP/f1ESlEAZVCjzYd+3Q1jWUrn4 5MbApASWqtBHtU6aYqdaettcI0CblBv4oQLMhRU19mNYWR3cYOP86alOSsxIEO4w9LJj okWrMVVLEozqUMJY08TOQe9+Hle+vIXs5mv7GsI1UvHy5EbVFyJkpGHEzF5/JqHahFAt +r0cPyoqJb3ESTFfP9GfoKwah5c5vw/KNqDUacfIOzm3P4lij9fP35xpHIRkEsiPbSgz MwmZBhczvB01zSIA3e4h12wsgJAA//FuQ/0ku74sujEJwifPdqnvQtsWn1hWr7uy9vJT 8quA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iHOClLkC4V+jbCCqGH9c6B6DK7OoGOiJMvucdy9WWvA=; b=F/G4ShxQ92whKzAGYloPaMje2euXsov0YPrSdHtQux16jJI5DekqoGnmR3no9epa37 XUfkg+xp20wDFkG+FhEy/2LzWdg+EwLA6NMU0mVZX13N2NgqHbQigRhqWRRl0XW0JAKt Y721srZ9HOBut0aF9IK3uwTVeX65SZ2rAoAooMwf3Kvk3NXpsIJeeOBJ17V3a4SjubGJ qCftgimRSa7VX3o1+1GiAYYqq+Bx4b8/eFjJuoHEc9yHF9ww3dnFc5wlgFjWO/LH0Gzv Bu2yrVYTJY1DTXYEa5uIaCKdN3+SvSaUhVf/IwvTrLf4O0tIygWfuCFhKNokOCZtSf8m Sa5A== X-Gm-Message-State: AOAM532/WkC2LS2wVKDLqWTnpiqHGaBdnZsaiWMraNIxNl5XeXniPyPQ x/QgXlnnseomxnQItgfjtlJbGBUQhrEEQw== X-Google-Smtp-Source: ABdhPJxFLuwY9qOhTW4Axf+8YdOLhW+cud0o3M/VodSJ+brahu2j3nOUQjxLdwtWXnZVLaPG4eh+6g== X-Received: by 2002:a63:5422:: with SMTP id i34mr19600230pgb.264.1620066943876; Mon, 03 May 2021 11:35:43 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 02/16] tcg/s390x: Change FACILITY representation Date: Mon, 3 May 2021 11:35:27 -0700 Message-Id: <20210503183541.2014496-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-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::434; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x434.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: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" We 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 641464eea4..c612d24803 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -52,16 +52,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 @@ -82,8 +85,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 @@ -96,7 +99,7 @@ extern uint64_t s390_facilities; #define TCG_TARGET_HAS_extrl_i64_i32 0 #define TCG_TARGET_HAS_extrh_i64_i32 0 #define TCG_TARGET_HAS_goto_ptr 1 -#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 @@ -117,11 +120,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 af8dfe81ac..8a4e9ce359 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) @@ -580,7 +580,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; @@ -623,7 +623,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) { @@ -709,7 +709,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) { @@ -743,7 +743,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; } @@ -763,7 +763,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; } @@ -783,7 +783,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; } @@ -803,7 +803,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; } @@ -891,7 +891,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; @@ -912,7 +912,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) { @@ -921,7 +921,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; } @@ -970,7 +970,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) { @@ -995,7 +995,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); } @@ -1004,7 +1004,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; @@ -1028,7 +1028,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); } @@ -1062,7 +1062,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); @@ -1125,7 +1125,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); @@ -1133,7 +1133,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: @@ -1219,7 +1219,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); @@ -1252,7 +1252,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 { @@ -1328,7 +1328,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; @@ -1522,7 +1522,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); @@ -1813,7 +1813,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; } @@ -2037,7 +2037,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; @@ -2262,8 +2262,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 @@ -2326,7 +2325,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 @@ -2334,19 +2333,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 @@ -2390,7 +2389,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 @@ -2405,13 +2404,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 @@ -2427,13 +2426,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 Wed Apr 24 06:17:33 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=1620067897; cv=none; d=zohomail.com; s=zohoarc; b=naX5w5nRbwp88+bQvmbBXeSP0RJBDIGc0Z3ttg5lzukke90gqp6RnghbUCAb/XQKIdOqdJQBHyPIck49b3d+aYlsUV2Ag/8G5vpn34Q7C9U9pPSRMBIKuLXU51rBqAApF8UQtFlto6L0ZwHhiEq88uMv9/pM7J13djqtvMa0wBk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067897; 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=AQ/PFvnLZRR2lfacHzpGUbL3/llX9Hwwg7oJ4nfVIdY=; b=NzJC7YC5xvHpcFzYqzn1Cr/4AlCYUyDA/Rf54VxtrviwcPU76X8Hg3CXLcDX6tEKP+llDB+K8gr0De/25i2tijiqSJtiqI8PqD5pFFCL0l28ymZy01cAdxHsDs9xfZlWoZzDVBX4cDPBR2olu3oFEbzUCCiD+F7EwjELaxSBDW8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067897031639.6635623381666; Mon, 3 May 2021 11:51:37 -0700 (PDT) Received: from localhost ([::1]:34536 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddfG-0006Wm-DG for importer@patchew.org; Mon, 03 May 2021 14:51:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39546) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQM-0005rz-Nb for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:07 -0400 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]:37769) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQ7-0008FX-Hm for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:06 -0400 Received: by mail-pg1-x52b.google.com with SMTP id d29so3498847pgd.4 for ; Mon, 03 May 2021 11:35:45 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=AQ/PFvnLZRR2lfacHzpGUbL3/llX9Hwwg7oJ4nfVIdY=; b=jowBp9g0WfMFg7fwXKX/MJscupWeJktRNM70yuhprUm7+rxJXcUBOFJsO3c12Ysj/z Q5I8HbX0fR8Yswu/OV1TcZ8JKE/gSIMcxk0vhynJRjZCdJUZqBF0kuCyq171z7moFM4A YUKdR3KLy+eqi9rqm2OGX6wvQcwEqCERRFDOplv/W4xSAwYJbwXVDptCIBvm8YFbP9mC 4JXr3HFB0P0LHotCL6Fuo32cX+fpP5YhL9T4nGny1zOJgwU/rUWOJT+5CJ+KyzSMpehH vf1n/qB19IC06+K+mx8ksUPgWkBPN+5Vca0t1FQupXFL3rgQ9xTZzLhzHy69f7QS+FSD YANQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=AQ/PFvnLZRR2lfacHzpGUbL3/llX9Hwwg7oJ4nfVIdY=; b=QXx+A8E2E0p/ACQhuS7cGNWPyeROb/eU4rykV1Atkk4GPBD8CzF17RTZxVtWD/qiRq 2anBEXdzM+FSttdxPua+y+Ba1jE3eEHzyk2soLlMmMsoa/A+jrTSHgimPbFiPAf5myOF WFScyvja0XXiYXnv44h2X/tkmiaAIURGCSuZT0HJaHqX18yl4IBZD5LmZ/5YqW2oUknR 5wyRx8CygPOIl8OwLtHM8PJavv09ZW7iCkPZv0L56ktPofiB7mK+4vK4AkyKZIaZ9lpp N5dE4RV+668yVRT4qz9rIeTBgo0Pin1z59AY9bcoUzAFrGvbSdbdF9jEqn79DmC8JB8A uglQ== X-Gm-Message-State: AOAM532eJHFUCLTfavwc38183tqDA++4XGD+rnl8j2ZPbBtzLK14un1e +vyTC+qvlrpr+eBjwxStw66i+qXHRrKCEw== X-Google-Smtp-Source: ABdhPJwmdC6cnJzgWR2mO+Dpb6MUz5OiZEHDkR0ZB+MjWHiHgAPVyMRZgrLcz3vkSamw/XQGQYGnyg== X-Received: by 2002:a17:90a:d918:: with SMTP id c24mr21240pjv.58.1620066944396; Mon, 03 May 2021 11:35:44 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 03/16] tcg/s390x: Merge TCG_AREG0 and TCG_REG_CALL_STACK into TCGReg Date: Mon, 3 May 2021 11:35:28 -0700 Message-Id: <20210503183541.2014496-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52b; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" 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 c612d24803..3a701d9256 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -29,22 +29,13 @@ #define TCG_TARGET_TLB_DISPLACEMENT_BITS 19 =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 @@ -136,7 +127,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 @@ -145,10 +135,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 Wed Apr 24 06:17:33 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=1620067039; cv=none; d=zohomail.com; s=zohoarc; b=P43Zeq5bGlsGX8U1ejz9OLp8xCBYP291nLHzsCPTqagle/42TtUrEa7Lmmse2Sl5v2fTZOYLDXXyp7ur8Mdv6mb6bhYZOKIh41arKythmhw+lzNx7YvhtlIzJata0reS/Floxoi/WXKe3rejkjUwkwUI0UqBY0Gm73fmEOMwRSA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067039; 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=aJnhTtyj53ZvOcv7OXdx7PvY8tzCuazmFFYZfNHSxf8=; b=iXXoCFWMhTJ/DMJwyqEUcrRFF1MWhCNDrMp+pNMxYsZMHfenjmdKZ5w/17u1SKvcogmJADEYmuQxUPtk3fVfHM4xUjWJLwNMoTSNZ2+v69IvuMUqPd6/rVyai0YMNVbq5JryC6fu5lm91IBEPm8mulJ+OzZXXZyAGyVOFNa8CS4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067039880347.82857478954577; Mon, 3 May 2021 11:37:19 -0700 (PDT) Received: from localhost ([::1]:53726 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddRW-0007bC-HJ for importer@patchew.org; Mon, 03 May 2021 14:37:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39414) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQC-0005kX-Ds for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:56 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]:44830) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQ4-0008GC-84 for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:56 -0400 Received: by mail-pf1-x42a.google.com with SMTP id m11so4804900pfc.11 for ; Mon, 03 May 2021 11:35:46 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=aJnhTtyj53ZvOcv7OXdx7PvY8tzCuazmFFYZfNHSxf8=; b=oDKqtntZ4mmR/YeqlwWIgcvHXda9vA97GRBeAcd/jWZuQVyOJBlJhRP9FkpSGLPgZ/ 7GVIcwZiPD8DlXzdL6y7rpfRR00pm4lYwqKIb0ODYtgnystI3elyuJvUGCnPYMCKYe4W pOfK55/Js1vZlqqGapkgDGJ+RgOBPN2HGPmrl/sVwsDw53jCUlyCepO3gFms5XNGsEam xHrd0uwXGx3ZhTsLA8E7aFqeumuLyqpYYj1kZpS+YgxPWRqDwnHP1//yO8WGvIuwlchT 9tPsOJfWw7IHI5kW1oWgCgZU4E5BR8E+nnFJ45eCYQM307CStt6FeqLa9Vmy+WkVfF3O 8I8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aJnhTtyj53ZvOcv7OXdx7PvY8tzCuazmFFYZfNHSxf8=; b=BsPViDRshhHAcjgglsVI4kL+HBaBREMo2aCnS85AjDyQ2hPeRp/VWhl2PYyWx+dSf4 UpbvDITNJoB5M3sX1hXjgqUZyuGMVbOAVnHkmzeJMXXa0YOAtyvnBun7TJYsg7BgIrQS LH0vFIh29UMsYzwXiAYAWGAMZqLSpw2ErrDhSZGnAgFulX5/sldsm7GejLrTThzTioTS SiCUavLisD3bFz5riJsvH/skSgeXl+xf5QOqTk9EeFoLcIwlbq1XJ9AqYS3IC78FA1rw n4Yeb39MTjssyaJZ/HEr76n3k7ImvJFLfsjQ2zeIOCy0ff5vtLl+q9m5l5cdR8fPbaPV SC5A== X-Gm-Message-State: AOAM5322DUwVSVnsCzcYi8ZnxD6lFvqHfFfAx2KySeMTs1HHyyeeiONV 0JoeXCY5V/LNPJrhXBDYDtQSyhC3KZ0JNw== X-Google-Smtp-Source: ABdhPJzGMY6Ts6O5SPMH/LZJHb6KSlg4AvvTsvFQjBLOUOOLOC7lE27VGc5T+72ldaZdqGWt0vg3/w== X-Received: by 2002:a17:90a:d710:: with SMTP id y16mr19389pju.86.1620066945274; Mon, 03 May 2021 11:35:45 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 04/16] tcg/s390x: Add host vector framework Date: Mon, 3 May 2021 11:35:29 -0700 Message-Id: <20210503183541.2014496-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-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::42a; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42a.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: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Add 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. 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 3a701d9256..e8659bf576 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -34,11 +34,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. */ @@ -51,8 +60,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) @@ -126,6 +136,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 8a4e9ce359..52df20a1ed 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) @@ -2274,6 +2307,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) { @@ -2414,11 +2483,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); @@ -2433,6 +2525,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) @@ -2441,6 +2543,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); @@ -2455,6 +2561,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 Wed Apr 24 06:17:33 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=1620067198; cv=none; d=zohomail.com; s=zohoarc; b=ajZm/fSuj8OFZz+fK8rQwH+DVENz39G/5ev1aELP78vJ8uZoC1X8XjE7NDo5/hKboLBavjW3JSQq4aFn+zpbtMfDBz0ZgngXoH7H+OUNvVZNdweduEfXj76S6ZFvKIC41SBuQmG2w2Zn6A03L/KqmIL2pgt0iAR9s0xEBgOknHE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067198; 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=FgthEsMRv5FpKZZtwieDp3JqJ+n/DTOkW/OaeP0Dh2M=; b=H3SCNBN8ohyDhsJbSiLk/+t4kiEoe+FZl4lNqO8kbHeMjuxSaRPjjrclzvJKHVnaXxvgBhHhTUTAD7XE7uslsW4Cx7pQiSbvFbjoiLYK6kMkintjbEs3zdhvMl97WCSBY26nj6HbwzlssWDcyg8fKEugrUlYVYerhkPAa6RqEhs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067198881758.9113270947178; Mon, 3 May 2021 11:39:58 -0700 (PDT) Received: from localhost ([::1]:34172 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddU5-0002dN-Nk for importer@patchew.org; Mon, 03 May 2021 14:39:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39452) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQE-0005mC-5E for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:58 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]:46073) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQ5-0008GF-FH for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:57 -0400 Received: by mail-pg1-x52f.google.com with SMTP id d10so4273621pgf.12 for ; Mon, 03 May 2021 11:35:46 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FgthEsMRv5FpKZZtwieDp3JqJ+n/DTOkW/OaeP0Dh2M=; b=T5zcRbMnLFdxRR37VGLOtMqVQ3WDOWjnY41Cd8USOqFXHgbABTB6AZ6fecZVwgvNul aQlFWz0d6HcbSAtQGgotp6cW3emq08oKSgVW0ywQmctoLhr5EzEv8g2X6bYMUcUNTDK1 gSoEcBSL+9urY6DIeWDsPrmA/cON/rePq2i2apISIEVGavMyr1cyzXOZ0eZobwBh94ii rkBDJYmRyN+S0DkFCpHHyuzZPmAAbeYvd+Wzm3cDcGZdMu1qRTteolkfHenmE+Q9/EIp iV4K13roHkf3+BrIwO4MuJDtyZfIka+vnzLcjqDwcFtayNIqDGDhQoz09C8+l3Ox9SeP 3TFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FgthEsMRv5FpKZZtwieDp3JqJ+n/DTOkW/OaeP0Dh2M=; b=phKppBY45tcoE6+KVLZ/tAtD9VstM0v290rCyyqlfJRnz2E6IvNF4iqoKSGZk3eVPf Y170Fh6LvO0J/A1DUWRlDCMm4DkN7JxjVdTyMcxtfWQ5mVugKU3iTJjEzDyeWq/tvKU5 FKdf+5t16Qq3SWN61EKlpgZEB4MhNLsFQ1AyxaDgw6fpS4LqcgHgIRk/cz8+VwcA7Jx7 9ifk3iSWDvaEu0yET0Hw1ey14TZKn31IoQhXe9FbR0yyD6QOJffDOHa2aqPApoZRx5OZ gUW9s8dwBasCRcn82xChoyCTe7lqg8nObKBjLk9VkWGbikV4rTzwse2U2HY21CAnpVDH UHog== X-Gm-Message-State: AOAM531AVJX5D2ut+LWcyhmC6Hp0F27XjOQWgEAU5u0Ux8i/nitVRFEi L7DWAnb6LyjAQaep+QIlSLMDrM0v6AW3LQ== X-Google-Smtp-Source: ABdhPJzMLyJ+5YZiHpvqGuxH5VDDndt221jHBfozSi/407DitlbsHcV8P7jdWL9K1UlM1/2WzDfcaA== X-Received: by 2002:a65:6245:: with SMTP id q5mr19364413pgv.447.1620066945852; Mon, 03 May 2021 11:35:45 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 05/16] tcg/s390x: Implement tcg_out_ld/st for vector types Date: Mon, 3 May 2021 11:35:30 -0700 Message-Id: <20210503183541.2014496-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-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: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/s390x/tcg-target.c.inc | 117 +++++++++++++++++++++++++++++++++---- 1 file changed, 105 insertions(+), 12 deletions(-) diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index 52df20a1ed..6ed9a309c1 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 @@ -532,6 +538,26 @@ 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) +{ + return ((v1 & 16) << (7 - 3)) + | ((v2 & 16) << (6 - 3)) + | ((v3 & 16) << (5 - 3)) + | ((v4 & 16) << (4 - 3)); +} + +static void tcg_out_insn_VRX(TCGContext *s, S390Opcode op, TCGReg v1, + TCGReg b2, TCGReg x2, intptr_t d2, int m3) +{ + tcg_debug_assert(v1 >=3D TCG_REG_V0 && v1 <=3D TCG_REG_V31); + tcg_debug_assert(d2 >=3D 0 && d2 <=3D 0xfff); + tcg_debug_assert(x2 <=3D TCG_REG_R15); + tcg_debug_assert(b2 <=3D TCG_REG_R15); + tcg_out16(s, (op & 0xff00) | ((v1 & 15) << 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__) @@ -708,25 +734,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(data < 16)) { + 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(data < 16)) { + 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(data < 16)) { + 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(data < 16)) { + 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 Wed Apr 24 06:17:33 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=1620067039; cv=none; d=zohomail.com; s=zohoarc; b=PzAFa5jB6MN4UApAayXhHIYTJiYBktogftzMMaLcBiQivFHLYK1IRHCNREn0lGd25BnyOu8mtFNxq5EHGUDp/cIdRzb0rKSMGFI8BiPZ6Wq4+Ra9btjzF8VFopYul3Xx4RcMrV508PG7aaDMWVw7Ny9pDhJBevKWTxT/FeTp/Js= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067039; 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=W8Z7GWgWXrx3oneyk7vmOA8UkgJl0Dw9JeNEtpO+NwA=; b=Tvh3lLcjdkRAdDvKA6ueFBcVQVOha2YIJ9esmKYA+uuPJoF/uW3YfWUegx6wAUfyul36odAxacYJdc3JAhok33qDXblrEDNu5MpAAvcmky38YgA272R3TS2Mhq0PVtcvy0TQcxpMgTWeMTXlR4kRmJ6f+K+BFIjn8oF4CuqEjRc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067039434893.6396986035705; Mon, 3 May 2021 11:37:19 -0700 (PDT) Received: from localhost ([::1]:53722 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddRW-0007bA-0N for importer@patchew.org; Mon, 03 May 2021 14:37:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39456) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQE-0005mr-Jp for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:58 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]:38748) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQ6-0008GL-D1 for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:58 -0400 Received: by mail-pg1-x52f.google.com with SMTP id i14so4291862pgk.5 for ; Mon, 03 May 2021 11:35:47 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=W8Z7GWgWXrx3oneyk7vmOA8UkgJl0Dw9JeNEtpO+NwA=; b=c5bYKWGBJfJFn0+Gp4HAiApQb28PB78Johf3qZsIjE2+pd24WSWe6cnjfS0akNzKeD QlBlV0SWUckmAjTs3tirLzLkO2N5qnC1VjY3EXciHhcnxf+Iv3FTbUdkkpjynb/GC8WM 3AoVUsKRkUCqFMNBliPu4mQlV6D8+PuMUOAcrTqHMO9Cs3LBYGkjTKZ9aRsMC1sN1nP/ VVdG5ffkJXXPWhF6gGuKG8id+i8RB/vXdPOtuOzUwE52kDKANbWzPJCXTglTersAn6kd 9Na4QQv+7iF8InM3SJ30z/pQg8DGpANIqKZ2w7s6WsqfHpfFWhURCCKQFts55IzTn6F/ lsKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=W8Z7GWgWXrx3oneyk7vmOA8UkgJl0Dw9JeNEtpO+NwA=; b=UYAz8K71AOPVvH4vm0Cb2Q6VkkRvJTbXNy+iEKWuiK/hXGAVqKjbIPHgP+eJtQuKuB QOgg5mJ5NDPeLdr8rWGBpOsK/VFAMvZh84TXNU6LsR0/XS0kBpW8y0cU4XIlWShb9Z4K 0Gm87LY/IHt1l+O+PR3oYb9fsJS7C4qy7Ebt7jtS60FwBLz4dXwWj0zlnidw388wzziL VAMqlkJDeM4x62PnxImiWfna8pC02sNXv4NdO6QmHbb/jqwJviFwQBvgdAejEXqpnu1S tKi4SsItPDkTXMQZaVh5Pk9PVALbYcA6lLDja9c0OV+Q8B0rBssdu/+rNOybbzNI2Iff BlNw== X-Gm-Message-State: AOAM533u81yadZnxPJ6EdP9MbIkWbLIIkjQ1/BwwiNgpYTjmj5iXEuEJ LCEtabRXrnktoZUpPuZS4SIZ/ELRg3/e5A== X-Google-Smtp-Source: ABdhPJyQFMgwsEHiGxRfb0Y388iepFJ87N89bwydcGJnmmbMgKD0riS6IXRAuiPJFWSfnpqWRS243w== X-Received: by 2002:a17:90a:c087:: with SMTP id o7mr23308611pjs.65.1620066946718; Mon, 03 May 2021 11:35:46 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 06/16] tcg/s390x: Implement tcg_out_mov for vector types Date: Mon, 3 May 2021 11:35:31 -0700 Message-Id: <20210503183541.2014496-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-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: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/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 6ed9a309c1..439ab5a359 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, @@ -546,6 +551,39 @@ static int RXB(TCGReg v1, TCGReg v2, TCGReg v3, TCGReg= v4) | ((v4 & 16) << (4 - 3)); } =20 +static void tcg_out_insn_VRRa(TCGContext *s, S390Opcode op, + TCGReg v1, TCGReg v2, int m3) +{ + tcg_debug_assert(v1 >=3D TCG_REG_V0 && v1 <=3D TCG_REG_V31); + tcg_debug_assert(v2 >=3D TCG_REG_V0 && v2 <=3D TCG_REG_V31); + tcg_out16(s, (op & 0xff00) | ((v1 & 15) << 4) | (v2 & 15)); + 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(v1 >=3D TCG_REG_V0 && v1 <=3D TCG_REG_V31); + tcg_debug_assert(d2 >=3D 0 && d2 <=3D 0xfff); + tcg_debug_assert(b2 <=3D TCG_REG_R15); + tcg_debug_assert(r3 <=3D TCG_REG_R15); + tcg_out16(s, (op & 0xff00) | ((v1 & 15) << 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(r1 <=3D TCG_REG_R15); + tcg_debug_assert(d2 >=3D 0 && d2 <=3D 0xfff); + tcg_debug_assert(b2 <=3D TCG_REG_R15); + tcg_debug_assert(v3 >=3D TCG_REG_V0 && v3 <=3D TCG_REG_V31); + tcg_out16(s, (op & 0xff00) | (r1 << 4) | (v3 & 15)); + 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) { @@ -579,12 +617,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(dst < 16 && src < 16)) { 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(dst < 16)) { + if (likely(src < 16)) { + tcg_out_insn(s, RRE, LGR, dst, src); + } else { + tcg_out_insn(s, VRSc, VLGV, dst, 0, 0, src, 3); + } + break; + } else if (src < 16) { + 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 Wed Apr 24 06:17:33 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=1620067402; cv=none; d=zohomail.com; s=zohoarc; b=ck9k26UwMYJPgixusA8bVCwG2otrdiQjQFx2aTI47FV5L05LkkA05KYZKwCfJwgPBfNnCaOp45r+bgFqjybjTsXpWYqcSEenputGr30DUeuzupJZAgKgjtKpnyBa1U4HQxO9aQNbdX7x9PYL+0eqijjkoKclH4qyvI/4icqqhY0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067402; 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=EAmpl9tZ1TjXkOGMsr1vBw+4Q9UTTCPOO+VZt9ciAAE=; b=SXY1nndb5z7BTfQGYlkHhphxl9jOaOCfO4dgD1nvjK3+c/ISklqtr6Tq4rsyugyRYUZ4K4/gyu9bOhQJMtzqiD7EbbRjRtPG2Fd7E9OgNRYa6WJbkhh7hz56b1HuqyKSl2mhhFEYDf61/GTLqgGavpoCytHY+1nz8Eo5tWHqCgk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067402881530.1324202345426; Mon, 3 May 2021 11:43:22 -0700 (PDT) Received: from localhost ([::1]:42688 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddXN-0006ID-Rd for importer@patchew.org; Mon, 03 May 2021 14:43:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39458) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQE-0005nE-Qq for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:58 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]:43690) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQ6-0008GP-DE for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:58 -0400 Received: by mail-pf1-x42d.google.com with SMTP id e15so4808048pfv.10 for ; Mon, 03 May 2021 11:35:48 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:47 -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=EAmpl9tZ1TjXkOGMsr1vBw+4Q9UTTCPOO+VZt9ciAAE=; b=FiNYW7sPzfXvo49Cl/5sVD12pRlyu2l4CLLQCqLcPNx4fcmHhc46UojJ7rKueDiqtV Gq6qJwGa4VaumhTXb+pDtnX6YY2ezx7ZihEcIsRhd7qECzRCOFcApyx/lcFT1YICvObQ g9w4Z7FMj1iQtichmgLmppXQQGwv5Z0cDvYSd7G2bAHF16zswHEa29gKxC4hnLopwpOq sWs38N498MJBVMsWnnJCge/HvEkyRH5RSDb119Er0TwXnNPfwH45khCq4hkl5LuhwWCq r9oAWU/dBh4ju8vb7zSMRT96SmsVG3r4eDOfQwbS7IPLm/p6Wduec5LoIgTkIzfPUx1/ TwSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EAmpl9tZ1TjXkOGMsr1vBw+4Q9UTTCPOO+VZt9ciAAE=; b=JpSmRDwfHirpO76zc4XXgKrnwwj+nMrxcIxb8z0jSvXiS1am5Y8/veogGjogyJvmUs w1MujjE25MwIUHJINL5L5NHEKXuTdhdJq1DtJuZCtAdr87MDmcWb78tCR6sJy8F94Afh spoDGmE6z/5sBYhqfO6jzQvpwXKXwRxP/PCXg2y5o+AHzeKRt/XFRoVeUvGbwoC2z7DH TZovQS/DsVydogIN/tVbGT64mwf2zQnJq79mWk97jP5+RRvPSOE9WwbvEhpXkc+GL6IX zNNJdXjxETivAqjFoK7EyljC3zgNUVmYQOkr+ntb/x336jdQAO8msUZSUSyKtEIFB+To F5CA== X-Gm-Message-State: AOAM531LhgyW0aTaNOl1uEnEl+eVNN4ZBgF2nSMiqwTb8Kk9x6F1iQA4 dKPe8A1fpCNKpAzx2SdECFPgI0BROu0dng== X-Google-Smtp-Source: ABdhPJz9YHefXMXHeBP9+mxxoEaBG3FplCKHlJRYecQALOueusnQe6sjP9O1t7GtX4L5hRr91T1eMQ== X-Received: by 2002:a63:490a:: with SMTP id w10mr6158453pga.286.1620066947326; Mon, 03 May 2021 11:35:47 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 07/16] tcg/s390x: Implement tcg_out_dup*_vec Date: Mon, 3 May 2021 11:35:32 -0700 Message-Id: <20210503183541.2014496-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-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::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.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: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/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 439ab5a359..ff28d84f95 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, @@ -551,6 +558,34 @@ static int RXB(TCGReg v1, TCGReg v2, TCGReg v3, TCGReg= v4) | ((v4 & 16) << (4 - 3)); } =20 +static void tcg_out_insn_VRIa(TCGContext *s, S390Opcode op, + TCGReg v1, uint16_t i2, int m3) +{ + tcg_debug_assert(v1 >=3D TCG_REG_V0 && v1 <=3D TCG_REG_V31); + tcg_out16(s, (op & 0xff00) | ((v1 & 15) << 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(v1 >=3D TCG_REG_V0 && v1 <=3D TCG_REG_V31); + tcg_out16(s, (op & 0xff00) | ((v1 & 15) << 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(v1 >=3D TCG_REG_V0 && v1 <=3D TCG_REG_V31); + tcg_debug_assert(v3 >=3D TCG_REG_V0 && v3 <=3D TCG_REG_V31); + tcg_out16(s, (op & 0xff00) | ((v1 & 15) << 4) | (v3 & 15)); + 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) { @@ -560,6 +595,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(v1 >=3D TCG_REG_V0 && v1 <=3D TCG_REG_V31); + tcg_debug_assert(r2 <=3D TCG_REG_R15); + tcg_debug_assert(r3 <=3D TCG_REG_R15); + tcg_out16(s, (op & 0xff00) | ((v1 & 15) << 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) { @@ -2467,19 +2513,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 (src < 16) { + /* 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 Wed Apr 24 06:17:33 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=1620067196; cv=none; d=zohomail.com; s=zohoarc; b=OIjqCqkEcnTr0o129ZPpU+IqdvBNNZZSVYjy5TFQ88KInSgJ/rqfcUguKxGa3ZSCl5a/fMPzIGc+81lzZOkwpIV/W6GY2EZEu6euHrQltmVzxmZUh71a3+NpL4R33yLJmGJTIkZkoXKTKJGMPr98UYwH4GSRvQrDiO6zbTE3BUA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067196; 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=ZgdjM1yl44OXzdeOIg+SmbLzGWZB0UB4YJdbG84Ck44=; b=Ck8UeQsokX2VGm5a3GUa3Fjknw3sK1AV7mUVYbeMIzEucLAz1HDx6CDS5x2OtQIc5VmXH+ausrTy8Q7Sc2LxzcKMBpTPR+ScbM76adaHOgvZVbta5EDhChOkxfY6pDw6yF37duJ+JbxnbEozccanpPyymKULVvPhzjvn1JIpKr4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067196292141.00823715767672; Mon, 3 May 2021 11:39:56 -0700 (PDT) Received: from localhost ([::1]:33824 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddU2-0002V4-2p for importer@patchew.org; Mon, 03 May 2021 14:39:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39404) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQB-0005jm-9M for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:55 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:38703) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQ6-0008GR-Cv for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:55 -0400 Received: by mail-pf1-x433.google.com with SMTP id k19so1858740pfu.5 for ; Mon, 03 May 2021 11:35:48 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:47 -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=ZgdjM1yl44OXzdeOIg+SmbLzGWZB0UB4YJdbG84Ck44=; b=aLdLrgLez24xzdxlDmMlIhoFtEtnImN0XoU+0cV1/mQ8HthPeAmUCvOOatcrZo+2ht gLnETaJcZnta/gAUab+v7l4Z9rgYjMf9CsxLywtBkBp8oYGjeQNxSJaQyjTu9CrgKJJT PKGinRo/eeINbEypyTj5gFcvlAiWvk0sdmBE2SaRnBIb4dryuihePTWxPaNq5T6omons jLVnrw7DopOthZo2U9lEf7dsnPEWKytSah6DEtvApdw93eWNN+psVA3miMnWd0ISGJmu iDEpLqRsz830A+N9C9DfgPx8aI1/udVF1E71G24xw7kyLn7EyRD08cW/T76CQ2ELaeLK vEig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ZgdjM1yl44OXzdeOIg+SmbLzGWZB0UB4YJdbG84Ck44=; b=nygF3/7sN2riHY4EhaxbGb1iDH4Egy/yowmJzv/bYazxG2WbqgVhomKwaMeQcBkyWK i1m758lFsRlKvid9jAMwT/zTYdBdJdhHMZT87EMCbKS22uNSV+M3oqZ+RRubjlIBoMwx EVaIFd0oodB2VwJ4xhxaOMc7RzO/EA6xjw8f//gs1KXwJYi1gsNswEcr4sv0bKmGJVmj /KVqBgs3c+EHBvTZldvaPfYey4GrtPBcqJo1BFXezvJQmZq4Uyv93UNCWmHTXc6AhQGC IVo4rlvBztq9KPCCh+yULOaIt+vvFzL6zRYg1MJtXv/3lzwlcxcwZjpL1H/rhgebhXCl xFqQ== X-Gm-Message-State: AOAM530OkSAiUJ+Ws/UsvwvR7eQL78FDlRFvBFRvIkvJk7w2bwqiPyg7 mYPtBnr4eBjaov2ugc5Sj/x/DXXhTQUflQ== X-Google-Smtp-Source: ABdhPJyG0Krr1dQtAA/GdAoBuwXtU+izg0CJfqOIqg+nO0i3lcguws/imYjYuLNSziJAb7su1817rw== X-Received: by 2002:a17:90a:c42:: with SMTP id u2mr22726895pje.76.1620066947926; Mon, 03 May 2021 11:35:47 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 08/16] tcg/s390x: Implement minimal vector operations Date: Mon, 3 May 2021 11:35:33 -0700 Message-Id: <20210503183541.2014496-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-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::433; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.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: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Implementing add, sub, and, or, xor as the minimal set. This allows us to actually enable vectors in query_s390_facilities. 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 ff28d84f95..f84330af1c 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, @@ -595,6 +603,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(v1 >=3D TCG_REG_V0 && v1 <=3D TCG_REG_V31); + tcg_debug_assert(v2 >=3D TCG_REG_V0 && v2 <=3D TCG_REG_V31); + tcg_debug_assert(v3 >=3D TCG_REG_V0 && v3 <=3D TCG_REG_V31); + tcg_out16(s, (op & 0xff00) | ((v1 & 15) << 4) | (v2 & 15)); + 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) { @@ -2602,18 +2621,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_sub_vec: + case INDEX_op_and_vec: + case INDEX_op_or_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) @@ -2805,7 +2951,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 Wed Apr 24 06:17:33 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=1620067122; cv=none; d=zohomail.com; s=zohoarc; b=BEsHKuVOrOxRZwxAUTh79cjw1uMcdSJNTbv4DS2oA9YmuC9fRdsk+uwEw9cG++8BuunkLWV3pdWdoEPVTvUEMkAjWqRFcTwg5BQdG3bAUrFs1DRSjQOODnBXtieMDmp50M6JUWegCylQ9c5N2Q3LU2njnk10yvfb1JKdaK/o/e0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067122; 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=Jn+9DEVE6ts17GjM4PSKhP/k3JQqoVYnVixRsFingkc=; b=n2uuVhE+gLZAV5oB2a4+/bvzAUf4iOTLDSxjMz5aLeyCJRbJESZ90vb2valG0BTJlhNhXZn8Uw5xHm7rvl40TBTNfkkGTqz62HArZcbcsdUbMvWHPIO3vLouoSqFcuH0w7feSYBZj95Qex+AjFo0TuJgxp15rRyrTBG0V00Zt5g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067122237280.21545877233984; Mon, 3 May 2021 11:38:42 -0700 (PDT) Received: from localhost ([::1]:59468 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddSr-0001Su-8Z for importer@patchew.org; Mon, 03 May 2021 14:38:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39418) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQC-0005l4-Ou for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:56 -0400 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]:39780) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQ6-0008H6-Dk for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:56 -0400 Received: by mail-pl1-x62c.google.com with SMTP id t4so2536403plc.6 for ; Mon, 03 May 2021 11:35:49 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Jn+9DEVE6ts17GjM4PSKhP/k3JQqoVYnVixRsFingkc=; b=TT3RU/LZG9ML2NtwQOAyGf+cBuG46089SxDHog+ShLMTHjxk91o/ys46fY9/VkxlZQ SyX/s2paIQWSXfQuXiFzpRHewKyx/SZ6H//PrzWJFkMgzE7EwuNuhm2yFiGFaVJdUOhm dRv2FFbfvwxlZgAYqpQsEl7Ick88s535oiDmwsRyFlI4zVCVHs/snt3/OpcD54V5PAEk U+vV9Bx0jQe022+4EEK8SMukETwmyj1x6b9A1hXAv+qRd81Yuv9X0klxiQi4dV2drhc6 73h727KcxKeDa8+fsgEosbqdrtvhtb3fVpfIqVkeqso1tgWXOE7ZGjV/Zb/ynFXLSpD0 8RfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Jn+9DEVE6ts17GjM4PSKhP/k3JQqoVYnVixRsFingkc=; b=WpK5KoH2gWYaffVdtnY2KS1DOn996TcnQHy8oPw5w/+qdYSWsTWOyJ3wmXWBH5iT+P fE7QNsL3Wyz+OHhAFsxdw1Vm4BxHeswtuJNSCSX2gHTry6+hglcQe3VXM28zXFCELwIH oUX9CjR5DOes4yQgHt28GdMwIiQiAmMoZ2jbBMQTizq9iiKf0olgNYGGpf5Co0JPcyka tFy40sbfCicqfNV9Mgl6GmBjlS0yCp/ZH72JXqD5pdsRPAmfP04t6yMcZa+u7ldLgrMu An4EyfMOkas2D1d7vvFtvlnIzH35OdLoSBXDsdRY6ln58V35gFPublg+u/HUPuOs864M 45/Q== X-Gm-Message-State: AOAM532H+3smr+IcGQRTMH4+izfPeUgLmWzhUs1nBlAvnH7UqbXIdLG2 wHGCyIENPWiy5g9+PMEJo6jFgGUu7PNfEg== X-Google-Smtp-Source: ABdhPJyixiz1SoXb9FiSOC5q4OUG4jpRLaUAz1ZDVKxjpzBKAYNGpMKrOkh6tNutPe5Olh/NBoFdwA== X-Received: by 2002:a17:902:be02:b029:ec:af1f:5337 with SMTP id r2-20020a170902be02b02900ecaf1f5337mr21233848pls.35.1620066948518; Mon, 03 May 2021 11:35:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 09/16] tcg/s390x: Implement andc, orc, abs, neg, not vector operations Date: Mon, 3 May 2021 11:35:34 -0700 Message-Id: <20210503183541.2014496-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-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: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" These logical and arithmetic operations are optional but trivial. Signed-off-by: Richard Henderson --- tcg/s390x/tcg-target-con-set.h | 1 + tcg/s390x/tcg-target.h | 10 +++++----- tcg/s390x/tcg-target.c.inc | 34 +++++++++++++++++++++++++++++++++- 3 files changed, 39 insertions(+), 6 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 e8659bf576..dd11972ed2 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -140,11 +140,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 1 +#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 f84330af1c..aca2dc358c 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, @@ -2635,6 +2640,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; @@ -2644,9 +2659,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; @@ -2677,10 +2698,15 @@ 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_sub_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; case INDEX_op_cmp_vec: @@ -2909,10 +2935,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 Wed Apr 24 06:17:33 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=1620067197; cv=none; d=zohomail.com; s=zohoarc; b=bsvt/+IPFXtN5wS07+TRoRCJEAc5YwaUoliIBD61cN3FO4lDVyx8NgvJa3BvpQoEi+r7RwtK10/1H/D384fEDJM2/htxPXOei8RNjVtrKSR6dRtt/9u1WRyAn/xn6+b6Ul0rPvdQsDCCgt1GFPLMRtJzEK/9iNF7/A/0FK28szw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067197; 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=bG59YqOiBpwUsIZ5wzYl9iQn3wU+Jjl9NF3KJfqc/dk=; b=aRsulLB4NpCvcS2UQIoJRyEQdC9Z9uEWr5sfpoQsk5Su6WHVMFeKTclSqHBDI+lxr88r3PTyEnz496hzUsORwoC9NrauAvK+CdThxYJatcT5xDsBqQQzmpAalX2uO/DWsszs/+QmAzsyqN91aisfcDprqU4wRtwT0FwsHIhhfg4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067197269680.6952904874589; Mon, 3 May 2021 11:39:57 -0700 (PDT) Received: from localhost ([::1]:34064 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddU4-0002an-6l for importer@patchew.org; Mon, 03 May 2021 14:39:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39474) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQF-0005nu-Hw for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:00 -0400 Received: from mail-pf1-x42e.google.com ([2607:f8b0:4864:20::42e]:43691) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQ7-0008HD-HM for qemu-devel@nongnu.org; Mon, 03 May 2021 14:35:59 -0400 Received: by mail-pf1-x42e.google.com with SMTP id e15so4808137pfv.10 for ; Mon, 03 May 2021 11:35:50 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bG59YqOiBpwUsIZ5wzYl9iQn3wU+Jjl9NF3KJfqc/dk=; b=kZGiv7BrhIhJFrwTYAzk3QP2wynYwUyK29DMSFjWcSy/+UaVnYojS7aRy0VbKdzGi7 cKBl75pPx8VXRhXf/I73qiV6YIxAEb5zTO8mIWCc7++oRg7wtm96DPc4JGl+6apxQrA0 w2tdyXl/WVSzXO5hAxhHtDPbz5aevqgy7m3JY771N5/sP6ib9aycl5EN6+bLhDXg1X5L n25fbKGXHSWhLlaHpc6CCBAeMjTZxZZwiNosq5PeRvamKtKh1o/pX3/cmf0gS8s4RTEP OSXqf8YHXZ6aHxBplIHs54xi6lcH+g51WIR3i6Nx+MCccCj1njUdyFh+G8zzJ4SBkfgj 3s7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bG59YqOiBpwUsIZ5wzYl9iQn3wU+Jjl9NF3KJfqc/dk=; b=ndT49eLgnEhej8B60Fc2b6dCm5EcWpDjib8fPutGknHjxuachCx0QydIZxV1FuGSJ+ PsOEi3JCsr/WAyr0DBQTGBFKMZxU28N5/IquyRvQ3ZVAuSvlcMoOfPS4NVa6UtRQXj3R JUmjsZiC6QKypMQv4Ue9VtIBxIcez8ZHfis/OllkPYch3TZrGX6GZ0ouh5Ua8GF0ww9R 6A/g28OEkCXQeUroT3P1Go4cQ2e/HjyctIkfW6AF6NJdBaICKYBiNXtLH/neaAstl2ez Fao+uDLdU4MY1ibu/l+qTAkoPCqdu7qi2OyrC4+f6P8w/blrgqy2tZChkyBBl7UOnn6M 3Q3g== X-Gm-Message-State: AOAM531ejKwUW/8d3sOqjRI9+mHJ4OUiDNb3zsjwdybCnPyr3I3IEELc AwDC9ro7fzAZSA/qzqyzW3okZHosKNZKtA== X-Google-Smtp-Source: ABdhPJz9o2J5f/LCLYiPdyDUnzgKA2E2sQVW/siGQgyOJjXdZvXLbT6ow5+pmnMGxzDCYFSW/UsaQw== X-Received: by 2002:a05:6a00:882:b029:24b:afda:acfa with SMTP id q2-20020a056a000882b029024bafdaacfamr20033160pfj.72.1620066949155; Mon, 03 May 2021 11:35:49 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 10/16] tcg/s390x: Implement TCG_TARGET_HAS_mul_vec Date: Mon, 3 May 2021 11:35:35 -0700 Message-Id: <20210503183541.2014496-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-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::42e; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42e.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: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/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 dd11972ed2..13b9918276 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -151,7 +151,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 aca2dc358c..9edb9a48c7 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, @@ -2662,6 +2663,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; @@ -2711,6 +2715,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; } @@ -2947,6 +2953,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 Wed Apr 24 06:17:33 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=1620067430; cv=none; d=zohomail.com; s=zohoarc; b=GTaeZeaBCkKdwq+vXL82J+2wlK+oayMl1M/obQ5W/oMxjLbF/Z7iXPNWVZu62HaFpSg0iVyKFAEypscP2G9WqPSTfb+MiKVKKVIrc+ps2NoZVZ50vXnzmFo5ubx/Y29wNg+US4qenKBQmEsGS05kzwNYdqR60QKF+cy0tA/8giA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067430; 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=zaJlXbFDZeJmL4g9fa352QQqIicdVNfw+m81ivob7IU=; b=byvu/l4BiP+GuZkvhacenhdgiObluwnc2KZU8dWVerRxzFx3Y4+XOcLGlZmRpQ9sX2psSK59XbJuevh2jt5qF30xUSwa6O9BXlUJYUm1BZJhhIl3XxY1vjcHx7kp4CST9oHbU48eiZsffrCIXt5QB/6Bv/37n8pi830CYXFz+FI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16200674308481015.1100504854563; Mon, 3 May 2021 11:43:50 -0700 (PDT) Received: from localhost ([::1]:45228 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddXp-0007Qi-TU for importer@patchew.org; Mon, 03 May 2021 14:43:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39504) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQI-0005ol-9r for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:02 -0400 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]:42727) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQ7-0008HI-Hx for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:01 -0400 Received: by mail-pg1-x52b.google.com with SMTP id m12so4279597pgr.9 for ; Mon, 03 May 2021 11:35:50 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zaJlXbFDZeJmL4g9fa352QQqIicdVNfw+m81ivob7IU=; b=FvoLVjrAc6fjeHeoM8kxp6tSvRCNannl1y6xiih/fpMeNMUZoKDwh1FMyK5BLfRlKo OF1a86mgfnIoFT86Icq+npulMLHhQ/Fva1kq2PAiBFbcjXZfxKAVVuX6kXrg7/lR9W3G QMbuxfAoD0p2+xxR+Asf4S59PhG/uICaocYgQW0g5v4sMev6JkAxcABas8W+N2X6uD2L LetcN78L3GzohQGz2vynBwZRYqHoUddqzTVSHleEDSRjfPk70YFkjwdOP6RPWXLgPhVh lnizgFZZVroQh2WhYGrzlSehSbZ87Y7okG9GMBmO8fx6AHxpAOJbucIUaCWGtBD28Key 3NOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zaJlXbFDZeJmL4g9fa352QQqIicdVNfw+m81ivob7IU=; b=VTWaWL3naFQd9lsOX+w+4nNH9lf/o39IIfXnBqrfP+pmIBm69r3S2xW9iMpmeTJfLa z472fz0Rl6RCek4P9wJJ9YkjT+MuaW/BvF2plYiF8oRkCvgcAGyIGUd2f0v9kMRC+azL eg3J9gRSaIQLP79/QQf6QNN+IqF/8nIADbkDJ5E4WhKQFAgYe7IEXXV/dHJBs9trfIGo pfYrdXD3O9vILMlqjNcJCQsluR6eSAEm84P1BqIgjKKfdWHighwpao1MUf4r0jp8iV8Y fEM4ig2vk1cYH/cPqY8bbI8UkCC35YrfJhW8CLwpWz2bYKxG6F1FHsT5iZl/pYX5d8Sq a0Dg== X-Gm-Message-State: AOAM532k/dLh93vOj4Yk+PkaoxeJU8cISKATdfT5WotFKYKGCWSkxxpi Z6r5O3w4GsGLbnGdWpZh+1MxykFhgTS/sQ== X-Google-Smtp-Source: ABdhPJzjnvWl30Tba62UGcEtibgR70ygsYys9VOt2BdKkSPE9DTvjZrA+bVqzM6SO3bu3nArK8hjlw== X-Received: by 2002:a17:90a:4b8c:: with SMTP id i12mr21102pjh.66.1620066949775; Mon, 03 May 2021 11:35:49 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 11/16] tcg/s390x: Implement vector shift operations Date: Mon, 3 May 2021 11:35:36 -0700 Message-Id: <20210503183541.2014496-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52b; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/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 13b9918276..3026a4d8c4 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -145,12 +145,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 9edb9a48c7..3ad6dbab2d 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 @@ -631,6 +639,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(v1 >=3D TCG_REG_V0 && v1 <=3D TCG_REG_V31); + tcg_debug_assert(d2 >=3D 0 && d2 <=3D 0xfff); + tcg_debug_assert(b2 <=3D TCG_REG_R15); + tcg_debug_assert(v3 >=3D TCG_REG_V0 && v3 <=3D TCG_REG_V31); + tcg_out16(s, (op & 0xff00) | ((v1 & 15) << 4) | (v3 & 15)); + 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) { @@ -2676,6 +2696,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: @@ -2710,10 +2767,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; @@ -2776,7 +2846,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)); @@ -2788,6 +2858,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(); } @@ -2944,6 +3021,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: @@ -2954,7 +3035,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 Wed Apr 24 06:17:33 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=1620067458; cv=none; d=zohomail.com; s=zohoarc; b=B6ZB3kPJ6qxz/lIYIgUJm/D7Zzi9DVOiR3OHkAgXJefpWZBFwDfoXH3PwcfSVmcwjAClyK87gRRsbqIabR92vo64mU08fyZGG140XCiH1fvf/zk7a41dcQj6DVUMvaB0FNmDnq/pnXm0iLLyg7kfxvdig8AiZ3njAPhcFMzG+Qs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067458; 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=p3VKizM86ApFuWdh3B1dTH/2FVU2Zs3uvg5vUpds1po=; b=fSpRG2FuRhqK8QuAP1X3Gcn2g8NDimx3EBJZCJ6+S+5wiGZqxo3M+w7bVj145X7WkD2imolhdGMIWQ3DljN7EIp39qX/PXlrt4iG11HxPQGsING1GxFYEO/vXoAf/S2QsiMCD0Fgvb1++STE3YZrHBPcyJBqlWaXV5vtGAuD488= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067458788584.5489946483336; Mon, 3 May 2021 11:44:18 -0700 (PDT) Received: from localhost ([::1]:48036 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddYH-000090-OR for importer@patchew.org; Mon, 03 May 2021 14:44:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39512) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQI-0005pO-T0 for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:03 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:37768) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQ8-0008HS-NB for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:02 -0400 Received: by mail-pg1-x529.google.com with SMTP id d29so3499183pgd.4 for ; Mon, 03 May 2021 11:35:51 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:50 -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=p3VKizM86ApFuWdh3B1dTH/2FVU2Zs3uvg5vUpds1po=; b=Gz/9/lVGXSkKvBJzYcm6IryNfbuyxvrx3dn7zjDikzA/Fso8+nEBmFoaDTDzCd5n3n AIp/4JMaxTfvwE2+2kdpWF06yfnei+aLwya3tM6QfhhNgeB2TRxyd2sk/yIr801gSlSI IbzdWjwwkpIqg0LMbdtd7LJrtx5TeCY++bYRhRBV0YR/bgtRNNRzM+CsGeuSHgmWs6Et Di2g4r6rnOf8eI9L/AwUZXs1qOHRuJx5wWce1jEUr3iddT9JAcV8PP2rkDFMeCsqbKge nLmOv4hj/KudlY8M7Fg3zaQaWmsGtUlm/JDnL0LoiPXEJWn8OBz41ZHiSTyAh2n6E8xp wONQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=p3VKizM86ApFuWdh3B1dTH/2FVU2Zs3uvg5vUpds1po=; b=cDCodOwjQrHrhjumqs6PFZ68fF0l9rhtC+hhxjwnAASH33TAUmzGs+4FYUDNCQXh6S v2yjSdVwzIIDX8io36dc/S1+QemuYHakaVVYnnSYYn5iUSnzls39dSVV5mKbPAI1QOUi OWtKlusrBiBgt5XpFbIpD6XpIYqWH/s+H68hz1KiaBf5+eGf8YY42RmPdjX3UpRHhCEi nhYMpAJ06U3QJ8rZIt0AbQzfDU4b36blp8D2GQTGhKZn5tB5kW3fyGEI/YNxK76iP8YU f4LhPtDdMNip1hmmYo8PdeB15mhkz9Q84ATXxqi4uNVRseoSRnjeojI6pYXeEBxzPpEk 0hIA== X-Gm-Message-State: AOAM531w5bUfPAKD/RWZMlO7o+y5xIvQAgGDHwU6u3QJQhYGW5VaAFLp jNg36yUYmtiJgLXeN/4vQHLvI6et2u0lew== X-Google-Smtp-Source: ABdhPJx4AkJnhBR3hSFtz8Afd0jowRs+AVog1EPW+2W4MSQm52jr2cF48+iPAIsZgZknCaQd00HU0g== X-Received: by 2002:a62:5ec7:0:b029:227:3253:3f62 with SMTP id s190-20020a625ec70000b029022732533f62mr20216934pfb.54.1620066950314; Mon, 03 May 2021 11:35:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 12/16] tcg/s390x: Implement TCG_TARGET_HAS_minmax_vec Date: Mon, 3 May 2021 11:35:37 -0700 Message-Id: <20210503183541.2014496-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-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: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/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 3026a4d8c4..efa32f348c 100644 --- a/tcg/s390x/tcg-target.h +++ b/tcg/s390x/tcg-target.h @@ -153,7 +153,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 3ad6dbab2d..07a86f4392 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, @@ -2733,6 +2737,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: @@ -2779,7 +2796,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: @@ -3040,6 +3061,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 Wed Apr 24 06:17:33 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=1620067516; cv=none; d=zohomail.com; s=zohoarc; b=nAXY0ZvQqGtGQzW/Y5v5opsmHGSBSc4e5l05oTitRa3HhVmNYR2ZaVTceiNfnAjVOy7WfdYROWRzjho5egTLec5ISBRyNxTy0hRNhNDe7x9njiVPZssh63PXNGYiYy0KPa2ikj8+mcU6KXqUPZEKe4j9bZc2UsOwgEBU/ynw90w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067516; 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=FnMPyDvv8qty8IO8qnH26ldICiCh5lihNUWEYMvpptg=; b=fBbwJjLsAqnn0e6Vn756UCCIgfYX59U7wlIOXG2JhJcPMCzMlxE0Kmy79gCzYnSabxb3EHFprrth+JGyqOmwo+1j6fwTa/mTQQiGh0T9j+9a0xSgeVxoxF06ZALiAyg8Zrs7kTiOuhRIu9V7M5JitXovzPJ1i7bZ9BfJg9MwL40= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067516794218.10605508011895; Mon, 3 May 2021 11:45:16 -0700 (PDT) Received: from localhost ([::1]:51036 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddZD-0001OA-Qh for importer@patchew.org; Mon, 03 May 2021 14:45:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39536) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQK-0005pu-9s for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:04 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]:37574) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQ8-0008I6-NU for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:04 -0400 Received: by mail-pf1-x42b.google.com with SMTP id b15so4836066pfl.4 for ; Mon, 03 May 2021 11:35:52 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:50 -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=FnMPyDvv8qty8IO8qnH26ldICiCh5lihNUWEYMvpptg=; b=Ct3iOL7+iU01jb08pwg0eBbzpcObKDsiiDkp5tNQZfjvwa/c3KPcxPzYDyvnF++2XW Oo12epaxEM6Y8wl7ZFTtKh8QIQ1nc9/c6oh/zs3Fd+oQElrWRvMAzrNNWLUdwjeLwE6N lJf8wc+1IGJ5ZGsskRbhMDeLgZIJ6UPRP0gav7To8MaDYQYfgcF91VvTHfizbOlAEe46 Qwa6qS5Lstm9st+SrRwNhvY7m6OxRBCxeb5UR2KZZkZFZaTlgZdu3rexv8dQ2d4Krb4H iwgqT1ZcxfA6GWICbJB3DlMJtmdntbqkQ3FNK/eIH3ZIwzOhKUm1KSP7wavhKWeC1pUl ZUCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FnMPyDvv8qty8IO8qnH26ldICiCh5lihNUWEYMvpptg=; b=tnNoUZZACvJqTqzgmEB9B6pozofnU2oWBWtBtMaoBYKhjPzUe2LgT2OHkwmyTJYz9l S657PfXO/0xaQts1Xbo1gT+Uf1gWjL2Xz+hEoVV4F7pfKeAEXCORuqT/AOazwbQwyNOU YtMlSymEyCxRFnwt7GwCixICHHwg0F150x1sIAdrFbqtUG2K8H5Vof2tP9YbukLilGzG MPCJWjdeOZhllu8KzhY5FM7if8ivpUiOGZ7yLLQZ0Vk7W83UUpooWfieYDFTcwwXmqTq XJmZmqsG5huA9gtGf5BbKQiSOmEnlTDtUzAPdzGb0HIepeXsaWNgwdOmCPfHvC1sdy7Z CwAQ== X-Gm-Message-State: AOAM532sLbLWxEzutnPDoyG2UBt4R73Y9NJ4va7jNRF+DpdEwOBqGT/6 Xi3cHj47eron2eJkYDMs/kzGRSje5jUGKw== X-Google-Smtp-Source: ABdhPJzPtcFcvnxM9yHL1l3so7+Jr0kIUEWwXOQtupjKDV+aNk+LFjx2gVOT4EAZ35dredj7szL+Zw== X-Received: by 2002:a62:b609:0:b029:28e:af60:60f5 with SMTP id j9-20020a62b6090000b029028eaf6060f5mr3931436pff.43.1620066951074; Mon, 03 May 2021 11:35:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 13/16] tcg: Expand usadd/ussub with umin/umax Date: Mon, 3 May 2021 11:35:38 -0700 Message-Id: <20210503183541.2014496-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-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::42b; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42b.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: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" 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 d19aa7373e..9747b7bb06 100644 --- a/tcg/tcg-op-vec.c +++ b/tcg/tcg-op-vec.c @@ -120,6 +120,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: @@ -604,7 +616,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) @@ -614,7 +637,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 Wed Apr 24 06:17:33 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=1620067394; cv=none; d=zohomail.com; s=zohoarc; b=J3wwOzgvH+CNWvWz42YgwONnSHMXX40OGij+0ZErX1fbI3yf8qNJQ80KAzUxmHqGWGjnvZgaSrftmATrcS8LVU2YuABa094r6es40VJx6iTSQ4nKitNoKL1PwouboAFCbJ+vC1ZNO25lApdg6qezdM2iTW3n6ecXYLc1iolHAuM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067394; 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=/WsaxQsm1JBH5LKbyBIfUTN/+F2a2CViMd9fyQYV5EY=; b=S0pRrLq06eqA+yHntjHWeJH41lIEhgBqPe7TJMmkOn2sxV9/lJN2V8+fJcZtj5WOXe5GEzVLVMvH/OvRjdUua1ZJoF/KkPk5drJZBYUrVcXnwppssxj1A7WJ/Vd6sSGTx6vN87de1vJeyLjGIaC+IbdZc0gM53EHajcWbu9GyuE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067394879743.7750859991647; Mon, 3 May 2021 11:43:14 -0700 (PDT) Received: from localhost ([::1]:42478 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddXF-0006DB-Nu for importer@patchew.org; Mon, 03 May 2021 14:43:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39508) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQI-0005op-GD for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:02 -0400 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]:34354) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQA-0008IC-94 for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:02 -0400 Received: by mail-pl1-x635.google.com with SMTP id h7so3328670plt.1 for ; Mon, 03 May 2021 11:35:52 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=/WsaxQsm1JBH5LKbyBIfUTN/+F2a2CViMd9fyQYV5EY=; b=VyFFCdoQ1q/MvoOL89kHB7kaLXYAoREG+Dpa4lvDlNfxpIjWU+DW8ioe4GlHZ26OtC o0Xxcjy1nbo2JB1GOr8CvG3LI5Hec9iO4HgrOD4g3vSRx3wkMnu0ZqV0JpmAejFw5H2v HHSR4xU9xGKRvbVBr45QJn22csiw3cAZGlc0Xek1XQ33MHuLNJ/DFVkalmcqP7Vt/2ED hYqhyp1e7w4Udf5W+cLtLsfeJTtBK14WpVtGUG/yBURw+yHwbsOrhtgfByA50y8gHbRS FVePUy4FsRAVwxjRHNOamoAl0Oy1Uz4qlQlXH2KferLmcpvYvvLTH/W+3cYxjDk1034L qQPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=/WsaxQsm1JBH5LKbyBIfUTN/+F2a2CViMd9fyQYV5EY=; b=o3Wk7ju7POhFTjJWRslhvwQGeEwAkV6+JprA9hUp8gbIQgDZGbziY/9waYieb2OrVa JlArjr4UsFUDq+bDQFs5ktzBcxl79OeLiVS/xp/MJILwZIZ0Hkf9u8GfmwtQYRdTejld vuzVfc711busV7aYpYvE6xizK8gSVDI+I1t5BpM+XRphbIKoZRw+B5K3nPxYfi1/4pka ebyeHA4Xt5FODW3VPXRg/G2cNoMaxc8XJOJZ21s/zgtZzq6qK+LeYQqd90QiAhAsNVNE Ck4jCD3lqRbhnnkqpzcI0P/SE3dCvf2hADZTVOzFm6wVsq8tL0qLYoEwK8zRTQgihRPW XuJw== X-Gm-Message-State: AOAM530D/P/cepSEyITeFLr0kDg+fsVTmrs5qQGkdwKNBZJb6VVVuZj4 MNJldiSITGQUpjHo09AP1lxMkkzgZCooUw== X-Google-Smtp-Source: ABdhPJzFNjJ1cJg55sDzcE4xVPO/O+OqY1l9I3y+gOE1b5Cd0C2YjDU1+Tq/BJmhXGKfvwG+CioU+A== X-Received: by 2002:a17:902:44:b029:ee:9107:4242 with SMTP id 62-20020a1709020044b02900ee91074242mr22272796pla.18.1620066951825; Mon, 03 May 2021 11:35:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 14/16] tcg/s390x: Implement TCG_TARGET_HAS_sat_vec Date: Mon, 3 May 2021 11:35:39 -0700 Message-Id: <20210503183541.2014496-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-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::635; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.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: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" 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 07a86f4392..a6121c2f40 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 @@ -2766,6 +2769,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: @@ -2808,6 +2821,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; } @@ -2863,6 +2879,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, ...) { @@ -2886,6 +2939,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(); } @@ -3046,6 +3106,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: @@ -3065,6 +3127,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 Wed Apr 24 06:17:33 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=1620067738; cv=none; d=zohomail.com; s=zohoarc; b=ZCn1gibnWDA2iz7qCjunpMdckQ77v8CPhuJfo1Suf9aq+0h9/xa1yMoTubfj4qS2047gV28flFz8EnhDRDnBx244QiVC0yGxtUHXKm5Nc3x2tSGlkcyZaTDgBYB8XDfd2BA/y2d/7/H9LiVL0TbT3wLBRE/b9tNoheV2t21L92o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067738; 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=vNzJ8efgD30GIsKbrzz5c93oH3/8c8uS8ydCb4RBpRg=; b=Vw95r3XB2D6Nn78OmgmEXWWh2QuPvDNkvKQ8YMAlt4UC+LYAQTjCglMtJmV2hUww5TVbQAAwxLEhGokiQftPmDABhk+p69U6b91SBMpF63LXwUkv7h5CFL6bg9C+Wvnj2TmIZMKJOaGJmDwAgIlks6/d622DRtCT6qqqTo2CEq0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067738645602.5962483153214; Mon, 3 May 2021 11:48:58 -0700 (PDT) Received: from localhost ([::1]:56310 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lddcn-0003k9-2q for importer@patchew.org; Mon, 03 May 2021 14:48:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39520) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQJ-0005pr-2X for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:04 -0400 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]:42658) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQA-0008IL-99 for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:02 -0400 Received: by mail-pl1-x62f.google.com with SMTP id v13so3311794ple.9 for ; Mon, 03 May 2021 11:35:53 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:52 -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=vNzJ8efgD30GIsKbrzz5c93oH3/8c8uS8ydCb4RBpRg=; b=xjUw6UQS17OGvyig0KJCTjIF+QIr5Yuup2nwSOhy7xnXzJq2R5WvsoPRSi03nSoPa7 wGezfERxxM0MQNLxvqe3qycE0//5FHqN+b4XmUgCG4X8p7lwopy1VAKnp3JQeZ93OkZv ajxeC8XocZDmQ/qUXoEuCf+HWlfCJqFP7Yo3SWIOmxIyFa80yqmhUnHWADCP2eBUrsZV lWB4TPZAchKm+GDxqKkgpLAXq8AO5Vvkad8Q62sLfNBl1dDF+0LCHssqzmyjqBGEtYM9 I0cgp3IFbzDtDbRt6KQ7sn7lmINp3kpxJtwNgTNDHKyUbP3n7giFtnt3M94csdwyETrh u3Fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vNzJ8efgD30GIsKbrzz5c93oH3/8c8uS8ydCb4RBpRg=; b=b0yXOvP3V0nyzW9BlLBrFjpMc7oefoj/9KqtvnJAK4fO85msS/iRg/fJ7Sg8hMrSMU DrYCBJnZwfOYbukrAGKdLrSj5mN8yS7zN5RCshBiJL4uFauiiGi8KbGCr1MpDWiEPlOH AYVqKuTfXsmGmF6ts84MooZILWVR6YYkSW7CAoiZqsGVWxMZ2IAVM/7UNgLVKvJ00OUK LjnRKzO4DgPmFsWq22BoQ6izr15h+NvdY5x2ptgSPt49tPqeBiPGLHYq7zQIYfOEjn8P aq4MSV4odFJN2Rz/7CbramSnnBVl8+MBkHYfL2KNiWwp2TZ5dnWODuUcYh+vOoGWHDPu AO7w== X-Gm-Message-State: AOAM530kzQzQTM98mQu0p9gXq7ME4Ag5j7ehPwvyNzmBJM8BedFslBjR HK68ddOHDBOhQw/cXM+LQNjYjGe6xMDdPQ== X-Google-Smtp-Source: ABdhPJxMFAbKyKYZFRuSsIRouT6PkVI3lhD7WNXF2LViCr7U41cKuuBk9kfBCoUKf9gjGoCk7aTxuA== X-Received: by 2002:a17:902:4d:b029:ec:94df:c9aa with SMTP id 71-20020a170902004db02900ec94dfc9aamr22086091pla.7.1620066952403; Mon, 03 May 2021 11:35:52 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 15/16] tcg/s390x: Implement TCG_TARGET_HAS_bitsel_vec Date: Mon, 3 May 2021 11:35:40 -0700 Message-Id: <20210503183541.2014496-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-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: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/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 efa32f348c..127ccd30af 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_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 a6121c2f40..178b992b78 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, @@ -635,6 +636,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(v1 >=3D TCG_REG_V0 && v1 <=3D TCG_REG_V31); + tcg_debug_assert(v2 >=3D TCG_REG_V0 && v2 <=3D TCG_REG_V31); + tcg_debug_assert(v3 >=3D TCG_REG_V0 && v3 <=3D TCG_REG_V31); + tcg_debug_assert(v4 >=3D TCG_REG_V0 && v4 <=3D TCG_REG_V31); + tcg_out16(s, (op & 0xff00) | ((v1 & 15) << 4) | (v2 & 15)); + tcg_out16(s, v3 << 12); + tcg_out16(s, (op & 0x00ff) | RXB(v1, v2, v3, v4) | ((v4 & 15) << 12)); +} + static void tcg_out_insn_VRRf(TCGContext *s, S390Opcode op, TCGReg v1, TCGReg r2, TCGReg r3) { @@ -2753,6 +2766,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: @@ -2793,6 +2810,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: @@ -3134,6 +3152,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 Wed Apr 24 06:17:33 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=1620067790; cv=none; d=zohomail.com; s=zohoarc; b=Aw8/aHa7RR5h0ch6EieaHiw0Tz4ZFSRMehj85mmYn8BMy5pDdCc2dYqcl6EV1a6vrv1ZwbtxneKElMPo8TMwAo09rrGVrrwiMOqWT33hA5ZUfx8GtClcBlC6IPJW3XgcZxqh8GWMHE3i9POtxH7vnK5QYc0+MMK42mjZXJHyFvg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620067790; 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=Q894i9n7Id8k1ZQ47A2dG3zYZ+36xN7hyIYM+zBegek=; b=ZacTAF2w3AIbkTjGwl7Ecnv4cbVDfzDdU1S87HE086zykWy3uL/Gk3N1ZGmkzjY0SBp9sKgTNcFYwfmx27Uf1me1mHeJ2a2o5a+OXVKMl6iEVGVtNPibdlyzslhdRUg/IeVj/S0sdfC/gzZdBe3BO9bweAzgLb/jeS/s148uGHs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620067790211612.092752306666; Mon, 3 May 2021 11:49:50 -0700 (PDT) Received: from localhost ([::1]:58746 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ldddc-0004kI-J1 for importer@patchew.org; Mon, 03 May 2021 14:49:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39562) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lddQO-0005tH-4B for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:08 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]:33522) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lddQA-0008Ia-9c for qemu-devel@nongnu.org; Mon, 03 May 2021 14:36:07 -0400 Received: by mail-pf1-x42d.google.com with SMTP id h11so4877524pfn.0 for ; Mon, 03 May 2021 11:35:53 -0700 (PDT) Received: from localhost.localdomain ([71.212.144.24]) by smtp.gmail.com with ESMTPSA id q27sm4251567pfl.41.2021.05.03.11.35.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 May 2021 11:35:52 -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=Q894i9n7Id8k1ZQ47A2dG3zYZ+36xN7hyIYM+zBegek=; b=Vy+gKURYIhgkw0X4WYmpjQ0NwN33IiXlhNGm8l1Vcp9wFlLsORbV++vLgGlAVuVeKT PKs2IlOr/Mf+gKHLj/DK+ezthtSfnTyjsa4OUhsBYuWt8YeOMvZUS/Pcxt/CiDEsUw4G PslJRODEQnFkAhrznElfxPQ5CxjgEEGN9wiohK2v2r76GuWcCDxF5qU+dPM8kt7l8Y4Y eRAO8pguuKiuu3s3/UEulQnrbvTbdm+s5N1HPxERf3lHAfTxZbJ3wxGfCQvbbfptZ8zM 75iNYOqzj6g6JqFrPLY1kXresWwdWrguMhN1AfVOpbJEqidSoUyr2PpAYmWFOcR6lkYx 901g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Q894i9n7Id8k1ZQ47A2dG3zYZ+36xN7hyIYM+zBegek=; b=G/o3RJvyZ4mowPLIXPjo5bkLeKTnfyMLJS+UkCsGJvSVBdKUZHKkKh8WKmDwdb1s1W bZlQJQhioRz8C6Allsbq5WYo6hgLB1PW4k4c/ZZMKlXF2gjlTECLemYf+ziGT8MaKrnM 2A3qfTNWH1z9kaDvg/V/QC8pt1/dW7eCbtXsMpVTspHEEZ/10Q3UMcNHvJYZwgTaprrY cDaDw3ieXXCZd68PRoa1wli63quDhAaqXgasMlRbF0JWOl09t9JNiFYqYGOiE6SALZL9 T1bfiMhMI/ILKftHEt1M/EtzhZVnpWdjkvPMi+YlDQnYmjwKLVZ7fzPzyIAU4sGtIxxY xWYA== X-Gm-Message-State: AOAM532KxiEM2ae384jRhLzS0j/4AzwtnZ6QCiemG1z2WczlELYW762S ozRNHPeYiyWgB2DFwA9WgmlKLcSSuCAjuQ== X-Google-Smtp-Source: ABdhPJywWGnqwi0uEhs7VjFKAUDLBNiA8VxOb5DCqJi4flr/JTBBU6gHhr9BWwyXTgseeQvCR0ozLA== X-Received: by 2002:a17:90a:cc11:: with SMTP id b17mr22636719pju.119.1620066953014; Mon, 03 May 2021 11:35:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 16/16] tcg/s390x: Implement TCG_TARGET_HAS_cmpsel_vec Date: Mon, 3 May 2021 11:35:41 -0700 Message-Id: <20210503183541.2014496-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210503183541.2014496-1-richard.henderson@linaro.org> References: <20210503183541.2014496-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::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.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: thuth@redhat.com, david@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" This 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 178b992b78..0a0777dadb 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -2835,6 +2835,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: @@ -2897,6 +2898,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) { @@ -2938,7 +2954,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)); @@ -2950,6 +2966,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