From 906192d7859f9e768fc73f330e10d3b3a4ddaba3 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Sat, 5 Jun 2021 10:21:46 -0400 Subject: [PATCH] sim: cgen: inline cgen_init logic This function has done only one thing: post-process command line settings to see if profiling or tracing has been enabled, and if so, set the run_fast_p flag in the simulator state. That flag is only used in one place: to select the fast or slow cgen engine. By inlining the run_fast_p logic to the one place it's used, we can delete a good amount of logic specific to cgen ports: both the call to cgen_init and the conditional simulator state. This in turn allows us to have a single simulator state struct across all ports so we can share objects more between them, and makes the sim_open calls look more consistent. --- sim/bpf/ChangeLog | 4 ++++ sim/bpf/sim-if.c | 4 ---- sim/common/ChangeLog | 9 +++++++++ sim/common/cgen-defs.h | 14 -------------- sim/common/cgen-run.c | 23 ++++++++++++++++++++++- sim/common/cgen-utils.c | 35 ----------------------------------- sim/common/sim-base.h | 10 ---------- sim/cris/ChangeLog | 4 ++++ sim/cris/sim-if.c | 4 ---- sim/frv/ChangeLog | 4 ++++ sim/frv/sim-if.c | 4 ---- sim/iq2000/ChangeLog | 4 ++++ sim/iq2000/sim-if.c | 4 ---- sim/lm32/ChangeLog | 4 ++++ sim/lm32/sim-if.c | 4 ---- sim/m32r/ChangeLog | 4 ++++ sim/m32r/sim-if.c | 4 ---- sim/or1k/ChangeLog | 6 ++++++ sim/or1k/sim-if.c | 4 ---- sim/or1k/traps.c | 2 +- 20 files changed, 62 insertions(+), 89 deletions(-) diff --git a/sim/bpf/ChangeLog b/sim/bpf/ChangeLog index f5f5716259..42143db129 100644 --- a/sim/bpf/ChangeLog +++ b/sim/bpf/ChangeLog @@ -1,3 +1,7 @@ +2021-06-09 Mike Frysinger + + * sim-if.c (sim_open): Delete cgen_init call. + 2021-05-17 Mike Frysinger * sim-main.h (struct sim_state): Delete. diff --git a/sim/bpf/sim-if.c b/sim/bpf/sim-if.c index 185e96dd7b..436cc86f41 100644 --- a/sim/bpf/sim-if.c +++ b/sim/bpf/sim-if.c @@ -175,10 +175,6 @@ sim_open (SIM_OPEN_KIND kind, bpf_cgen_init_dis (cd); } - /* Initialize various cgen things not done by common framework. - Must be done after bpf_cgen_cpu_open. */ - cgen_init (sd); - /* XXX do eBPF sim specific initializations. */ return sd; diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog index 576b02f386..dbe9236056 100644 --- a/sim/common/ChangeLog +++ b/sim/common/ChangeLog @@ -1,3 +1,12 @@ +2021-06-09 Mike Frysinger + + * cgen-defs.h (STATE_RUN_FAST_P, CGEN_STATE, cgen_init): Delete. + * cgen-run.c (cgen_get_fast_p): New function. + (sim_resume): Move fast_p up and call cgen_get_fast_p. + * cgen-utils.c (cgen_init): Delete. + * sim-base.h: Delete cgen-sim.h include. + (struct sim_state): Delete cgen_state and STATE_CGEN_STATE. + 2021-06-08 Mike Frysinger * Make-common.in (IGEN_RUN): New variable. diff --git a/sim/common/cgen-defs.h b/sim/common/cgen-defs.h index dab2f9ff16..520c29cb3b 100644 --- a/sim/common/cgen-defs.h +++ b/sim/common/cgen-defs.h @@ -138,22 +138,8 @@ typedef enum { #define ENDSWITCH(N) #endif -/* Simulator state. */ - -/* CGEN_STATE contains additional state information not present in - sim_state_base. */ - -typedef struct cgen_state { - /* Non-zero if no tracing or profiling is selected. */ - int run_fast_p; -#define STATE_RUN_FAST_P(sd) (STATE_CGEN_STATE (sd).run_fast_p) -} CGEN_STATE; - /* Various utilities. */ -/* Called after sim_post_argv_init to do any cgen initialization. */ -extern void cgen_init (SIM_DESC); - /* Return the name of an insn. */ extern CPU_INSN_NAME_FN cgen_insn_name; diff --git a/sim/common/cgen-run.c b/sim/common/cgen-run.c index 443b62a0bb..9420942af8 100644 --- a/sim/common/cgen-run.c +++ b/sim/common/cgen-run.c @@ -51,6 +51,24 @@ static void prime_cpu (SIM_CPU *, int); static void engine_run_1 (SIM_DESC, int, int); static void engine_run_n (SIM_DESC, int, int, int, int); +/* If no profiling or tracing has been enabled, run in fast mode. */ +static int +cgen_get_fast_p (SIM_DESC sd) +{ + int i, c; + int run_fast_p = 1; + + for (c = 0; c < MAX_NR_PROCESSORS; ++c) + { + SIM_CPU *cpu = STATE_CPU (sd, c); + + if (PROFILE_ANY_P (cpu) || TRACE_ANY_P (cpu)) + return 0; + } + + return 1; +} + /* sim_resume for cgen */ void @@ -59,9 +77,13 @@ sim_resume (SIM_DESC sd, int step, int siggnal) sim_engine *engine = STATE_ENGINE (sd); jmp_buf buf; int jmpval; + static int fast_p = -1; ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER); + if (fast_p == -1) + fast_p = cgen_get_fast_p (sd); + /* we only want to be single stepping the simulator once */ if (engine->stepper != NULL) { @@ -102,7 +124,6 @@ sim_resume (SIM_DESC sd, int step, int siggnal) && STATE_OPEN_KIND (sd) == SIM_OPEN_STANDALONE) ? 0 : 8); /*FIXME: magic number*/ - int fast_p = STATE_RUN_FAST_P (sd); sim_events_preprocess (sd, last_cpu_nr >= nr_cpus, next_cpu_nr >= nr_cpus); if (next_cpu_nr >= nr_cpus) diff --git a/sim/common/cgen-utils.c b/sim/common/cgen-utils.c index 890ed0218d..1310790467 100644 --- a/sim/common/cgen-utils.c +++ b/sim/common/cgen-utils.c @@ -89,41 +89,6 @@ const CGEN_INSN cgen_virtual_insn_table[] = { & virtual_insn_entries[5] } }; -/* Initialize cgen things. - This is called after sim_post_argv_init. */ - -void -cgen_init (SIM_DESC sd) -{ - int i, c; - - /* If no profiling or tracing has been enabled, run in fast mode. */ - { - int run_fast_p = 1; - - for (c = 0; c < MAX_NR_PROCESSORS; ++c) - { - SIM_CPU *cpu = STATE_CPU (sd, c); - - for (i = 0; i < MAX_PROFILE_VALUES; ++i) - if (CPU_PROFILE_FLAGS (cpu) [i]) - { - run_fast_p = 0; - break; - } - for (i = 0; i < MAX_TRACE_VALUES; ++i) - if (CPU_TRACE_FLAGS (cpu) [i]) - { - run_fast_p = 0; - break; - } - if (! run_fast_p) - break; - } - STATE_RUN_FAST_P (sd) = run_fast_p; - } -} - /* Return the name of insn number I. */ const char * diff --git a/sim/common/sim-base.h b/sim/common/sim-base.h index 7dbf294338..054b2ba0c6 100644 --- a/sim/common/sim-base.h +++ b/sim/common/sim-base.h @@ -88,10 +88,6 @@ typedef struct _sim_cpu sim_cpu; #include "sim-cpu.h" #include "sim-assert.h" -#ifdef CGEN_ARCH -# include "cgen-sim.h" -#endif - struct sim_state { /* All the cpus for this instance. */ sim_cpu *cpu[MAX_NR_PROCESSORS]; @@ -217,12 +213,6 @@ struct sim_state { void *arch_data; #define STATE_ARCH_DATA(sd) ((sd)->arch_data) -#ifdef CGEN_ARCH - /* Various cgen runtime state. */ - CGEN_STATE cgen_state; -#endif -#define STATE_CGEN_STATE(sd) ((sd)->cgen_state) - /* Marker for those wanting to do sanity checks. This should remain the last member of this struct to help catch miscompilation errors. */ diff --git a/sim/cris/ChangeLog b/sim/cris/ChangeLog index 5482e08319..c0bb314e10 100644 --- a/sim/cris/ChangeLog +++ b/sim/cris/ChangeLog @@ -1,3 +1,7 @@ +2021-06-09 Mike Frysinger + + * sim-if.c (sim_open): Delete cgen_init call. + 2021-05-24 Mike Frysinger * cris-desc.c, cris-desc.h, cris-opc.h: Moved to opcodes/. diff --git a/sim/cris/sim-if.c b/sim/cris/sim-if.c index 6613a93ecc..c6dcc23c93 100644 --- a/sim/cris/sim-if.c +++ b/sim/cris/sim-if.c @@ -940,10 +940,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd, #endif } - /* Initialize various cgen things not done by common framework. - Must be done after cris_cgen_cpu_open. */ - cgen_init (sd); - cris_set_callbacks (callback); return sd; diff --git a/sim/frv/ChangeLog b/sim/frv/ChangeLog index 4ca57d3f4f..060b0a2407 100644 --- a/sim/frv/ChangeLog +++ b/sim/frv/ChangeLog @@ -1,3 +1,7 @@ +2021-06-09 Mike Frysinger + + * sim-if.c (sim_open): Delete cgen_init call. + 2021-05-29 Mike Frysinger * cache.h (frv_cache_unlock): New prototype. diff --git a/sim/frv/sim-if.c b/sim/frv/sim-if.c index c5fd93f0b3..8ac9665f4c 100644 --- a/sim/frv/sim-if.c +++ b/sim/frv/sim-if.c @@ -147,10 +147,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, bfd *abfd, frv_cgen_init_dis (cd); } - /* Initialize various cgen things not done by common framework. - Must be done after frv_cgen_cpu_open. */ - cgen_init (sd); - /* CPU specific initialization. */ for (i = 0; i < MAX_NR_PROCESSORS; ++i) { diff --git a/sim/iq2000/ChangeLog b/sim/iq2000/ChangeLog index d5805edfad..2e80084aed 100644 --- a/sim/iq2000/ChangeLog +++ b/sim/iq2000/ChangeLog @@ -1,3 +1,7 @@ +2021-06-09 Mike Frysinger + + * sim-if.c (sim_open): Delete cgen_init call. + 2021-05-17 Mike Frysinger * sim-main.h (struct sim_state): Delete. diff --git a/sim/iq2000/sim-if.c b/sim/iq2000/sim-if.c index b363eb04a2..679d516403 100644 --- a/sim/iq2000/sim-if.c +++ b/sim/iq2000/sim-if.c @@ -122,10 +122,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd, iq2000_cgen_init_dis (cd); } - /* Initialize various cgen things not done by common framework. - Must be done after iq2000_cgen_cpu_open. */ - cgen_init (sd); - return sd; } diff --git a/sim/lm32/ChangeLog b/sim/lm32/ChangeLog index c014a6d8b5..90920635f4 100644 --- a/sim/lm32/ChangeLog +++ b/sim/lm32/ChangeLog @@ -1,3 +1,7 @@ +2021-06-09 Mike Frysinger + + * sim-if.c (sim_open): Delete cgen_init call. + 2021-05-17 Mike Frysinger * sim-main.h (struct sim_state): Delete. diff --git a/sim/lm32/sim-if.c b/sim/lm32/sim-if.c index 1cccf626b6..3d4ee35d74 100644 --- a/sim/lm32/sim-if.c +++ b/sim/lm32/sim-if.c @@ -182,10 +182,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd, lm32_cgen_init_dis (cd); } - /* Initialize various cgen things not done by common framework. - Must be done after lm32_cgen_cpu_open. */ - cgen_init (sd); - return sd; } diff --git a/sim/m32r/ChangeLog b/sim/m32r/ChangeLog index 04d342defe..f9d3079fcd 100644 --- a/sim/m32r/ChangeLog +++ b/sim/m32r/ChangeLog @@ -1,3 +1,7 @@ +2021-06-09 Mike Frysinger + + * sim-if.c (sim_open): Delete cgen_init call. + 2021-05-17 Mike Frysinger * sim-main.h (struct sim_state): Delete. diff --git a/sim/m32r/sim-if.c b/sim/m32r/sim-if.c index a6d8c48616..e08a5d461a 100644 --- a/sim/m32r/sim-if.c +++ b/sim/m32r/sim-if.c @@ -124,10 +124,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd, m32r_cgen_init_dis (cd); } - /* Initialize various cgen things not done by common framework. - Must be done after m32r_cgen_cpu_open. */ - cgen_init (sd); - for (c = 0; c < MAX_NR_PROCESSORS; ++c) { /* Only needed for profiling, but the structure member is small. */ diff --git a/sim/or1k/ChangeLog b/sim/or1k/ChangeLog index 3484c07055..689f038a38 100644 --- a/sim/or1k/ChangeLog +++ b/sim/or1k/ChangeLog @@ -1,3 +1,9 @@ +2021-06-09 Mike Frysinger + + * sim-if.c (sim_open): Delete cgen_init call. + * traps.c (or1k32bf_fpu_error): Replace STATE_RUN_FAST_P with + PROFILE_ANY_P and TRACE_ANY_P. + 2021-05-17 Mike Frysinger * sim-main.h: Move or1k-opc.h include. diff --git a/sim/or1k/sim-if.c b/sim/or1k/sim-if.c index 005124b9ad..e6342ee42c 100644 --- a/sim/or1k/sim-if.c +++ b/sim/or1k/sim-if.c @@ -238,10 +238,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, struct bfd *abfd, or1k_cgen_init_dis (cd); } - /* Initialize various cgen things not done by common framework. - Must be done after or1k_cgen_cpu_open. */ - cgen_init (sd); - /* Do some final OpenRISC sim specific initializations. */ for (c = 0; c < MAX_NR_PROCESSORS; ++c) { diff --git a/sim/or1k/traps.c b/sim/or1k/traps.c index 7f5a38f68b..bb428fa4a8 100644 --- a/sim/or1k/traps.c +++ b/sim/or1k/traps.c @@ -104,7 +104,7 @@ or1k32bf_fpu_error (CGEN_FPU* fpu, int status) per-instruction callbacks are not triggered which would allow us to track the PC. This means we cannot track which instruction caused the FPU error. */ - if (STATE_RUN_FAST_P (sd) == 1) + if (!PROFILE_ANY_P (current_cpu) && !TRACE_ANY_P (current_cpu)) sim_io_eprintf (sd, "WARNING: ignoring fpu error caught in fast mode.\n"); else -- 2.34.1