We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
C51 will generate different code for the following function:
void timer1 (void) interrupt 3 { second; #pragma asm clr TF1 #pragma endasm }
Compiler v8.08 code (edited)
USING 0 timer1: ; #pragma asm clr TF1 ; #pragma endasm RETI
Compiler v8.17 code (edited)
USING 0 timer1: PUSH ACC PUSH B PUSH DPH PUSH DPL PUSH PSW MOV PSW,#00H PUSH AR0 ... PUSH AR7 USING 0 ; #pragma asm clr TF1 ; #pragma endasm POP AR7 ... POP AR0 POP PSW POP DPL POP DPH POP B POP ACC RETI
C51 v8.17 generates code to save and restore all registers, as soon as the (very simplified, nonsense) C function contains any assembly source, whereas C51 v8.08 does not. For a function containing equivalent C code only (TF=0), nothing would be saved with either version.
Is there a reason for the different code generated by v8.17 ? How could saving/restoring of the registes be avoided ?