<p>Am 19.05.2017 03:30 schrieb "Ryan Joseph" <<a href="mailto:ryan@thealchemistguild.com">ryan@thealchemistguild.com</a>>:<br>
><br>
><br>
> > On May 19, 2017, at 3:48 AM, Florian Klämpfl <<a href="mailto:florian@freepascal.org">florian@freepascal.org</a>> wrote:<br>
> ><br>
> > Well, the reason are the linux calling conventions: there are no callee saved xmm registers. This<br>
> > means FPC does not use any single/double register variables. I have some prototype fixes in my local<br>
> > git mirror, but they are neither finished nor tested.<br>
><br>
> Can you please explain how do calling conventions affect this? I failed to run this at all on my Mac but I’m not sure why and even more confused how this would decimate speeds like this.</p>
<p>Even though FPC might use SSE for maths it will still use the x87 to transfer floating values to/from function, especially if they take Extended as parameter/result.</p>
<p>I did a test by disabling Extended on Linux x64 trunk compiler and RTL and it tripled the framerate from ~3 to ~10.</p>
<p>Additionally some internal functions are not yet available with sole SSE support (frac() indeed comes to mind).</p>
<p>Regards,<br>
Sven</p>