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 코드의이 조각은 루프에서 실행하는 경우 조건이 전달되는 경우 때문에, 다음은이 때마다 (점프 가정하자 한 번만). 다른 컴파일러 설정이 실제로 코드를 예상대로 생성합니까?