[Bug c/53353] Missing error/warning when using __int128_t with incorrect asm register constraints

2012-05-15 Thread jakub at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53353

Jakub Jelinek jakub at gcc dot gnu.org changed:

   What|Removed |Added

 CC||jakub at gcc dot gnu.org

--- Comment #5 from Jakub Jelinek jakub at gcc dot gnu.org 2012-05-15 
06:19:51 UTC ---
You are wrong.  A class contains the ax and dx registers, which means that
for say 64-bit value it can give you either %rax, or %rdx, for 128-bit value
obviously only %rax:%rdx pair.  But r class contains all the non-fixed
general purpose registers, so it can give you any pair of consecutive
registers.
The only classes that can't hold 128-bit values are the single register
classes, like a, b, ..., D, S, etc.


[Bug c/53353] Missing error/warning when using __int128_t with incorrect asm register constraints

2012-05-14 Thread pinskia at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53353

Andrew Pinski pinskia at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||INVALID

--- Comment #1 from Andrew Pinski pinskia at gcc dot gnu.org 2012-05-15 
01:40:11 UTC ---
It fits into two registers, rax and rbx.


[Bug c/53353] Missing error/warning when using __int128_t with incorrect asm register constraints

2012-05-14 Thread svfuerst at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53353

--- Comment #2 from Steven Fuerst svfuerst at gmail dot com 2012-05-15 
01:54:46 UTC ---
Obviously a __int128_t fits in two registers.  The bug is that gcc doesn't
warn/error about code mistakenly trying to fit it into one.  Instead, gcc
generates a weird 16-bit operation, causing silent bad code generation.


[Bug c/53353] Missing error/warning when using __int128_t with incorrect asm register constraints

2012-05-14 Thread pinskia at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53353

--- Comment #3 from Andrew Pinski pinskia at gcc dot gnu.org 2012-05-15 
02:02:23 UTC ---
(In reply to comment #2)
 Obviously a __int128_t fits in two registers.  The bug is that gcc doesn't
 warn/error about code mistakenly trying to fit it into one.  Instead, gcc
 generates a weird 16-bit operation, causing silent bad code generation.

It does not know what you want to do?  Really it is the ax:dx pair most
likely.
Also the inline-asm uses internal GCC representation.
How does GCC not know the inline-asm did the correct thing of what the user
wanted it to do?  Hint GCC cannot read your mind to say you made a mistake
here.


[Bug c/53353] Missing error/warning when using __int128_t with incorrect asm register constraints

2012-05-14 Thread svfuerst at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53353

--- Comment #4 from Steven Fuerst svfuerst at gmail dot com 2012-05-15 
02:09:05 UTC ---
Actually, it is the rax:rdx pair that is most likely.  ax:dx only has 32 bits. 
rax:rdx is specified by the 'A' constraint, the only gpr option that is 128
bits.

(Yes, it would be nice to pass a 128 bit integer in some other pair of
registers as an enhancement, but currently only the 'A' constraint works.)