|
|
1
2
对于double=扩展位: 阅读ALlen Bauer的Twitter帐户Kylix-rd: 在事后逻辑中,因为虽然SSE2 regs是128位的,但它们被用作两个64位双精度数。 |
|
|
2
5
here 和 there ),总而言之,64位编译器使用SSE2(双精度),但不使用SSE(单精度)。所有内容都转换为双精度浮点,并使用SSE2计算( 但是有一个选项可以控制它)
编辑: 当时有一个未记录的指令控制SSE代码的生成, {$EXCESSPRECISION OFF} 激活SSE代码生成,使性能恢复到预期的水平。 |
|
|
3
3
据马尔科·范德沃特在回答: How should I prepare my 32-bit Delphi programs for an eventual 64-bit compiler
PHis对该答案发表了评论: |
|
|
4
3
我刚刚发布了你另一个问题的答案,但我想它应该放在这里: 显然,除了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
在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
TExtendedX87 unit 通过 Philipp M. Schlüter ( PhiS on SO this Embarcadero forum thread . @菲斯:当你用我的信息更新你的答案时,我会删除我的。 |