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:
parent
2528f771f8
commit
338b61e9e9
@ -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;
|
||||||
|
16
tcg/tcg.c
16
tcg/tcg.c
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user