gcc可能()不可能()宏和汇编代码

gcc可能()不可能()宏和汇编代码,gcc,compiler-optimization,Gcc,Compiler Optimization,我试图了解gcc的aliked()和aliked()分支预测宏对汇编代码的影响。在下面的代码段中,无论我使用哪个宏,我都看不到生成的汇编代码有任何差异。对发生的事情有什么指示吗 0 int main() { 1 volatile int x; 2 unlikely(x)?x++:x--; 3 } Asm代码: 0 0000000000000014 <main>: 1 int main() { 2 14: 55

我试图了解gcc的
aliked()
aliked()
分支预测宏对汇编代码的影响。在下面的代码段中,无论我使用哪个宏,我都看不到生成的汇编代码有任何差异。对发生的事情有什么指示吗

  0  int main() {
  1     volatile int x;
  2     unlikely(x)?x++:x--;
  3 }
Asm代码:

  0 0000000000000014 <main>:
  1 int main() {
  2   14:   55                      push   rbp
  3   15:   48 89 e5                mov    rbp,rsp
  4     volatile int x;
  5     likely(x)?x++:x--;
  6   18:   8b 45 fc                mov    eax,DWORD PTR [rbp-0x4]
  7   1b:   85 c0                   test   eax,eax
  8   1d:   0f 95 c0                setne  al
  9   20:   0f b6 c0                movzx  eax,al
 10   23:   48 85 c0                test   rax,rax
 11   26:   74 0b                   je     33 <main+0x1f>
 12   28:   8b 45 fc                mov    eax,DWORD PTR [rbp-0x4]
 13   2b:   83 c0 01                add    eax,0x1
 14   2e:   89 45 fc                mov    DWORD PTR [rbp-0x4],eax
 15   31:   eb 09                   jmp    3c <main+0x28>
 16   33:   8b 45 fc                mov    eax,DWORD PTR [rbp-0x4]
 17   36:   83 e8 01                sub    eax,0x1
 18   39:   89 45 fc                mov    DWORD PTR [rbp-0x4],eax
 19 }
 20   3c:   5d                      pop    rbp
 21   3d:   c3                      ret
0 00000000000000 14:
1 int main(){
2 14:55按rbp
3 15:48 89 e5 mov rbp,rsp
4.x;
5可能(x)?x++:x--;
6 18:8b 45 fc mov eax,DWORD PTR[rbp-0x4]
7 1b:85 c0测试eax,eax
8 1d:0f 95 c0 setne al
9 20:0f b6 c0 movzx eax,al
10 23:48 85 c0测试rax,rax
11 26:74 0b日本脑炎33
12 28:8b 45 fc mov eax,DWORD PTR[rbp-0x4]
13 2b:83 c0 01添加eax,0x1
14 2e:89 45 fc mov DWORD PTR[rbp-0x4],eax
15 31:eb 09 jmp 3c
16 33:8b 45 fc mov eax,DWORD PTR[rbp-0x4]
17 36:83 e8 01子eax,0x1
18 39:89 45 fc mov DWORD PTR[rbp-0x4],eax
19 }
20 3c:5d pop rbp
21 3d:c3 ret

看起来您在编译时没有进行优化。是一种优化,因此如果没有它,
\u内置\u expect
就不会有这种效果。通过优化,我观察到在切换预期结果时,分支的意义是颠倒的


请注意,这对当前的x86处理器是否有任何影响很难说。

在x86上不太可能有减慢代码的效果,请阅读此处: