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

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
02/20/07 01:14
Read: times


 
#133276 - Retort
Responding to: ???'s previous message
Jon Ward said:
Which is a far cry from the posted example.

Can you read? I clearly stated that:

Chris Kelly said:
The code of Func0 is improved (but not to the point of Func1) if I allow the use of absolute register addresses.

So I already covered the case of your code posted above.

Jon Ward said:
Of course, the code gets worse if you eliminate using absolute register addressing.

Why should it get worse? It's trivial to see that even if the compiler insists on applying the post-increment prior to the dereference it could have done it as:

; FUNCTION Func0 (BEGIN)
    R     MOV     R0,b
    R     INC     b
          MOV     A,@R0
    R     MOV     R0,a
    R     INC     a
          MOV     @R0,A
          RET
; FUNCTION Func0 (END)
See! No absolute register addressing required. And it's the same number of instructions and cycles as the "hand optimised" Func1.

Jon Ward said:
But, who would disable that (or any other "standard" 8051 optimization) in a real application?

I do. Because once you have multiple register sets in use it becomes very difficult to manage assignment of register sets to functions. And if you want to have a common function, callable from different register set functions, then it's impossible with absolute register addressing turned on.

And the worst bit is that even though the compiler knows that FuncA using register set 1 is directly calling FuncB with register set 2 it doesn't even issue a warning! It just generates code that doesn't work!

Jon Ward said:
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.

I would agree, if "absolute register addressing" was in anyway needed in these simple functions, but as I have shown above, it's not.

Jon Ward said:
Using a single, simple function to compare compiler output is fairly pointless.

Not for Keil it's not. I distilled the problem down to a simple case. I see this sort of ugly code generation all the time from Keil. It doesn't matter whether the code is in a separate function or in the middle of a loop or anything else. Keil always seems to do a bad job with this sort of thing.

Jon Ward said:
The optimizer in each of the compilers will do a better job on a larger application.

Absolutely not in Keil's case. It can't even get the simple things right. It definitely does not do better if you give it more code. I look at its assembly output often, and I am invariably shaking my head over what it has generated.


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