缺少 cmpxchg16b 指令的旧 x64 处理器有多普遍?

Chr*_*ber 10 assembly

旧版本的 x64 处理器不支持用于执行原子 128 位内存交换的 cmpxchg16b 指令,但似乎新版本的处理器已经支持了好几年了。我遇到 64 位机器的旧处理器缺少此指令的可能性有多大?

Yuh*_*Bao 7

您正在查看 Rev F 之前的早期 AMD 64 位处理器(即它们迁移到 DDR2 内存时)。我认为也有一些早期的步进 D Intel Noconas 不支持它,但这些很少见。


小智 6

我没有关于某些类型 CPU 流行的数据,所以我不能直接回答你的问题。但是可以CMPXCHG16B通过查看CPUID.01h.ECX.bit131(可用)还是0(不可用)来判断CPU是否支持。

另请注意,英特尔的手册建议要以原子方式执行此指令,您需要将其与LOCK前缀结合使用。

  • @PhiS:我很确定克里斯托弗在谈论缺乏对 cmpxchg16b 的支持。如果 _that_ 丢失怎么办 (3认同)