Forum: Compiler & IDEs Function ohne push/pop


von Olaf (Gast)


Lesenswert?

Ich wuerde gerne vom gcc eine Interruptfunktion erzeugen lassen
die mir alle Register sichert. Es gibt dafuer das pragma saveall,
aber leider wirkt das bei meinem target=M16C nicht.

Daher wuerde ich gerne den Compiler veranlassen nichts auf dem Stack zu 
sichern um dann selber Hand anzulegen. Leider habe ich dafuer kein 
Pragma gefunden. Derzeit sichert der schlaue kleine Mistkerl leider 
immer nur die Register die er braucht, grummel...

Olaf

von Lukas K. (carrotindustries)


Lesenswert?

Olaf schrieb:
> Ich wuerde gerne vom gcc eine Interruptfunktion erzeugen lassen
> die mir alle Register sichert. Es gibt dafuer das pragma saveall,
> aber leider wirkt das bei meinem target=M16C nicht.
>
> Daher wuerde ich gerne den Compiler veranlassen nichts auf dem Stack zu
> sichern um dann selber Hand anzulegen. Leider habe ich dafuer kein
> Pragma gefunden. Derzeit sichert der schlaue kleine Mistkerl leider
> immer nur die Register die er braucht, grummel...
>
> Olaf

Dafür war AFAIK das Attribut naked vorgesehen.

von Olaf (Gast)


Lesenswert?

Hm..klingt gut, aber leider....

ticker.h:7: Warnung: »naked« attribute directive ignored


Olaf

von mar IO (Gast)


Lesenswert?

Weiß ned ob dir das jetzt weiter hilft, aber trotzdem:

Ein Beispiel ist zu finden im Source-Code von GOS
Beitrag "Re: GOS: einfacher preemptive multitasking scheduler"


GCC Function-Attributes
http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html

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


Lesenswert?

Olaf schrieb:
> ticker.h:7: Warnung: »naked« attribute directive ignored

Dann musst du wohl den/die Maintainer des GCC-Ports für deinen
Prozessor mal nerven, dass sie sowas implementieren.  Am besten
natürlich, du produzierst den Patch dafür gleich selbst...

von Olaf (Gast)


Lesenswert?

> Weiß ned ob dir das jetzt weiter hilft, aber trotzdem:

Kucke ich mir heute Abend mal an...

> Dann musst du wohl den/die Maintainer des GCC-Ports für deinen
> Prozessor mal nerven,

Hey, gute Idee. DJ Delorie hat bestimmt nichts zutun. :-)

> Am besten natürlich, du produzierst den Patch dafür gleich selbst...

Darueber hab ich auch schon nachgedacht. Ich weiss aber nicht ob ich das 
mal eben so schaffe. Der Source des gcc ist ja aeh..gewaltig...
Da haette ich ein bisschen Angst was zu uebersehen das nur unter ganz 
bestimmten Umstaenden meinen Code kaputt macht wenn man sich da nicht 
laenger einarbeitet.

Ich hatte gestern schon angefangen meine Interruptfunktion komplett in 
Assembler zu schreiben. Wenn es wirklich ernst wird hilft nur 
Maennersprache(TM).

Wie kann es eigentlich sein das einige targets sowas unterstuetzen und 
andere nicht. Man sollte doch meinen das 'naked' mit als erstes 
rueberkommt wenn man einen neuen target ableitet und 'saveall' mit als 
erstes implementiert wird, bevor man sich ernsthaft daran macht 
nachzuhalten welche Register jetzt in einer Funktion benoetigt werden.


Olaf

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


Lesenswert?

Olaf schrieb:
> Wie kann es eigentlich sein das einige targets sowas unterstuetzen und
> andere nicht.

Weil die ganze Prolog- und Epiloggeschichte halt target-abhängig ist.

Warum man natürlich dann "naked" nicht portiert, das musst du wohl
wirklich DJ Delorie fragen.  Der Aufwand sollte sich ja (im Vergleich
zum korrekten Prolog/Epilog) in Grenzen halten.

von Peter (Gast)


Lesenswert?

Luk4s K. schrieb:
> Dafür war AFAIK das Attribut naked vorgesehen.

er will aber
> Ich wuerde gerne vom gcc eine Interruptfunktion erzeugen lassen
> die mir alle Register sichert.

naked macht genau das gegenteil, es sichert keine Register

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


Lesenswert?

Peter schrieb:

> naked macht genau das gegenteil, es sichert keine Register

Du musst Olafs Frage aber auch bis zu Ende lesen:

Olaf schrieb:
> Daher wuerde ich gerne den Compiler veranlassen nichts auf dem Stack zu
> sichern um dann selber Hand anzulegen.

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.