Arm汇编学习笔记(九)——高效的分支代码及非对齐数据的访问

本文介绍了如何优化Arm汇编中的分支代码,特别是针对0 <= x < N类型的情况和普通值的处理。同时探讨了非对齐数据访问的策略,虽然以字节或半字单位读写是最常见方法,但效率不高。
摘要由CSDN通过智能技术生成

分支代码switch(x)在我们平常的代码中是非常常见的,而且也是比较耗时的操作,如果优化以后可以对代码的效率有很大提升。

1. 对于0 <= x < N类型的分支代码

此种情况N不能太大,对于下面C代码:
int ref_switch(int x)
{
     switch (x) {
                 case 0: return method_0();
                 case 1: return method_1();
                 case 2: return method_2();
                 case 3: return method_3();
                 case 4: return method_4();
                 case 5: return method_5();
                 case 6: return method_6();
                 case 7: return method_7();
                 default: return method_d();
     } 
}
我们可以以pc寄存器的值为基准,以x的值作为索引来实现,优化的汇编代码如下:
           ; int switch_relative(int x)
switch_relative
         MP     x, #8
         ADDLT   pc, pc, x, LSL#2
         B       method_d
         B       method_0
         B       method_1
         B       method
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值