tcg: Add type and flags arguments to tcg_op_supported

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2024-12-24 16:51:36 -08:00
parent 2ccf871ea5
commit 771a5925e8
2 changed files with 13 additions and 5 deletions

View file

@ -834,7 +834,12 @@ typedef struct TCGTargetOpDef {
const char *args_ct_str[TCG_MAX_OP_ARGS]; const char *args_ct_str[TCG_MAX_OP_ARGS];
} TCGTargetOpDef; } TCGTargetOpDef;
bool tcg_op_supported(TCGOpcode op); /*
* tcg_op_supported:
* Query if @op, for @type and @flags, is supported by the host
* on which we are currently executing.
*/
bool tcg_op_supported(TCGOpcode op, TCGType type, unsigned flags);
void tcg_gen_call0(void *func, TCGHelperInfo *, TCGTemp *ret); void tcg_gen_call0(void *func, TCGHelperInfo *, TCGTemp *ret);
void tcg_gen_call1(void *func, TCGHelperInfo *, TCGTemp *ret, TCGTemp *); void tcg_gen_call1(void *func, TCGHelperInfo *, TCGTemp *ret, TCGTemp *);

View file

@ -1931,9 +1931,11 @@ TCGTemp *tcgv_i32_temp(TCGv_i32 v)
} }
#endif /* CONFIG_DEBUG_TCG */ #endif /* CONFIG_DEBUG_TCG */
/* Return true if OP may appear in the opcode stream. /*
Test the runtime variable that controls each opcode. */ * Return true if OP may appear in the opcode stream with TYPE.
bool tcg_op_supported(TCGOpcode op) * Test the runtime variable that controls each opcode.
*/
bool tcg_op_supported(TCGOpcode op, TCGType type, unsigned flags)
{ {
const bool have_vec const bool have_vec
= TCG_TARGET_HAS_v64 | TCG_TARGET_HAS_v128 | TCG_TARGET_HAS_v256; = TCG_TARGET_HAS_v64 | TCG_TARGET_HAS_v128 | TCG_TARGET_HAS_v256;
@ -6243,7 +6245,8 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb, uint64_t pc_start)
/* fall through */ /* fall through */
default: default:
/* Sanity check that we've not introduced any unhandled opcodes. */ /* Sanity check that we've not introduced any unhandled opcodes. */
tcg_debug_assert(tcg_op_supported(opc)); tcg_debug_assert(tcg_op_supported(opc, TCGOP_TYPE(op),
TCGOP_FLAGS(op)));
/* Note: in order to speed up the code, it would be much /* Note: in order to speed up the code, it would be much
faster to have specialized register allocator functions for faster to have specialized register allocator functions for
some common argument patterns */ some common argument patterns */