CMOV CPU指令的意义是什么?

ΤΖΩ*_*ΙΟΥ 7 10.10 kernel

Ubuntu 10.10已经放弃了对 i586 和更小的处理器的支持,以及不支持 CMOV 指令的 i686 处理器(有条件的 MOVe,AFAIK)。

CMOV 命令有什么特别之处?它甚至有自己的在标志flags :线/proc/cpuinfo

Den*_*eil 5

当使用 gcc 和 -march 标志为 686 架构编译源代码时,gcc 有时会生成包含 CMOV 指令的目标代码。那是因为 CMOV 是 15 年前发布的原始 686 架构附带的指令。

少数声称兼容 686 的处理器不支持此指令。因此,必须做很多工作来处理少数不支持该标准指令的芯片,该标准指令已经存在超过 15 年,并且无论如何都是原始 686 架构的一部分。Ubuntu 内核团队的时间有限,并决定不再值得他们花时间继续支持所谓的 686 兼容处理器,这些处理器在过去 15 年中一直未能包含该指令,该指令是核心 686 指令集的一部分.

CMOV 命令本身并没有什么特别之处,除了它不是 i686 之前的架构(i486、i586 等)中的指令,而且一些据称与 i686 兼容的芯片没有该指令。


pku*_*mar 5

CMOV 指令是谓词(或条件)移动指令。它将分支和移动指令组合成一个操作码。

CMOV 指令在编译器优化中很有用,因为它有助于从代码中删除一些条件跳转指令。这在现代超标量处理器中很重要,因为许多指令正在运行并并行执行,并且条件跳转指令会使预测代码是否应该执行变得更加困难,直到分支被解决。