@@ -810,11 +810,11 @@ void tcg_gen_callN(TCGContext *s, void *func, TCGArg ret,
#else
if (TCG_TARGET_REG_BITS < 64 && (sizemask & 1)) {
#ifdef HOST_WORDS_BIGENDIAN
- op->args[pi++] = ret + 1;
+ op->args[pi++] = ret + sizeof(TCGTemp);
op->args[pi++] = ret;
#else
op->args[pi++] = ret;
- op->args[pi++] = ret + 1;
+ op->args[pi++] = ret + sizeof(TCGTemp);
#endif
nb_rets = 2;
} else {
@@ -849,11 +849,11 @@ void tcg_gen_callN(TCGContext *s, void *func, TCGArg ret,
have to get more complicated to differentiate between
stack arguments and register arguments. */
#if defined(HOST_WORDS_BIGENDIAN) != defined(TCG_TARGET_STACK_GROWSUP)
- op->args[pi++] = args[i] + 1;
+ op->args[pi++] = args[i] + sizeof(TCGTemp);
op->args[pi++] = args[i];
#else
op->args[pi++] = args[i];
- op->args[pi++] = args[i] + 1;
+ op->args[pi++] = args[i] + sizeof(TCGTemp);
#endif
real_args += 2;
continue;
@@ -520,7 +520,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 0
/* Conditions. Note that these are laid out for easy manipulation by
the functions below:
@@ -714,24 +714,26 @@ extern bool parallel_cpus;
static inline size_t temp_idx(TCGTemp *ts)
{
- ptrdiff_t n = ts - tcg_ctx.temps;
- tcg_debug_assert(n >= 0 && n < tcg_ctx.nb_temps);
+ size_t n = ts - tcg_ctx.temps;
+ tcg_debug_assert(n < tcg_ctx.nb_temps);
return n;
}
static inline TCGArg temp_arg(TCGTemp *ts)
{
- return temp_idx(ts);
+ size_t n = ts - tcg_ctx.temps;
+ tcg_debug_assert(n < tcg_ctx.nb_temps);
+ return (uintptr_t)ts;
}
static inline TCGTemp *arg_temp(TCGArg a)
{
- return a == TCG_CALL_DUMMY_ARG ? NULL : &tcg_ctx.temps[a];
+ return (TCGTemp *)(uintptr_t)a;
}
static inline size_t arg_index(TCGArg a)
{
- return a;
+ return temp_idx(arg_temp(a));
}
static inline TCGv_i32 QEMU_ARTIFICIAL MAKE_TCGV_I32(TCGArg i)
Signed-off-by: Richard Henderson <rth@twiddle.net> --- tcg/tcg.c | 8 ++++---- tcg/tcg.h | 14 ++++++++------ 2 files changed, 12 insertions(+), 10 deletions(-)