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

--- Comment #30 from Rich Felker <bugdal at aerifal dot cx> ---
> You need to make $r10 not a clobber but an inout, of course.  And not

That's not a correct constraint, because it's clobbered by the kernel between
the first syscall instruction's execution and the second execution of the addu
instruction after the kernel returns to restart it. $10 absolutely needs to be
a clobber because the kernel clobbers it. The asm block can't use any registers
the kernel clobbers.

> allowing the "i" just costs one more register move, not so bad imo.
> So you do have a workaround now.  Of course we should see if this can
> actually be fixed instead ;-)

I don't follow. As long as the "i" gets chosen, the asm inlines nicely. If not,
it forces a gratuitous stack frame to spill a non-clobberlisted register to use
as the input.

The code has been working for the past 8 years with the "0"(r2) input
constraint added, and would clearly be valid if r2 were pre-initialized with
something.

Reply via email to