首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

arm程序设计优化(3)

arm程序设计优化(3)

(2)使用寄存器变量
CPU 对寄存器的存取要比对内存的存取快得多ARM, 因此为变量分配一个寄存器, 将有助于代码的优化和运行效率的提高。整型、指针、浮点等类型的变量都可以分配寄存器; 一个结构的部分或者全部也可以分配寄存器。给循环体中需要频繁访问的变量分配寄存器也能在
一定程度上提高程序效率。

1.3 指令集相关的优化方法
有时可以利用ARM7 指令集的特点对程序ARM进行优化。
(1)避免除法
ARM 7 指令集中没有除法指令,其除法是通过调用C 库函数实现的。一个32 位的除法通常需要20~140 个时钟周期。因此, 除法成了一个程序效率的瓶颈, 应尽量避免使用。有些除法可用乘法代替,例如: if ( (x / y) > z)可变通为 if ( x > (y × z)) 。在能满足精度,且存储器空间
冗余的情况下, 也可考虑使用查表法代替除法。当除数为2 的ARM幂次方时, 应用移位操作代替除法。

(2)利用条件执行
ARM 指令集的一个重要特征就是所有的指令均可包含一个可选的条件码。当程序状态寄存器(PSR )中的条件码标志满足指定条件时, 带条件码的指令才能执行。利用条件执行通常可以省去单独的判断ARM指令,因而可以减小代码尺寸并提高程序效率。

(3)使用合适的变量类型
ARM 指令集支持有符号/ 无符号的8 位、16 位、32位整型及浮点型变量。恰当的使用变量的类型,不仅可以节省代码,并且可以提高代码运行效率。应该尽可能地避免使用char、short 型的ARM局部变量,因为操作8 位/16 位局部变量往往比操作3 2 位变量需要更多指令, 请对比下列3 个函数和它们的汇编代码。

intwordinc(inta) wordinc
{ ADD a1,a1,#1
return a + 1; MOV pc,lr
} shortinc
shortshortinc(shorta) ADD a1,a1,#1
{ MOV a1,a1,LSL #16
return a + 1; MOV a1,a1,ASR #16ARM
} MOV pc,lr
charcharinc(chara) charinc
{ ADD a1,a1,#1
return a + 1; AND a1,a1,#&ff
} MOV pc,lr
可以看出, 操作3 2 位变量所需的指令要少于操作8位及16 位变量。
继承事业,薪火相传
返回列表