ARM优化之函数的形参数量
2016-08-13 来源:eefocus
翻阅了其他资料以及下面的代码比对表明,多出来的参数传递的时候,需要使用栈,而栈需要使用额外的指令以及对慢速存储单元的读写,所以不超过 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个以上的时候,可以采用结构体的方式来减少参数的个数。
这样的优化,对于一些经常需要调用的函数,或者需要快速响应的情况下,还是非常必要的。
- Arm 推出人工智能优化的 Arm 终端计算子系统以及新的 Arm Kleidi 软件, 重新定义移动端体验
- Arm Neoverse CSS V3 助力云计算实现 TCO 优化的机密计算
- 三星宣布与Arm联合优化下一代基于GAA的Cortex-X CPU
- 三星宣布与 Arm 合作,以 GAA 代工技术优化下一代 Cortex-X CPU 内核
- Arm® Cortex®-M0+ MCU 如何优化通用处理、传感和控制
- ARM嵌入式编译器(五) 优化循环的4种方法
- 【汇编优化】之ARM32与AARCH64指令集优化总结
- ARM嵌入式系统开发:软件设计与优化--第二章ARM处理器基础
- Mentor携手Arm优化下一代 IC的功能验证
- C语言编程程序优化方案,如何选择ARM核心处理器操作系统