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

function argument assigne to ARM register in assembly

Note: This was originally posted on 4th September 2009 at http://forums.arm.com

Hello,

I am developing application on OMAP3530-beagleboard using code sourcery tool chain.
I have used assembly function in my C application.Function has 5 argument it's called from another c function.
function like: void  routine(signed char *a, int b, signed char *c, unsigned char *d, unsigned int *e)
                        {
                           asm volatile{

                                             ........assembly syntaxs....

                            
                                    };
                        }
Here, function argument a to d are stored in r0 to r3 but argument e  either go to stack or store into r4 to r12  register as per called function ?
How can i write assembly syntax in my assembly function to get value of argument e in any specific register so I can use in my function correctly?
How can I write assembly syntax so assembly function parameter passing become independent of called function variable usage means I can use this routine function any other application without doing changed inside the assembly syntax to catch parameter value ?


Thanks,
Parents
  • Note: This was originally posted on 5th September 2009 at http://forums.arm.com

    Here, function argument a to d are stored in r0 to r3 but argument e  either go to stack or store into r4 to r12  register as per called function ?
    How can i write assembly syntax in my assembly function to get value of argument e in any specific register so I can use in my function correctly?
    How can I write assembly syntax so assembly function parameter passing become independent of called function variable usage means I can use this routine function any other application without doing changed inside the assembly syntax to catch parameter value ?


    The fifth parameter (and all those after it) always goes onto the stack, never r4 or r12.  For more information, see [url="http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/index.html"]http://infocenter.arm.com/help/topic/com.a...042c/index.html[/url]

    To access it you can "LDR r4,[sp,#0]", but be sure to have saved the value in r4 before you change it, since it will need to be restored to the previous value when you exit the function.

    I am unsure about what you are asking in the last question.  The ARM ABI defines how parameters are passed in the above document, so following it should result in a function that can be safely used from other places.
Reply
  • Note: This was originally posted on 5th September 2009 at http://forums.arm.com

    Here, function argument a to d are stored in r0 to r3 but argument e  either go to stack or store into r4 to r12  register as per called function ?
    How can i write assembly syntax in my assembly function to get value of argument e in any specific register so I can use in my function correctly?
    How can I write assembly syntax so assembly function parameter passing become independent of called function variable usage means I can use this routine function any other application without doing changed inside the assembly syntax to catch parameter value ?


    The fifth parameter (and all those after it) always goes onto the stack, never r4 or r12.  For more information, see [url="http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/index.html"]http://infocenter.arm.com/help/topic/com.a...042c/index.html[/url]

    To access it you can "LDR r4,[sp,#0]", but be sure to have saved the value in r4 before you change it, since it will need to be restored to the previous value when you exit the function.

    I am unsure about what you are asking in the last question.  The ARM ABI defines how parameters are passed in the above document, so following it should result in a function that can be safely used from other places.
Children
No data