This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

bad optimization with Rn=0;

#include <AT892051.H>
#pragma OPTIMIZE (9, SPEED)

void main (void)
{ unsigned char R;
        R=0;  // this statement always produces ASM-code:
          // CLR  A
          // MOV  R7,A
          // ...!!!!.... why not MOV R7,#0   (2 bytes 1 cycle instead of 2 bytes and 2 cycles)
          //  but, if R=5;   is produced code: MOV  R7,#05H  ;;;;;;;  :o)
//....
   if(P1==0x55) R++;
//...
//...
}

Parents
  • I do not think anyone (at least not in this forum) will argue that Keil makes the best toolset for the '51.
    However, the constant "move everything through the accumulator" is, indeed a place where the Keil compiler could use some improvement. This improvement, however should not be an optimixztion, but a compiler improvement. One of my basic beefs with the Keil tools is that some things that should be done (and probably could be implemeted better) by the compiler (e.g. switch) are done by the optimizer.

    Erik

Reply
  • I do not think anyone (at least not in this forum) will argue that Keil makes the best toolset for the '51.
    However, the constant "move everything through the accumulator" is, indeed a place where the Keil compiler could use some improvement. This improvement, however should not be an optimixztion, but a compiler improvement. One of my basic beefs with the Keil tools is that some things that should be done (and probably could be implemeted better) by the compiler (e.g. switch) are done by the optimizer.

    Erik

Children