+static void sh2_do_irq(SH2 *sh2, int level, int vector)
+{
+ sh2->irq_callback(sh2->is_slave, level);
+
+ sh2->r[15] -= 4;
+ WL(sh2->r[15], sh2->sr); /* push SR onto stack */
+ sh2->r[15] -= 4;
+ WL(sh2->r[15], sh2->pc); /* push PC onto stack */
+
+ /* set I flags in SR */
+ sh2->sr = (sh2->sr & ~I) | (level << 4);
+
+ /* fetch PC */
+ sh2->pc = RL(sh2->vbr + vector * 4);
+
+ /* 13 cycles at best */
+ sh2_icount -= 13;
+}
+