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.