Wir verwenden die Lite-Version des MicroChip PIC-Compilers. Vielleicht ist das der Grund, aber diese einfache Ein-Bit-Verschiebung erzeugt eine Schleife, in der keine erforderlich ist. Da die Verschiebungszahl 1 (eine Konstante) ist, würde ich erwarten, dass der Compiler keine Schleife erstellt - eine elementare Optimierung.
Gibt es einen Compiler-Optimierungsschalter, der die Schleife verringern würde? Hier ist der Code für die Schicht:
long foo; // a 32-bit value
// Shift foo one bit.
// A one-iteration loop is created!
foo >>= 1;
Und hier ist der vom Compiler generierte Code. Wie Sie sehen können, wird die Verschiebung mit einer Schleife mit einer Iteration umschlossen.
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
BEARBEITEN
Compiler-Version: HI-TECH C-Compiler für PIC10 / 12/16-MCUs (Lite-Modus) V9.81