Timing and speed issues with pin change interrupt based routines - Arduino slow?

code continued...

/**************************************************************************
*
*
/**************************************************************************/
void eoa(int pin) {
  switch (mode[pin]) {
    case AR:
    break;
    case AD:
      bitClear(PORTD, GATEpin[pin]);
    break;
    case LOOP:
      bitClear(PORTD, GATEpin[pin]);
    break;
  }
}



/**************************************************************************
*
*
/**************************************************************************/
void eoc(int pin) {
   if (mode[pin] == LOOP) {
      bitSet(PORTD, GATEpin[pin]);
  }();
}


/**************************************************************************
*
*
/**************************************************************************/
void trig(int pin) {
    state = bitRead(PIND,pin);           
  switch (mode[pin]) {
    case AR:
      if (state) 
            bitSet(PORTD, GATEpin[pin]);
        else 
          bitClear(PORTD, GATEpin[pin]);
    break;
    case AD:
       if (state) {
             bitSet(PORTD, GATEpin[pin]);
       }    
    break;
    case LOOP:
      if (state) { 
         bitSet(PORTD, GATEpin[pin]);
        }
        
    break;
  }
}



/**************************************************************************
*
*
/**************************************************************************/
void EOA0() {
    EOA_flag[0] = ON;
}

void EOA1() {
  EOA_flag[1] = ON;
}

void EOA2() {
  EOA_flag[2] = ON;
}

void EOA3() {
  EOA_flag[3] = ON;
}


/**************************************************************************
*
*
/**************************************************************************/
void EOC0() {
  EOC_flag[0] = ON;
}

void EOC1() {
 EOC_flag[1] = ON;
}

void EOC2() {
  EOC_flag[2] = ON;
}

void EOC3() {
  EOC_flag[3] = ON;
}

/**************************************************************************
*
*
/**************************************************************************/
void TRIG0() {
  TRIG_flag[0] = ON;
}

void TRIG1() {
  if (quadMode[0] == OFF) {
    TRIG_flag[1] = ON;}
}

void TRIG2() {
  TRIG_flag[2] = ON;
}

void TRIG3() {
  if (quadMode[1] == OFF) {
    TRIG_flag[3] = ON;
  }
}



/**************************************************************************
*
*
/**************************************************************************/
void checkEOA() {
  
  if (EOA_flag[0] == ON) {
    EOA_flag[0] = OFF;
    if (quadMode[0] == ON) digitalWrite(GATEpin[1], HIGH);
      else eoa(0);
   }


  if (EOA_flag[1] == ON) {
    EOA_flag[1] = OFF;
    if (quadMode[0] == ON) digitalWrite(GATEpin[0], LOW);
      else  eoa(1);
  }


  if (EOA_flag[2] == ON) {
    EOA_flag[2] = OFF;
    if (quadMode[1] == ON) digitalWrite(GATEpin[3], HIGH);
      else eoa(2);
  }


  if (EOA_flag[3] == ON) {
    EOA_flag[3] = OFF;
    if (quadMode[1] == ON) digitalWrite(GATEpin[2], LOW);
      else eoa(3); 
  }
}




/**************************************************************************
*
*
/**************************************************************************/
void checkEOC() {
 
  if (EOC_flag[0] == ON) {
     EOC_flag[0] = OFF;
    if (quadMode[0] == ON) {
      digitalWrite(GATEpin[0], HIGH);
      digitalWrite(GATEpin[1], LOW);
    } else eoc(0);  
  }


  if (EOC_flag[1] == ON) {
     EOC_flag[1] = OFF;
     if (quadMode[0] == OFF) eoc(1);  
  }

  if (EOC_flag[2] == ON) {
     EOC_flag[2] = OFF;
    if (quadMode[1] == ON) {
      digitalWrite(GATEpin[2], HIGH);
      digitalWrite(GATEpin[3], LOW);
    } else eoc(2); 
}

  if (EOC_flag[3] == ON) {
     EOC_flag[3] = OFF;
     if (quadMode[0] == OFF) eoc(3); 
  }

}




/**************************************************************************
*
*
/**************************************************************************/
void checkTRIG() {
  
   if (EOC_flag[0] == ON) {
     EOC_flag[0] = OFF;
     trig(0);
  }

   if (EOC_flag[1] == ON) {
     EOC_flag[1] = OFF;
     if (quadMode[0] == OFF) {
      trig(1);}
    }

   if (EOC_flag[2] == ON) {
     EOC_flag[2] = OFF;
     trig(2);
  }

  if (EOC_flag[3] == ON) {
     EOC_flag[3] = OFF;
     if (quadMode[1] == OFF) {
      trig(3);}
    }

}