<HTML>
<style> BODY { font-family:Arial, Helvetica, sans-serif;font-size:12px; }</style>Hi Florian.  Thorsten and I got down to a fairly optimised version of Frac, in both speed and size:<br>
<br>
****<br>
<br>
<span class="swb">function Frac(const X: ValReal): ValReal; assembler; nostackframe;<br>
 
asm<br>
 
  movq      rax,  xmm0<br>
 
  shr       rax,  48<br>
 
  and       ax,   $7FF0<br>
 
  cmp       ax,   $4330<br>
 
  jge       @@zero<br>
 
  cvttsd2si rax,  xmm0<br>
 
  cvtsi2sd  xmm4, rax<br>
 
  subsd     xmm0, xmm4<br>
 
  ret<br>
 
@@zero:<br>
 
  xorpd     xmm0, xmm0<br>
 
end;<br>
<br>
****<br>
<br>
It fits into just three 16-byte blocks and is the fastest overall from our tests, although there's a slight penalty if it jumps to @@zero that seems to be architecture-dependent (e.g. it slows down for me, but Thorsten didn't see much). Aligning @@zero to a 16-byte boundary may fix this for some, but it doesn't for me.  Oh the joy of processor intracacies!<br>
<br>
Gareth aka. Kit.</span><br>
<br>
 <br>
<br>
<span style="font-weight: bold;">On Sun 29/04/18 19:28 , Florian Klaempfl florian@freepascal.org sent:<br>
</span><blockquote style="BORDER-LEFT: #F5F5F5 2px solid; MARGIN-LEFT: 5px; MARGIN-RIGHT: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 0px">Am 28.04.2018 um 17:57 schrieb Thorsten Engler:
<br>

<span style="color: rgb(102, 102, 102);">>> -----Original Message-----
</span><br>

<span style="color: rgb(102, 102, 102);">>> From: fpc-devel <<a href="mailto:fpc-devel-bounces@lists.freepascal.org">fpc-devel-bounces@lists.freepascal.org</a>> On Behalf
</span><br>

<span style="color: rgb(102, 102, 102);">>> Of Florian Klämpfl
</span><br>

<span style="color: rgb(102, 102, 102);">>> So something like
</span><br>

<span style="color: rgb(102, 102, 102);">>>
</span><br>

<span style="color: rgb(102, 102, 102);">>>   cmp       edx, $43300000
</span><br>

<span style="color: rgb(102, 102, 102);">>>   jge      @@zero
</span><br>

<span style="color: rgb(102, 102, 102);">>>   cmp       edx, $3FE00000
</span><br>

<span style="color: rgb(102, 102, 102);">>>   .align   16
</span><br>

<span style="color: rgb(102, 102, 102);">>>   jbe      @@skip
</span><br>

<span style="color: rgb(102, 102, 102);">>>
</span><br>

<span style="color: rgb(102, 102, 102);">>> might be much better.
</span><br>

<span style="color: rgb(102, 102, 102);">> 
</span><br>

<span style="color: rgb(102, 102, 102);">> That ended up making things worse in some cases.
</span><br>


<br>

Can you take a look at the generated machine code if delphi uses proper
<br>

multi byte nops. If  not, the align might make things indeed worse.
<br>

_______________________________________________
<br>

fpc-devel maillist  -  <a href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</a>
<br>

<a target="_blank" href="<a href="http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel">http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel</a>"><span style="color: red;">http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel</span></a>
<br>

<br>

<br>

</blockquote></HTML>