Estamos usando la versión Lite del compilador MicroChip PIC, por lo que quizás esa sea la razón, pero este simple cambio de un bit está generando un bucle donde no es necesario. Dado que el recuento de turnos es 1 (una constante), esperaría que el compilador no cree ningún bucle, una optimización elemental.
¿Hay un interruptor de optimización del compilador que alivie el bucle? Aquí está el código para el turno:
long foo; // a 32-bit value
// Shift foo one bit.
// A one-iteration loop is created!
foo >>= 1;
Y aquí está el código generado por el compilador. Como puede ver, el cambio está envuelto con un bucle de una iteración.
07F6 3001 MOVLW 0x1
07F7 00F2 MOVWF 0x72
07F8 37F6 ASRF 0x76, F
07F9 0CF5 RRF 0x75, F
07FA 0CF4 RRF 0x74, F
07FB 0CF3 RRF 0x73, F
07FC 0BF2 DECFSZ 0x72, F
EDIT
Versión del compilador: HI-TECH C Compilador para MCU PIC10 / 12/16 (Modo Lite) V9.81