tcg: Replace REG_P with arg_loc_reg_p

An inline function is safer than a macro, and REG_P
was rather too generic.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2023-04-08 17:28:07 -07:00
parent 2528f771f8
commit 338b61e9e9
2 changed files with 13 additions and 7 deletions

View File

@ -58,10 +58,6 @@ typedef struct TCGCallArgumentLoc {
unsigned tmp_subindex : 2; unsigned tmp_subindex : 2;
} TCGCallArgumentLoc; } TCGCallArgumentLoc;
/* Avoid "unsigned < 0 is always false" Werror, when iarg_regs is empty. */
#define REG_P(L) \
((int)(L)->arg_slot < (int)ARRAY_SIZE(tcg_target_call_iarg_regs))
typedef struct TCGHelperInfo { typedef struct TCGHelperInfo {
void *func; void *func;
const char *name; const char *name;

View File

@ -806,6 +806,16 @@ static void init_ffi_layouts(void)
} }
#endif /* CONFIG_TCG_INTERPRETER */ #endif /* CONFIG_TCG_INTERPRETER */
static inline bool arg_slot_reg_p(unsigned arg_slot)
{
/*
* Split the sizeof away from the comparison to avoid Werror from
* "unsigned < 0 is always false", when iarg_regs is empty.
*/
unsigned nreg = ARRAY_SIZE(tcg_target_call_iarg_regs);
return arg_slot < nreg;
}
typedef struct TCGCumulativeArgs { typedef struct TCGCumulativeArgs {
int arg_idx; /* tcg_gen_callN args[] */ int arg_idx; /* tcg_gen_callN args[] */
int info_in_idx; /* TCGHelperInfo in[] */ int info_in_idx; /* TCGHelperInfo in[] */
@ -3231,7 +3241,7 @@ liveness_pass_1(TCGContext *s)
case TCG_CALL_ARG_NORMAL: case TCG_CALL_ARG_NORMAL:
case TCG_CALL_ARG_EXTEND_U: case TCG_CALL_ARG_EXTEND_U:
case TCG_CALL_ARG_EXTEND_S: case TCG_CALL_ARG_EXTEND_S:
if (REG_P(loc)) { if (arg_slot_reg_p(loc->arg_slot)) {
*la_temp_pref(ts) = 0; *la_temp_pref(ts) = 0;
break; break;
} }
@ -3258,7 +3268,7 @@ liveness_pass_1(TCGContext *s)
case TCG_CALL_ARG_NORMAL: case TCG_CALL_ARG_NORMAL:
case TCG_CALL_ARG_EXTEND_U: case TCG_CALL_ARG_EXTEND_U:
case TCG_CALL_ARG_EXTEND_S: case TCG_CALL_ARG_EXTEND_S:
if (REG_P(loc)) { if (arg_slot_reg_p(loc->arg_slot)) {
tcg_regset_set_reg(*la_temp_pref(ts), tcg_regset_set_reg(*la_temp_pref(ts),
tcg_target_call_iarg_regs[loc->arg_slot]); tcg_target_call_iarg_regs[loc->arg_slot]);
} }
@ -4833,7 +4843,7 @@ static void load_arg_stk(TCGContext *s, int stk_slot, TCGTemp *ts,
static void load_arg_normal(TCGContext *s, const TCGCallArgumentLoc *l, static void load_arg_normal(TCGContext *s, const TCGCallArgumentLoc *l,
TCGTemp *ts, TCGRegSet *allocated_regs) TCGTemp *ts, TCGRegSet *allocated_regs)
{ {
if (REG_P(l)) { if (arg_slot_reg_p(l->arg_slot)) {
TCGReg reg = tcg_target_call_iarg_regs[l->arg_slot]; TCGReg reg = tcg_target_call_iarg_regs[l->arg_slot];
load_arg_reg(s, reg, ts, *allocated_regs); load_arg_reg(s, reg, ts, *allocated_regs);
tcg_regset_set_reg(*allocated_regs, reg); tcg_regset_set_reg(*allocated_regs, reg);