From nobody Wed Aug 26 07:29:41 2026 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=1786494784; cv=none; d=zohomail.com; s=zohoarc; b=Ez0+ByNR/a8cj1Hr/qJbvNqgwIjvSO02ND0wodLv1s/BByu1NlENbDUsbGs9uREcTj8ZOvyE/t95bxWizqjP/4ElQgxMAkTp5JLy4+3v6gUgDARGZyEUpMZUw+zzZWCp7blxJZxu+9wAUOrsXd8k5Y/JwSPP74QGYHnKJolQqQc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786494784; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=n0Sq380F8CEtqmJwNPMBwWxWmJlUlcFSp9OvTFf/Jbk=; b=KKfUPyKGuExMLF8IShS6vOCKNf+Q0b3g05FEYuhaEdgBuW7biENVpyztmhl2CdawoXg4ff5aihxwTWpAyNoFOBVzrmAAJpFg2OoyZHx2EVxBoBPvq/44f/lSX+XxbyFnZdFodjWjOqBgmseisV5Ae0SWIWheIPJns7FBfzGpZOU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786494784784524.2969583833699; Tue, 11 Aug 2026 17:33:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wtwsp-00042m-Se; Tue, 11 Aug 2026 20:31:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wtwso-000428-Ju for qemu-devel@nongnu.org; Tue, 11 Aug 2026 20:31:50 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wtwsm-0000S8-DE for qemu-devel@nongnu.org; Tue, 11 Aug 2026 20:31:50 -0400 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-84e84a6c4bfso457978b3a.1 for ; Tue, 11 Aug 2026 17:31:47 -0700 (PDT) Received: from stoup.. (174-21-93-59.tukw.qwest.net. [174.21.93.59]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84fb1f2587fsm321466b3a.49.2026.08.11.17.31.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Aug 2026 17:31:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1786494707; x=1787099507; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=n0Sq380F8CEtqmJwNPMBwWxWmJlUlcFSp9OvTFf/Jbk=; b=c2bm84RfPZdGwm0uDQXxD7HBXHn8MH7V2B5pnt6C5DdtV8XXJAztIokEDBxXJhFugO kFqgFmB2KBZUtg5ornsMAxsbazfE4NS1bf6mmF3GW+x/e1xein2v+BwcZ+KdDd1k485N hOwjY4uVST3heIcqx8SeOpwXVQYjxLvGmsksvVCHTusdWi9FtK88Gow9LyI4SgP/SMzW 6vpyyjPrw112V45tbu0T2Q042KhZK+aFq/wD//mrNfXvMJXkukUiq0236ZHJGQzfDel4 aLci31FTUfy+n0NBCMo4xPx1cQCFx4Rjfgp7SAzT3CbIHPMQVa7eT4rfnfRKkeaJTgoq jBpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786494707; x=1787099507; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=n0Sq380F8CEtqmJwNPMBwWxWmJlUlcFSp9OvTFf/Jbk=; b=U3i7MVF5N00/P1wi8jkVLKsj19QoV2NLmxFRJXiv2IrG5jipDwwZEz1E9HqEd3j3Qz 8Kj1eGNqNgwgVcXcyEKmHNBnW/WXU8hu195+piH0wQ6lkwskPWD8P+QzlGpmCWBLyh6u KSGZ1k8X/OHk0/zcyKZEK/IweJzyAqcWel79aq/yameM28VbH6tCv6T37fzovF3Cst/J KqMI+dOQ5OGUKIvs2Wwb4SOwJ48Sg+HU/91ka1x7kghNA8dFzow6GiGlWXocIsr2BSY2 JrCvBShpPyK5Virx1QgJW0MS3fOrIyBFW+qjq3vdnaFyHWLTsP3rF8dnEmV9BtFuQvO+ 0n3w== X-Gm-Message-State: AOJu0YyVRZgPMitH0cKrNcCj07UzjUwaxk7dhBpSvkJQdbbeZbCLHqzm MZfbbhXk3103eM+2rYr2zerhMB/EIzycWF8ZAEj0xFCwPTo5rxZfZAOkjooDAQQSJsxKGuGEVXy aB/BX X-Gm-Gg: AR+sD10HucfHnztjGXR5LAc9cMfHgzLbIjr0FUZctVR4/PCDEDugAmw0zujlD61MJhi k+wyQL0djqJUdEXNmwX7+kCSY0ntlqiPRsbw8a9DC50DO8aqADZVZHEqUNVWTHFUEGQioQ4WfSw bEtuzomJ44cBncMmr1fPZahlCdabof0u0LrkPqGtlvPL5hUIShNRJIe4z97lptI0apGVDsZJWMx b1Nnoiee6xiOnoTSOXZ5YX/5K9gLQg9Ssof72B9kcfelcOeCXs+vsmIFbU73PmD6FTzYVBE/cNu NzqyqFG3ao3t5hO/qccAcbWtksB+vS2WClrirh5tfHwaK37xgYtKK4GV/pXYSsDQL2T2Dw/4KFX LhKz+dzVX9Ge/uBzm6y1G+l+ztDd3yGAucG+ux+qUPBae50yFXK6HAzIW4TS1Cp2Lj8NRYk1VPx 9fIuejlFOr+oj+4TiYVjKhjdZJb/zhHxc6XqliUwUMW+JlWW4J1W8SKo7CmNFRgCLdBX16YJ96H IhXrWE2I3xSTT8azB/A X-Received: by 2002:a05:6a00:4fc4:b0:84e:242:4bb2 with SMTP id d2e1a72fcca58-84fb6481c1dmr784247b3a.4.1786494706594; Tue, 11 Aug 2026 17:31:46 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 1/7] tcg: Add integer min/max opcodes Date: Tue, 11 Aug 2026 17:31:37 -0700 Message-ID: <20260812003143.225228-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260812003143.225228-1-richard.henderson@linaro.org> References: <20260812003143.225228-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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::431; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x431.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1786494786581158500 Content-Type: text/plain; charset="utf-8" We already have these for vectors; replicate for integers. Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e --- include/tcg/tcg-opc.h | 4 +++ tcg/tcg-op.c | 48 ++++++++++++++++++++++++++------ tcg/tcg.c | 4 +++ docs/devel/tcg-ops.rst | 14 +++++++++- tcg/aarch64/tcg-target.c.inc | 16 +++++++++++ tcg/loongarch64/tcg-target.c.inc | 16 +++++++++++ tcg/ppc64/tcg-target.c.inc | 16 +++++++++++ tcg/riscv64/tcg-target.c.inc | 16 +++++++++++ tcg/s390x/tcg-target.c.inc | 16 +++++++++++ tcg/sparc64/tcg-target.c.inc | 16 +++++++++++ tcg/tci/tcg-target.c.inc | 16 +++++++++++ tcg/x86_64/tcg-target.c.inc | 16 +++++++++++ 12 files changed, 189 insertions(+), 9 deletions(-) diff --git a/include/tcg/tcg-opc.h b/include/tcg/tcg-opc.h index 13c7f17f76..f3a81d5d7f 100644 --- a/include/tcg/tcg-opc.h +++ b/include/tcg/tcg-opc.h @@ -89,11 +89,15 @@ DEF(setcond, 1, 2, 1, TCG_OPF_INT) DEF(sextract, 1, 1, 2, TCG_OPF_INT) DEF(shl, 1, 2, 0, TCG_OPF_INT) DEF(shr, 1, 2, 0, TCG_OPF_INT) +DEF(smax, 1, 2, 0, TCG_OPF_INT) +DEF(smin, 1, 2, 0, TCG_OPF_INT) DEF(st8, 0, 2, 1, TCG_OPF_INT) DEF(st16, 0, 2, 1, TCG_OPF_INT) DEF(st32, 0, 2, 1, TCG_OPF_INT) DEF(st, 0, 2, 1, TCG_OPF_INT) DEF(sub, 1, 2, 0, TCG_OPF_INT) +DEF(umax, 1, 2, 0, TCG_OPF_INT) +DEF(umin, 1, 2, 0, TCG_OPF_INT) DEF(xor, 1, 2, 0, TCG_OPF_INT) =20 DEF(addco, 1, 2, 0, TCG_OPF_INT | TCG_OPF_CARRY_OUT) diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c index c302a484cd..e28944cf72 100644 --- a/tcg/tcg-op.c +++ b/tcg/tcg-op.c @@ -1294,22 +1294,38 @@ void tcg_gen_revbit32_i32(TCGv_i32 ret, TCGv_i32 ar= g) =20 void tcg_gen_smin_i32(TCGv_i32 ret, TCGv_i32 a, TCGv_i32 b) { - tcg_gen_movcond_i32(TCG_COND_LT, ret, a, b, a, b); + if (tcg_op_supported(INDEX_op_smin, TCG_TYPE_I32, 0)) { + tcg_gen_op3_i32(INDEX_op_smin, ret, a, b); + } else { + tcg_gen_movcond_i32(TCG_COND_LT, ret, a, b, a, b); + } } =20 void tcg_gen_umin_i32(TCGv_i32 ret, TCGv_i32 a, TCGv_i32 b) { - tcg_gen_movcond_i32(TCG_COND_LTU, ret, a, b, a, b); + if (tcg_op_supported(INDEX_op_umin, TCG_TYPE_I32, 0)) { + tcg_gen_op3_i32(INDEX_op_umin, ret, a, b); + } else { + tcg_gen_movcond_i32(TCG_COND_LTU, ret, a, b, a, b); + } } =20 void tcg_gen_smax_i32(TCGv_i32 ret, TCGv_i32 a, TCGv_i32 b) { - tcg_gen_movcond_i32(TCG_COND_LT, ret, a, b, b, a); + if (tcg_op_supported(INDEX_op_smax, TCG_TYPE_I32, 0)) { + tcg_gen_op3_i32(INDEX_op_smax, ret, a, b); + } else { + tcg_gen_movcond_i32(TCG_COND_LT, ret, a, b, b, a); + } } =20 void tcg_gen_umax_i32(TCGv_i32 ret, TCGv_i32 a, TCGv_i32 b) { - tcg_gen_movcond_i32(TCG_COND_LTU, ret, a, b, b, a); + if (tcg_op_supported(INDEX_op_umax, TCG_TYPE_I32, 0)) { + tcg_gen_op3_i32(INDEX_op_umax, ret, a, b); + } else { + tcg_gen_movcond_i32(TCG_COND_LTU, ret, a, b, b, a); + } } =20 void tcg_gen_abs_i32(TCGv_i32 ret, TCGv_i32 a) @@ -2473,22 +2489,38 @@ void tcg_gen_mulsu2_i64(TCGv_i64 rl, TCGv_i64 rh, T= CGv_i64 arg1, TCGv_i64 arg2) =20 void tcg_gen_smin_i64(TCGv_i64 ret, TCGv_i64 a, TCGv_i64 b) { - tcg_gen_movcond_i64(TCG_COND_LT, ret, a, b, a, b); + if (tcg_op_supported(INDEX_op_smin, TCG_TYPE_I64, 0)) { + tcg_gen_op3_i64(INDEX_op_smin, ret, a, b); + } else { + tcg_gen_movcond_i64(TCG_COND_LT, ret, a, b, a, b); + } } =20 void tcg_gen_umin_i64(TCGv_i64 ret, TCGv_i64 a, TCGv_i64 b) { - tcg_gen_movcond_i64(TCG_COND_LTU, ret, a, b, a, b); + if (tcg_op_supported(INDEX_op_umin, TCG_TYPE_I64, 0)) { + tcg_gen_op3_i64(INDEX_op_umin, ret, a, b); + } else { + tcg_gen_movcond_i64(TCG_COND_LTU, ret, a, b, a, b); + } } =20 void tcg_gen_smax_i64(TCGv_i64 ret, TCGv_i64 a, TCGv_i64 b) { - tcg_gen_movcond_i64(TCG_COND_LT, ret, a, b, b, a); + if (tcg_op_supported(INDEX_op_smax, TCG_TYPE_I64, 0)) { + tcg_gen_op3_i64(INDEX_op_smax, ret, a, b); + } else { + tcg_gen_movcond_i64(TCG_COND_LT, ret, a, b, b, a); + } } =20 void tcg_gen_umax_i64(TCGv_i64 ret, TCGv_i64 a, TCGv_i64 b) { - tcg_gen_movcond_i64(TCG_COND_LTU, ret, a, b, b, a); + if (tcg_op_supported(INDEX_op_umax, TCG_TYPE_I64, 0)) { + tcg_gen_op3_i64(INDEX_op_umax, ret, a, b); + } else { + tcg_gen_movcond_i64(TCG_COND_LTU, ret, a, b, b, a); + } } =20 void tcg_gen_abs_i64(TCGv_i64 ret, TCGv_i64 a) diff --git a/tcg/tcg.c b/tcg/tcg.c index 4c2207c6af..54f7906cb7 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -5512,6 +5512,10 @@ static void tcg_reg_alloc_op(TCGContext *s, const TC= GOp *op) case INDEX_op_sar: case INDEX_op_shl: case INDEX_op_shr: + case INDEX_op_smax: + case INDEX_op_smin: + case INDEX_op_umax: + case INDEX_op_umin: case INDEX_op_xor: { const TCGOutOpBinary *out =3D diff --git a/docs/devel/tcg-ops.rst b/docs/devel/tcg-ops.rst index f2e9255dd9..d30db9ea65 100644 --- a/docs/devel/tcg-ops.rst +++ b/docs/devel/tcg-ops.rst @@ -317,6 +317,18 @@ Arithmetic pass 0 to *nh* to make a simple zero-extension of *nl*, so overflow should never occur. =20 + * - smax *t0*, *t1*, *t2* + + umax *t0*, *t1*, *t2* + + - | *t0* =3D MAX(*t1*, *t2*), for signed and unsigned integers. + + * - smin *t0*, *t1*, *t2* + + umin *t0*, *t1*, *t2* + + - | *t0* =3D MIN(*t1*, *t2*), for signed and unsigned integers. + Logical ------- =20 @@ -512,7 +524,7 @@ Misc =20 - | Reverse the 64 bits of input *t1* with output in *dest*. =20 -Conditional moves +Conditional motes ----------------- =20 .. list-table:: diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc index 80995403e4..f5c185bbf4 100644 --- a/tcg/aarch64/tcg-target.c.inc +++ b/tcg/aarch64/tcg-target.c.inc @@ -2592,6 +2592,22 @@ static void tcg_out_set_borrow(TCGContext *s) TCG_REG_XZR, TCG_REG_XZR, TCG_REG_XZR); } =20 +static const TCGOutOpBinary outop_smax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_smin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + static void tgen_xor(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1, TCGReg a2) { diff --git a/tcg/loongarch64/tcg-target.c.inc b/tcg/loongarch64/tcg-target.= c.inc index 7d89e80886..f65496a040 100644 --- a/tcg/loongarch64/tcg-target.c.inc +++ b/tcg/loongarch64/tcg-target.c.inc @@ -1804,6 +1804,22 @@ static void tcg_out_set_borrow(TCGContext *s) g_assert_not_reached(); } =20 +static const TCGOutOpBinary outop_smax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_smin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + static void tgen_xor(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1, TCGReg a2) { diff --git a/tcg/ppc64/tcg-target.c.inc b/tcg/ppc64/tcg-target.c.inc index 07dff67e84..cd1c234367 100644 --- a/tcg/ppc64/tcg-target.c.inc +++ b/tcg/ppc64/tcg-target.c.inc @@ -3281,6 +3281,22 @@ static void tcg_out_set_borrow(TCGContext *s) tcg_out32(s, ADDIC | TAI(TCG_REG_R0, TCG_REG_R0, 0)); } =20 +static const TCGOutOpBinary outop_smax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_smin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + static void tgen_xor(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1, TCGReg a2) { diff --git a/tcg/riscv64/tcg-target.c.inc b/tcg/riscv64/tcg-target.c.inc index 8fd32644fe..723c21b3da 100644 --- a/tcg/riscv64/tcg-target.c.inc +++ b/tcg/riscv64/tcg-target.c.inc @@ -2404,6 +2404,22 @@ static void tcg_out_set_borrow(TCGContext *s) g_assert_not_reached(); } =20 +static const TCGOutOpBinary outop_smax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_smin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + static void tgen_xor(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1, TCGReg a2) { diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc index c481745c3f..4d1a779c47 100644 --- a/tcg/s390x/tcg-target.c.inc +++ b/tcg/s390x/tcg-target.c.inc @@ -2950,6 +2950,22 @@ static void tcg_out_set_borrow(TCGContext *s) tcg_out_insn(s, RR, CLR, TCG_REG_R0, TCG_REG_R0); /* cc =3D 0 */ } =20 +static const TCGOutOpBinary outop_smax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_smin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + static void tgen_xor(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1, TCGReg a2) { diff --git a/tcg/sparc64/tcg-target.c.inc b/tcg/sparc64/tcg-target.c.inc index d6ed9d3362..35cd14a5b6 100644 --- a/tcg/sparc64/tcg-target.c.inc +++ b/tcg/sparc64/tcg-target.c.inc @@ -1917,6 +1917,22 @@ static void tcg_out_set_borrow(TCGContext *s) tcg_out_set_carry(s); /* borrow =3D=3D carry */ } =20 +static const TCGOutOpBinary outop_smax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_smin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + static void tgen_xor(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1, TCGReg a2) { diff --git a/tcg/tci/tcg-target.c.inc b/tcg/tci/tcg-target.c.inc index 1b61668517..4cd1c1431c 100644 --- a/tcg/tci/tcg-target.c.inc +++ b/tcg/tci/tcg-target.c.inc @@ -894,6 +894,22 @@ static void tcg_out_set_borrow(TCGContext *s) tcg_out_op_v(s, INDEX_op_tci_setcarry); /* borrow =3D=3D carry */ } =20 +static const TCGOutOpBinary outop_smax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_smin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + static void tgen_xor(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1, TCGReg a2) { diff --git a/tcg/x86_64/tcg-target.c.inc b/tcg/x86_64/tcg-target.c.inc index 37acba9045..2c8f1f3e58 100644 --- a/tcg/x86_64/tcg-target.c.inc +++ b/tcg/x86_64/tcg-target.c.inc @@ -2977,6 +2977,22 @@ static void tcg_out_set_borrow(TCGContext *s) tcg_out8(s, OPC_STC); } =20 +static const TCGOutOpBinary outop_smax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_smin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umax =3D { + .base.static_constraint =3D C_NotImplemented, +}; + +static const TCGOutOpBinary outop_umin =3D { + .base.static_constraint =3D C_NotImplemented, +}; + static void tgen_xor(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1, TCGReg a2) { --=20 2.43.0 From nobody Wed Aug 26 07:29:41 2026 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=1786494771; cv=none; d=zohomail.com; s=zohoarc; b=CL+Ksiy3dn81EmCH44P+50NhZpaSHurPo5/L87KM3nbYHv+8uE3MVpgKmbFqPsRttLw3xaajspuwJtWrBKjD6x2HsNWVbrY21+x65ugeNKhuxWq7becT+5Ex8arPtCDNQ7mgAWvRuv1Ka0+vCPdXsBmkRpuL4NBns4wGpH6gYPs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786494771; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=ShHagJFPCpKOUo+itn/8wD0Rm6G8LbkyM3xldQpaDhQ=; b=NCAw08eXwifIJkMnGCUKYo8x1jiuhjQ9B041BLEyWo8iMW4Q0EBdUdJmIGQDDc1BkD0vPSziKBYT/cz7BKZWhsLGZa5MlbsJwiPlyc34UaLuCmpniq2uG7BGUwqR1t97TLG9UlPLtK4UyaX5VSqoYwdz43xL3c0ySXSgB4Y6GJ8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786494771803624.9756392986549; Tue, 11 Aug 2026 17:32:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wtwsp-00042P-EP; Tue, 11 Aug 2026 20:31:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wtwso-000429-Mv for qemu-devel@nongnu.org; Tue, 11 Aug 2026 20:31:50 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wtwsn-0000SD-1y for qemu-devel@nongnu.org; Tue, 11 Aug 2026 20:31:50 -0400 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-84867f07d63so517466b3a.2 for ; Tue, 11 Aug 2026 17:31:48 -0700 (PDT) Received: from stoup.. (174-21-93-59.tukw.qwest.net. [174.21.93.59]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84fb1f2587fsm321466b3a.49.2026.08.11.17.31.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Aug 2026 17:31:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1786494708; x=1787099508; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=ShHagJFPCpKOUo+itn/8wD0Rm6G8LbkyM3xldQpaDhQ=; b=KMc5SXNQ+h+sfHzKgsxp0QWOPjfhqQHGu+D6BHfMUz1b5P2fLrNOnmT1ERCgy4Ck6U NyzDwM8l7rRn3Ojo1YKXoiLQK5DfRMZwX3IZ9VuN+YK15fHHSA6++4BTkjQIxM/C7ptM OxhuRbp2PZlAatK/ZIvtDc2fzDQ2PtImGPCg3/rj1dr/RxTiQgVrVM1UlLPuYkwJEc6m 3MZIEFFn49hT2/a2rLjsKnXUHDd3jJ2QU7Wu5ejbCELM+xwzpbbbNrEpWH1JzD0y1rRg wo5/p9vM/rkn79wS4D5IuhxcJr+Fu8m2ivC+AqlXA2Qx9JXcwPaY44NwUUKtwHJrKulc MDTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786494708; x=1787099508; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=ShHagJFPCpKOUo+itn/8wD0Rm6G8LbkyM3xldQpaDhQ=; b=RtT0OyyaF2TTBnZe3kE9A+I8UqXHGvJtZuYCsQ4oRMSxlFl8UpRJ2KAmQZfEQF4aSm HpSAYoruTF0vEKKEm8wKSTystsF8MNkBkVx5+VkMMNeSAa5QMU6ePQ1Ew3einx9ZzSqq dGZo3+K8jflHtc7gd/L6vKWHvsTY16u7rcQn4kef4azEkKHxgYQ+ziKrUOjjRMfoGaLW m/y6hYrqSArBwzQP2vLTn6qDQSOc7qC+aULejvN+aGPh4oTEtl3vkSVvr1qpqNyIrg6P kOJL7+N6xgss0ALL0RreLRpmAY1uSaUjPLofapSg9zhc0D2Cyk+eQfsbzl8joNS0t7Cu N9rg== X-Gm-Message-State: AOJu0YwtWU5YTXqyxtCSmd9ml1CwlTj//v9IhsI1i87aXP6K1CoNHfjj d01YLoGpOrXyOlrnNeIv6Ca+1iICJjjgV64OwpAUV6OcbRT65N6RfOWqhDjGqzAdrgkoSvJpGR2 HwA+t X-Gm-Gg: AR+sD12yz9iSM8GeY4PxJfQU/6ol6NxmkRUhp2MaG7hhFZDfnjZuNetIvAY39MQM/Z6 9ExgSY4bV2CkZlTtsBfcqpkiLfOor0QFZ2YfnsfRVmwb+I24b+KqSjGi9Z7iHMKrlKM9HNC77mU YngPmDOJe1pzhwSvUOIB4Y3d8B9eF2Tztjnyfe1+O7T0rOeS3YjTDm8FcIxv/TDIIr4WN1dCR7v PVFduebMCOdFcW/OTND6Si8KHPf0xN1RKQLeiO2ldQK5BywyEz8NL2e13/cAHuIshxUUKRP6yq9 Ke8L/3YgsoF2TavKFjqcw7l8SyVETWU/cCVQjGhpzDQc9OQ6GvIdN82n1+qTorhJ+8y0gh4oPDW O+ofjXriFhNa3AwPLEC4R3QwpErxqf+jkyA2t6JhUFG3bKyn8V7v7OjBw790SZZ0gUaPpzwdyo3 JKnQx4gmmIkmBYcydqel+pqN164GgiCFKuRzMCZPuWMnAd4tCqCTvyJHPfuSeYAI7i7hLkmc/Qr +fuTBWMTVW+PeeowM28 X-Received: by 2002:a05:6a00:1da5:b0:842:706e:ad43 with SMTP id d2e1a72fcca58-84fb55685dbmr1183796b3a.33.1786494707559; Tue, 11 Aug 2026 17:31:47 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 2/7] tcg/optimize: Handle min/max opcodes Date: Tue, 11 Aug 2026 17:31:38 -0700 Message-ID: <20260812003143.225228-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260812003143.225228-1-richard.henderson@linaro.org> References: <20260812003143.225228-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=lists1p.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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1786494775594158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/optimize.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/tcg/optimize.c b/tcg/optimize.c index facf4c1e0f..d291c844ca 100644 --- a/tcg/optimize.c +++ b/tcg/optimize.c @@ -597,6 +597,30 @@ static uint64_t do_constant_folding_2(TCGOpcode op, TC= GType type, } return (uint64_t)x % ((uint64_t)y ? : 1); =20 + case INDEX_op_smax: + if (type =3D=3D TCG_TYPE_I32) { + return MAX((int32_t)x, (int32_t)y); + } + return MAX((int64_t)x, (int64_t)y); + + case INDEX_op_smin: + if (type =3D=3D TCG_TYPE_I32) { + return MIN((int32_t)x, (int32_t)y); + } + return MIN((int64_t)x, (int64_t)y); + + case INDEX_op_umax: + if (type =3D=3D TCG_TYPE_I32) { + return MAX((uint32_t)x, (uint32_t)y); + } + return MAX((uint64_t)x, (uint64_t)y); + + case INDEX_op_umin: + if (type =3D=3D TCG_TYPE_I32) { + return MIN((uint32_t)x, (uint32_t)y); + } + return MIN((uint64_t)x, (uint64_t)y); + default: g_assert_not_reached(); } @@ -2101,6 +2125,16 @@ static bool fold_mb(OptContext *ctx, TCGOp *op) return true; } =20 +static bool fold_minmax(OptContext *ctx, TCGOp *op, uint64_t bound) +{ + if (fold_const2_commutative(ctx, op) || + fold_xi_to_i(ctx, op, bound) || + fold_xx_to_x(ctx, op)) { + return true; + } + return finish_folding(ctx, op); +} + static bool fold_mov(OptContext *ctx, TCGOp *op) { return tcg_opt_gen_mov(ctx, op, op->args[0], op->args[1]); @@ -3258,6 +3292,14 @@ void tcg_optimize(TCGContext *s) case INDEX_op_sextract: done =3D fold_sextract(&ctx, op); break; + case INDEX_op_smax: + done =3D fold_minmax(&ctx, op, (ctx.type =3D=3D TCG_TYPE_I32 + ? INT32_MAX : INT64_MAX)); + break; + case INDEX_op_smin: + done =3D fold_minmax(&ctx, op, (ctx.type =3D=3D TCG_TYPE_I32 + ? INT32_MIN : INT64_MIN)); + break; case INDEX_op_sub: done =3D fold_sub(&ctx, op); break; @@ -3273,6 +3315,16 @@ void tcg_optimize(TCGContext *s) case INDEX_op_sub_vec: done =3D fold_sub_vec(&ctx, op); break; + case INDEX_op_umax: + /* + * Note that 32-bit constants are stored sign extended, + * so (int32_t)UINT32_MAX =3D=3D -1. + */ + done =3D fold_minmax(&ctx, op, -1); + break; + case INDEX_op_umin: + done =3D fold_minmax(&ctx, op, 0); + break; case INDEX_op_xor: case INDEX_op_xor_vec: done =3D fold_xor(&ctx, op); --=20 2.43.0 From nobody Wed Aug 26 07:29:41 2026 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=1786494797; cv=none; d=zohomail.com; s=zohoarc; b=RhbWASARA4jYU2Qh3owo1G5cDScB8Cc4LkKw6YlLr5GAbM118O7yxbE0XsgBl2jP8Vx6JT83EXgefZQpsDlN2ig/86wFRIimgr+BUgV9bN5O4xgdW9V33Xv6tVumC9gn5IO6X0j0SajPmEOgDghO+09zBDJog5p+ri55uqwMLOg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786494797; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=LHHf9lErbFSypMyAoUXaFTWJ3RrOkvtGjLDJ7p8sn0U=; b=GwOMt3djC7MXJX0DTwFvbcVkxDeaSOFucER5qBZWtNS3W3vEnFX7AotUpZvcwgtlS5/WFk9k0+GOidMoRtnyYcqWSao01bJb+xYtXDOMPH3eePH07BViK2dQxN/jRnj8NSWeUjDW8QHCqvGeIdoLIJ73hUPsXZsWOXYMP6ByItg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786494797587493.8423614506406; Tue, 11 Aug 2026 17:33:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wtwsq-000434-HV; Tue, 11 Aug 2026 20:31:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wtwsp-00042W-J7 for qemu-devel@nongnu.org; Tue, 11 Aug 2026 20:31:51 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wtwsn-0000SR-SM for qemu-devel@nongnu.org; Tue, 11 Aug 2026 20:31:51 -0400 Received: by mail-pf1-x435.google.com with SMTP id d2e1a72fcca58-8487214ad2bso639832b3a.1 for ; Tue, 11 Aug 2026 17:31:49 -0700 (PDT) Received: from stoup.. (174-21-93-59.tukw.qwest.net. [174.21.93.59]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84fb1f2587fsm321466b3a.49.2026.08.11.17.31.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Aug 2026 17:31:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1786494708; x=1787099508; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=LHHf9lErbFSypMyAoUXaFTWJ3RrOkvtGjLDJ7p8sn0U=; b=e+1/9Oo9Eo6kqTpfqrOzVTTclEBGQjygypkm7e02tmNf1YCiQysyXwML+CPth99vop JsWXQ+NCbzt6I/6JZomUYHnyqg6M9EcLbZ8jyp9J13Toi9MicND/r7F9WJ2JH3JZBSKK f7bwU2qTowsSJlm48B0esEcc+6CA3DeXDMAa0Fe2Aq8l1MuIabFXnC1mFGQ3dasEd/QT TQjiugeCgJAi6HJKrNL4q8Eom8v/F0z1FChxUv4k6WUMgl2hwqtcoa6R5hnNgDPLt2CW G1K1+uw+2nVkatSlutRjmhUFK0f56zIGjyH/2q9v8dSXjN25IkNkSWvOco+Mu0M6QmbQ G86w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786494708; x=1787099508; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=LHHf9lErbFSypMyAoUXaFTWJ3RrOkvtGjLDJ7p8sn0U=; b=RQ8gJnHWP5Kj8FTcEDmyz4FPFh5oLNVhiKZzuPIJ55dBfkPG8Y+8B+42K4wAYtqDbN 4Pb9HsqlgiymAU/LTfIflP+V7zzjwxaBaeVneKA5R7nr1Myi1Cmd1wo2kHPyvhqHVKzJ lnEWtmwIL52LvB5GMGA71HvZXU21KDTntEocbWQNFtfSU6QxiFOq6PVwaH2nzScVOBhu oTYVQnE28r81Fx+jAFyCg9GnZKIPWtmQ+Beew6S+WVq2s/j6iov+pVVHHedzCmOTnlBQ Im+/T2c8vXIRmt4OuqfOY+DHZvQaepB9URlCIfFHnMWtkLnQJVKMJGR3rBFs0jZBayDn 5XxQ== X-Gm-Message-State: AOJu0YzlLznjBqlBIM1n0A1BUPFibWP/kedtEQoCDpai+mMq1EFhmZGp cm/2xm9w7GpN314cyveBXbUM8Yqy4yaRF5H65QgfOK8BYA8j9IfK+pimn9k+sGqB9l3d9zvP27g slROR X-Gm-Gg: AR+sD10GQXoZsFoASGZBRJfuMthsC1ClxSk8lfImbUvLZpYFhuYXAAV/tDpdn91PU3w KlM7LBfjsefZuHEO7jP6m69J+SAicC9CS55ImLgiotciHzESyJoVa7vCaIKZDcTFGs88jgQhlsw M9yljWmGjjgDLCEWL7okFoB3BXj5ZsXwhCQ2GCZ0IapKJwQOOXu5fYxF2JrXxAAdK0d+wU58fue +dvpfX4hecCwDNCQc2xEnPmBOGCrAJs0s54ChRtHzSIBTj/vh4PyMAtbxGA/7aC9lGsdsQVMNTe l3Yjv1j78deyWQUmNhNj2G6K43/B4dA5X+h38tWkzo5Rh11rHNPhIJAxRN85I6/CvC/uPeg19gD 6rM7pweYDtgauaF4EdIsQ/fk7ruofVeEHc3LjQiYEq3oPRPR91k1o7iQ3etiF6doEvbwQbOQnVb 5dnAKcMew9ZAuS2bRO32MGbxc4VQe/6A9gcZcDmcjqJnN8Q9lJsUVkaqpowcCI2Rwpjuha/rmGV JEkBGrvsaPL+qP0xedEotQFxtJ2Wmo= X-Received: by 2002:a05:6a00:800f:b0:845:3914:f039 with SMTP id d2e1a72fcca58-84fb5509b7fmr1219330b3a.26.1786494708348; Tue, 11 Aug 2026 17:31:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 3/7] util/cpuinfo-aarch64: Detect FEAT_CSSC Date: Tue, 11 Aug 2026 17:31:39 -0700 Message-ID: <20260812003143.225228-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260812003143.225228-1-richard.henderson@linaro.org> References: <20260812003143.225228-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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1786494798855158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- host/include/aarch64/host/cpuinfo.h | 1 + util/cpuinfo-aarch64.c | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/host/include/aarch64/host/cpuinfo.h b/host/include/aarch64/hos= t/cpuinfo.h index fe671534e4..c32c04dade 100644 --- a/host/include/aarch64/host/cpuinfo.h +++ b/host/include/aarch64/host/cpuinfo.h @@ -12,6 +12,7 @@ #define CPUINFO_AES (1u << 3) #define CPUINFO_PMULL (1u << 4) #define CPUINFO_BTI (1u << 5) +#define CPUINFO_CSSC (1u << 6) =20 /* Initialized with a constructor. */ extern unsigned cpuinfo; diff --git a/util/cpuinfo-aarch64.c b/util/cpuinfo-aarch64.c index 288074c08f..0b4f8a747d 100644 --- a/util/cpuinfo-aarch64.c +++ b/util/cpuinfo-aarch64.c @@ -72,6 +72,7 @@ unsigned __attribute__((constructor)) cpuinfo_init(void) =20 unsigned long hwcap2 =3D qemu_getauxval(AT_HWCAP2); info |=3D (hwcap2 & HWCAP2_BTI ? CPUINFO_BTI : 0); + info |=3D (hwcap2 & HWCAP2_CSSC ? CPUINFO_CSSC : 0); #endif #ifdef CONFIG_DARWIN info |=3D sysctl_for_bool("hw.optional.arm.FEAT_LSE") * CPUINFO_LSE; @@ -79,10 +80,11 @@ unsigned __attribute__((constructor)) cpuinfo_init(void) info |=3D sysctl_for_bool("hw.optional.arm.FEAT_AES") * CPUINFO_AES; info |=3D sysctl_for_bool("hw.optional.arm.FEAT_PMULL") * CPUINFO_PMUL= L; info |=3D sysctl_for_bool("hw.optional.arm.FEAT_BTI") * CPUINFO_BTI; + info |=3D sysctl_for_bool("hw.optional.arm.FEAT_CSSC") * CPUINFO_CSSC; #endif #if defined(__OpenBSD__) && !defined(CONFIG_ELF_AUX_INFO) int mib[2]; - uint64_t isar0; + uint64_t isar0, isar2; uint64_t pfr1; size_t len; =20 @@ -101,6 +103,15 @@ unsigned __attribute__((constructor)) cpuinfo_init(voi= d) } } =20 + mib[0] =3D CTL_MACHDEP; + mib[1] =3D CPU_ID_AA64ISAR2; + len =3D sizeof(isar2); + if (sysctl(mib, 2, &isar2, &len, NULL, 0) !=3D -1) { + if (ID_AA64ISAR2_CSSC(isar2) >=3D ID_AA64ISAR2_CSSC_IMPL) { + info |=3D CPUINFO_CSSC; + } + } + mib[0] =3D CTL_MACHDEP; mib[1] =3D CPU_ID_AA64PFR1; len =3D sizeof(pfr1); --=20 2.43.0 From nobody Wed Aug 26 07:29:41 2026 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=1786494771; cv=none; d=zohomail.com; s=zohoarc; b=QMO/BGtfjc0Ttn+KIXO2639drWttbZehq4R+bYDeLV3AUUA9ew/hdn6JDtrg9MzLULA0e3X5z01/Kdp52k+RMJvijVR2LwOakx0mGi1ezv6HpjNAc6Qz8cRtueWGnn1uS4AaHCJ/ZXx7L0Muzlcv76JIkykKGOFWkOb6si9eaKc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786494771; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=RH8No/RX2kZXf8IsOLgYzc6hqLZ0AnrkKHzKl/VSgOc=; b=U8JMw7KyU2f8v3dj7MDrXWiGFxlM+qT26INFlVAZ3HDhFZVcxHpamJCeyyYYnUOLAjktFok5fXUr7+3kpMrWA13AnwUwpG3BfY3uG4fN7jRWTYuZMYnLMHbjy5eG/pXzHFn+il/Iftsy7qwiyCW9n+IOx4qBzROPmWyvTMP99/c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786494771513342.0475260220619; Tue, 11 Aug 2026 17:32:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wtwst-00043u-GF; Tue, 11 Aug 2026 20:31:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wtwsr-00043d-VG for qemu-devel@nongnu.org; Tue, 11 Aug 2026 20:31:53 -0400 Received: from mail-pf1-x432.google.com ([2607:f8b0:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wtwsq-0000T5-2Y for qemu-devel@nongnu.org; Tue, 11 Aug 2026 20:31:53 -0400 Received: by mail-pf1-x432.google.com with SMTP id d2e1a72fcca58-84e27035206so86052b3a.3 for ; Tue, 11 Aug 2026 17:31:51 -0700 (PDT) Received: from stoup.. (174-21-93-59.tukw.qwest.net. [174.21.93.59]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84fb1f2587fsm321466b3a.49.2026.08.11.17.31.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Aug 2026 17:31:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1786494710; x=1787099510; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=RH8No/RX2kZXf8IsOLgYzc6hqLZ0AnrkKHzKl/VSgOc=; b=BzbjZeIA3OPvY0YYWOFeoLmh03NqXknqsN0NKJwznLJ9kRLTGkA4shr5gWey3Ee5Yo xhEnJYZACSm5Zuwc0woAT76wN7fjGU8CCXIoiHz0yMWYNgsKvwFB1K7s/827H20CMmlk e8+jVw0JmJr9P/CKebQI+JiZUIiQPXRKzgIfmY7VlMigOC1EV8HGFU5HpvYCFZ44OHq9 X+en4oAHBb1H1CLILySMtpcu16QgRcr9a+ZQNciPHj3UrimQsDgm5gJ2nZNS1phWhF6b Obboa79t+diKeR1Dc/OvFyXkSIIfcDQlG+5L6c9Mni8Pd25kgSWRmJ+hqT82qDe7C+Bo Ug6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786494710; x=1787099510; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=RH8No/RX2kZXf8IsOLgYzc6hqLZ0AnrkKHzKl/VSgOc=; b=ZnipKAp7qkGVfzSjS9l+YQlHP5JI8V8JMNyYcH+gPjh1/0YvyPiehbQ+2RwlnEyxFj OXMltJjKsnTdW+4RvkGKIrnaagGybbBTaUMyDrVC8MZ2yve2pcojOs5RbL3teTkzIYBa qdOllv5LBElX10gKXKmmS1eRFkOg+E9wrWt/llJBrRd57w54oF+yP3AChLA1kH41jacl O4gnKBycSgdtfCN7P4TkoHk/4QwnDdtc5KaCnRnS+yZQIYqs3aw4QV/S9cu4zIgA4d+f 0zBteixHGgDkUUEC2bJ2EqhjYyXWhtaLcPQpEXCSK8rqdvDCgIrWqpTb5vZ4XyEZUUE3 92PA== X-Gm-Message-State: AOJu0YyMBh293CAgh+l3ir9XXdqVnf6Mx4+jRCLZzrTsDBDJHhOvUheG IyFZ36mxQva5ESFcDhuooI45Wywf8zs3o5SbQRetH6e0oai7m3SRLLh5GwPxbMDyMQfzG93XKe2 aCYlU X-Gm-Gg: AR+sD124eSuTqSJOZV90hSyvaWN4Yaay87a4qlcQ7BlOhY32k7Waik/K+wRMnDGbAKG pUJaBEUJGtJjLFa8JS/Rq0Chk7PUs9iCiD6ONW5qjeEp1X31ieKV77aMqCW9kYddrKeUvEFY2cW QnCNv2maoqfdXdenfy5TQIsEhj/iXnYmgub9ksZFbXEq4xU5cpH4EyvUZC36U/s3QdStn/iXtFq 6fkj8mwn0rxDw0fR9Yp3VaMSqj5RDrI4Ypb9lpaJSFcNlAyxk7cWfC72Ks6qfGqMTMcucF7H3ON 4X4MsVfPbGAu1z1URE9PR6hDFGjBN503CeknHwEjwvQG06Gvhpg9RJ6j9YPCUViKOxmQdYeAbI5 1wVuaWrP2W0oodV54twjZm3vF5iUncvFrp4ml/LXeCu1eKDeBdfu3bENHcmZdCB9CNiQd8ra4Xj tN8/5etFmnHguFtJDpJVuqVMYpqe9VN3KIpzcg4hXmsUxZWoyBeJlCyf4AO2Uv2Z/XSc2AJ2PQo 2WsqQXyw4GtpwCWFpiC9g== X-Received: by 2002:a05:6a00:8006:b0:848:2d1d:836f with SMTP id d2e1a72fcca58-84fb55856e9mr1376059b3a.28.1786494710335; Tue, 11 Aug 2026 17:31:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 4/7] tcg/aarch64: Implement min/max with FEAT_CSSC Date: Tue, 11 Aug 2026 17:31:40 -0700 Message-ID: <20260812003143.225228-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260812003143.225228-1-richard.henderson@linaro.org> References: <20260812003143.225228-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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::432; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x432.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1786494775622158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/aarch64/tcg-target-con-set.h | 2 + tcg/aarch64/tcg-target-con-str.h | 2 + tcg/aarch64/tcg-target.c.inc | 103 +++++++++++++++++++++++++++++-- 3 files changed, 103 insertions(+), 4 deletions(-) diff --git a/tcg/aarch64/tcg-target-con-set.h b/tcg/aarch64/tcg-target-con-= set.h index d0622e65fb..dd84a9af58 100644 --- a/tcg/aarch64/tcg-target-con-set.h +++ b/tcg/aarch64/tcg-target-con-set.h @@ -24,6 +24,8 @@ C_O1_I2(r, r, rAL) C_O1_I2(r, r, rC) C_O1_I2(r, r, ri) C_O1_I2(r, r, rL) +C_O1_I2(r, r, rS) +C_O1_I2(r, r, rU) C_O1_I2(r, rZ, rA) C_O1_I2(r, rz, rMZ) C_O1_I2(r, rz, rz) diff --git a/tcg/aarch64/tcg-target-con-str.h b/tcg/aarch64/tcg-target-con-= str.h index 48e1722c68..fef75e8a76 100644 --- a/tcg/aarch64/tcg-target-con-str.h +++ b/tcg/aarch64/tcg-target-con-str.h @@ -21,4 +21,6 @@ CONST('L', TCG_CT_CONST_LIMM) CONST('M', TCG_CT_CONST_MONE) CONST('O', TCG_CT_CONST_ORRI) CONST('N', TCG_CT_CONST_ANDI) +CONST('S', TCG_CT_CONST_S8) +CONST('U', TCG_CT_CONST_U8) CONST('Z', TCG_CT_CONST_ZERO) diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc index f5c185bbf4..55b3be0b96 100644 --- a/tcg/aarch64/tcg-target.c.inc +++ b/tcg/aarch64/tcg-target.c.inc @@ -152,6 +152,8 @@ static bool patch_reloc(tcg_insn_unit *code_ptr, int ty= pe, #define TCG_CT_CONST_ORRI 0x1000 #define TCG_CT_CONST_ANDI 0x2000 #define TCG_CT_CONST_CMP 0x4000 +#define TCG_CT_CONST_S8 0x8000 +#define TCG_CT_CONST_U8 0x10000 =20 #define ALL_GENERAL_REGS 0xffffffffu #define ALL_VECTOR_REGS 0xffffffff00000000ull @@ -320,6 +322,12 @@ static bool tcg_target_const_match(int64_t val, int ct, if ((ct & TCG_CT_CONST_LIMM) && is_limm(val)) { return 1; } + if ((ct & TCG_CT_CONST_S8) && val =3D=3D (int8_t)val) { + return 1; + } + if ((ct & TCG_CT_CONST_U8) && val =3D=3D (uint8_t)val) { + return 1; + } if ((ct & TCG_CT_CONST_ZERO) && val =3D=3D 0) { return 1; } @@ -472,6 +480,12 @@ typedef enum { Iaddsub_imm_SUBI =3D 0x51000000, Iaddsub_imm_SUBSI =3D 0x71000000, =20 + /* Min/max immediate instructions. */ + Iminmax_imm_SMAXI =3D 0x11c00000, + Iminmax_imm_UMAXI =3D 0x11c40000, + Iminmax_imm_SMINI =3D 0x11c80000, + Iminmax_imm_UMINI =3D 0x11cc0000, + /* Bitfield instructions. */ Ibitfield_BFM =3D 0x33000000, Ibitfield_SBFM =3D 0x13000000, @@ -533,6 +547,10 @@ typedef enum { Irrr_UMULH =3D 0x9bc07c00, Irrr_UDIV =3D 0x1ac00800, Irrr_SDIV =3D 0x1ac00c00, + Irrr_SMAX =3D 0x1ac00600, + Irrr_UMAX =3D 0x1ac00640, + Irrr_SMIN =3D 0x1ac00680, + Irrr_UMIN =3D 0x1ac006c0, =20 /* Data-processing (3 source) instructions. */ Irrrr_MADD =3D 0x1b000000, @@ -737,6 +755,13 @@ static void tcg_out_insn_addsub_imm(TCGContext *s, AAr= ch64Insn insn, tcg_out32(s, insn | ext << 31 | aimm << 10 | rn << 5 | rd); } =20 +static void tcg_out_insn_minmax_imm(TCGContext *s, AArch64Insn insn, + TCGType ext, TCGReg rd, TCGReg rn, + uint8_t imm) +{ + tcg_out32(s, insn | ext << 31 | imm << 10 | rn << 5 | rd); +} + /* This function can be used for both 3.4.2 (Bitfield) and 3.4.4 (Logical immediate). Both insn groups have N, IMMR and IMMS fields that feed the DecodeBitMasks pseudo function. */ @@ -2592,20 +2617,90 @@ static void tcg_out_set_borrow(TCGContext *s) TCG_REG_XZR, TCG_REG_XZR, TCG_REG_XZR); } =20 +static TCGConstraintSetIndex cset_sminmax(TCGType type, unsigned flags) +{ + return cpuinfo & CPUINFO_CSSC ? C_O1_I2(r, r, rS) : C_NotImplemented; +} + +static void tgen_smax(TCGContext *s, TCGType type, + TCGReg a0, TCGReg a1, TCGReg a2) +{ + tcg_out_insn(s, rrr, SMAX, type, a0, a1, a2); +} + +static void tgen_smaxi(TCGContext *s, TCGType type, + TCGReg a0, TCGReg a1, tcg_target_long a2) +{ + tcg_out_insn(s, minmax_imm, SMAXI, type, a0, a1, a2); +} + static const TCGOutOpBinary outop_smax =3D { - .base.static_constraint =3D C_NotImplemented, + .base.static_constraint =3D C_Dynamic, + .base.dynamic_constraint =3D cset_sminmax, + .out_rrr =3D tgen_smax, + .out_rri =3D tgen_smaxi, }; =20 +static void tgen_smin(TCGContext *s, TCGType type, + TCGReg a0, TCGReg a1, TCGReg a2) +{ + tcg_out_insn(s, rrr, SMIN, type, a0, a1, a2); +} + +static void tgen_smini(TCGContext *s, TCGType type, + TCGReg a0, TCGReg a1, tcg_target_long a2) +{ + tcg_out_insn(s, minmax_imm, SMINI, type, a0, a1, a2); +} + static const TCGOutOpBinary outop_smin =3D { - .base.static_constraint =3D C_NotImplemented, + .base.static_constraint =3D C_Dynamic, + .base.dynamic_constraint =3D cset_sminmax, + .out_rrr =3D tgen_smin, + .out_rri =3D tgen_smini, }; =20 +static TCGConstraintSetIndex cset_uminmax(TCGType type, unsigned flags) +{ + return cpuinfo & CPUINFO_CSSC ? C_O1_I2(r, r, rU) : C_NotImplemented; +} + +static void tgen_umax(TCGContext *s, TCGType type, + TCGReg a0, TCGReg a1, TCGReg a2) +{ + tcg_out_insn(s, rrr, UMAX, type, a0, a1, a2); +} + +static void tgen_umaxi(TCGContext *s, TCGType type, + TCGReg a0, TCGReg a1, tcg_target_long a2) +{ + tcg_out_insn(s, minmax_imm, UMAXI, type, a0, a1, a2); +} + static const TCGOutOpBinary outop_umax =3D { - .base.static_constraint =3D C_NotImplemented, + .base.static_constraint =3D C_Dynamic, + .base.dynamic_constraint =3D cset_uminmax, + .out_rrr =3D tgen_umax, + .out_rri =3D tgen_umaxi, }; =20 +static void tgen_umin(TCGContext *s, TCGType type, + TCGReg a0, TCGReg a1, TCGReg a2) +{ + tcg_out_insn(s, rrr, UMIN, type, a0, a1, a2); +} + +static void tgen_umini(TCGContext *s, TCGType type, + TCGReg a0, TCGReg a1, tcg_target_long a2) +{ + tcg_out_insn(s, minmax_imm, UMINI, type, a0, a1, a2); +} + static const TCGOutOpBinary outop_umin =3D { - .base.static_constraint =3D C_NotImplemented, + .base.static_constraint =3D C_Dynamic, + .base.dynamic_constraint =3D cset_uminmax, + .out_rrr =3D tgen_umin, + .out_rri =3D tgen_umini, }; =20 static void tgen_xor(TCGContext *s, TCGType type, --=20 2.43.0 From nobody Wed Aug 26 07:29:41 2026 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=1786494797; cv=none; d=zohomail.com; s=zohoarc; b=b8FrInDkzG/DvrbY3fv+SVnBjYz9cxxKCSbr1YFI8FAdMfyDIiBtA6xfcne1IMVc0k3/hyCufu+lgmGt1umpbz5/QPxBm9VUbzHlalO4yeFhpjl457BEVhV9fxbmyD6E38Wn4aJWRFGSyA9GRHs6bJSC6wfDODXgyaQHhYngaxc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786494797; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=GCy4QywX3WT2024WmusdDJbMQjYEZ61hPhsxtxgDYdg=; b=aJ5woyv9l9TtH0zvoDX5QCnHVM6GWVwDEFbsEwUUp5KSipA+I1MKW2rXx8DWpxF+ysXnTOHTKHVFIN2HV1DxqadOVeqRcCmbX32gF2zsvdFzQpLrHsvLAt21f5q0ecsxDCWxo8NUVQoTCz4jBXNm3w++Cshud0EgOB1+w5n9IR8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786494797553360.6589742921234; Tue, 11 Aug 2026 17:33:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wtwsv-00044T-6N; Tue, 11 Aug 2026 20:31:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wtwst-00043n-59 for qemu-devel@nongnu.org; Tue, 11 Aug 2026 20:31:55 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wtwsr-0000TJ-C0 for qemu-devel@nongnu.org; Tue, 11 Aug 2026 20:31:54 -0400 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-84eb992a881so370338b3a.2 for ; Tue, 11 Aug 2026 17:31:52 -0700 (PDT) Received: from stoup.. (174-21-93-59.tukw.qwest.net. [174.21.93.59]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84fb1f2587fsm321466b3a.49.2026.08.11.17.31.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Aug 2026 17:31:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1786494712; x=1787099512; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=GCy4QywX3WT2024WmusdDJbMQjYEZ61hPhsxtxgDYdg=; b=kl+aqpzoWqnAwQc0VstJzUPa3L7/4cffy7Ario1vthadMny5tUNATMkuzMw6gmoeaz 2sqP1ibuw0QVQKnk73xbfz+uEZe8kE42A+IOjXwv5Otzwp8WnbTfVa1q3reiexbMYqfb i307jBt+HABUCAxKj5ijH+b0qsi6brNIcmL/OYGc1WttzkOnb1CoyDv9+DmdEzHf8URA KH1NEcJn3o1lc5gVSi2wJCj7HY9UBEf3sf9czYLAx0H7ebsC1Nt0TFHIJnzYPhFNWn7l g3X49Jb+GO9mAXJVHM2ggrlo6YSu+enXZElOGJCBcZGoCVhhOwLXMtBYYRRuz8Vza+jj LIZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786494712; x=1787099512; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=GCy4QywX3WT2024WmusdDJbMQjYEZ61hPhsxtxgDYdg=; b=NoBq0JTuppyZtpE099hGS/MeE/PSSmUKDGntewYqzmuQEKn9/QlFry+w6upy2U1031 lSKbWvZy+M/gULzLsaLA4Rhrz57aZOBKcKGHR+0rI/HOOyZC9bF9syXD7ohhc8/9FLvy vErEmfE5A8DZQxifnaCp9ybMtUbIPjiozXR2F38Sw9Xhz0vQIeuORnVxdknDS/xADQJB 4H3Ip0tKVqVrbqlJMa8CqcKV7D4o1EC6IDrRXIx4E7AHGsm6146cYp6yVW3CXPwbb8Jd 35z4wCxMtFqMNTmDJwQU/OhwouifOWf8DHMWUhjWV25Wa6PPOGn4R321l//rJEcpbud9 St2A== X-Gm-Message-State: AOJu0YwaK00OoxPPmIJvCVeSwvApaNVHxHTGZOMfPPQX7VvHoiQz9p0b 5HGeGBXQXof5DEDwZkEIQdHscPbjkw4T0gVocg1IFueH5Mn1jOjBqrt0Zg/orccy0QhPbkqclyN fy6lD X-Gm-Gg: AR+sD11d0AiiaO5SdTMlZ7SKASghugio9teoKA92m+Tu49Xa2DOGYI0DRhKG5QQ3f0I Y/RTZCuwgHkqUbEqz7iFjV2juXwU06pj0VpSdmxEmctSyKDK3vjN5ldzuZAPGHE1TPKtUGzaiPs sR3hU430TpCb7MipQEw1pijVr8CbIkyJXUrLp4ukaDMEzNzgsqjviNh290w95hAWjcOrwpYeITU 8mYsTztE2cOUgVgnyYtZEo5egPbfLK48kcnQmug2qC6wsrQJnpZVLdqbcGs9l47ZLdzssi4U31F 0VFR2FJuKLunZ2LwEsLOYE5zR+PqEpJ+XF4ozrPy9FMXMr8xIbFrVbkBtTohHLP6Kf0rhIaA5N7 /kLq+cpIw/i1x961W5W+6jWTpVm7X1kzvkTGm87ctJg8UQuzzoCmjBmEcr8sCvEfexYzyO63ZX/ 9GkT4GpGRxpYcA6+DIwA7Ep5mr8mXisF9w1KF/Ylsb+6husHB16JUstcMHEMBqNW2fsjahUfE+J pCckp0QhDifDywJrYWbWMGb7nY/An8= X-Received: by 2002:a05:6a00:440c:b0:84f:77cc:63cd with SMTP id d2e1a72fcca58-84fb540b2bbmr1275889b3a.17.1786494711802; Tue, 11 Aug 2026 17:31:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 5/7] target/riscv64: Implement min/max with Zbb Date: Tue, 11 Aug 2026 17:31:41 -0700 Message-ID: <20260812003143.225228-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260812003143.225228-1-richard.henderson@linaro.org> References: <20260812003143.225228-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=lists1p.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::431; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x431.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1786494800546158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- tcg/riscv64/tcg-target.c.inc | 44 ++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/tcg/riscv64/tcg-target.c.inc b/tcg/riscv64/tcg-target.c.inc index 723c21b3da..2ce9d47a63 100644 --- a/tcg/riscv64/tcg-target.c.inc +++ b/tcg/riscv64/tcg-target.c.inc @@ -233,6 +233,10 @@ typedef enum { OPC_CPOPW =3D 0x6020101b, OPC_CTZ =3D 0x60101013, OPC_CTZW =3D 0x6010101b, + OPC_MAX =3D 0x0a006033, + OPC_MAXU =3D 0x0a007033, + OPC_MIN =3D 0x0a004033, + OPC_MINU =3D 0x0a005033, OPC_ORN =3D 0x40006033, OPC_REV8 =3D 0x6b805013, OPC_ROL =3D 0x60001033, @@ -2404,20 +2408,52 @@ static void tcg_out_set_borrow(TCGContext *s) g_assert_not_reached(); } =20 +static void tgen_smax(TCGContext *s, TCGType type, + TCGReg a0, TCGReg a1, TCGReg a2) +{ + tcg_out_opc_reg(s, OPC_MAX, a0, a1, a2); +} + static const TCGOutOpBinary outop_smax =3D { - .base.static_constraint =3D C_NotImplemented, + .base.static_constraint =3D C_Dynamic, + .base.dynamic_constraint =3D cset_zbb_rrr, + .out_rrr =3D tgen_smax, }; =20 +static void tgen_smin(TCGContext *s, TCGType type, + TCGReg a0, TCGReg a1, TCGReg a2) +{ + tcg_out_opc_reg(s, OPC_MIN, a0, a1, a2); +} + static const TCGOutOpBinary outop_smin =3D { - .base.static_constraint =3D C_NotImplemented, + .base.static_constraint =3D C_Dynamic, + .base.dynamic_constraint =3D cset_zbb_rrr, + .out_rrr =3D tgen_smin, }; =20 +static void tgen_umax(TCGContext *s, TCGType type, + TCGReg a0, TCGReg a1, TCGReg a2) +{ + tcg_out_opc_reg(s, OPC_MAXU, a0, a1, a2); +} + static const TCGOutOpBinary outop_umax =3D { - .base.static_constraint =3D C_NotImplemented, + .base.static_constraint =3D C_Dynamic, + .base.dynamic_constraint =3D cset_zbb_rrr, + .out_rrr =3D tgen_umax, }; =20 +static void tgen_umin(TCGContext *s, TCGType type, + TCGReg a0, TCGReg a1, TCGReg a2) +{ + tcg_out_opc_reg(s, OPC_MINU, a0, a1, a2); +} + static const TCGOutOpBinary outop_umin =3D { - .base.static_constraint =3D C_NotImplemented, + .base.static_constraint =3D C_Dynamic, + .base.dynamic_constraint =3D cset_zbb_rrr, + .out_rrr =3D tgen_umin, }; =20 static void tgen_xor(TCGContext *s, TCGType type, --=20 2.43.0 From nobody Wed Aug 26 07:29:41 2026 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=1786494795; cv=none; d=zohomail.com; s=zohoarc; b=Pu7Im/m7yTa5EXrtw3JmcJv1yue7aNoipkM0//M/lQWrlQSP37LaL/f14b99Ai+HmflcXqwjoQSWLFjNfq7N94X7A353S4L5BKTCV3gb8ztksEs0IeZnEkbM2sPaOTe+UImiuT3OQNb/DeRLJ8TwBvdxx87thd+1eylon6DZpI4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786494795; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=gUosSqfWUSc02VzMDQtFyxdJDVyGwX3oumdRCXB3DrI=; b=NVZmSWv73Dqx8SAYlHXh6rREYTcdeMZQ2wPhXatV4Zgg11rYJ6HEpnt/kFmh7LPQOIn5xWmNk8zF2erDETTyBQSbxGJbbvcEpgFFBhNezYmdZp3y+tDb0STEeJ3e9PCjTnmAYXqvDLMoeM4n3WxxxssQgi61Bf8yEJwi5gXdLdQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786494795506678.1926821458544; Tue, 11 Aug 2026 17:33:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wtwsv-00044m-H5; Tue, 11 Aug 2026 20:31:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wtwsu-000445-2r for qemu-devel@nongnu.org; Tue, 11 Aug 2026 20:31:56 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wtwss-0000TW-K4 for qemu-devel@nongnu.org; Tue, 11 Aug 2026 20:31:55 -0400 Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-84f38f3b36eso346695b3a.1 for ; Tue, 11 Aug 2026 17:31:54 -0700 (PDT) Received: from stoup.. (174-21-93-59.tukw.qwest.net. [174.21.93.59]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84fb1f2587fsm321466b3a.49.2026.08.11.17.31.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Aug 2026 17:31:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1786494713; x=1787099513; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=gUosSqfWUSc02VzMDQtFyxdJDVyGwX3oumdRCXB3DrI=; b=Z/0pDeWi3cRpTUjePLtAbf09uH5qNUVnzYL8vDwjoDVo7FP45P1uBhd20pCBFmDicT U4Bn59tMsPOoMN6PLvjb8AjBTx4BilIKBMxIs/F1rkXvffIt+9138pp3zv3HdpqwXi5+ kKPFCvI7p1V4EP96dzY/0L16WQRyPvx0VllYN3O55BJ0IgiisL1kSHBGylhk9mYvUz32 ACvVAqOHwyeSFxLVSTkN8uL+Ur3l5g2Pp0dAFWz66/EO00nBH16tOFzDYyfAY6D6kYnc 5G8Yi5qwwXz1Qep24zf/QxShgqNrpPqaCgZSokBZrlZFOsMv6N94lVdVEplV3BTFj9ru wXiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786494713; x=1787099513; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=gUosSqfWUSc02VzMDQtFyxdJDVyGwX3oumdRCXB3DrI=; b=fa0PRTjRyE9yx5+7s5fteM9nmArTFxG/gGkTfqu9246j6AVuKYjAFvYxr43Vn1UAqc 2EQ+5orQkFVCEcU6NNnNDZkxnvfpMpp6t5WjaFprNOKPYs18EvchTE/vn+afTjqGLr7P TevgOResNHmaQqN60ms8izP5iq8rT/VmWIPKqESTXmqkFFMywBARd+1GYR0Q36Z7JT+z RMrYrQICDvztvLR1VFTSWIzKlupZ3KAI1Gg1ljfXTqjt4UJE4i+pAOmWmusHSqUHJGnH BdEBL6pjxPBeNapzNQCCpEEs8ufL5QgARloLw07mvGUq+lHX/qZFgB+NRyS8b4ubLWhs cqpQ== X-Gm-Message-State: AOJu0YwL1tD4BILbve7N0KEwU4BEeW5gLoM8hGET3Po/fAOxnLd9pu3R d3BpS7QFcbG9DCHDSdABLB5WE58dChz5+e1FByhgejG6PBO+SBWMgUMMrbTOvo6KyxMKqfCT/Nw 3yMgJ X-Gm-Gg: AR+sD108wOQWsIrOQLz9Z96HAcV2f3qvMG7FtSrEF1SS2RWOUQ4r8elHSmyPdvf27g1 h4HpzEr/UmJr9bLaTeIfhEIzdXnjgnGHoC/gcT6hnyC5376t4iWFxT73953uHYcsqa4nPsoTBKJ cbO3hJ8FONX3jfwe1dabWeoACUiQjRhvYx+ezMWKxzIGVGqDrY19LwK5Ib2VFzZglKNaRl9yRyo aUIjC+TAIEU6e5ZOhqwi772z5j9GIyl2omxRarnG9qZxM4KTzFnY9QYZ8L18YaiBdkJmoAgbXh/ qAN9plDmd2nnBIfg2zfz82GlVa97lNy6Z2yITBwfSptp//w5clihkGhOVj3jpbmPqV4HQZwpoIi jGUcu+taD8WRCQpO7MBiVfTgFlBjXdLIvlRfKZNvOsCT3fubZDBCXlHXWQRBOKX6rQyPg0CQ93X y5qwFN96k9+4NHZjwmyqHyF693zhf6WIzrUud4zwNCZiK1QR+eM8l+rPppqm2eZe+GhYYsTDebz GhkEQTzBulFlfeEzbQ7l0d/tyvUahs= X-Received: by 2002:a05:6a00:181b:b0:847:c014:864e with SMTP id d2e1a72fcca58-84fb5547f91mr1125397b3a.30.1786494713009; Tue, 11 Aug 2026 17:31:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 6/7] tcg/aarch64: Implement ctpop with FEAT_CSSC Date: Tue, 11 Aug 2026 17:31:42 -0700 Message-ID: <20260812003143.225228-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260812003143.225228-1-richard.henderson@linaro.org> References: <20260812003143.225228-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=lists1p.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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1786494796620158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/aarch64/tcg-target.c.inc | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc index 55b3be0b96..1f784e8d46 100644 --- a/tcg/aarch64/tcg-target.c.inc +++ b/tcg/aarch64/tcg-target.c.inc @@ -535,6 +535,7 @@ typedef enum { =20 /* Data-processing (1 source) instructions. */ Irr_sf_CLZ =3D 0x5ac01000, + Irr_sf_CNT =3D 0x5ac01c00, Irr_sf_RBIT =3D 0x5ac00000, Irr_sf_REV =3D 0x5ac00000, /* + size << 10 */ =20 @@ -2251,8 +2252,20 @@ static const TCGOutOpBinary outop_clz =3D { .out_rri =3D tgen_clzi, }; =20 +static TCGConstraintSetIndex cset_ctpop(TCGType type, unsigned flags) +{ + return cpuinfo & CPUINFO_CSSC ? C_O1_I1(r, r) : C_NotImplemented; +} + +static void tgen_ctpop(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1) +{ + tcg_out_insn(s, rr_sf, CNT, type, a0, a1); +} + static const TCGOutOpUnary outop_ctpop =3D { - .base.static_constraint =3D C_NotImplemented, + .base.static_constraint =3D C_Dynamic, + .base.dynamic_constraint =3D cset_ctpop, + .out_rr =3D tgen_ctpop, }; =20 static void tgen_ctz(TCGContext *s, TCGType type, --=20 2.43.0 From nobody Wed Aug 26 07:29:41 2026 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=1786494802; cv=none; d=zohomail.com; s=zohoarc; b=VG0f7fzotejwWbCm3kESJQ39ANiDUcjqeAiTEfRy5R4a5k6rZBvxYHur3yLFcaCX4csJgctNx28XCu+VA17aHEseEYnETcWvvXa6wK5G1upgj3UHjORE7yKIpQ2ERanOLvBQi3lW7k04JTQqTbsz56ox8m683XKieHqRqGnV/YU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1786494802; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=iI509NUBVNDZPEMf0tnn/XHTHMqXogdOb+FwwTjBNmo=; b=guHVyUTQngJxnK1M3mmd4dn7rSJ34ctOqiQe5JJ3QhRQ1763SgA71LDu36iAt8M+BDtDlOOCyRDD+WSwQ+0kAv8eDgeUpMTJfZa0+52iiwACwhFpR3XKYBBcmF3iBAMizIhvZDPUOG1QtykQpf81QCpDXSo0riJDRK4cebhUeMw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1786494802881273.4752460555982; Tue, 11 Aug 2026 17:33:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wtwsx-00045O-MB; Tue, 11 Aug 2026 20:31:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wtwsv-00044a-Be for qemu-devel@nongnu.org; Tue, 11 Aug 2026 20:31:57 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wtwst-0000Ti-Od for qemu-devel@nongnu.org; Tue, 11 Aug 2026 20:31:57 -0400 Received: by mail-pf1-x42d.google.com with SMTP id d2e1a72fcca58-8485bd28dd0so509748b3a.2 for ; Tue, 11 Aug 2026 17:31:55 -0700 (PDT) Received: from stoup.. (174-21-93-59.tukw.qwest.net. [174.21.93.59]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-84fb1f2587fsm321466b3a.49.2026.08.11.17.31.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 11 Aug 2026 17:31:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1786494714; x=1787099514; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=iI509NUBVNDZPEMf0tnn/XHTHMqXogdOb+FwwTjBNmo=; b=uWhJw82RkDHS/CAJUYksXPlVWuUQ9He58w7nZi+/3WCMPzfDCiOhcuc4fCUvpLc2uK 7tGemTwQNRhPzx5lqXDbe4JoPvFSbq0Rk5cY1OmjNHLE2yxI7jjLd7+VEVtlYLW5CQo/ UYHVuKdn6AUwZjwdroLeT2GEkSusSyAyV9BY0Dy2iIZftWP3xdl7Ic0BQ87ICbxurhbH 90nXD0o/GbjDiQAE3mnCSHeTUPMBh6JZ5vlqf/RwGnD+Lij2kgjQAytByQimK1pBKxal jLjzrkAx1VPUsK2kbV41dDGctYWUeyljOu68wXSU5jtVq5XUs1ajvrl7qU/t/+iDqL3i XNUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786494714; x=1787099514; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=iI509NUBVNDZPEMf0tnn/XHTHMqXogdOb+FwwTjBNmo=; b=csSOO6zn9iwzeZOZMV7HzsEu/EDnXPyoMmJgg7+QC9Aw1C2qABwP1W9JKlxVZ6sB3C /1McluFVC8vEfA4Gcz4HmP2V/EA93mYeaYoiM3q+0KE6NSR4c5zJWhpmfORbuh+8tNBP mQ37FZoP+1Ag74vaYzgxr5lkZi6kFk/yzIbGBUtAU/nklmPgI00aw+c8rzhJHQ/KEAuA O9Tu6R/ggvYV2IXVTTKvmXG+T0bIfEFfEZq/aFLQGL2wnXFG3FPcGZHJ747NdjxlYMCg JQFnUs7FJzK6mqQ/rgdPvMsLu3CblkxZL2BQkbVDC2YjYJCXBvX0R+/xQIZaGD4E5L4J RgIQ== X-Gm-Message-State: AOJu0Yz1jPjU9X3Hxs9XxctsLBlI09fSo8/8XZnkFREzHPypPts9Op/4 WLm0/N5+55reOxPiyBUG/TMBfbsMPANWDVAPonq/EQ5gzOKBz/wi1Veid4MddKREosvOXMrCPk7 JTBiV X-Gm-Gg: AR+sD126ZO95npeIKCgVBB45YHSdzgymrNOyDOIwP+097U+t824wDja3nv6dVB8IZ1T Bo58BGzVK5qvt196523CFDT2f/asKnwJoSBRTPYrybymch4VAEXZuLR8QLZCsgp2HJO1zTYWQU0 3PofEyDxLE2Xyq1CAetFkj/I+Ch+Bp6SK0nFxUf7E2+d5e+pHo80hPcyEVBAxgHyHh3+lCEfJ0m GIQdMG6AJsyhb1PxGbXqLSZWeQIcAJVzvKzdnkLCZDR7nwzXwVutDwJh1Vc4rupd8+QcJaQhhyG OAdC7ToFgqKOR40HFTdZj83IJo6XJzR/wzPL5aKzTITEe7RhegClt9n7iCMb+NSZMQ6NPyfW3wx gxDR5qoVp1KQkjjKi/umv+oP8R3c3jivE43NKDShlaI9ZRu1uV9hHM5sE8JKiZybhGmAW+gty1C 2GJh/oVcjfEXcc7QQSFiOcbJ40+BFAPcMvt+s2cQoD0B8OYsBXPjJZqGH90WVuKj3yecxyvhY09 GvfVgOtmY4ZqB/WvZWP X-Received: by 2002:a05:6a00:8088:b0:848:76c4:fba9 with SMTP id d2e1a72fcca58-84fb53c14femr1353473b3a.7.1786494713987; Tue, 11 Aug 2026 17:31:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 7/7] tcg/aarch64: Use CTZ from FEAT_CSSC Date: Tue, 11 Aug 2026 17:31:43 -0700 Message-ID: <20260812003143.225228-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260812003143.225228-1-richard.henderson@linaro.org> References: <20260812003143.225228-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=lists1p.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.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1786494804686158500 Content-Type: text/plain; charset="utf-8" We already have an expansion of CTZ using RBIT+CLZ, but use the new insn with FEAT_CSSC is present. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- tcg/aarch64/tcg-target.c.inc | 43 +++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc index 1f784e8d46..ce5c039557 100644 --- a/tcg/aarch64/tcg-target.c.inc +++ b/tcg/aarch64/tcg-target.c.inc @@ -535,6 +535,7 @@ typedef enum { =20 /* Data-processing (1 source) instructions. */ Irr_sf_CLZ =3D 0x5ac01000, + Irr_sf_CTZ =3D 0x5ac01800, Irr_sf_CNT =3D 0x5ac01c00, Irr_sf_RBIT =3D 0x5ac00000, Irr_sf_REV =3D 0x5ac00000, /* + size << 10 */ @@ -2213,24 +2214,30 @@ static const TCGOutOpBinary outop_andc =3D { .out_rrr =3D tgen_andc, }; =20 -static void tgen_clz(TCGContext *s, TCGType type, - TCGReg a0, TCGReg a1, TCGReg a2) +static void tgen_clzctz(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1, + TCGReg a2, AArch64Insn insn) { tcg_out_cmp(s, type, TCG_COND_NE, a1, 0, true); - tcg_out_insn(s, rr_sf, CLZ, type, TCG_REG_TMP0, a1); + tcg_out_insn_rr_sf(s, insn, type, TCG_REG_TMP0, a1); tcg_out_insn(s, csel, CSEL, type, a0, TCG_REG_TMP0, a2, TCG_COND_NE); } =20 -static void tgen_clzi(TCGContext *s, TCGType type, - TCGReg a0, TCGReg a1, tcg_target_long a2) +static void tgen_clz(TCGContext *s, TCGType type, + TCGReg a0, TCGReg a1, TCGReg a2) +{ + tgen_clzctz(s, type, a0, a1, a2, Irr_sf_CLZ); +} + +static void tgen_clzctzi(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1, + tcg_target_long a2, AArch64Insn insn) { if (a2 =3D=3D (type =3D=3D TCG_TYPE_I32 ? 32 : 64)) { - tcg_out_insn(s, rr_sf, CLZ, type, a0, a1); + tcg_out_insn_rr_sf(s, insn, type, a0, a1); return; } =20 tcg_out_cmp(s, type, TCG_COND_NE, a1, 0, true); - tcg_out_insn(s, rr_sf, CLZ, type, a0, a1); + tcg_out_insn_rr_sf(s, insn, type, a0, a1); =20 switch (a2) { case -1: @@ -2246,6 +2253,12 @@ static void tgen_clzi(TCGContext *s, TCGType type, } } =20 +static void tgen_clzi(TCGContext *s, TCGType type, + TCGReg a0, TCGReg a1, tcg_target_long a2) +{ + tgen_clzctzi(s, type, a0, a1, a2, Irr_sf_CLZ); +} + static const TCGOutOpBinary outop_clz =3D { .base.static_constraint =3D C_O1_I2(r, r, rAL), .out_rrr =3D tgen_clz, @@ -2271,15 +2284,23 @@ static const TCGOutOpUnary outop_ctpop =3D { static void tgen_ctz(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1, TCGReg a2) { - tcg_out_insn(s, rr_sf, RBIT, type, TCG_REG_TMP0, a1); - tgen_clz(s, type, a0, TCG_REG_TMP0, a2); + if (cpuinfo & CPUINFO_CSSC) { + tgen_clzctz(s, type, a0, a1, a2, Irr_sf_CTZ); + } else { + tcg_out_insn(s, rr_sf, RBIT, type, TCG_REG_TMP0, a1); + tgen_clzctz(s, type, a0, TCG_REG_TMP0, a2, Irr_sf_CLZ); + } } =20 static void tgen_ctzi(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1, tcg_target_long a2) { - tcg_out_insn(s, rr_sf, RBIT, type, TCG_REG_TMP0, a1); - tgen_clzi(s, type, a0, TCG_REG_TMP0, a2); + if (cpuinfo & CPUINFO_CSSC) { + tgen_clzctzi(s, type, a0, a1, a2, Irr_sf_CTZ); + } else { + tcg_out_insn(s, rr_sf, RBIT, type, TCG_REG_TMP0, a1); + tgen_clzctzi(s, type, a0, a1, a2, Irr_sf_CLZ); + } } =20 static const TCGOutOpBinary outop_ctz =3D { --=20 2.43.0