qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 7/7] tcg: Allow 6 arguments to TCG helpers


From: Philippe Mathieu-Daudé
Subject: Re: [Qemu-devel] [PATCH 7/7] tcg: Allow 6 arguments to TCG helpers
Date: Fri, 15 Dec 2017 15:06:44 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0

Hi Richard,

On 12/15/2017 02:07 PM, Richard Henderson wrote:
> We already handle this in the backends, and the lifetime datum
> for the TCGOp is already large enough.
> 
> Signed-off-by: Richard Henderson <address@hidden>
> ---
>  include/exec/helper-gen.h   | 11 +++++++++++
>  include/exec/helper-head.h  |  2 ++
>  include/exec/helper-proto.h |  5 +++++
>  include/exec/helper-tcg.h   |  7 +++++++
>  tcg/tcg.h                   |  2 +-
>  tcg/tci.c                   | 12 ++++++++----
>  tcg/tci/tcg-target.inc.c    |  6 ++++--
>  7 files changed, 38 insertions(+), 7 deletions(-)
> 
> diff --git a/include/exec/helper-gen.h b/include/exec/helper-gen.h
> index 15204ab961..22381a1708 100644
> --- a/include/exec/helper-gen.h
> +++ b/include/exec/helper-gen.h
> @@ -56,6 +56,16 @@ static inline void glue(gen_helper_, 
> name)(dh_retvar_decl(ret)          \
>    tcg_gen_callN(HELPER(name), dh_retvar(ret), 5, args);                 \
>  }
>  
> +#define DEF_HELPER_FLAGS_6(name, flags, ret, t1, t2, t3, t4, t5, t6)    \
> +static inline void glue(gen_helper_, name)(dh_retvar_decl(ret)          \
> +    dh_arg_decl(t1, 1),  dh_arg_decl(t2, 2), dh_arg_decl(t3, 3),        \
> +    dh_arg_decl(t4, 4), dh_arg_decl(t5, 5), dh_arg_decl(t6, 6))         \
> +{                                                                       \
> +  TCGTemp *args[6] = { dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3),     \
> +                     dh_arg(t4, 4), dh_arg(t5, 5), dh_arg(t6, 6) };     \
> +  tcg_gen_callN(HELPER(name), dh_retvar(ret), 6, args);                 \
> +}
> +
>  #include "helper.h"
>  #include "trace/generated-helpers.h"
>  #include "trace/generated-helpers-wrappers.h"
> @@ -67,6 +77,7 @@ static inline void glue(gen_helper_, 
> name)(dh_retvar_decl(ret)          \
>  #undef DEF_HELPER_FLAGS_3
>  #undef DEF_HELPER_FLAGS_4
>  #undef DEF_HELPER_FLAGS_5
> +#undef DEF_HELPER_FLAGS_6
>  #undef GEN_HELPER
>  
>  #endif /* HELPER_GEN_H */
> diff --git a/include/exec/helper-head.h b/include/exec/helper-head.h
> index 639eefdbc0..e1fd08f2ba 100644
> --- a/include/exec/helper-head.h
> +++ b/include/exec/helper-head.h
> @@ -125,6 +125,8 @@
>      DEF_HELPER_FLAGS_4(name, 0, ret, t1, t2, t3, t4)
>  #define DEF_HELPER_5(name, ret, t1, t2, t3, t4, t5) \
>      DEF_HELPER_FLAGS_5(name, 0, ret, t1, t2, t3, t4, t5)
> +#define DEF_HELPER_6(name, ret, t1, t2, t3, t4, t5, t6) \
> +    DEF_HELPER_FLAGS_6(name, 0, ret, t1, t2, t3, t4, t5, t6)
>  
>  /* MAX_OPC_PARAM_IARGS must be set to n if last entry is DEF_HELPER_FLAGS_n. 
> */
>  
> diff --git a/include/exec/helper-proto.h b/include/exec/helper-proto.h
> index 954bef85ce..74943edb13 100644
> --- a/include/exec/helper-proto.h
> +++ b/include/exec/helper-proto.h
> @@ -26,6 +26,10 @@ dh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), 
> dh_ctype(t3), \
>  dh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), dh_ctype(t3), \
>                              dh_ctype(t4), dh_ctype(t5));
>  
> +#define DEF_HELPER_FLAGS_6(name, flags, ret, t1, t2, t3, t4, t5, t6) \
> +dh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), dh_ctype(t3), \
> +                            dh_ctype(t4), dh_ctype(t5), dh_ctype(t6));
> +
>  #include "helper.h"
>  #include "trace/generated-helpers.h"
>  #include "tcg-runtime.h"
> @@ -36,5 +40,6 @@ dh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), 
> dh_ctype(t3), \
>  #undef DEF_HELPER_FLAGS_3
>  #undef DEF_HELPER_FLAGS_4
>  #undef DEF_HELPER_FLAGS_5
> +#undef DEF_HELPER_FLAGS_6
>  
>  #endif /* HELPER_PROTO_H */
> diff --git a/include/exec/helper-tcg.h b/include/exec/helper-tcg.h
> index b0c5bafa99..b3bdb0c399 100644
> --- a/include/exec/helper-tcg.h
> +++ b/include/exec/helper-tcg.h
> @@ -39,6 +39,12 @@
>      | dh_sizemask(t2, 2) | dh_sizemask(t3, 3) | dh_sizemask(t4, 4) \
>      | dh_sizemask(t5, 5) },
>  
> +#define DEF_HELPER_FLAGS_6(NAME, FLAGS, ret, t1, t2, t3, t4, t5, t6) \
> +  { .func = HELPER(NAME), .name = str(NAME), .flags = FLAGS, \
> +    .sizemask = dh_sizemask(ret, 0) | dh_sizemask(t1, 1) \
> +    | dh_sizemask(t2, 2) | dh_sizemask(t3, 3) | dh_sizemask(t4, 4) \
> +    | dh_sizemask(t5, 5) | dh_sizemask(t6, 6) },
> +
>  #include "helper.h"
>  #include "trace/generated-helpers.h"
>  #include "tcg-runtime.h"
> @@ -50,5 +56,6 @@
>  #undef DEF_HELPER_FLAGS_3
>  #undef DEF_HELPER_FLAGS_4
>  #undef DEF_HELPER_FLAGS_5
> +#undef DEF_HELPER_FLAGS_6
>  
>  #endif /* HELPER_TCG_H */
> diff --git a/tcg/tcg.h b/tcg/tcg.h
> index 8c45f7edbc..2ce497cebf 100644
> --- a/tcg/tcg.h
> +++ b/tcg/tcg.h
> @@ -41,7 +41,7 @@
>  #else
>  #define MAX_OPC_PARAM_PER_ARG 1
>  #endif
> -#define MAX_OPC_PARAM_IARGS 5
> +#define MAX_OPC_PARAM_IARGS 6
>  #define MAX_OPC_PARAM_OARGS 1
>  #define MAX_OPC_PARAM_ARGS (MAX_OPC_PARAM_IARGS + MAX_OPC_PARAM_OARGS)
>  
> diff --git a/tcg/tci.c b/tcg/tci.c
> index 63f2cd54ab..33edca1903 100644
> --- a/tcg/tci.c
> +++ b/tcg/tci.c
> @@ -40,11 +40,12 @@
>          tcg_abort(); \
>      } while (0)
>  
> -#if MAX_OPC_PARAM_IARGS != 5
> +#if MAX_OPC_PARAM_IARGS != 6
>  # error Fix needed, number of supported input arguments changed!
>  #endif
>  #if TCG_TARGET_REG_BITS == 32
>  typedef uint64_t (*helper_function)(tcg_target_ulong, tcg_target_ulong,
> +                                    tcg_target_ulong, tcg_target_ulong,
>                                      tcg_target_ulong, tcg_target_ulong,
>                                      tcg_target_ulong, tcg_target_ulong,
>                                      tcg_target_ulong, tcg_target_ulong,
> @@ -52,7 +53,7 @@ typedef uint64_t (*helper_function)(tcg_target_ulong, 
> tcg_target_ulong,
>  #else
>  typedef uint64_t (*helper_function)(tcg_target_ulong, tcg_target_ulong,
>                                      tcg_target_ulong, tcg_target_ulong,
> -                                    tcg_target_ulong);
> +                                    tcg_target_ulong, tcg_target_ulong);
>  #endif
>  
>  static tcg_target_ulong tci_read_reg(const tcg_target_ulong *regs, TCGReg 
> index)
> @@ -520,7 +521,9 @@ uintptr_t tcg_qemu_tb_exec(CPUArchState *env, uint8_t 
> *tb_ptr)
>                                            tci_read_reg(regs, TCG_REG_R7),
>                                            tci_read_reg(regs, TCG_REG_R8),
>                                            tci_read_reg(regs, TCG_REG_R9),
> -                                          tci_read_reg(regs, TCG_REG_R10));
> +                                          tci_read_reg(regs, TCG_REG_R10),
> +                                          tci_read_reg(regs, TCG_REG_R11),
> +                                          tci_read_reg(regs, TCG_REG_R12));
>              tci_write_reg(regs, TCG_REG_R0, tmp64);
>              tci_write_reg(regs, TCG_REG_R1, tmp64 >> 32);
>  #else
> @@ -528,7 +531,8 @@ uintptr_t tcg_qemu_tb_exec(CPUArchState *env, uint8_t 
> *tb_ptr)
>                                            tci_read_reg(regs, TCG_REG_R1),
>                                            tci_read_reg(regs, TCG_REG_R2),
>                                            tci_read_reg(regs, TCG_REG_R3),
> -                                          tci_read_reg(regs, TCG_REG_R5));
> +                                          tci_read_reg(regs, TCG_REG_R5),
> +                                          tci_read_reg(regs, TCG_REG_R6));
>              tci_write_reg(regs, TCG_REG_R0, tmp64);
>  #endif
>              break;
> diff --git a/tcg/tci/tcg-target.inc.c b/tcg/tci/tcg-target.inc.c
> index 913c3802a3..cc949bea85 100644
> --- a/tcg/tci/tcg-target.inc.c
> +++ b/tcg/tci/tcg-target.inc.c
> @@ -292,7 +292,7 @@ static const int tcg_target_reg_alloc_order[] = {
>  #endif
>  };
>  
> -#if MAX_OPC_PARAM_IARGS != 5
> +#if MAX_OPC_PARAM_IARGS != 6
>  # error Fix needed, number of supported input arguments changed!
>  #endif
>  
> @@ -305,14 +305,16 @@ static const int tcg_target_call_iarg_regs[] = {
>      TCG_REG_R4,
>  #endif
>      TCG_REG_R5,
> +    TCG_REG_R6,
>  #if TCG_TARGET_REG_BITS == 32
>      /* 32 bit hosts need 2 * MAX_OPC_PARAM_IARGS registers. */
> -    TCG_REG_R6,
>      TCG_REG_R7,

I think now TCG_REG_R8 belongs here...

>  #if TCG_TARGET_NB_REGS >= 16
>      TCG_REG_R8,

^ not here.

>      TCG_REG_R9,
>      TCG_REG_R10,
> +    TCG_REG_R11,
> +    TCG_REG_R12,
>  #else
>  # error Too few input registers available
>  #endif
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]