Forum: Compiler & IDEs ASM + C Code


von Andreas A. (aauer1) Benutzerseite


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Andreas A. (aauer1) Benutzerseite


Lesenswert?

Danke für die ausführliche Antwort.... dachte mir schon sowas in die
Richtung. Trotzdem wollte ich es bestätigt wissen!

mfg
Andreas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.