[fpc-devel] Unexpected behaviour of bit operators

Marco Borsari borsa77 at libero.it
Fri May 17 14:36:52 CEST 2019


On Fri, 17 May 2019 11:51:20 +0100
"J. Gareth Moreton" <gareth at moreton-family.com> wrote:

> One thing to be aware of is that the compiler will extend intermediate 
> expressions to the CPU size, so if the multiplication overflows into 32 
> bits in h1 (which it does for the given values of a and b), it will 
> preserve those bits and will end up shifting them to the right instead 
> of zeroes.
> 
> For h2, the overflowed bits are masked out with the "and ((s - 1) shl 
> (16 - n))" operation, which in this example is equal to $FFF0.
> 
> I hope this answers your question.
> 
> Gareth aka. Kit

Thank you, your answer make it clear the nature of the problem, i.e.
operation size extension.
Anyway, if I understand correct, the masking as reported in the code
does not operate over the 16 bit limit, so even h2 should be erroneus.
-- 
Simplex sigillum veri



More information about the fpc-devel mailing list