<HTML>
I will add though that Delphi apparently does the same thing, so if any changes are made so precision is lost as expected (even though loss of precision is usually not a desired trait), it shouldn't occur under -mDelphi.<br>
<br>
Personally I'm under the opinion that precision should be lost because that is the expected behaviour, as well as noting the fact that the behaviour is different depending on if you're working with 32-bit numbers compared to 8 or 16-bit values.<br>
<br>
Gareth<br>
<br>
 <br>
<br>
<span style="font-weight: bold;">On Tue 12/06/18 01:07 , "J. Gareth Moreton" gareth@moreton-family.com sent:<br>
</span><blockquote style="BORDER-LEFT: #F5F5F5 2px solid; MARGIN-LEFT: 5px; MARGIN-RIGHT:0px; PADDING-LEFT: 5px; PADDING-RIGHT: 0px"> 
<div>https://bugs.freepascal.org/view.php?id=33851</div><div><br>
 
</div><div>Someone pointed out that if you perform "(x shl 8) shr 8", where x is of type Word, the result is always x, even though logic dictates that the upper 8 bits should be shifted out and hence the result actually be equal to "x and $FF".  After analysing the assembly language that's produced, it turns out that the optimiser works with the full 32-bits of the register.  For example:<br>
 
<br>
 
is_this_a_bug:=((counter shl 8) shr 8);<br>
 
<br>
 
...becomes the following under -O3 (under -O1, %r13w and %si are replaced with references)...<br>
 
<br>
 
movzwl %r13w,%eax<br>
 
shl    $0x8,%eax<br>
 
shr    $0x8,%eax<br>
 
mox    %al,%si<br>
 
<br>
 
A similar situation happens if the variables are of type Byte as well - the intermediate values use the full 32 bits of the register.<br>
 
<br>
 
I'm not certain if this is a bug or intended behaviour though.  Can someone more senior make a decision on this?<br>
 
<br>
 
Gareth<br>
 
</div>  

_______________________________________________<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>

</blockquote></HTML>