This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Generate abs target assembly code with saturation behavior


On Fri, 28 Jun 2013, Andrew Haley wrote:

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.

Implementation defined, and ok with gcc:
http://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html

--
Marc Glisse


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]