sim: avr: invert sim_state storage
authorMike Frysinger <vapier@gentoo.org>
Fri, 22 Jan 2016 03:34:05 +0000 (22:34 -0500)
committerMike Frysinger <vapier@gentoo.org>
Mon, 17 May 2021 04:58:32 +0000 (00:58 -0400)
sim/avr/ChangeLog
sim/avr/interp.c
sim/avr/sim-main.h

index 2a979aa6d9500023de599c0c4628dce8b322171c..a93bd599db026f9d07277a7aa390352e14179796 100644 (file)
@@ -1,3 +1,14 @@
+2021-05-17  Mike Frysinger  <vapier@gentoo.org>
+
+       * interp.c (do_call): Change sd to avr_sim_state.
+       (step_once): Likewise.
+       (sim_open): Likewise.
+       (sim_create_inferior): Likewise.
+       * sim-main.h (SIM_HAVE_COMMON_SIM_STATE): Define.
+       (struct sim_state): Delete.
+       (struct avr_sim_state): New struct.
+       (AVR_SIM_STATE): Define.
+
 2021-05-16  Mike Frysinger  <vapier@gentoo.org>
 
        * interp.c: Replace config.h include with defs.h.
index 75a10efe90a7cea436170a4d1faf77c106793da8..d456c39390a76303450240600e87d2c251ccefe7 100644 (file)
@@ -727,13 +727,13 @@ decode (unsigned int pc)
 static void
 do_call (SIM_CPU *cpu, unsigned int npc)
 {
-  SIM_DESC sd = CPU_STATE (cpu);
+  const struct avr_sim_state *state = AVR_SIM_STATE (CPU_STATE (cpu));
   unsigned int sp = read_word (REG_SP);
 
   /* Big endian!  */
   sram[sp--] = cpu->pc;
   sram[sp--] = cpu->pc >> 8;
-  if (sd->avr_pc22)
+  if (state->avr_pc22)
     {
       sram[sp--] = cpu->pc >> 16;
       cpu->cycles++;
@@ -893,9 +893,9 @@ step_once (SIM_CPU *cpu)
        /* Fall through */
       case OP_ret:
        {
-         SIM_DESC sd = CPU_STATE (cpu);
+         const struct avr_sim_state *state = AVR_SIM_STATE (CPU_STATE (cpu));
          unsigned int sp = read_word (REG_SP);
-         if (sd->avr_pc22)
+         if (state->avr_pc22)
            {
              cpu->pc = sram[++sp] << 16;
              cpu->cycles++;
@@ -1681,7 +1681,7 @@ 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 avr_sim_state));
   SIM_ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER);
 
   /* The cpu data is kept in a separately allocated chunk of memory.  */
@@ -1752,6 +1752,7 @@ SIM_RC
 sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
                     char * const *argv, char * const *env)
 {
+  struct avr_sim_state *state = AVR_SIM_STATE (sd);
   SIM_CPU *cpu = STATE_CPU (sd, 0);
   SIM_ADDR addr;
 
@@ -1763,7 +1764,7 @@ sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
   sim_pc_set (cpu, addr);
 
   if (abfd != NULL)
-    sd->avr_pc22 = (bfd_get_mach (abfd) >= bfd_mach_avr6);
+    state->avr_pc22 = (bfd_get_mach (abfd) >= bfd_mach_avr6);
 
   return SIM_RC_OK;
 }
index 24f975fb615a379a260f036429d29d91a0b938a7..4f18882ae466fd95c69f47fb516a74a3540f4c42 100644 (file)
@@ -19,6 +19,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
+
 #include "sim-basics.h"
 
 #include "sim-base.h"
@@ -33,13 +35,11 @@ struct _sim_cpu {
   sim_cpu_base base;
 };
 
-struct sim_state {
-  sim_cpu *cpu[MAX_NR_PROCESSORS];
-
+struct avr_sim_state {
   /* If true, the pc needs more than 2 bytes.  */
   int avr_pc22;
-
-  sim_state_base base;
 };
 
+#define AVR_SIM_STATE(sd) ((struct avr_sim_state *) STATE_ARCH_DATA (sd))
+
 #endif