Commit 20eaf9a54a for qemu.org
commit 20eaf9a54abde6c55a7dacb5888b1deb8d68eb75
Author: Richard Henderson <richard.henderson@linaro.org>
Date: Tue Aug 11 16:50:03 2026 -0700
target/riscv64: Implement min/max with Zbb
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
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 = 0x6020101b,
OPC_CTZ = 0x60101013,
OPC_CTZW = 0x6010101b,
+ OPC_MAX = 0x0a006033,
+ OPC_MAXU = 0x0a007033,
+ OPC_MIN = 0x0a004033,
+ OPC_MINU = 0x0a005033,
OPC_ORN = 0x40006033,
OPC_REV8 = 0x6b805013,
OPC_ROL = 0x60001033,
@@ -2404,20 +2408,52 @@ static void tcg_out_set_borrow(TCGContext *s)
g_assert_not_reached();
}
+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 = {
- .base.static_constraint = C_NotImplemented,
+ .base.static_constraint = C_Dynamic,
+ .base.dynamic_constraint = cset_zbb_rrr,
+ .out_rrr = tgen_smax,
};
+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 = {
- .base.static_constraint = C_NotImplemented,
+ .base.static_constraint = C_Dynamic,
+ .base.dynamic_constraint = cset_zbb_rrr,
+ .out_rrr = tgen_smin,
};
+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 = {
- .base.static_constraint = C_NotImplemented,
+ .base.static_constraint = C_Dynamic,
+ .base.dynamic_constraint = cset_zbb_rrr,
+ .out_rrr = tgen_umax,
};
+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 = {
- .base.static_constraint = C_NotImplemented,
+ .base.static_constraint = C_Dynamic,
+ .base.dynamic_constraint = cset_zbb_rrr,
+ .out_rrr = tgen_umin,
};
static void tgen_xor(TCGContext *s, TCGType type,