https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63359
andysem at mail dot ru changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |andysem at mail dot ru
--- Comment #14 from andysem at mail dot ru ---
I've been hit by this issue recently.
(In reply to Richard Earnshaw from comment #12)
> We considered that, but it won't work. For example, in ILP32 address
> registers need to use the X form, but are still 32-bits in size. There are
> other cases as well where a W or X form is required but that is not the
> natural size of the object.
For the cases where the size needs to be specified explicitly, you can leave
%w1/%x1 syntax. But the default register size, I think, should be chosen based
on the asm argument size.
There is one case where I don't feel like %w1/%x1 syntax is correct, even if
currently accepted. It's when the argument allows an alternative of an
immediate constant:
asm("add %w0, %w1, %w2" : "=r"(r) : "r"(i), "Ir"(j));
Note the last argument. When it is a constant, it doesn't need the "w" prefix,
but it needs one if it is a runtime value.