0
我正在Cortex-R4中運行的C代碼中進行優化。 首先,我在條件檢查中指出「__builtin_expect」時沒有看到彙編代碼輸出中的任何更改。 這似乎是編譯器生成不必要的跳轉。具有__builtin_expect的ARM的靜態分支預測功能不起作用!!?
我的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代碼-------- (位=> 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代碼在一個循環運行,那麼每個具有時間跳(因爲如果條件被傳遞 只有一次)。 是否有任何其他編譯器設置,實際上,如預期的那樣生成代碼。