mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 16:53:55 -06:00
tcg: Pass TCGHelperInfo to tcg_gen_callN
In preparation for compiling tcg/ only once, eliminate the all_helpers array. Instantiate the info structs for the generic helpers in accel/tcg/, and the structs for the target-specific helpers in each translate.c. Since we don't see all of the info structs at startup, initialize at first use, using g_once_init_* to make sure we don't race while doing so. Reviewed-by: Anton Johansson <anjo@rev.ng> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
0f4e14c25a
commit
d53106c997
31 changed files with 282 additions and 175 deletions
|
@ -30,6 +30,9 @@
|
|||
#include "exec/translator.h"
|
||||
#include "exec/log.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
#undef ALPHA_DEBUG_DISAS
|
||||
#define CONFIG_SOFTFLOAT_INLINE
|
||||
|
|
|
@ -33,6 +33,9 @@
|
|||
#include "exec/log.h"
|
||||
#include "cpregs.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
#define ENABLE_ARCH_4T arm_dc_feature(s, ARM_FEATURE_V4T)
|
||||
#define ENABLE_ARCH_5 arm_dc_feature(s, ARM_FEATURE_V5)
|
||||
|
|
|
@ -31,6 +31,11 @@
|
|||
#include "exec/translator.h"
|
||||
#include "exec/gen-icount.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
|
||||
/*
|
||||
* Define if you want a BREAK instruction translated to a breakpoint
|
||||
* Active debugging connection is assumed
|
||||
|
|
|
@ -34,11 +34,13 @@
|
|||
#include "exec/translator.h"
|
||||
#include "crisv32-decode.h"
|
||||
#include "qemu/qemu-print.h"
|
||||
|
||||
#include "exec/helper-gen.h"
|
||||
|
||||
#include "exec/log.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
|
||||
#define DISAS_CRIS 0
|
||||
#if DISAS_CRIS
|
||||
|
|
|
@ -31,6 +31,10 @@
|
|||
#include "genptr.h"
|
||||
#include "printinsn.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
#include "analyze_funcs_generated.c.inc"
|
||||
|
||||
typedef void (*AnalyzeInsn)(DisasContext *ctx);
|
||||
|
|
|
@ -29,6 +29,11 @@
|
|||
#include "exec/translator.h"
|
||||
#include "exec/log.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
|
||||
/* Since we have a distinction between register size and address size,
|
||||
we need to redefine all of these. */
|
||||
|
||||
|
|
|
@ -34,6 +34,11 @@
|
|||
|
||||
#include "exec/log.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
|
||||
#define PREFIX_REPZ 0x01
|
||||
#define PREFIX_REPNZ 0x02
|
||||
#define PREFIX_LOCK 0x04
|
||||
|
|
|
@ -26,6 +26,10 @@ static TCGv cpu_lladdr, cpu_llval;
|
|||
|
||||
#include "exec/gen-icount.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
#define DISAS_STOP DISAS_TARGET_0
|
||||
#define DISAS_EXIT DISAS_TARGET_1
|
||||
#define DISAS_EXIT_UPDATE DISAS_TARGET_2
|
||||
|
|
|
@ -34,6 +34,9 @@
|
|||
#include "exec/log.h"
|
||||
#include "fpu/softfloat.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
//#define DEBUG_DISPATCH 1
|
||||
|
||||
|
|
|
@ -31,6 +31,10 @@
|
|||
|
||||
#include "exec/log.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
#define EXTRACT_FIELD(src, start, end) \
|
||||
(((src) >> start) & ((1 << (end - start + 1)) - 1))
|
||||
|
||||
|
|
|
@ -37,6 +37,11 @@
|
|||
#include "fpu_helper.h"
|
||||
#include "translate.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
|
||||
/*
|
||||
* Many sysemu-only helpers are not reachable for user-only.
|
||||
* Define stub generators here, so that we need not either sprinkle
|
||||
|
|
|
@ -35,6 +35,11 @@
|
|||
#include "exec/gen-icount.h"
|
||||
#include "semihosting/semihost.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
|
||||
/* is_jmp field values */
|
||||
#define DISAS_UPDATE DISAS_TARGET_1 /* cpu state was modified dynamically */
|
||||
|
||||
|
|
|
@ -35,6 +35,11 @@
|
|||
|
||||
#include "exec/log.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
|
||||
/* is_jmp field values */
|
||||
#define DISAS_EXIT DISAS_TARGET_0 /* force exit to main loop */
|
||||
#define DISAS_JUMP DISAS_TARGET_1 /* exit via jmp_pc/jmp_pc_imm */
|
||||
|
|
|
@ -41,6 +41,10 @@
|
|||
#include "qemu/qemu-print.h"
|
||||
#include "qapi/error.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
#define CPU_SINGLE_STEP 0x1
|
||||
#define CPU_BRANCH_STEP 0x2
|
||||
|
||||
|
|
|
@ -33,6 +33,10 @@
|
|||
#include "instmap.h"
|
||||
#include "internals.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
/* global register indices */
|
||||
static TCGv cpu_gpr[32], cpu_gprh[32], cpu_pc, cpu_vl, cpu_vstart;
|
||||
static TCGv_i64 cpu_fpr[32]; /* assume F and D extensions */
|
||||
|
|
|
@ -28,6 +28,11 @@
|
|||
#include "exec/translator.h"
|
||||
#include "exec/log.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
|
||||
typedef struct DisasContext {
|
||||
DisasContextBase base;
|
||||
CPURXState *env;
|
||||
|
|
|
@ -46,6 +46,10 @@
|
|||
#include "exec/log.h"
|
||||
#include "qemu/atomic128.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
|
||||
/* Information that (most) every instruction needs to manipulate. */
|
||||
typedef struct DisasContext DisasContext;
|
||||
|
|
|
@ -29,6 +29,10 @@
|
|||
#include "exec/log.h"
|
||||
#include "qemu/qemu-print.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
|
||||
typedef struct DisasContext {
|
||||
DisasContextBase base;
|
||||
|
|
|
@ -33,6 +33,9 @@
|
|||
#include "exec/log.h"
|
||||
#include "asi.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
#define DYNAMIC_PC 1 /* dynamic pc value */
|
||||
#define JUMP_PC 2 /* dynamic pc value which takes only two values
|
||||
|
|
|
@ -33,6 +33,11 @@
|
|||
#include "exec/translator.h"
|
||||
#include "exec/log.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
|
||||
/*
|
||||
* TCG registers
|
||||
*/
|
||||
|
|
|
@ -45,6 +45,10 @@
|
|||
|
||||
#include "exec/log.h"
|
||||
|
||||
#define HELPER_H "helper.h"
|
||||
#include "exec/helper-info.c.inc"
|
||||
#undef HELPER_H
|
||||
|
||||
|
||||
struct DisasContext {
|
||||
DisasContextBase base;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue