tcg: Add tcg_op_deposit_valid
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
80a3a9423a
commit
0e4c6424d6
@ -840,6 +840,12 @@ typedef struct TCGTargetOpDef {
|
||||
* on which we are currently executing.
|
||||
*/
|
||||
bool tcg_op_supported(TCGOpcode op, TCGType type, unsigned flags);
|
||||
/*
|
||||
* tcg_op_deposit_valid:
|
||||
* Query if a deposit into (ofs, len) is supported for @type by
|
||||
* the host on which we are currently executing.
|
||||
*/
|
||||
bool tcg_op_deposit_valid(TCGType type, unsigned ofs, unsigned len);
|
||||
|
||||
void tcg_gen_call0(void *func, TCGHelperInfo *, TCGTemp *ret);
|
||||
void tcg_gen_call1(void *func, TCGHelperInfo *, TCGTemp *ret, TCGTemp *);
|
||||
|
21
tcg/tcg.c
21
tcg/tcg.c
@ -2238,6 +2238,27 @@ bool tcg_op_supported(TCGOpcode op, TCGType type, unsigned flags)
|
||||
}
|
||||
}
|
||||
|
||||
bool tcg_op_deposit_valid(TCGType type, unsigned ofs, unsigned len)
|
||||
{
|
||||
tcg_debug_assert(len > 0);
|
||||
switch (type) {
|
||||
case TCG_TYPE_I32:
|
||||
tcg_debug_assert(ofs < 32);
|
||||
tcg_debug_assert(len <= 32);
|
||||
tcg_debug_assert(ofs + len <= 32);
|
||||
return TCG_TARGET_HAS_deposit_i32 &&
|
||||
TCG_TARGET_deposit_i32_valid(ofs, len);
|
||||
case TCG_TYPE_I64:
|
||||
tcg_debug_assert(ofs < 64);
|
||||
tcg_debug_assert(len <= 64);
|
||||
tcg_debug_assert(ofs + len <= 64);
|
||||
return TCG_TARGET_HAS_deposit_i64 &&
|
||||
TCG_TARGET_deposit_i64_valid(ofs, len);
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
}
|
||||
|
||||
static TCGOp *tcg_op_alloc(TCGOpcode opc, unsigned nargs);
|
||||
|
||||
static void tcg_gen_callN(void *func, TCGHelperInfo *info,
|
||||
|
Loading…
x
Reference in New Issue
Block a user