Ubuntu 10.10已放弃对 i586 和更低型号处理器的支持,以及不支持 CMOV 指令 (据我所知,是条件 MOVe) 的 i686 处理器。
CMOV 命令有什么特别之处?它甚至在flags :
行中有一个自己的标志/proc/cpuinfo
。
答案1
CMOV 指令是一条预测(或条件)移动指令。它将分支和移动指令合并为一个操作码。
CMOV 指令在编译器优化中非常有用,因为它有助于从代码中删除一些条件跳转指令。这在现代超标量处理器中非常重要,因为许多指令都在运行中并并行执行,而条件跳转指令会使在分支解析之前更难预测是否应该执行代码。
答案2
当使用 gcc 和 -march 标志为 686 架构编译源代码时,gcc 有时会生成包含 CMOV 指令的目标代码。这是因为 CMOV 是 15 年前发布的原始 686 架构附带的指令。
一些声称兼容 686 的处理器并不支持该指令。因此,必须做大量工作来处理不支持该标准指令的少数芯片,该指令已存在超过 15 年,并且无论如何都是原始 686 架构的一部分。Ubuntu 内核团队的时间有限,他们决定不再值得花时间继续支持所谓的 686 兼容处理器,因为这些处理器在过去 15 年中一直无法包含该指令,而该指令是核心 686 指令集的一部分。
CMOV 命令本身没有什么特别之处,只是它不是 i686 之前的架构(i486、i586 等)中的指令,并且一些据称兼容 i686 的芯片没有该指令。