【发布时间】:2018-10-23 04:13:20
【问题描述】:
我正在阅读this link,简而言之,有人可以向一周前开始学习汇编 x86 和 64 位的人解释当前 C++ 编译器的问题。
不幸的是,当前的编译器没有优化 @craigster0 的 nice 便携式版本,所以如果你想利用 64 位 CPU,你 不能使用它,除非作为没有#ifdef 的目标的后备 为了。 (我没有看到优化它的通用方法;您需要 128 位 类型或内在的。)
为了澄清,我正在研究汇编的好处,当我遇到人们在多篇文章中说当前的编译器在 64 位乘法方面没有优化,因为它们使用最低部分,所以它们没有执行完整64位乘法是什么意思。那么我在书中读到的更高部分的含义是什么?在 64 位架构中,只有最低 32 位用于 RFlags,这些相关的我很困惑吗?
【问题讨论】:
-
您的意思是 32 位 x86 吗?任何地方都没有 86 位;这甚至不是 8 的倍数。
-
在那个答案中,我是说编译器不会使用 32 位块优化 64x64 => 128 位乘法到
mul rcx(felixcloutier.com/x86/MUL.html) 以获得 128 位结果在一条指令中。相反,他们制作的 asm 更像是编写的 C 源代码,执行 32 位操作。这与RFLAGS无关,只是64x64 => 128位加宽乘法的整数结果。 -
您将其用作构建块,例如 128x128 => 128 位乘法,就像 can multiprecision signed multiply be performed with imul instruction? 所询问的那样。