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

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
08/12/05 06:01
Read: times


 
#99242 - the answer
Responding to: ???'s previous message
One step of assembler optimization is replacing CALL following by RET with one JMP. In my case:
A_SUBROUTINE:
        CALL    SAVE_CONTEXT
; a work
        CALL    RESTORE_CONTEXT
        RET
might be replaced with:
A_SUBROUTINE:
        CALL    SAVE_CONTEXT
; a work
        JMP    RESTORE_CONTEXT

But in my case this kind of optimization must not be used such way!
Routine RESTORE_CONTEXT supposes that return address is placed on the top of stack when it is called. And this is correct when the routine is called with CALL. But when it is executed by JMP the return address is not placed on the top of stack; the address is in stack deeply under values of all stored registers. So the routine uses wrong values as return address (here: values stored at the top of stack are values of R6:R7).

This puzzle shows that there are subroutines which may not be executed with command JMP even they do work with CALL fully correct and as Dan said: CALL + RET != JUMP sometimes.

Regards,
Oleg

List of 53 messages in thread
TopicAuthorDate
Week puzzle            01/01/70 00:00      
   why is one a subroutine and another a ta            01/01/70 00:00      
      no RTOS            01/01/70 00:00      
   last there was discussion, in this an an            01/01/70 00:00      
      week            01/01/70 00:00      
   Last pushed in - first popped out            01/01/70 00:00      
      come in            01/01/70 00:00      
   Will it work?            01/01/70 00:00      
      Yes it will            01/01/70 00:00      
         Mmmmm?            01/01/70 00:00      
         And another thought            01/01/70 00:00      
            it's perfectly safe...            01/01/70 00:00      
               Still not convinced            01/01/70 00:00      
                  dangers            01/01/70 00:00      
                     Choices            01/01/70 00:00      
                        the same in real life            01/01/70 00:00      
                           Smart and Neat Code            01/01/70 00:00      
                              are you a math major? :)            01/01/70 00:00      
                                 Not a maths major            01/01/70 00:00      
                        yes            01/01/70 00:00      
                  what dangerous            01/01/70 00:00      
                     If misuse is chronic...            01/01/70 00:00      
   CALL + RET != JUMP            01/01/70 00:00      
      ?????????            01/01/70 00:00      
         oops Oleg Has the code to manage it sorr            01/01/70 00:00      
            return address            01/01/70 00:00      
      you got it!            01/01/70 00:00      
         Thanks for the puzzle :-)            01/01/70 00:00      
   a question            01/01/70 00:00      
      why not            01/01/70 00:00      
         well            01/01/70 00:00      
            optimisation            01/01/70 00:00      
               I have seen that happen when the require            01/01/70 00:00      
                  it's the same than if you miss a push or            01/01/70 00:00      
         The Trick is:            01/01/70 00:00      
   the answer            01/01/70 00:00      
      you never answered            01/01/70 00:00      
         solid or intermittent problem            01/01/70 00:00      
            difference between solid or intermittent            01/01/70 00:00      
   Why Push!!!            01/01/70 00:00      
      side effect            01/01/70 00:00      
         Another SAVE_CONTEXT            01/01/70 00:00      
            Sounds like a housekeeping nightmare            01/01/70 00:00      
               Sounds like a housekeeping nightmare            01/01/70 00:00      
               it IS a housekeeping nightmare            01/01/70 00:00      
                  Erik            01/01/70 00:00      
                     Pay no attention            01/01/70 00:00      
                        Donald, if you took the time to read wha            01/01/70 00:00      
                           Reading difficulties            01/01/70 00:00      
                              sorry, used wrong word            01/01/70 00:00      
                     no problem with any post, just with stat            01/01/70 00:00      
            maybe because            01/01/70 00:00      
      eh?            01/01/70 00:00      

Back to Subject List