我应该使用什么指令进行浮点运算?

时间:2010-09-11 17:56:05

标签: assembly floating-point x86 x87

我有点熟悉x87 instructions来操纵x86程序集中的浮点数。但是,我在某处读到这些很少被使用。 (并且不允许使用64位Windows驱动程序) [1]

如果是这种情况,我应该使用哪些说明?我看到了一些关于SSE的东西,但除非我弄错了,这些说明最近才被添加,并且在旧芯片上不可用。 (像奔腾II等)

应该使用哪些说明?

2 个答案:

答案 0 :(得分:2)

如果您愿意忘记向后兼容性,那么SSE就是您的选择。它具有更丰富的指令集和向量支持。如果要针对正在运行的处理器进行优化,则应尝试使用更高级别的语言编写并使用ICC进行编译,ICC会检查处理器当前是否正在运行并执行针对此进行优化的代码。

在一天结束时,它取决于您软件的预期用户。

答案 1 :(得分:0)

如果您需要向后兼容,则必须使用x87指令。否则,正如Nathan Fellman所说,SSE#指令可能是要走的路,也因为它们的代码更容易编写(它们使用普通的寄存器模型,而x87使用堆栈)。

话虽如此,您可能想要使用x87代码(或混合x87 / SSE代码)有几个原因:

(1)x87提供更高的精度,即80位浮点计算。 (x87 / SSE都提供32位和64位浮点数。)这可能是一个问题,例如:一些可能需要额外精确度的科学代码。

(2)x87提供了一些SSE#指令集未涵盖的操作,即三角测量操作(sin,cos,...)和对数的指令。