Is PRE architecture dependent? aarch64 vs x86_64
David Brown
david.brown@hesbynett.no
Sat Jul 19 09:18:29 GMT 2025
On 18/07/2025 18:55, Segher Boessenkool wrote:
> Hi!
>
> On Fri, Jul 18, 2025 at 06:39:41PM +0200, David Brown wrote:
>
>> Are you able to give an example of the C code for which the optimisation
>> above applies, and values for which the result is affected? (When thinking
>> about overflows, I always like to use 16-bit int because the numbers are
>> smaller and easier to work with.)
>
> 16 bits? Why so big! :-)
Well, we could test it on the AVR target with "-mint8" in effect, but
some people might worry that 8-bit ints are non-conforming...
>
>> Conversion to signed integer types is implementation-defined behaviour in
>> the C standards, not undefined behaviour. That means the compiler must pick
>> a specific tactic which is documented (in section 4.5 of the gcc manual) and
>> applied consistently. It is not undefined behaviour - code that relies on
>> two's complement conversion of unsigned types to signed types is not
>> incorrect code, merely non-portable code. (In practice, of course, it is
>> portable, as all real-world compilers use the same tactic on two's
>> complement targets.)
>
> Leaving it as UB is a correct implementation. If that is documented it
> is IB then, but what is the difference here :-)
>
No, UB is /not/ a correct implementation of signed integer conversions.
It has to be defined and documented, but the implementation can choose
the details.
More information about the Gcc-help
mailing list