Re: inline asm semantics: output constraint width smaller than input

From: Török Edwin
Date: Fri Jan 23 2009 - 15:43:07 EST

On 2009-01-23 20:52, Török Edwin wrote:
> On 2009-01-23 20:30, Ingo Molnar wrote:
>> * Török Edwin <edwintorok@xxxxxxxxx> wrote:
>>> Having said that, llvm-gcc is not yet able to compile the full Linux
>>> kernel on its own [for example the boot code, due to asm(".code16gcc")],
>>> but with LLVM 2.4 it was possible to build "arch=UM", and "arch=X86" (by
>>> using gcc to build the bootcode). I'd like LLVM 2.5 to be able to build
>>> the kernel, so I'll file bugs for llvm/kernel depending on where the
>>> problem is.
>> Could we get LLVM folks on the Cc: and see how difficult it would be to
>> fix this on the LLVM side? Asm constraints are used all around the place
>> and different input/output types are very common.

Hi Ingo,

Could you describe what are the semantics you need for inline asm
constraints in the kernel?
GCC doesn't document all the corner cases, and defining inline asm =
"whatever gcc accepts" is not very useful for LLVM.

So far we've encountered the problem with input/output operand tied to
same register, but having different widths:
- output wider than input, both integers: do you need this case?
- output narrower than input, both integers: this is the common case, right?
- can it also happen that input is pointer, output is integer of
different width?
- .. any other mismatches?

Could you also describe why put_user/the example from pcbios needs the
different widths?

Best regards,
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at