Die Ursache muss wohl völlig woanders liegen. Das hat vermutlich nichts mit dem Compiler zu tun.
Ich habe mal folgendes versucht:

unsigned long temp;
temp = 0xE0000010;

auch hier wird ein (für mich) merkwürdiger Code erzeugt:

MOV R1,#0x10
ORR R1,R1,#0xE0000000;

hätte er die 0x10 nicht gleich mitladen können ?????


während dessen bei temp = 0xE1000000;
MOV R1,#0xE1000000


diese Zahl ist sogar noch größer und die läd er direkt ?????

mal wird der Wert in einem Befehl geladen, dann wieder in 2 Befehlen.
Der Zusammenhang ist mir bisher nicht klar geworden.

mfg. Siro