mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Inline ASM: Clobberlist - kein vollständiges push/pop


Autor: Curby23523 N. (nils_h494)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine zeitkritische Anwendung in meinem Inline-Assembler, wo ich 
alle Register benutze, die mir mein Controller (Xmega128A4U) zur 
Verfügung stellt. Natürlich kann man jetzt dadrüber streiten, dass ich 
die Zuweisung nicht von Hand vornehmen soll, darum gehts mir jetzt aber 
nicht.

In der Clobberlist gebe ich jedes Register an, da ich jedes benutze. In 
meinem .lss File aber sehe ich, dass er nicht alle Regiister mit 
push/pop sichert.

Das führt dazu, dass nachfolgender Code teilweise nicht mehr richtig 
funktioniert. Wenn ich alle Register von Hand push/pop zuweise gibts 
keine Probleme. Warum wird die Clobberliste nicht komplett beachtet?

Danke euch!

: Bearbeitet durch User
Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Nils H. schrieb:
> Warum wird die Clobberliste nicht komplett beachtet?

Die clobber-Liste ist i.W. eine Anweisung für den Register-Allokator, 
welche Register im Inline Asm verändert werden.  R0 und R1 werden 
allerdings nicht vom Register-Allokator verwaltet, sondern quasi 
händisch.  Das wurde damals so entschieden und implementiert. 
Entsprechend muss man sich um R0 + R1 selbst kümmern, dito R16 + R17 bei 
avrtiny.

Gleiches gilt für Flags im SREG.  cc in die Clobber-Liste aufzunehmen 
hat auch keine Auswirkung bzw. ist bereits implizit in der Clobber-Liste 
drin.  Dennoch sichert der Compiler SREG nicht vor Inline Asm und stellt 
es danach wieder her.

Und Y kann auch nur dann geklabbert werden, wenn kein Frame-Pointer 
gebraucht wird.  Und SP zu clobber (also Register 33 + 34) hat auch 
keinen Effekt, weil SP nur intern verwaltet wird aber nicht vom 
Register-Allokator.

Autor: Curby23523 N. (nils_h494)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, also alles händisch sichern!

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nils H. schrieb:
> Ok, also alles händisch sichern!

Wenn du das aus meiner Anwort schließen willst...

Beitrag #5027749 wurde von einem Moderator gelöscht.
Beitrag #5027767 wurde von einem Moderator gelöscht.
Beitrag #5027786 wurde von einem Moderator gelöscht.

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.