我对在 x86 汇编中处理浮点数的x87 指令有些熟悉。然而,我在某处读到这些已经很少使用了。(并且不允许在 64 位 Windows 驱动程序中使用)[ 1 ]
如果是这种情况,我应该使用什么说明?我看到了一些关于 SSE 的东西,但除非我弄错了,否则这些指令是最近添加的,并且不会在旧芯片上可用。(如 Pentium II 等)
我应该使用哪些说明?
我对在 x86 汇编中处理浮点数的x87 指令有些熟悉。然而,我在某处读到这些已经很少使用了。(并且不允许在 64 位 Windows 驱动程序中使用)[ 1 ]
如果是这种情况,我应该使用什么说明?我看到了一些关于 SSE 的东西,但除非我弄错了,否则这些指令是最近添加的,并且不会在旧芯片上可用。(如 Pentium II 等)
我应该使用哪些说明?
如果您愿意忘记向后兼容性,那么 SSE 就是您的最佳选择。它有更丰富的指令集和向量支持。如果您想针对正在运行的任何处理器进行优化,您应该尝试使用更高级别的语言编写并使用 ICC 进行编译,ICC 检查处理器当前正在运行并执行为此优化的代码。
归根结底,这取决于您的软件的预期用户。
如果您需要向后兼容,则必须使用 x87 指令。否则,正如 Nathan Fellman 所说,SSE# 指令可能是要走的路,也是因为它们的代码更容易编写(它们使用普通的寄存器模型,而 x87 使用堆栈)。
话虽如此,您可能想要使用 x87 代码(或混合 x87/SSE 代码)有几个原因:
(1) x87 提供更高的精度,即 80 位浮点计算。(x87/SSE 都提供 32 位和 64 位浮点数。)这可能是一个问题,例如某些可能需要额外精度的科学代码。
(2) x87 提供了一些 SSE# 指令集未涵盖的运算,即三角运算(正弦、余弦、...)和对数的指令。