No já jsem to nakonec obešel jinak, ale tohle mi furt vrtá hlavou.
Funguje to takto:
register uint32_t adr asm("r3") = 0x0800E000;
asm volatile("mov r9, r3" :: "r" (adr));
Ještě bych potřeboval upravit ld script, ale to už je jiná písnička…
L.