-
-
[原创]arm平台c语言函数传参及返回值约定浅析
-
发表于:
2017-6-28 01:41
4599
-
测试用编译器:gcc
优化选项:-O2
a
输入参数通过r0-r3传递,多余的放入堆栈中;返回值放入r0,不够的话放入 {r0,r1}
例1
int fun1(int a, int b, int c, int d)
输入:a = r0
b = r1
c = r2
d = r3
返回:r0
例2
int* fun2(int a, double b, short c, char d)
输入:a = r0
r1用于对齐(double需要8字节对齐)
b = {r2, r3}
c 放在堆栈的sp[0]位置
d 放在堆栈的sp[4]位置,这里的sp是指进入函数时的sp
返回:r0
例3
double fun3(double a, int b, short c, char d)
输入:a = {r0, r1}
b = r2
c = r3
d 放在堆栈的sp[0]位置,这里的sp是指进入函数时的sp
返回:{r0,r1}
b
结构体作为参数传递时,当结构体内容{r0,r1,r2,r3}放不下时,多余的放入堆栈中
例1
struct tagTest {
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课