user2524261
user2524261

Reputation: 109

Parameter passing convention for Function call from ARM Assembly to C

I have a C code that calls a function defined in ARM Assembly. Two Parameters have to be passed.

If the function call looks like this:

functionName(a, b)

the registers x0 and x1 hold these values in which order? Is it x0 holds a and x1 holds b or the other way round?

Upvotes: 1

Views: 4613

Answers (1)

old_timer
old_timer

Reputation: 71566

It took longer to ask the question than to just try it.

extern void bar ( unsigned int, unsigned int );

void foo ( void )
{
    bar(5,7);
}

compile then disassemble

traditional arm

00000000 <foo>:
   0:   e3a00005    mov r0, #5
   4:   e3a01007    mov r1, #7
   8:   eafffffe    b   0 <bar>

aarch64

0000000000000000 <foo>:
   0:   528000e1    mov w1, #0x7                    // #7
   4:   528000a0    mov w0, #0x5                    // #5
   8:   14000000    b   0 <bar>
   c:   d503201f    nop

msp430

00000000 <foo>:
   0:   3e 40 07 00     mov #7, r14 ;#0x0007
   4:   3f 40 05 00     mov #5, r15 ;#0x0005
   8:   b0 12 00 00     call    #0x0000 
   c:   30 41           ret         

pdp-11

00000000 <_foo>:
   0:   1166            mov r5, -(sp)
   2:   1185            mov sp, r5
   4:   15e6 0007       mov $7, -(sp)
   8:   15e6 0005       mov $5, -(sp)
   c:   09f7 fff0       jsr pc, 0 <_foo>
  10:   65c6 0004       add $4, sp
  14:   1585            mov (sp)+, r5
  16:   0087            rts pc

Upvotes: 5

Related Questions