ASM + C Code

OP Persönliche Seite #363736
Lesenswert?

Hi.

Ich hab schon wieder eine Frage. Und zwar.... der GCC übergibt ja
normalerweise Parameter an Funktionen in den Registern r24 - ...
(soviele register wie eben nötig sind).
Meine Frage ist nun, ob man die zur Übergabe verwendeten Register auch
ändern kann.
D.h. es sollen z.B. die Register r18 - r24 verwendet werden.

mfg
Andreas
Moderator Persönliche Seite #363737
Lesenswert?

> Meine Frage ist nun, ob man die zur Übergabe verwendeten Register
> auch ändern kann.

Ja, indem man den GCC selbst ändert. ;-)

Im Ernst: das wäre ein komplett anderes ABI, folglich wärst du auf
Linkerebene inkompatibel mit allem anderen, einschließlich der
avr-libc.  Soll nicht heißen, dass man das nicht machen könnte, aber
es wäre ein derartiger Versionssprung, dass wir es nur zusammen mit
einer neuen major version von sowohl GCC als auch avr-libc machen
könnten.  Es gibt dabei natürlich dringlichere Gründe als die
Kompatibilität zum ABI von IAR (die insgesamt sehr viel komplizierter
wäre, da der IAR Parameter nicht notwendig hintereinander in den
Registern ablegt), insbesondere wäre hier zu nennen, dass _tmp_reg_
und _zero_reg_ mal von r0 und r1 weg müssten, weil sie dort für die
Multiplikation und andere Dinge ,,im Weg'' sind.

Es gibt zwar mehr als eine Register-Allozierungs-Strategie derzeit
(kann man mit Kommandozeilen-Optionen auswählen), aber die gehören
dennoch alle zum gleichen ABI, d. h. die Parameterübergabe selbst wird
dadurch nicht geändert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren