* [PATCH 0/2] tcg/sparc64: Implement CTPOP
@ 2025-04-25 20:00 Richard Henderson
2025-04-25 20:00 ` [PATCH 1/2] tcg/sparc64: Unexport use_vis3_instructions Richard Henderson
2025-04-25 20:00 ` [PATCH 2/2] tcg/sparc64: Implement CTPOP Richard Henderson
0 siblings, 2 replies; 5+ messages in thread
From: Richard Henderson @ 2025-04-25 20:00 UTC (permalink / raw)
To: qemu-devel
Based-on: 20250415192515.232910-1-richard.henderson@linaro.org
("[PATCH v4 000/163] tcg: Convert to TCGOutOp structures")
The POPC instruction is present in all but the earliest sparc64 cpus.
Not sure why this got missed once upon a time...
r~
Richard Henderson (2):
tcg/sparc64: Unexport use_vis3_instructions
tcg/sparc64: Implement CTPOP
tcg/sparc64/tcg-target-has.h | 6 ------
tcg/sparc64/tcg-target.c.inc | 33 ++++++++++++++++++++++++++-------
2 files changed, 26 insertions(+), 13 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH 1/2] tcg/sparc64: Unexport use_vis3_instructions 2025-04-25 20:00 [PATCH 0/2] tcg/sparc64: Implement CTPOP Richard Henderson @ 2025-04-25 20:00 ` Richard Henderson 2025-04-25 22:20 ` Philippe Mathieu-Daudé 2025-04-25 20:00 ` [PATCH 2/2] tcg/sparc64: Implement CTPOP Richard Henderson 1 sibling, 1 reply; 5+ messages in thread From: Richard Henderson @ 2025-04-25 20:00 UTC (permalink / raw) To: qemu-devel This variable is no longer used outside tcg-target.c.inc. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- tcg/sparc64/tcg-target-has.h | 6 ------ tcg/sparc64/tcg-target.c.inc | 6 ++++-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/tcg/sparc64/tcg-target-has.h b/tcg/sparc64/tcg-target-has.h index af6a949da3..b29fd177f6 100644 --- a/tcg/sparc64/tcg-target-has.h +++ b/tcg/sparc64/tcg-target-has.h @@ -7,12 +7,6 @@ #ifndef TCG_TARGET_HAS_H #define TCG_TARGET_HAS_H -#if defined(__VIS__) && __VIS__ >= 0x300 -#define use_vis3_instructions 1 -#else -extern bool use_vis3_instructions; -#endif - /* optional instructions */ #define TCG_TARGET_HAS_extr_i64_i32 0 #define TCG_TARGET_HAS_qemu_ldst_i128 0 diff --git a/tcg/sparc64/tcg-target.c.inc b/tcg/sparc64/tcg-target.c.inc index 095b310f2a..d47c1d43b2 100644 --- a/tcg/sparc64/tcg-target.c.inc +++ b/tcg/sparc64/tcg-target.c.inc @@ -274,8 +274,10 @@ static TCGReg tcg_target_call_oarg_reg(TCGCallReturnKind kind, int slot) #define STW_LE (STWA | INSN_ASI(ASI_PRIMARY_LITTLE)) #define STX_LE (STXA | INSN_ASI(ASI_PRIMARY_LITTLE)) -#ifndef use_vis3_instructions -bool use_vis3_instructions; +#if defined(__VIS__) && __VIS__ >= 0x300 +#define use_vis3_instructions 1 +#else +static bool use_vis3_instructions; #endif static bool check_fit_i64(int64_t val, unsigned int bits) -- 2.43.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] tcg/sparc64: Unexport use_vis3_instructions 2025-04-25 20:00 ` [PATCH 1/2] tcg/sparc64: Unexport use_vis3_instructions Richard Henderson @ 2025-04-25 22:20 ` Philippe Mathieu-Daudé 0 siblings, 0 replies; 5+ messages in thread From: Philippe Mathieu-Daudé @ 2025-04-25 22:20 UTC (permalink / raw) To: Richard Henderson, qemu-devel On 25/4/25 22:00, Richard Henderson wrote: > This variable is no longer used outside tcg-target.c.inc. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > tcg/sparc64/tcg-target-has.h | 6 ------ > tcg/sparc64/tcg-target.c.inc | 6 ++++-- > 2 files changed, 4 insertions(+), 8 deletions(-) Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/2] tcg/sparc64: Implement CTPOP 2025-04-25 20:00 [PATCH 0/2] tcg/sparc64: Implement CTPOP Richard Henderson 2025-04-25 20:00 ` [PATCH 1/2] tcg/sparc64: Unexport use_vis3_instructions Richard Henderson @ 2025-04-25 20:00 ` Richard Henderson 2025-04-25 22:24 ` Philippe Mathieu-Daudé 1 sibling, 1 reply; 5+ messages in thread From: Richard Henderson @ 2025-04-25 20:00 UTC (permalink / raw) To: qemu-devel Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- tcg/sparc64/tcg-target.c.inc | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/tcg/sparc64/tcg-target.c.inc b/tcg/sparc64/tcg-target.c.inc index d47c1d43b2..e5177d2f7f 100644 --- a/tcg/sparc64/tcg-target.c.inc +++ b/tcg/sparc64/tcg-target.c.inc @@ -210,6 +210,7 @@ static TCGReg tcg_target_call_oarg_reg(TCGCallReturnKind kind, int slot) #define ARITH_UDIVX (INSN_OP(2) | INSN_OP3(0x0d)) #define ARITH_SDIVX (INSN_OP(2) | INSN_OP3(0x2d)) #define ARITH_MOVCC (INSN_OP(2) | INSN_OP3(0x2c)) +#define ARITH_POPC (INSN_OP(2) | INSN_OP3(0x2e)) #define ARITH_MOVR (INSN_OP(2) | INSN_OP3(0x2f)) #define ARITH_ADDXC (INSN_OP(2) | INSN_OP3(0x36) | INSN_OPF(0x11)) @@ -274,6 +275,7 @@ static TCGReg tcg_target_call_oarg_reg(TCGCallReturnKind kind, int slot) #define STW_LE (STWA | INSN_ASI(ASI_PRIMARY_LITTLE)) #define STX_LE (STXA | INSN_ASI(ASI_PRIMARY_LITTLE)) +static bool use_popc_instructions; #if defined(__VIS__) && __VIS__ >= 0x300 #define use_vis3_instructions 1 #else @@ -1511,8 +1513,23 @@ static const TCGOutOpBinary outop_clz = { .base.static_constraint = C_NotImplemented, }; +static void tgen_ctpop(TCGContext *s, TCGType type, TCGReg a0, TCGReg a1) +{ + tcg_out_arith(s, a0, TCG_REG_G0, a1, ARITH_POPC); +} + +static TCGConstraintSetIndex cset_ctpop(TCGType type, unsigned flags) +{ + if (use_popc_instructions && type == TCG_TYPE_I64) { + return C_O1_I1(r, r); + } + return C_NotImplemented; +} + static const TCGOutOpUnary outop_ctpop = { - .base.static_constraint = C_NotImplemented, + .base.static_constraint = C_Dynamic, + .base.dynamic_constraint = cset_ctpop, + .out_rr = tgen_ctpop, }; static const TCGOutOpBinary outop_ctz = { @@ -2084,15 +2101,15 @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags) static void tcg_target_init(TCGContext *s) { + unsigned long hwcap = qemu_getauxval(AT_HWCAP); + /* * Only probe for the platform and capabilities if we haven't already * determined maximum values at compile time. */ + use_popc_instructions = (hwcap & HWCAP_SPARC_POPC) != 0; #ifndef use_vis3_instructions - { - unsigned long hwcap = qemu_getauxval(AT_HWCAP); - use_vis3_instructions = (hwcap & HWCAP_SPARC_VIS3) != 0; - } + use_vis3_instructions = (hwcap & HWCAP_SPARC_VIS3) != 0; #endif tcg_target_available_regs[TCG_TYPE_I32] = ALL_GENERAL_REGS; -- 2.43.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] tcg/sparc64: Implement CTPOP 2025-04-25 20:00 ` [PATCH 2/2] tcg/sparc64: Implement CTPOP Richard Henderson @ 2025-04-25 22:24 ` Philippe Mathieu-Daudé 0 siblings, 0 replies; 5+ messages in thread From: Philippe Mathieu-Daudé @ 2025-04-25 22:24 UTC (permalink / raw) To: Richard Henderson, qemu-devel On 25/4/25 22:00, Richard Henderson wrote: > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > tcg/sparc64/tcg-target.c.inc | 27 ++++++++++++++++++++++----- > 1 file changed, 22 insertions(+), 5 deletions(-) Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-04-25 22:35 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-04-25 20:00 [PATCH 0/2] tcg/sparc64: Implement CTPOP Richard Henderson 2025-04-25 20:00 ` [PATCH 1/2] tcg/sparc64: Unexport use_vis3_instructions Richard Henderson 2025-04-25 22:20 ` Philippe Mathieu-Daudé 2025-04-25 20:00 ` [PATCH 2/2] tcg/sparc64: Implement CTPOP Richard Henderson 2025-04-25 22:24 ` Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).