[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v7 21/52] tcg: Use offsets not indices for TCGv_
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [Qemu-devel] [PATCH v7 21/52] tcg: Use offsets not indices for TCGv_* |
Date: |
Tue, 24 Oct 2017 00:22:34 -0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 |
On 10/20/2017 08:19 PM, Richard Henderson wrote:
> Using the offset of a temporary, relative to TCGContext, rather than
> its index means that we don't use 0. That leaves offset 0 free for
> a NULL representation without having to leave index 0 unused.
>
> Signed-off-by: Richard Henderson <address@hidden>
> ---
> tcg/tcg.h | 37 ++++++++++++++++++++-----------------
> 1 file changed, 20 insertions(+), 17 deletions(-)
>
> diff --git a/tcg/tcg.h b/tcg/tcg.h
> index 8f692bc6cf..7fe0fb9e07 100644
> --- a/tcg/tcg.h
> +++ b/tcg/tcg.h
> @@ -429,13 +429,13 @@ typedef TCGv_ptr TCGv_env;
> #endif
>
> /* Dummy definition to avoid compiler warnings. */
> -#define TCGV_UNUSED_I32(x) (x = (TCGv_i32)-1)
> -#define TCGV_UNUSED_I64(x) (x = (TCGv_i64)-1)
> -#define TCGV_UNUSED_PTR(x) (x = (TCGv_ptr)-1)
> +#define TCGV_UNUSED_I32(x) (x = (TCGv_i32)NULL)
> +#define TCGV_UNUSED_I64(x) (x = (TCGv_i64)NULL)
> +#define TCGV_UNUSED_PTR(x) (x = (TCGv_ptr)NULL)
>
> -#define TCGV_IS_UNUSED_I32(x) ((x) == (TCGv_i32)-1)
> -#define TCGV_IS_UNUSED_I64(x) ((x) == (TCGv_i64)-1)
> -#define TCGV_IS_UNUSED_PTR(x) ((x) == (TCGv_ptr)-1)
> +#define TCGV_IS_UNUSED_I32(x) ((x) == (TCGv_i32)NULL)
> +#define TCGV_IS_UNUSED_I64(x) ((x) == (TCGv_i64)NULL)
> +#define TCGV_IS_UNUSED_PTR(x) ((x) == (TCGv_ptr)NULL)
>
> /* call flags */
> /* Helper does not read globals (either directly or through an exception). It
> @@ -454,7 +454,7 @@ typedef TCGv_ptr TCGv_env;
> #define TCG_CALL_NO_WG_SE (TCG_CALL_NO_WG | TCG_CALL_NO_SE)
>
> /* used to align parameters */
> -#define TCG_CALL_DUMMY_ARG ((TCGArg)(-1))
> +#define TCG_CALL_DUMMY_ARG ((TCGArg)0)
>
> /* Conditions. Note that these are laid out for easy manipulation by
> the functions below:
> @@ -701,17 +701,20 @@ static inline size_t temp_idx(TCGTemp *ts)
>
> static inline TCGArg temp_arg(TCGTemp *ts)
> {
> - return temp_idx(ts);
> + ptrdiff_t a = (void *)ts - (void *)&tcg_ctx;
> + tcg_debug_assert(a >= offsetof(TCGContext, temps)
> + && a < offsetof(TCGContext, temps[tcg_ctx.nb_temps]));
> + return a;
> }
>
> static inline TCGTemp *arg_temp(TCGArg a)
> {
> - return a == TCG_CALL_DUMMY_ARG ? NULL : &tcg_ctx.temps[a];
> -}
> -
> -static inline size_t arg_index(TCGArg a)
> -{
> - return a;
> + if (a == TCG_CALL_DUMMY_ARG) {
> + return NULL;
> + }
> + tcg_debug_assert(a >= offsetof(TCGContext, temps)
> + && a < offsetof(TCGContext, temps[tcg_ctx.nb_temps]));
> + return (void *)&tcg_ctx + a;
Hmmm why not cast it as TCGTemp*?
> }
>
> static inline TCGArg tcgv_i32_arg(TCGv_i32 t)
> @@ -746,17 +749,17 @@ static inline TCGTemp *tcgv_ptr_temp(TCGv_ptr t)
>
> static inline TCGv_i32 temp_tcgv_i32(TCGTemp *t)
> {
> - return (TCGv_i32)temp_idx(t);
> + return (TCGv_i32)temp_arg(t);
> }
>
> static inline TCGv_i64 temp_tcgv_i64(TCGTemp *t)
> {
> - return (TCGv_i64)temp_idx(t);
> + return (TCGv_i64)temp_arg(t);
> }
>
> static inline TCGv_ptr temp_tcgv_ptr(TCGTemp *t)
> {
> - return (TCGv_ptr)temp_idx(t);
> + return (TCGv_ptr)temp_arg(t);
> }
>
> #if TCG_TARGET_REG_BITS == 32
>
- [Qemu-devel] [PATCH v7 16/52] tcg: Introduce tcgv_{i32, i64, ptr}_{arg, temp}, (continued)
- [Qemu-devel] [PATCH v7 16/52] tcg: Introduce tcgv_{i32, i64, ptr}_{arg, temp}, Richard Henderson, 2017/10/20
- Re: [Qemu-devel] [PATCH v7 16/52] tcg: Introduce tcgv_{i32, i64, ptr}_{arg, temp}, Emilio G. Cota, 2017/10/23
- Re: [Qemu-devel] [PATCH v7 16/52] tcg: Introduce tcgv_{i32, i64, ptr}_{arg, temp}, Philippe Mathieu-Daudé, 2017/10/23
- [Qemu-devel] [PATCH v7 18/52] tcg: Remove GET_TCGV_* and MAKE_TCGV_*, Richard Henderson, 2017/10/20
- [Qemu-devel] [PATCH v7 22/52] tcg: Use pointers in TCGOp->args, Richard Henderson, 2017/10/20
- [Qemu-devel] [PATCH v7 21/52] tcg: Use offsets not indices for TCGv_*, Richard Henderson, 2017/10/20
- [Qemu-devel] [PATCH v7 20/52] qom: Introduce CPUClass.tcg_initialize, Richard Henderson, 2017/10/20
- [Qemu-devel] [PATCH v7 23/52] tcg: define CF_PARALLEL and use it for TB hashing along with CF_COUNT_MASK, Richard Henderson, 2017/10/20
- [Qemu-devel] [PATCH v7 25/52] tcg: Include CF_COUNT_MASK in CF_HASH_MASK, Richard Henderson, 2017/10/20
- [Qemu-devel] [PATCH v7 19/52] tcg: Remove TCGV_EQUAL*, Richard Henderson, 2017/10/20
- [Qemu-devel] [PATCH v7 24/52] tcg: Add CPUState cflags_next_tb, Richard Henderson, 2017/10/20