Chinaunix首页 | 论坛 | 博客
  • 博客访问: 132941
  • 博文数量: 75
  • 博客积分: 3483
  • 博客等级: 中校
  • 技术积分: 820
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-07 08:31
文章分类

全部博文(75)

文章存档

2011年(53)

2010年(22)

我的朋友

分类: C/C++

2011-01-05 20:06:34

假设会采用向后分支
Backward branches are assumed to be taken.
 
假设不会采用向前分支
Forward branches are assumed to be not taken.
 
以前曾经采用过的分支会再次使用
Branches that have been previously taken are taken again.
 
向后分支不是指后面的代码...应该是跳转指令之前 loop之后的代码...
 
向前分支则指的是跳转后的代码.
 
优化的目标既是减少跳转.符合分支预测规则,使其可以正确的被预读.
 
对于之前的if代码
 

#include <stdio.h>
int main()
{
int a = 100;
int b = 25;
if (a > b)
{
printf(“The higher value is %d\n”, a);
} else
printf(“The higher value is %d\n”, b);
return 0;
}

其中的

movl -4(%ebp), %eax
cmpl -8(%ebp), %eax
jle .L2
movl -4(%ebp), %eax
movl %eax, 4(%esp)
movl $.LC0, (%esp)
call printf
jmp .L3
.L2:
movl -8(%ebp), %eax
movl %eax, 4(%esp)
movl $.LC0, (%esp)
call printf
.L3:


之所以使用jle而非JG,就是因为编译器预测紧跟在判断后面的语句更可能被执行.而其条件是a>b, 对应的

cmpl -8(%ebp), %eax


在使用jle指令的情况下什么时候不跳转, a>b..

从而a>b情况下的代码也可以被预读.

阅读(612) | 评论(1) | 转发(0) |
0

上一篇:c static function

下一篇:my ascii

给主人留下些什么吧!~~

chinaunix网友2011-01-06 15:07:01

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com