https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90181
--- Comment #14 from Segher Boessenkool <segher at gcc dot gnu.org> --- It is *impossible* to have the stack registers as inputs to an inline asm, and reliably generate correct code for it that does what the writer of that code expected: loading up the operands to the asm may modify the stack registers, so which of the values does the asm expect, the old or the new value? It is *impossible* to have stack registers as output (or scratch) from an inline asm, always. This violates basic requirements. "Stack registers" here are those used by the ABI to address the stack, which are required to be valid at all times, for example. Stack pointer, (hard) frame pointer, that kind of thing. Most archs have register classes that include such registers, like x86's "R", but crucially always other registers are allowed there as well.