您的位置 首页 FPGA

ARM优化之函数的形参数量

ARM的参数传递遵循ATPCS的规范,子程序间通过寄存器R0-R3来传递参数,返回值也通过R0来返回。这就造成一个问题,当构造超过…

ARM 的参数传递遵从 ATPCS 的标准,子程序间经过寄存器 R0-R3 来传递参数,回来值也经过 R0 来回来。这就形成一个问题,当结构超越 4 个参数的函数时,怎么完结。

翻阅了其他材料以及下面的代码比对标明,多出来的参数传递的时分,需求运用栈,而栈需求运用额定的指令以及对慢速存储单元的读写,所以不超越 4 个参数的函数是很有利于程序的优化。

测验代码如下:

榜首段为选用4个参数的函数:

view plain copy to clipboard print ?
01.int Test( void )
02.{
03. return SubCode (1,2,3,4);
04.}
05.
06.int SubCode( int a, int b, int c, int d)
07.{
08. return a+b+c+d;
09.}

view plaincopy to clipboardprint?
00.int Test(void)
00.{
00. return SubCode (1,2,3,4);
00.}
00.
00.int SubCode(int a, int b, int c, int d)
00.{
00. return a+b+c+d;
00.}

这段会编译成

view plain copy to clipboard print ?
01.Test
02.MOV r3,#4
03.MOV r2,#3
04.MOV r1,#2
05.MOV r0,#1
06.B SubCode
07.
08.SubCode
09.ADD r0,r0,r1
10.ADD r0,r0,r2
11.ADD r0,r0,r3
12.MOV pc,lr

view plaincopy to clipboardprint?
00.Test
00.MOV r3,#4
00.MOV r2,#3
00.MOV r1,#2
00.MOV r0,#1
00.B SubCode
00.
00.SubCode
00.ADD r0,r0,r1
00.ADD r0,r0,r2
00.ADD r0,r0,r3
00.MOV pc,lr

第二段为选用6个参数的函数:

view plain copy to clipboard print ?
01.int Test( void )
02.{
03. return SubCode (1,2,3,4,5,6);
04.}
05.
06.int SubCode( int a, int b, int c, int d, int e, int f)
07.{
08. return a+b+c+d+e+f;
09.}

view plaincopy to clipboardprint?
00.int Test(void)
00.{
00. return SubCode (1,2,3,4,5,6);
00.}
00.
00.int SubCode(int a, int b, int c, int d, int e, int f)
00.{
00. return a+b+c+d+e+f;
00.}

而这段又会编译成:

view plain copy to clipboard print ?
01.Test
02.STMFD sp!,{r2,r3,lr}
03.MOV r3,#6
04.MOV r2,#5
05.STMIA sp,{r2,r3}
06.MOV r3,#4
07.MOV r2,#3
08.MOV r1,#2
09.MOV r0,#1
10.BL SubCode
11.LDMFD sp!,{r2,r3,pc}
12.
13.SubCode
14.STR lr, [sp,#-4]!
15.ADD r0,r0,r1
16.ADD r0,r0,r2
17.ADD r0,r0,r3
18.LDMIB sp,{r12,r14}
19.ADD r0,r0,r12
20.ADD r0,r0,r14
21.LDR pc,{sp},#4

view plaincopy to clipboardprint?
00.Test
00.STMFD sp!,{r2,r3,lr}
00.MOV r3,#6
00.MOV r2,#5
00.STMIA sp,{r2,r3}
00.MOV r3,#4
00.MOV r2,#3
00.MOV r1,#2
00.MOV r0,#1
00.BL SubCode
00.LDMFD sp!,{r2,r3,pc}
00.
00.SubCode
00.STR lr, [sp,#-4]!
00.ADD r0,r0,r1
00.ADD r0,r0,r2
00.ADD r0,r0,r3
00.LDMIB sp,{r12,r14}
00.ADD r0,r0,r12
00.ADD r0,r0,r14
00.LDR pc,{sp},#4

就上面看来,添加了两个参数,就会添加许多代码用来完结这次调用。可是咱们也无法确保函数的参数一定是小于4个的,所以这儿笔者主张,假如函数的参数必需求4个以上的时分,能够选用结构体的方法来削减参数的个数。

这样的优化,关于一些常常需求调用的函数,或许需求快速呼应的情况下,仍是十分必要的。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/274510.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部