tcg: add support for 8-argument helpers
This commit is contained in:
committed by
Ivan Grokhotkov
parent
6353353d25
commit
58bdf76da0
@@ -98,6 +98,21 @@ static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
|
||||
dh_arg(t7, 7)); \
|
||||
}
|
||||
|
||||
#define DEF_HELPER_FLAGS_8(name, flags, ret, t1, t2, t3, t4, t5, t6, t7, t8)\
|
||||
extern TCGHelperInfo glue(helper_info_, name); \
|
||||
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), \
|
||||
dh_arg_decl(t7, 7), dh_arg_decl(t8, 8)) \
|
||||
{ \
|
||||
tcg_gen_call8(&glue(helper_info_, name), \
|
||||
&glue(helper_info_,name), dh_retvar(ret), \
|
||||
dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \
|
||||
dh_arg(t4, 4), dh_arg(t5, 5), dh_arg(t6, 6), \
|
||||
dh_arg(t7, 7), dh_arg(t8, 8)); \
|
||||
}
|
||||
|
||||
|
||||
#include HELPER_H
|
||||
|
||||
#undef DEF_HELPER_FLAGS_0
|
||||
@@ -108,3 +123,4 @@ static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
|
||||
#undef DEF_HELPER_FLAGS_5
|
||||
#undef DEF_HELPER_FLAGS_6
|
||||
#undef DEF_HELPER_FLAGS_7
|
||||
#undef DEF_HELPER_FLAGS_8
|
||||
|
||||
@@ -129,6 +129,9 @@
|
||||
DEF_HELPER_FLAGS_6(name, 0, ret, t1, t2, t3, t4, t5, t6)
|
||||
#define DEF_HELPER_7(name, ret, t1, t2, t3, t4, t5, t6, t7) \
|
||||
DEF_HELPER_FLAGS_7(name, 0, ret, t1, t2, t3, t4, t5, t6, t7)
|
||||
#define DEF_HELPER_8(name, ret, t1, t2, t3, t4, t5, t6, t7, t8) \
|
||||
DEF_HELPER_FLAGS_8(name, 0, ret, t1, t2, t3, t4, t5, t6, t7, t8)
|
||||
|
||||
|
||||
/* MAX_CALL_IARGS must be set to n if last entry is DEF_HELPER_FLAGS_n. */
|
||||
|
||||
|
||||
@@ -83,6 +83,19 @@
|
||||
| dh_typemask(T6, 6) | dh_typemask(T7, 7) \
|
||||
};
|
||||
|
||||
#define DEF_HELPER_FLAGS_8(NAME, FLAGS, RET, T1, T2, T3, T4, T5, T6, T7, T8) \
|
||||
TCGHelperInfo glue(helper_info_, NAME) = { \
|
||||
.func = HELPER(NAME), .name = str(NAME), \
|
||||
.flags = FLAGS | dh_callflag(RET), \
|
||||
.typemask = dh_typemask(RET, 0) | dh_typemask(T1, 1) \
|
||||
| dh_typemask(T2, 2) | dh_typemask(T3, 3) \
|
||||
| dh_typemask(T4, 4) | dh_typemask(T5, 5) \
|
||||
| dh_typemask(T6, 6) | dh_typemask(T7, 7) \
|
||||
| dh_typemask(T8, 8) \
|
||||
};
|
||||
|
||||
|
||||
|
||||
#include HELPER_H
|
||||
|
||||
#undef str
|
||||
@@ -94,3 +107,4 @@
|
||||
#undef DEF_HELPER_FLAGS_5
|
||||
#undef DEF_HELPER_FLAGS_6
|
||||
#undef DEF_HELPER_FLAGS_7
|
||||
#undef DEF_HELPER_FLAGS_8
|
||||
|
||||
@@ -51,6 +51,11 @@ dh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), dh_ctype(t3), \
|
||||
dh_ctype(t4), dh_ctype(t5), dh_ctype(t6), \
|
||||
dh_ctype(t7)) DEF_HELPER_ATTR;
|
||||
|
||||
#define DEF_HELPER_FLAGS_8(name, flags, ret, t1, t2, t3, t4, t5, t6, t7, t8) \
|
||||
dh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), dh_ctype(t3), \
|
||||
dh_ctype(t4), dh_ctype(t5), dh_ctype(t6), \
|
||||
dh_ctype(t7), dh_ctype(t8)) DEF_HELPER_ATTR;
|
||||
|
||||
#define IN_HELPER_PROTO
|
||||
|
||||
#include HELPER_H
|
||||
@@ -65,4 +70,5 @@ dh_ctype(ret) HELPER(name) (dh_ctype(t1), dh_ctype(t2), dh_ctype(t3), \
|
||||
#undef DEF_HELPER_FLAGS_5
|
||||
#undef DEF_HELPER_FLAGS_6
|
||||
#undef DEF_HELPER_FLAGS_7
|
||||
#undef DEF_HELPER_FLAGS_8
|
||||
#undef DEF_HELPER_ATTR
|
||||
|
||||
@@ -851,6 +851,9 @@ void tcg_gen_call6(void *func, TCGHelperInfo *, TCGTemp *ret,
|
||||
void tcg_gen_call7(void *func, TCGHelperInfo *, TCGTemp *ret,
|
||||
TCGTemp *, TCGTemp *, TCGTemp *, TCGTemp *,
|
||||
TCGTemp *, TCGTemp *, TCGTemp *);
|
||||
void tcg_gen_call8(void *func, TCGHelperInfo *, TCGTemp *ret,
|
||||
TCGTemp *, TCGTemp *, TCGTemp *, TCGTemp *,
|
||||
TCGTemp *, TCGTemp *, TCGTemp *, TCGTemp *);
|
||||
|
||||
TCGOp *tcg_emit_op(TCGOpcode opc, unsigned nargs);
|
||||
void tcg_op_remove(TCGContext *s, TCGOp *op);
|
||||
|
||||
@@ -2385,6 +2385,15 @@ void tcg_gen_call7(void *func, TCGHelperInfo *info, TCGTemp *ret, TCGTemp *t1,
|
||||
tcg_gen_callN(func, info, ret, args);
|
||||
}
|
||||
|
||||
void tcg_gen_call8(void *func, TCGHelperInfo *info, TCGTemp *ret, TCGTemp *t1,
|
||||
TCGTemp *t2, TCGTemp *t3, TCGTemp *t4,
|
||||
TCGTemp *t5, TCGTemp *t6, TCGTemp *t7,
|
||||
TCGTemp *t8)
|
||||
{
|
||||
TCGTemp *args[8] = { t1, t2, t3, t4, t5, t6, t7 , t8};
|
||||
tcg_gen_callN(func, info, ret, args);
|
||||
}
|
||||
|
||||
static void tcg_reg_alloc_start(TCGContext *s)
|
||||
{
|
||||
int i, n;
|
||||
|
||||
Reference in New Issue
Block a user