代码之家  ›  专栏  ›  技术社区  ›  kludg

64位编译器中的浮点支持

  •  10
  • kludg  · 技术社区  · 15 年前

    64位Delphi编译器中的浮点支持应该是什么?

    • 实现浮点运算?

    • 64位编译器是否支持 (延长)?

    这些问题是密切相关的,所以我把它们作为一个单独的问题来问。

    6 回复  |  直到 15 年前
        1
  •  2
  •   Marco van de Voort    15 年前

    对于double=扩展位:

    阅读ALlen Bauer的Twitter帐户Kylix-rd:

    http://twitter.com/kylix_rd

    在事后逻辑中,因为虽然SSE2 regs是128位的,但它们被用作两个64位双精度数。

        2
  •  5
  •   Eric Grange    15 年前

    here there ),总而言之,64位编译器使用SSE2(双精度),但不使用SSE(单精度)。所有内容都转换为双精度浮点,并使用SSE2计算( 但是有一个选项可以控制它)

    编辑: 当时有一个未记录的指令控制SSE代码的生成, {$EXCESSPRECISION OFF} 激活SSE代码生成,使性能恢复到预期的水平。

        3
  •  3
  •   Community Mohan Dere    9 年前

    据马尔科·范德沃特在回答: How should I prepare my 32-bit Delphi programs for an eventual 64-bit compiler

    X67 FPU不推荐用于x64,通常SSE2将用于florating point。所以浮点及其异常处理的工作方式可能稍有不同,扩展的可能不是80位(而是64位或128位)。这也与通常的舍入(copro controlwork)变化有关,当与期望不同fpu字的ht C代码交互时。

    PHis对该答案发表了评论:

        4
  •  3
  •   PhiS    14 年前

    我刚刚发布了你另一个问题的答案,但我想它应该放在这里:

    显然,除了Embarcadero,没有人能在产品发布前肯定地回答这个问题。

    任何一个优秀的x64编译器都很可能使用SSE2指令集作为基线,因此尝试尽可能多地使用SSE特性进行浮点计算,从而最大限度地减少x87 FPU的使用。但是,也应该说,没有任何技术原因可以阻止x64应用程序代码中使用x87 FPU(尽管已经有一段时间以来有相反的传言;如果您想了解更多关于这一点的信息,请查看 Agner Fog's Calling Convention Manual

    编辑1 :Delphi XE2 Win64确实不支持开箱即用的80位浮点计算(请参见discussuion here this TExtendedX87 type (尽管需要注意)。

        5
  •  2
  •   Jan Goyvaerts    15 年前

    在Embarcadero实际发布之前,我们无法确定64位Delphi编译器将如何实现浮点运算。在此之前的一切都只是猜测。但一旦我们确定了一切都为时已晚。

    Allen Bauer的tweets确实表明他们将使用SSE2,扩展类型可能会减少到64位而不是80位。我认为这是个坏主意,原因有很多。我在一份质量中心报告中写下了我的想法 Extended should remain an 80-bit type on 64-bit platforms

    如果您不希望代码在移到64位Delphi时从80位精度降到64位精度,请单击QualityCentral链接并投票给我的报告。选票越多,恩巴卡德罗就越有可能倾听。如果他们使用SSE2作为64位浮点,这是有意义的,那么使用FPU添加80位浮点将是Embarcadero的额外工作。我怀疑除非很多开发人员提出要求,否则他们不会这么做。

        6
  •  1
  •   Community Mohan Dere    9 年前

    TExtendedX87 unit 通过 Philipp M. Schlüter ( PhiS on SO this Embarcadero forum thread .

    @菲斯:当你用我的信息更新你的答案时,我会删除我的。

    推荐文章