This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc 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: [patch] Change inline asm to work with llvm-gcc



On Dec 23, 2008, at 9:21 AM, Jakub Jelinek wrote:


On Tue, Dec 23, 2008 at 05:14:56PM +0000, Rafael Espindola wrote:
Personally, I think it is an llvm bug. If it isn't 100% compatible with
gcc, it shouldn't say so. However, if gcc 4.2 has the same issue,
it is an entirely different story.

I have no idea if gcc 4.2 has the same issue or not. I don't know the reason why llvm-gcc adds that requirement, but it looks reasonable to have.

What you find reasoanble on it? The numbered constraint just says that
the same register is used for both the output and input, nothing else.

LLVM requires the same size, not the same type. It prevents tying together a small output to a large input because the semantics are 'vague'. This is a new requirement and we can obviously change this back to work around glibc's headers.



The requirement is that the mode (i.e. bit size and kind (integer, floating,
etc.) has to be the same, so that the same register can be used, but
requiring the same type is pointless.

I don't believe that this is true: if so, where is it documented? I have seen cases that tie together floating point and integer values from clearly different register files. llvm-gcc also rejects these.


The idea of doing this is that the "front-end" can generate much better error messages than the late code generator can, so we prefer to do checking ahead of time. People often get constraints and other details of inline asm wrong, and this is a particular issue that bites people building x86 inline asm that is intended to work on 32-bit and 64-bit.

-Chris


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