This commit was manufactured by cvs2svn to create branch
[external/binutils.git] / sim / mips / dv-tx3904cpu.c
index a040d4c..07b8521 100644 (file)
@@ -82,6 +82,7 @@
 struct tx3904cpu {
   /* Pending interrupts for delivery by event handler */
   int pending_reset, pending_nmi, pending_level;
+  struct hw_event* event;
 };
 
 
@@ -127,6 +128,7 @@ tx3904cpu_finish (struct hw *me)
   controller->pending_level = 0;
   controller->pending_reset = 0;
   controller->pending_nmi = 0;
+  controller->event = NULL;
 }
 
 
@@ -177,12 +179,15 @@ deliver_tx3904cpu_interrupt (struct hw *me,
             (controller->pending_level & ((SR >> status_IM_shift) & status_IM_mask)))
            {
              controller->pending_level = 0;
-             SignalExceptionInterrupt();
+             SignalExceptionInterrupt(0 /* dummy value */);
            }
          else
            {
              /* reschedule soon */
-             hw_event_queue_schedule (me, 1, deliver_tx3904cpu_interrupt, NULL);
+             if(controller->event != NULL)
+               hw_event_queue_deschedule(me, controller->event);
+             controller->event =
+               hw_event_queue_schedule (me, 1, deliver_tx3904cpu_interrupt, NULL);
            }
        } /* interrupt set */
     }
@@ -228,7 +233,10 @@ tx3904cpu_port_event (struct hw *me,
 
   /* Schedule an event to be delivered immediately after current
      instruction. */
-  hw_event_queue_schedule (me, 0, deliver_tx3904cpu_interrupt, NULL);
+  if(controller->event != NULL)
+    hw_event_queue_deschedule(me, controller->event);
+  controller->event =
+    hw_event_queue_schedule (me, 0, deliver_tx3904cpu_interrupt, NULL);
 }