Предсказание статического перехода для ARM с __builtin_expect не работает !!?

Я занимаюсь оптимизацией кода C, работающего в Cortex-R4. во-первых, я не заметил никаких изменений в выводе кода сборки, когда я указал «__builtin_expect» в проверке состояния. Похоже, компилятор генерирует ненужный Jump.

Мой код 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 выполняется в цикле, то каждый раз, когда он должен перейти (потому что если условие передается только один раз). Есть ли какие-то другие настройки компилятора, которые на самом деле генерируют код, как ожидалось .. ??

0
задан Aravind Nadumane 17 January 2012 в 12:53
поделиться