tcg: Allow 6 arguments to TCG helpers
We already handle this in the backends, and the lifetime datum for the TCGOp is already large enough. Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
923ed17501
commit
1df3caa946
@ -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 */
|
||||
|
@ -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. */
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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 */
|
||||
|
@ -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)
|
||||
|
||||
|
12
tcg/tci.c
12
tcg/tci.c
@ -40,7 +40,7 @@
|
||||
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
|
||||
@ -48,11 +48,12 @@ 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,
|
||||
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;
|
||||
|
@ -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,
|
||||
#if TCG_TARGET_NB_REGS >= 16
|
||||
TCG_REG_R8,
|
||||
TCG_REG_R9,
|
||||
TCG_REG_R10,
|
||||
TCG_REG_R11,
|
||||
TCG_REG_R12,
|
||||
#else
|
||||
# error Too few input registers available
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user