https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103926

Segher Boessenkool <segher at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2022-02-23
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1

--- Comment #5 from Segher Boessenkool <segher at gcc dot gnu.org> ---
Well, there are a few things going on here.

Firstly, perhaps we should document wQ, if there is no better way to provide
this functionality.  (That last part is not clear, atomic types should work
fine!)

Secondly, the testcase is just broken.  wQ is a memory constraint, so giving
non-memory as the operand cannot work (it has identity, copying to temporary
memory would be even more wrong!)  But our error is not so friendly.

Correcting the testcase to

===
void f(void)
{
        __int128 *ptr;
        __int128 v;
        asm volatile("lq %0,%1" : "=r" (v) : "wQ" (*ptr));
}
===

(ignoring the uninitialised variable), and passing -mcpu=power8 (without
which (or power9 etc.) wQ is never satisfiable by anything) works.  Not
having the -mcpu= gives "error: unrecognizable insn" which is a bit
misleading, or at least not helpful.

It *is* normal for GCC to ICE on certain problems with inline asm, but the
error message should not be so baffling.

Anyway, confirmed.

Reply via email to