www.mikrocontroller.net

Forum: Compiler & IDEs ASM + C Code


Autor: Andreas Auer (aauer1) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Auer (aauer1) Benutzerseite
Datum:

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

mfg
Andreas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.