c ++: asm Liste
-
28-09-2019 - |
Frage
In g ++, clobber Listen für asm angegeben werden können, zum Beispiel:
asm ("somecode" : : "r1", "r2", "r3");
Das bedeutet, dass der asm-Code ändert Register r1, r2, r3.
Nun, meine geänderten Register sind abhängig von einem Template-Parametern n
(der asm
Block innerhalb einer Template-Funktion) und Register r1, ..., rn geändert werden. Wie kann ich das ausdrücken?
Lösung
Wie viele verschiedene Register Konstellationen mit denen Sie konfrontiert? Wenn nicht zu viele, könnten Sie eine spezielle Implementierung für jeden bieten. ( Vorlage Spezialisierung )
Weil ich begreifen, dass es keine Möglichkeit gibt „Templat Aussagen“ zu erstellen.
Andere Tipps
Sie können einstellen, alle Register, dass Sie in der clobber Liste verwenden könnte, so dass der Compiler sie nicht verwenden, um den Wert einer Variablen zu speichern; Ich weiß, das ein wenig langsamer ist, aber wenn Sie nicht über eine sehr sehr hohe Optimierung benötigen, wird es funktionieren.