sim: mips: invert sim_state storage
authorMike Frysinger <vapier@gentoo.org>
Fri, 22 Jan 2016 03:40:43 +0000 (22:40 -0500)
committerMike Frysinger <vapier@gentoo.org>
Mon, 17 May 2021 05:00:08 +0000 (01:00 -0400)
sim/mips/ChangeLog
sim/mips/interp.c
sim/mips/micromips.igen
sim/mips/micromipsrun.c
sim/mips/sim-main.h

index 68c2503ec600983dd7a34c2452e17d004efa90d6..ca8a1fb68b19960f3813d6624d5df46d90c8c808 100644 (file)
@@ -1,3 +1,15 @@
+2021-05-17  Mike Frysinger  <vapier@gentoo.org>
+
+       * interp.c (sim_open): Switch to sim_state_alloc_extra.
+       * micromips.igen: Change SD to mips_sim_state.
+       * micromipsrun.c (sim_engine_run): Likewise.
+       * sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
+       (watch_options_install): Delete.
+       (struct swatch): Delete.
+       (struct sim_state): Delete.
+       (struct mips_sim_state): New struct.
+       (MIPS_SIM_STATE): Define.
+
 2021-05-16  Mike Frysinger  <vapier@gentoo.org>
 
        * interp.c: Replace config.h include with defs.h.
index 25eb4975652e425d3d3846bd8147bcaa3c5405b8..2839715959c051fef8be729be35bd499cb709539 100644 (file)
@@ -343,7 +343,8 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb,
          struct bfd *abfd, char * const *argv)
 {
   int i;
-  SIM_DESC sd = sim_state_alloc (kind, cb);
+  SIM_DESC sd = sim_state_alloc_extra (kind, cb,
+                                      sizeof (struct mips_sim_state));
   sim_cpu *cpu;
 
   SIM_ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
index c32686ec89d14292f7f4b331a51e022065763b71..08c5bb7a2dc9756015b0c866e84efbd95b90d372 100644 (file)
@@ -58,7 +58,8 @@
 *micromips32:
 *micromips64:
 {
-  SD->isa_mode = target & 0x1;
+  struct mips_sim_state *state = MIPS_SIM_STATE (SD);
+  state->isa_mode = target & 0x1;
   return (target & (-(1 << 1)));
 }
 
 *micromips32:
 *micromips64:
 {
+  struct mips_sim_state *state = MIPS_SIM_STATE (SD);
   address_word region = (NIA & MASK (63, 26));
   NIA = do_micromips_jal (SD_, (region | (IMM_SHIFT_2BIT)) | ISA_MODE_MIPS32,
                          NIA, MICROMIPS_DELAYSLOT_SIZE_32);
-  SD->isa_mode = ISA_MODE_MIPS32;
+  state->isa_mode = ISA_MODE_MIPS32;
 }
 
 000000,00000,5.RS,0000111100,111100:POOL32A:32::JR
index 53a5c08118771f7afd4abddcd6dc194d7fff4e7b..f76a3822630e37567b55202fc40553ed1f1deb0a 100644 (file)
@@ -80,10 +80,11 @@ void
 sim_engine_run (SIM_DESC sd, int next_cpu_nr, int nr_cpus,
                int signal)
 {
+  struct mips_sim_state *state = MIPS_SIM_STATE (sd);
   micromips_m32_instruction_word instruction_0;
   sim_cpu *cpu = STATE_CPU (sd, next_cpu_nr);
   micromips32_instruction_address cia = CPU_PC_GET (cpu);
-  sd->isa_mode = ISA_MODE_MIPS32;
+  state->isa_mode = ISA_MODE_MIPS32;
 
   while (1)
     {
@@ -95,17 +96,17 @@ sim_engine_run (SIM_DESC sd, int next_cpu_nr, int nr_cpus,
         from the elf header.
         2. Setting the correct isa mode after a MIPS32 jump or branch
         instruction.  */
-      if ((sd->isa_mode == ISA_MODE_MIPS32)
+      if ((state->isa_mode == ISA_MODE_MIPS32)
          && ((cia & 0x1) == ISA_MODE_MICROMIPS))
        {
-         sd->isa_mode = ISA_MODE_MICROMIPS;
+         state->isa_mode = ISA_MODE_MICROMIPS;
          cia = cia & ~0x1;
        }
 
 #if defined (ENGINE_ISSUE_PREFIX_HOOK)
       ENGINE_ISSUE_PREFIX_HOOK ();
 #endif
-      switch (sd->isa_mode)
+      switch (state->isa_mode)
        {
        case ISA_MODE_MICROMIPS:
          nia =
index 12f70aefc06c2aaa9f5fe565665c4380e6d2205a..3c7ba271619efe7b2d6f4f9870027fcf244f9aa3 100644 (file)
@@ -20,6 +20,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 #ifndef SIM_MAIN_H
 #define SIM_MAIN_H
 
+#define SIM_HAVE_COMMON_SIM_STATE
+
 /* MIPS uses an unusual format for floating point quiet NaNs.  */
 #define SIM_QUIET_NAN_NEGATED
 
@@ -475,30 +477,12 @@ struct _sim_cpu {
 extern void mips_sim_close (SIM_DESC sd, int quitting);
 #define SIM_CLOSE_HOOK(...) mips_sim_close (__VA_ARGS__)
 
-/* MIPS specific simulator watch config */
-
-void watch_options_install (SIM_DESC sd);
-
-struct swatch {
-  sim_event *pc;
-  sim_event *clock;
-  sim_event *cycles;
-};
-
-
 /* FIXME: At present much of the simulator is still static */
-struct sim_state {
-
-  struct swatch watch;
-
-  sim_cpu *cpu[MAX_NR_PROCESSORS];
-
+struct mips_sim_state {
   /* microMIPS ISA mode.  */
   int isa_mode;
-
-  sim_state_base base;
 };
-
+#define MIPS_SIM_STATE(sd) ((struct mips_sim_state *) STATE_ARCH_DATA (sd))
 
 
 /* Status information: */