Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
02/19/07 16:33
Read: times


 
#133255 - Optimizing and Keil/SDCC/Raisonance
Responding to: ???'s previous message
With default compiler settings, the Keil compiler generates the following.

line level    source

   1          unsigned char idata * data a;
   2          unsigned char idata * data b;
   3          
   4          void Func0()
   5          {
   6   1          *a++ = *b++;
   7   1      }
   8          
   9          
  10          void Func1()
  11          {
  12   1          *a = *b;
  13   1          ++a;
  14   1          ++b;
  15   1      }

ASSEMBLY LISTING OF GENERATED OBJECT CODE
             ; FUNCTION Func0 (BEGIN)
0000 AF00        R     MOV     R7,b
0002 0500        R     INC     b
0004 A807              MOV     R0,AR7
0006 E6                MOV     A,@R0
0007 AE00        R     MOV     R6,a
0009 0500        R     INC     a
000B A806              MOV     R0,AR6
000D F6                MOV     @R0,A
000E 22                RET     
             ; FUNCTION Func0 (END)

             ; FUNCTION Func1 (BEGIN)
0000 A800        R     MOV     R0,b
0002 E6                MOV     A,@R0
0003 A800        R     MOV     R0,a
0005 F6                MOV     @R0,A
0006 0500        R     INC     a
0008 0500        R     INC     b
000A 22                RET     
             ; FUNCTION Func1 (END)


Which is a far cry from the posted example.

Of course, the code gets worse if you eliminate using absolute register addressing. But, who would disable that (or any other "standard" 8051 optimization) in a real application?

Note that the SDCC compiler output given as a comparison uses absolute register addressing. So, comparing any compilers this way is not a legitimate comparison.

None of the comparisons list code size (just the number of instructions), execution speed, or other things like the number of registers used (which is important for optimizing functions that call these "test" functions). I've done that in the following table (* denotes the best numbers). Thanks to Rob for the Raisonance numbers.


*a++ = *b++;

            Keil      SDCC      Raisonance
---------------------------------------------
Code Size    15        13*          15
Time         14        12*          14
Regs Used     3*        3*           4



*a=*b; a++; b++;

            Keil      SDCC      Raisonance
---------------------------------------------
Code Size    11*       13           11*
Time         10*       12           10*
Regs Used     1*        3            2



Using a single, simple function to compare compiler output is fairly pointless. The optimizer in each of the compilers will do a better job on a larger application. And, at the end of the day, we're writing applications—not test cases.

If you're trying to optimize part of an application, write it in C and get it to work. Then, use a performance analyzer to measure where the performance is going and work on optimizing that.

The compiler is just a tool. It isn't a brain replacement (well, it's not supposed to be).

Jon

List of 68 messages in thread
TopicAuthorDate
Speed Recommendation            01/01/70 00:00      
   Time for processing            01/01/70 00:00      
   Get a 1X Chip            01/01/70 00:00      
      another 485 issue            01/01/70 00:00      
         slightly less            01/01/70 00:00      
            who gives a hoot            01/01/70 00:00      
               maybe yes, maybe not...            01/01/70 00:00      
   Choose the appropriate tool!            01/01/70 00:00      
      Don't have much of a choice!            01/01/70 00:00      
         drop the "coding standards"            01/01/70 00:00      
         Yikes.            01/01/70 00:00      
            down memory lane            01/01/70 00:00      
               a possible compromise...            01/01/70 00:00      
                  Well...            01/01/70 00:00      
               The other end of the spectrum ...            01/01/70 00:00      
                  afer quite a few iterations....            01/01/70 00:00      
                     The guide to writing unmaintainable code says:            01/01/70 00:00      
         That's the kind of nonsense...            01/01/70 00:00      
   put some load on the hardware            01/01/70 00:00      
      Jan, oh Jan            01/01/70 00:00      
      9-bit - more work for the hardware!            01/01/70 00:00      
         true, but...            01/01/70 00:00      
            It is...            01/01/70 00:00      
               calculate the ISR after making the ISR skip            01/01/70 00:00      
   Optimizing C            01/01/70 00:00      
      just one example            01/01/70 00:00      
         The advantage is...            01/01/70 00:00      
            If the thinking had preceded the coding ...            01/01/70 00:00      
               you miss the point            01/01/70 00:00      
                  then what's the chance of having him to C-craft?            01/01/70 00:00      
                     zero            01/01/70 00:00      
                     Job security, of course.            01/01/70 00:00      
      Examples are not equivalent            01/01/70 00:00      
         Wasn\'t saying that they were.            01/01/70 00:00      
            I just tried SDCC...            01/01/70 00:00      
               Hm, can you post the assembly output ?            01/01/70 00:00      
                  Keil does this            01/01/70 00:00      
                     Interesting.            01/01/70 00:00      
                     Optimizing and Keil/SDCC/Raisonance            01/01/70 00:00      
                        Retort            01/01/70 00:00      
                           Register Banks...            01/01/70 00:00      
                              benchmarks            01/01/70 00:00      
                              tools differ            01/01/70 00:00      
                              Clarification            01/01/70 00:00      
                                 comments            01/01/70 00:00      
                                    not to write things twice            01/01/70 00:00      
                                       no need            01/01/70 00:00      
                                          And how does this produce two incarnations?            01/01/70 00:00      
                                             like this            01/01/70 00:00      
                                                hehe            01/01/70 00:00      
                                                   this is no better confusion-wise            01/01/70 00:00      
                                                      what is "efficient"            01/01/70 00:00      
                                                         ok is \'safe\' better?            01/01/70 00:00      
                                                            How to convey our ideas to the mcu?            01/01/70 00:00      
                                                               Carefull now, you could end with Prolog :)            01/01/70 00:00      
                                                                  my kids            01/01/70 00:00      
                                                            Huge code != huge time            01/01/70 00:00      
                                                               This comes under the heading of "famous last words            01/01/70 00:00      
                        the question I always raise on this            01/01/70 00:00      
                           Here's Why...            01/01/70 00:00      
                  SDCC            01/01/70 00:00      
                     Thanks. Also interesting.            01/01/70 00:00      
                     SDCC peephole optimiser conflict            01/01/70 00:00      
                  Raisonance            01/01/70 00:00      
   help me ,I NEED SOME HELP ON MY PROJECT            01/01/70 00:00      
      that is NOT 'help'            01/01/70 00:00      
      Well that is not the way to get it!            01/01/70 00:00      
      start a new thread!            01/01/70 00:00      

Back to Subject List