tcg: add support for 8-argument helpers

This commit is contained in:
Dmitry Yakovlev
2024-04-23 17:41:13 +03:00
committed by Ivan Grokhotkov
parent 6353353d25
commit 58bdf76da0
6 changed files with 51 additions and 0 deletions
+16
View File
@@ -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
+3
View File
@@ -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. */
+14
View File
@@ -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
+6
View File
@@ -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
+3
View File
@@ -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);
+9
View File
@@ -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;