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!
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.