条件传送指令
2014-07-09 10:34
176 查看
先上一段C代码:
gcc不做优化的编译:gcc -S test.c:
可以看到汇编代码出现了jle这样的跳转指令。对于使用了流水线的CPU,这样的跳转是存在隐患的(P140),分支预测失败就会刷新掉所有流水线中取到而未执行的指令,影响运行性能。
现在添加优化选项:gcc -S O1 test.c
可以看到经过优化后的代码没有了跳转指令,取而代之的是一个条件传送指令——cmovle。它对cmpl比较的结果进行判断,决定是否改变%eax的值。
注意,程序前面已经把a-b和b-a都求出来了,即先求出条件操作的两种结果,然后再根据条件是否满足从而选取一个。
总之,条件传送指令使得控制流不依赖于数据(关键是没了jump),流水线也更容易保持满状态。
参考:
《深入理解计算机系统》
gcc不做优化的编译:gcc -S test.c:
可以看到汇编代码出现了jle这样的跳转指令。对于使用了流水线的CPU,这样的跳转是存在隐患的(P140),分支预测失败就会刷新掉所有流水线中取到而未执行的指令,影响运行性能。
现在添加优化选项:gcc -S O1 test.c
可以看到经过优化后的代码没有了跳转指令,取而代之的是一个条件传送指令——cmovle。它对cmpl比较的结果进行判断,决定是否改变%eax的值。
注意,程序前面已经把a-b和b-a都求出来了,即先求出条件操作的两种结果,然后再根据条件是否满足从而选取一个。
总之,条件传送指令使得控制流不依赖于数据(关键是没了jump),流水线也更容易保持满状态。
参考:
《深入理解计算机系统》
相关文章推荐
- 条件传送指令
- 随笔三十六:条件传送指令
- 32位汇编语言学习笔记(11)--条件传送指令
- c语言的预处理指令分3种 1> 宏定义 2> 条件编译 3> 文件包含
- delphi的常用条件编译指令---{$IFDEF} {$UNDEF}{$IFDEF}{$ELSE}{$ENDIF}
- 条件转移指令
- (3)串传送指令
- C语言基础-08-预处理指令2-条件编译
- 传送打印指令到打印机
- C++编译预处理:宏定义指令、文件包含指令和条件编译指令
- Delphi 的编译指令(2): 条件语句的更多用法
- Delphi 的编译指令(3): 常用的预定义条件标识符
- 汇编入门学习笔记 (十)—— 标志寄存器、串传送指令
- C51片外ROM数据传送指令大全
- DF标志和串传送指令
- 【C语言】16-预处理指令2-条件编译
- 【汇编指令】ARM指令集之PSR传送指令
- 条件传送与分支预测.
- 【C语言】16-预处理指令2-条件编译
- 带参数动态条件道指令运行测试