https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56479
Georg-Johann Lay <gjl at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Version|4.7.2 |14.1.0
Last reconfirmed|2013-03-02 00:00:00 |2024-7-12
Known to fail| |14.1.0
--- Comment #2 from Georg-Johann Lay <gjl at gcc dot gnu.org> ---
Confirmed with v14.
For the time being, as a work-around you can assign the registers by hand using
local register variables, like so:
uint64_t asmfoo (uint32_t x, uint32_t y)
{
uint64_t z;
register uint32_t r16 __asm("16") = x;
register uint32_t r20 __asm("20") = y;
asm volatile (";; %0 %1 %2"
: "=&r" (z)
: "a" (r16), "a" (r20));
return z;
}