Re: [PATCH v6 07/26] tcg: Add tcg_call_func
On 5/16/21 3:21 AM, Richard Henderson wrote: > On 5/3/21 4:50 PM, Philippe Mathieu-Daudé wrote: >> Hi Richard, >> >> On 5/3/21 1:57 AM, Richard Henderson wrote: >>> Signed-off-by: Richard Henderson >>> --- >>> tcg/internal.h | 5 + >>> tcg/tcg.c | 5 ++--- >>> 2 files changed, 7 insertions(+), 3 deletions(-) >>> >>> diff --git a/tcg/internal.h b/tcg/internal.h >>> index c2d5e9c42f..cd128e2a83 100644 >>> --- a/tcg/internal.h >>> +++ b/tcg/internal.h >>> @@ -32,6 +32,11 @@ typedef struct TCGHelperInfo { >>> unsigned typemask; >>> } TCGHelperInfo; >>> +static inline void *tcg_call_func(TCGOp *op) >>> +{ >>> + return (void *)(uintptr_t)op->args[TCGOP_CALLO(op) + >>> TCGOP_CALLI(op)]; >> Why not return tcg_insn_unit* type? > > That's a fairly tcg code generation type -- this is used for more than > that. I think it's more natural to use void* when we don't know what > the real type. OK. Reviewed-by: Philippe Mathieu-Daudé
Re: [PATCH v6 07/26] tcg: Add tcg_call_func
On 5/3/21 4:50 PM, Philippe Mathieu-Daudé wrote: Hi Richard, On 5/3/21 1:57 AM, Richard Henderson wrote: Signed-off-by: Richard Henderson --- tcg/internal.h | 5 + tcg/tcg.c | 5 ++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tcg/internal.h b/tcg/internal.h index c2d5e9c42f..cd128e2a83 100644 --- a/tcg/internal.h +++ b/tcg/internal.h @@ -32,6 +32,11 @@ typedef struct TCGHelperInfo { unsigned typemask; } TCGHelperInfo; +static inline void *tcg_call_func(TCGOp *op) +{ +return (void *)(uintptr_t)op->args[TCGOP_CALLO(op) + TCGOP_CALLI(op)]; Why not return tcg_insn_unit* type? That's a fairly tcg code generation type -- this is used for more than that. I think it's more natural to use void* when we don't know what the real type. r~
Re: [PATCH v6 07/26] tcg: Add tcg_call_func
Hi Richard, On 5/3/21 1:57 AM, Richard Henderson wrote: > Signed-off-by: Richard Henderson > --- > tcg/internal.h | 5 + > tcg/tcg.c | 5 ++--- > 2 files changed, 7 insertions(+), 3 deletions(-) > > diff --git a/tcg/internal.h b/tcg/internal.h > index c2d5e9c42f..cd128e2a83 100644 > --- a/tcg/internal.h > +++ b/tcg/internal.h > @@ -32,6 +32,11 @@ typedef struct TCGHelperInfo { > unsigned typemask; > } TCGHelperInfo; > > +static inline void *tcg_call_func(TCGOp *op) > +{ > +return (void *)(uintptr_t)op->args[TCGOP_CALLO(op) + TCGOP_CALLI(op)]; Why not return tcg_insn_unit* type? > +} > + > static inline const TCGHelperInfo *tcg_call_info(TCGOp *op) > { > return (void *)(uintptr_t)op->args[TCGOP_CALLO(op) + TCGOP_CALLI(op) + > 1]; > diff --git a/tcg/tcg.c b/tcg/tcg.c > index d42fa6c956..1e5e165bff 100644 > --- a/tcg/tcg.c > +++ b/tcg/tcg.c > @@ -2310,7 +2310,7 @@ static void tcg_dump_ops(TCGContext *s, bool have_prefs) > } > } else if (c == INDEX_op_call) { > const TCGHelperInfo *info = tcg_call_info(op); > -void *func; > +void *func = tcg_call_func(op); > > /* variable number of arguments */ > nb_oargs = TCGOP_CALLO(op); > @@ -2324,7 +2324,6 @@ static void tcg_dump_ops(TCGContext *s, bool have_prefs) > * Note that plugins have a template function for the info, > * but the actual function pointer comes from the plugin. > */ > -func = (void *)(uintptr_t)op->args[nb_oargs + nb_iargs]; > if (func == info->func) { > col += qemu_log("%s", info->name); > } else { > @@ -4346,7 +4345,7 @@ static void tcg_reg_alloc_call(TCGContext *s, TCGOp *op) > int allocate_args; > TCGRegSet allocated_regs; > > -func_addr = (tcg_insn_unit *)(intptr_t)op->args[nb_oargs + nb_iargs]; > +func_addr = tcg_call_func(op); > flags = tcg_call_flags(op); > > nb_regs = ARRAY_SIZE(tcg_target_call_iarg_regs); >
[PATCH v6 07/26] tcg: Add tcg_call_func
Signed-off-by: Richard Henderson --- tcg/internal.h | 5 + tcg/tcg.c | 5 ++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tcg/internal.h b/tcg/internal.h index c2d5e9c42f..cd128e2a83 100644 --- a/tcg/internal.h +++ b/tcg/internal.h @@ -32,6 +32,11 @@ typedef struct TCGHelperInfo { unsigned typemask; } TCGHelperInfo; +static inline void *tcg_call_func(TCGOp *op) +{ +return (void *)(uintptr_t)op->args[TCGOP_CALLO(op) + TCGOP_CALLI(op)]; +} + static inline const TCGHelperInfo *tcg_call_info(TCGOp *op) { return (void *)(uintptr_t)op->args[TCGOP_CALLO(op) + TCGOP_CALLI(op) + 1]; diff --git a/tcg/tcg.c b/tcg/tcg.c index d42fa6c956..1e5e165bff 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -2310,7 +2310,7 @@ static void tcg_dump_ops(TCGContext *s, bool have_prefs) } } else if (c == INDEX_op_call) { const TCGHelperInfo *info = tcg_call_info(op); -void *func; +void *func = tcg_call_func(op); /* variable number of arguments */ nb_oargs = TCGOP_CALLO(op); @@ -2324,7 +2324,6 @@ static void tcg_dump_ops(TCGContext *s, bool have_prefs) * Note that plugins have a template function for the info, * but the actual function pointer comes from the plugin. */ -func = (void *)(uintptr_t)op->args[nb_oargs + nb_iargs]; if (func == info->func) { col += qemu_log("%s", info->name); } else { @@ -4346,7 +4345,7 @@ static void tcg_reg_alloc_call(TCGContext *s, TCGOp *op) int allocate_args; TCGRegSet allocated_regs; -func_addr = (tcg_insn_unit *)(intptr_t)op->args[nb_oargs + nb_iargs]; +func_addr = tcg_call_func(op); flags = tcg_call_flags(op); nb_regs = ARRAY_SIZE(tcg_target_call_iarg_regs); -- 2.25.1