分支代码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