Achtung. Die X86-64 FPU hat keine Unterstützung mehr für 80-Bit Floats (Extended). Entweder wird unter 64-Bit also emuliert, was fürchterlich langsam sein wird, oder deine Werte werden einfach truncated.
Meine 64Bit CPU beinhaltet eine FPU, die 80-Bit Floats verarbeitet.
Da wird nichts emuliert oder fürchterlich langsam oder einfach truncated.
Aber: Delphi, im 64Bit Modus, unterstützt die FPU nicht mehr.
Gibt es irgendwelche Systeme die 80-Bit im 64-Modus unterstützen?
Die Kommentare im Lazarus-Forums sind hier ganz gut (
http://forum.lazarus.freepascal.org/...?topic=29678.0)
Zitat:
The logic behind it is that the previous 80bit float is supported on the 32bit intel instruction set, but NOT on the 64bit AMD/Intel instruction set, so you would have to revert to soft float anyway. Technically one could use the FPU87 instruction set but it will conflict with the more modern fp units in that they use the same register space, i.e. you can use 1 and loose the benefits of the other.
Weiß nicht, on irgendwelche Systeme die 80-Bit im 64-Modus unterstützen.
Das ist in diesem Zusammenhang auch irrelevant, denn es ging nicht um die Frage ob irgendwelche Systeme die im 64 Bit Mode unterstützen, sondern darum ob eine X86-64 FPU sie unterstützt.
Und meine tut das! Wie das bei den neuesten CPUs ist weiß ich nicht.
Auch der obige Kommentar aus dem Lazarus Forum scheint mir fehlerhaft zu sein.
Im "Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A: Instruction Set Reference, A-M" steht z.B. für die FPU-Instruction FCOS (Cosinus berechnen):
Opcode = D9 FF
Instruction = FCOS
64-Bit Mode = Valid
Compat/Leg Mode = Valid
Description = Replace ST(0) with its cosine.
Also auch im 64 Bit Mode gültig, und das gilt für alle FPU-Befehle.
Die Aussage "Technically one could use the FPU87 instruction set but it will conflict with the more modern fp units in that they use the same register space" ist nur bedingt richtig.
Richtig ist, dass die FPU-Register und die 64 Bit MMX-Register den gleichen Adressraum belegen.
Richtig ist aber auch dass das bei den 128Bit XMM-Registern NICHT der Fall ist, d.h. FPU- und SSE-Register sind voneinander getrennt.