2010-09-11 76 views
2

我对x87 instructions用于处理x86汇编中的浮点数有点熟悉。但是,我在某处读到这些很少用到的地方。 (并且在64位Windows驱动程序中不允许)[1]我应该使用什么指令来进行浮点运算?

如果是这样的话,应该使用什么指令?我看到了一些关于上证所的信息,但除非我误解了这些说明,否则这些说明会在近期增加,并且不会在旧芯片上提供。 (像奔腾II等)

什么指令应该我正在使用?

回答

2

如果你愿意忘记向后兼容性,SSE是一条路。它有更丰富的指令集和向量支持。如果您想针对任何处理器运行进行优化,您应该尝试使用更高级别的语言编写并与ICC编译,ICC将检查处理器当前是否正在运行并执行针对此优化的代码。

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

+0

实际上,我正在编写一个编译器,用于生成*浮点指令:) – 2010-09-11 20:07:00

+0

@George:这是一个通用编译器,可以在没有SSE支持的旧系统上运行,或者它适用于封闭的环境? – 2010-09-11 20:14:18

+0

它会(希望)被广泛使用,所以它应该与尽可能多的处理器兼容。 – 2010-09-12 00:51:41

0

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

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

(1)的x87提供更高的精度,即80位浮点运算。 (x87/SSE都提供32位和64位浮点数。)这可能是一个问题,例如,一些科学代码可能需要额外的精度。 (2)x87提供了一些不被SSE#指令集涵盖的操作,即三角函数操作(sin,cos,...)和对数指令。

相关问题