Just ask the compiler what he will tell you everything ...
int foo ( int a, long long b ); int bar ( void ) { return(foo(0xAABB,0x1122334455667788LL)); }
I prefer to compile and then disassemble rather than compile in asm, it is easier to read.
arm-none-eabi-gcc -c -O2 fun.c -o fun.o arm-none-eabi-objdump -D fun.o fun.o: file format elf32-littlearm Disassembly of section .text: 00000000 <bar>: 0: e92d4008 push {r3, lr} 4: e59f001c ldr r0, [pc, #28] ; 28 <bar+0x28> 8: e28f3010 add r3, pc, #16 c: e893000c ldm r3, {r2, r3} 10: ebfffffe bl 0 <foo> 14: e8bd4008 pop {r3, lr} 18: e12fff1e bx lr 1c: e1a00000 nop ; (mov r0, r0) 20: 55667788 strbpl r7, [r6, #-1928]! ; 0x788 24: 11223344 teqne r2, r4, asr #6 28: 0000aabb ; <UNDEFINED> instruction: 0x0000aabb 2c: e1a00000 nop ; (mov r0, r0)
and the answer r0 contains the first parameter, r1 is skipped, and r2 / r3 contains a long long one.
source share