Sam .. schrieb:
> struct{int a;} => ok
Die struct ist klein genug, um in r0 zu passen und wird daher darin
zurückgegeben.
> struct{double a;} => Übergabe r2/r3; Ergebnis über Stack
Die struct passt nicht mehr in die 4 Byte eines Registers und daher muss
der Rückgabewert über den Stack laufen. Dazu wird in r0 die Adresse
übergeben, an der das Ergebnis gespeichert werden soll. Der beim Aufruf
übergebene double landet in r2/r3, weil doubles nur in den
Registerpaaren r0/r1 oder r2/r3 übergeben werden dürfen, r1 blebt
unbenutzt.
> struct{int a, b;} => Übergabe r1/r2; Ergebnis über Stack, nur
> komplizierter
Gleiches Prinzip wie vorher, aber da a und b nur 32-Bit-Werte sind
können sie in r1 und r2 übergeben werden.
> Vielleicht kennt sich hier jemand damit aus und weiß, wo dieses
> Verhalten dokumentiert ist.
ARM IHI 0042F, "Procedure Call Standard for the ARM® Architecture", u.a.
Abschnitte 5.4 (Result Return) und 5.5 (Parameter Passing)