【问题标题】:What instructions should I be using for floating point operations?我应该使用哪些指令进行浮点运算?
【发布时间】:2010-09-11 17:56:05
【问题描述】:

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

如果是这样,我应该使用哪些说明?我看到了一些关于 SSE 的东西,但除非我弄错了,否则这些指令是最近添加的,并且不会在旧芯片上可用。 (如 Pentium II 等)

我应该使用哪些说明

【问题讨论】:

    标签: assembly floating-point x86 x87


    【解决方案1】:

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

    归根结底,这取决于您的软件的预期用户。

    【讨论】:

    • 实际上,我正在编写一个编译器,它生成浮点指令:)
    • @George:这是一个通用编译器,可以在没有 SSE 支持的旧系统上运行,还是用于封闭环境?
    • 它将(希望)被广泛使用,因此它应该与尽可能多的处理器兼容。
    • @George:然后我建议进行某种双重编译并使用 CPUID 来查看是否支持 SSE。如果不是,使用 x87 路径,如果是,使用 SSE 路径。如果这工作量太大,那么您可能别无选择,只能使用 x87。
    【解决方案2】:

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

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

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

    (2) x87 提供了一些 SSE# 指令集未涵盖的操作,即三角运算(正弦、余弦、...)和对数的指令。

    【讨论】:

      猜你喜欢
      • 2014-01-10
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 2012-11-12
      • 2011-06-22
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多