tcg: Split helper-gen.h
Create helper-gen-common.h without the target specific portion. Use that in tcg-op-common.h. Reorg headers in target/arm to ensure that helper-gen.h is included before helper-info.c.inc. All other targets are already correct in this regard. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
a3a692b8bf
commit
e4eff8e4ed
|
@ -154,6 +154,7 @@ F: include/exec/exec-all.h
|
||||||
F: include/exec/tb-flush.h
|
F: include/exec/tb-flush.h
|
||||||
F: include/exec/target_long.h
|
F: include/exec/target_long.h
|
||||||
F: include/exec/helper*.h
|
F: include/exec/helper*.h
|
||||||
|
F: include/exec/helper*.h.inc
|
||||||
F: include/exec/helper-info.c.inc
|
F: include/exec/helper-info.c.inc
|
||||||
F: include/sysemu/cpus.h
|
F: include/sysemu/cpus.h
|
||||||
F: include/sysemu/tcg.h
|
F: include/sysemu/tcg.h
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
/*
|
||||||
|
* Helper file for declaring TCG helper functions.
|
||||||
|
* This one expands generation functions for tcg opcodes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef HELPER_GEN_COMMON_H
|
||||||
|
#define HELPER_GEN_COMMON_H
|
||||||
|
|
||||||
|
#define HELPER_H "accel/tcg/tcg-runtime.h"
|
||||||
|
#include "exec/helper-gen.h.inc"
|
||||||
|
#undef HELPER_H
|
||||||
|
|
||||||
|
#define HELPER_H "accel/tcg/plugin-helpers.h"
|
||||||
|
#include "exec/helper-gen.h.inc"
|
||||||
|
#undef HELPER_H
|
||||||
|
|
||||||
|
#endif /* HELPER_GEN_COMMON_H */
|
|
@ -2,108 +2,15 @@
|
||||||
/*
|
/*
|
||||||
* Helper file for declaring TCG helper functions.
|
* Helper file for declaring TCG helper functions.
|
||||||
* This one expands generation functions for tcg opcodes.
|
* This one expands generation functions for tcg opcodes.
|
||||||
* Define HELPER_H for the header file to be expanded,
|
|
||||||
* and static inline to change from global file scope.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef HELPER_GEN_H
|
#ifndef HELPER_GEN_H
|
||||||
#define HELPER_GEN_H
|
#define HELPER_GEN_H
|
||||||
|
|
||||||
#include "tcg/tcg.h"
|
#include "exec/helper-gen-common.h"
|
||||||
#include "tcg/helper-info.h"
|
|
||||||
#include "exec/helper-head.h"
|
|
||||||
|
|
||||||
#define DEF_HELPER_FLAGS_0(name, flags, ret) \
|
#define HELPER_H "helper.h"
|
||||||
extern TCGHelperInfo glue(helper_info_, name); \
|
#include "exec/helper-gen.h.inc"
|
||||||
static inline void glue(gen_helper_, name)(dh_retvar_decl0(ret)) \
|
#undef HELPER_H
|
||||||
{ \
|
|
||||||
tcg_gen_call0(&glue(helper_info_, name), dh_retvar(ret)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEF_HELPER_FLAGS_1(name, flags, ret, t1) \
|
|
||||||
extern TCGHelperInfo glue(helper_info_, name); \
|
|
||||||
static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
|
|
||||||
dh_arg_decl(t1, 1)) \
|
|
||||||
{ \
|
|
||||||
tcg_gen_call1(&glue(helper_info_, name), dh_retvar(ret), \
|
|
||||||
dh_arg(t1, 1)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEF_HELPER_FLAGS_2(name, flags, ret, t1, t2) \
|
|
||||||
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)) \
|
|
||||||
{ \
|
|
||||||
tcg_gen_call2(&glue(helper_info_, name), dh_retvar(ret), \
|
|
||||||
dh_arg(t1, 1), dh_arg(t2, 2)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEF_HELPER_FLAGS_3(name, flags, ret, t1, t2, t3) \
|
|
||||||
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)) \
|
|
||||||
{ \
|
|
||||||
tcg_gen_call3(&glue(helper_info_, name), dh_retvar(ret), \
|
|
||||||
dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEF_HELPER_FLAGS_4(name, flags, ret, t1, t2, t3, t4) \
|
|
||||||
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)) \
|
|
||||||
{ \
|
|
||||||
tcg_gen_call4(&glue(helper_info_, name), dh_retvar(ret), \
|
|
||||||
dh_arg(t1, 1), dh_arg(t2, 2), \
|
|
||||||
dh_arg(t3, 3), dh_arg(t4, 4)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEF_HELPER_FLAGS_5(name, flags, ret, t1, t2, t3, t4, t5) \
|
|
||||||
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)) \
|
|
||||||
{ \
|
|
||||||
tcg_gen_call5(&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)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEF_HELPER_FLAGS_6(name, flags, ret, t1, t2, t3, t4, t5, t6) \
|
|
||||||
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)) \
|
|
||||||
{ \
|
|
||||||
tcg_gen_call6(&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)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define DEF_HELPER_FLAGS_7(name, flags, ret, t1, t2, t3, t4, t5, t6, t7)\
|
|
||||||
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)) \
|
|
||||||
{ \
|
|
||||||
tcg_gen_call7(&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)); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "helper.h"
|
|
||||||
#include "accel/tcg/tcg-runtime.h"
|
|
||||||
#include "accel/tcg/plugin-helpers.h"
|
|
||||||
|
|
||||||
#undef DEF_HELPER_FLAGS_0
|
|
||||||
#undef DEF_HELPER_FLAGS_1
|
|
||||||
#undef DEF_HELPER_FLAGS_2
|
|
||||||
#undef DEF_HELPER_FLAGS_3
|
|
||||||
#undef DEF_HELPER_FLAGS_4
|
|
||||||
#undef DEF_HELPER_FLAGS_5
|
|
||||||
#undef DEF_HELPER_FLAGS_6
|
|
||||||
#undef DEF_HELPER_FLAGS_7
|
|
||||||
|
|
||||||
#endif /* HELPER_GEN_H */
|
#endif /* HELPER_GEN_H */
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
/*
|
||||||
|
* Helper file for declaring TCG helper functions.
|
||||||
|
* This one expands generation functions for tcg opcodes.
|
||||||
|
* Define HELPER_H for the header file to be expanded,
|
||||||
|
* and static inline to change from global file scope.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "tcg/tcg.h"
|
||||||
|
#include "tcg/helper-info.h"
|
||||||
|
#include "exec/helper-head.h"
|
||||||
|
|
||||||
|
#define DEF_HELPER_FLAGS_0(name, flags, ret) \
|
||||||
|
extern TCGHelperInfo glue(helper_info_, name); \
|
||||||
|
static inline void glue(gen_helper_, name)(dh_retvar_decl0(ret)) \
|
||||||
|
{ \
|
||||||
|
tcg_gen_call0(&glue(helper_info_, name), dh_retvar(ret)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DEF_HELPER_FLAGS_1(name, flags, ret, t1) \
|
||||||
|
extern TCGHelperInfo glue(helper_info_, name); \
|
||||||
|
static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \
|
||||||
|
dh_arg_decl(t1, 1)) \
|
||||||
|
{ \
|
||||||
|
tcg_gen_call1(&glue(helper_info_, name), dh_retvar(ret), \
|
||||||
|
dh_arg(t1, 1)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DEF_HELPER_FLAGS_2(name, flags, ret, t1, t2) \
|
||||||
|
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)) \
|
||||||
|
{ \
|
||||||
|
tcg_gen_call2(&glue(helper_info_, name), dh_retvar(ret), \
|
||||||
|
dh_arg(t1, 1), dh_arg(t2, 2)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DEF_HELPER_FLAGS_3(name, flags, ret, t1, t2, t3) \
|
||||||
|
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)) \
|
||||||
|
{ \
|
||||||
|
tcg_gen_call3(&glue(helper_info_, name), dh_retvar(ret), \
|
||||||
|
dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DEF_HELPER_FLAGS_4(name, flags, ret, t1, t2, t3, t4) \
|
||||||
|
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)) \
|
||||||
|
{ \
|
||||||
|
tcg_gen_call4(&glue(helper_info_, name), dh_retvar(ret), \
|
||||||
|
dh_arg(t1, 1), dh_arg(t2, 2), \
|
||||||
|
dh_arg(t3, 3), dh_arg(t4, 4)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DEF_HELPER_FLAGS_5(name, flags, ret, t1, t2, t3, t4, t5) \
|
||||||
|
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)) \
|
||||||
|
{ \
|
||||||
|
tcg_gen_call5(&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)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DEF_HELPER_FLAGS_6(name, flags, ret, t1, t2, t3, t4, t5, t6) \
|
||||||
|
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)) \
|
||||||
|
{ \
|
||||||
|
tcg_gen_call6(&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)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DEF_HELPER_FLAGS_7(name, flags, ret, t1, t2, t3, t4, t5, t6, t7)\
|
||||||
|
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)) \
|
||||||
|
{ \
|
||||||
|
tcg_gen_call7(&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)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#include HELPER_H
|
||||||
|
|
||||||
|
#undef DEF_HELPER_FLAGS_0
|
||||||
|
#undef DEF_HELPER_FLAGS_1
|
||||||
|
#undef DEF_HELPER_FLAGS_2
|
||||||
|
#undef DEF_HELPER_FLAGS_3
|
||||||
|
#undef DEF_HELPER_FLAGS_4
|
||||||
|
#undef DEF_HELPER_FLAGS_5
|
||||||
|
#undef DEF_HELPER_FLAGS_6
|
||||||
|
#undef DEF_HELPER_FLAGS_7
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#include "tcg/tcg.h"
|
#include "tcg/tcg.h"
|
||||||
#include "exec/helper-proto.h"
|
#include "exec/helper-proto.h"
|
||||||
#include "exec/helper-gen.h"
|
#include "exec/helper-gen-common.h"
|
||||||
|
|
||||||
/* Basic output routines. Not for general consumption. */
|
/* Basic output routines. Not for general consumption. */
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,9 @@
|
||||||
#include "semihosting/semihost.h"
|
#include "semihosting/semihost.h"
|
||||||
#include "exec/log.h"
|
#include "exec/log.h"
|
||||||
#include "cpregs.h"
|
#include "cpregs.h"
|
||||||
|
#include "translate.h"
|
||||||
|
#include "translate-a32.h"
|
||||||
|
#include "exec/gen-icount.h"
|
||||||
|
|
||||||
#define HELPER_H "helper.h"
|
#define HELPER_H "helper.h"
|
||||||
#include "exec/helper-info.c.inc"
|
#include "exec/helper-info.c.inc"
|
||||||
|
@ -48,9 +51,6 @@
|
||||||
#define ENABLE_ARCH_7 arm_dc_feature(s, ARM_FEATURE_V7)
|
#define ENABLE_ARCH_7 arm_dc_feature(s, ARM_FEATURE_V7)
|
||||||
#define ENABLE_ARCH_8 arm_dc_feature(s, ARM_FEATURE_V8)
|
#define ENABLE_ARCH_8 arm_dc_feature(s, ARM_FEATURE_V8)
|
||||||
|
|
||||||
#include "translate.h"
|
|
||||||
#include "translate-a32.h"
|
|
||||||
|
|
||||||
/* These are TCG temporaries used only by the legacy iwMMXt decoder */
|
/* These are TCG temporaries used only by the legacy iwMMXt decoder */
|
||||||
static TCGv_i64 cpu_V0, cpu_V1, cpu_M0;
|
static TCGv_i64 cpu_V0, cpu_V1, cpu_M0;
|
||||||
/* These are TCG globals which alias CPUARMState fields */
|
/* These are TCG globals which alias CPUARMState fields */
|
||||||
|
@ -59,8 +59,6 @@ TCGv_i32 cpu_CF, cpu_NF, cpu_VF, cpu_ZF;
|
||||||
TCGv_i64 cpu_exclusive_addr;
|
TCGv_i64 cpu_exclusive_addr;
|
||||||
TCGv_i64 cpu_exclusive_val;
|
TCGv_i64 cpu_exclusive_val;
|
||||||
|
|
||||||
#include "exec/gen-icount.h"
|
|
||||||
|
|
||||||
static const char * const regnames[] =
|
static const char * const regnames[] =
|
||||||
{ "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
|
{ "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
|
||||||
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "pc" };
|
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "pc" };
|
||||||
|
|
Loading…
Reference in New Issue