我在 Cortex-R4 中运行的 C 代码中进行优化。首先,当我在条件检查中指出“__builtin_expect”时,我没有看到汇编代码输出有任何变化。似乎编译器生成了不必要的跳转。
我的 C 代码:
bit ++; (Likely)
if(__builtin_expect(bit >= 32),0)
{
bit -=32; // unlikely code
xxxxxx; // unlikely code
xxxxxx; // unlikely code
xxxxxx; // unlikely code
}
bit = bit*2 // something (Likely)
return bit;
---- 生成的 ASM 代码 -------- (bit => r0)
ADD r2,r2,#1
CMP r0,#0x20
BCC NoDecrement
SUB r0,r0,#0x20
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
NoDecrement LSL r0,r0,#1
BX lr
---- 我预期的 ASM 代码 --------
ADD r2,r2,#1
CMP r0,#0x20
BHE Decrement
JumbBack LSL r0,r0,#1
BX lr
Decrement SUB r0,r0,#0x20
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
B JumbBack
假设如果这段 C 代码在循环中运行,那么每次它都要跳转(因为 if 条件只通过了一次)。是否有任何其他编译器设置实际上可以按预期生成代码..??