#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#include <stdio.h>
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
void test_like (int x)
{
if (unlikely(x))
x = x + 8;
else
x = x + 10;
printf ("x = %d\n", x);
}
int main(void)
{
test_like (10);
return (0);
}
gcc -O2 builtin_expect.c -o builtin_expect
08048430 <test_like>:
8048430: 55 push %ebp
8048431: 89 e5 mov %esp,%ebp
8048433: 83 ec 18 sub $0x18,%esp
8048436: 8b 45 08 mov 0x8(%ebp),%eax
8048439: 85 c0 test %eax,%eax
804843b: 75 17 jne 8048454 <test_like+0x24>
804843d: b8 0a 00 00 00 mov $0xa,%eax /* x = x + 10; */
8048442: 89 44 24 04 mov %eax,0x4(%esp)
8048446: c7 04 24 50 85 04 08 movl $0x8048550,(%esp)
804844d: e8 02 ff ff ff call 8048354 <printf@plt>
8048452: c9 leave
8048453: c3 ret
8048454: 83 c0 08 add $0x8,%eax /* x = x + 8 */
8048457: eb e9 jmp 8048442 <test_like+0x12>
8048459: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
08048430 <test_like>:
8048430: 55 push %ebp
8048431: 89 e5 mov %esp,%ebp
8048433: 83 ec 18 sub $0x18,%esp
8048436: 8b 45 08 mov 0x8(%ebp),%eax
8048439: 85 c0 test %eax,%eax
804843b: 75 17 jne 8048454 <test_like+0x24>
804843d: b8 0a 00 00 00 mov $0xa,%eax
8048442: 89 44 24 04 mov %eax,0x4(%esp)
8048446: c7 04 24 50 85 04 08 movl $0x8048550,(%esp)
804844d: e8 02 ff ff ff call 8048354 <printf@plt>
8048452: c9 leave
8048453: c3 ret
8048454: 83 c0 08 add $0x8,%eax
8048457: eb e9 jmp 8048442 <test_like+0x12>
8048459: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |