Tengo curiosidad por saber si hay alguna ganancia en particular por usar una llamada en lugar de un goto cuando se verifica cada fuente de interrupción en un ISR. Mi código actual haría algo como esto:
.intr CODE 4
pagesel $
btfsc INTCON, TMR0IF ; Timer0
goto Timer0_Entry
banksel PIR1 ; Bank #0
btfsc PIR1, SSP1IF
goto I2C_Entry ; I2C Peripheral
...
pero eso es en una imagen mejorada de rango medio 16 donde se realiza el guardado de contexto por ti. Si estuviera en un PIC16F88, habría una victoria (menor) por evitar todo el tedioso contexto, salvo en una situación en la que estuvieran pendientes dos fuentes de interrupción simultáneas.
Al hacerlo con gotos, se crea implícitamente una lista de prioridades que puede detener otras fuentes. Si tuviera varias interrupciones de una fuente, esa fuente detendría las otras fuentes irq hasta que se detenga. Lo logré una vez al olvidar que el indicador de irq del puerto serie está activado de forma predeterminada.
Pero aparte de eso, ¿es solo una cuestión de gusto? El golpe que recibes (en una situación de irq múltiple) al hacer una devolución y luego regresar al ISR de inmediato no es particularmente grave.