This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Generate abs target assembly code with saturation behavior
- From: Andrew Haley <aph at redhat dot com>
- To: Shiva Chen <shiva0217 at gmail dot com>
- Cc: gcc at gcc dot gnu dot org
- Date: Fri, 28 Jun 2013 10:11:24 +0100
- Subject: Re: Generate abs target assembly code with saturation behavior
- References: <CAH=PD7ZBeqpU6MTx8gv+kA1dc2uH+z+L9i7m-RS1qZOGUOtrow at mail dot gmail dot com>
On 06/28/2013 08:53 AM, Shiva Chen wrote:
> I have a case which will generate abs instructions.
>
> int main(int argc)
> {
> if (argc < 0)
> argc = -(unsigned int)argc;
> return argc;
> }
>
> To my understanding, given that argc=0x80000000 in 32bit int plaform,
> the result of (unsigned int)argc is well defined and should be 0x80000000u.
> (C99 6.3.1.3 point 2)
>
> And then the result of -0x80000000u should be 0x80000000 because
> unsigned operation can never overflow and the value can be
> represented by signed integer.
> (C99 6.2.5 point 9)
Yes, but you can't then assign that to an int, because it will overflow.
0x80000000 will not fit in an int: it's undefined behaviour.
Andrew.