Fix simulator
authorAnthony Green <green@moxielogic.com>
Mon, 4 Sep 2017 14:00:37 +0000 (10:00 -0400)
committerAnthony Green <green@moxielogic.com>
Mon, 4 Sep 2017 14:00:37 +0000 (10:00 -0400)
sim/moxie/ChangeLog
sim/moxie/interp.c

index 2371ff1..ba228ce 100644 (file)
@@ -1,3 +1,8 @@
+2017-09-03  Anthony Green  <green@moxielogic.com>
+
+       * interp.c (sim_engine_run): Always pass scpu into
+       sim_engine_halt.  Process events within inner loop.
+
 2016-01-10  Mike Frysinger  <vapier@gentoo.org>
 
        * config.in, configure: Regenerate.
index c9605d4..217aef3 100644 (file)
@@ -343,7 +343,7 @@ sim_engine_run (SIM_DESC sd,
                default:
                  {
                    MOXIE_TRACE_INSN ("SIGILL3");
-                   sim_engine_halt (sd, NULL, NULL, pc, sim_stopped, SIM_SIGILL);
+                   sim_engine_halt (sd, scpu, NULL, pc, sim_stopped, SIM_SIGILL);
                    break;
                  }
                }
@@ -394,7 +394,7 @@ sim_engine_run (SIM_DESC sd,
                  break;
                default:
                  MOXIE_TRACE_INSN ("SIGILL2");
-                 sim_engine_halt (sd, NULL, NULL, pc, sim_stopped, SIM_SIGILL);
+                 sim_engine_halt (sd, scpu, NULL, pc, sim_stopped, SIM_SIGILL);
                  break;
                }
            }
@@ -408,7 +408,7 @@ sim_engine_run (SIM_DESC sd,
            case 0x00: /* bad */
              opc = opcode;
              MOXIE_TRACE_INSN ("SIGILL0");
-             sim_engine_halt (sd, NULL, NULL, pc, sim_stopped, SIM_SIGILL);
+             sim_engine_halt (sd, scpu, NULL, pc, sim_stopped, SIM_SIGILL);
              break;
            case 0x01: /* ldi.l (immediate) */
              {
@@ -666,7 +666,7 @@ sim_engine_run (SIM_DESC sd,
              {
                opc = opcode;
                MOXIE_TRACE_INSN ("SIGILL0");
-               sim_engine_halt (sd, NULL, NULL, pc, sim_stopped, SIM_SIGILL);
+               sim_engine_halt (sd, scpu, NULL, pc, sim_stopped, SIM_SIGILL);
                break;
              }
            case 0x19: /* jsr */
@@ -933,7 +933,7 @@ sim_engine_run (SIM_DESC sd,
                  {
                  case 0x1: /* SYS_exit */
                    {
-                     sim_engine_halt (sd, NULL, NULL, pc, sim_exited,
+                     sim_engine_halt (sd, scpu, NULL, pc, sim_exited,
                                       cpu.asregs.regs[2]);
                      break;
                    }
@@ -1046,7 +1046,7 @@ sim_engine_run (SIM_DESC sd,
              break;
            case 0x35: /* brk */
              MOXIE_TRACE_INSN ("brk");
-             sim_engine_halt (sd, NULL, NULL, pc, sim_stopped, SIM_SIGTRAP);
+             sim_engine_halt (sd, scpu, NULL, pc, sim_stopped, SIM_SIGTRAP);
              pc -= 2; /* Adjust pc */
              break;
            case 0x36: /* ldo.b */
@@ -1100,7 +1100,7 @@ sim_engine_run (SIM_DESC sd,
            default:
              opc = opcode;
              MOXIE_TRACE_INSN ("SIGILL1");
-             sim_engine_halt (sd, NULL, NULL, pc, sim_stopped, SIM_SIGILL);
+             sim_engine_halt (sd, scpu, NULL, pc, sim_stopped, SIM_SIGILL);
              break;
            }
        }
@@ -1108,6 +1108,10 @@ sim_engine_run (SIM_DESC sd,
       cpu.asregs.insts++;
       pc += 2;
       cpu.asregs.regs[PC_REGNO] = pc;
+
+      if (sim_events_tick (sd))
+       sim_events_process (sd);
+
     } while (1);
 }