Ich versuche, Kontextwechsel mit gcc für M68k-Prozessoren zu implementieren. Ich brauche Inline-Assembly zum Speichern aller Register d0, d1 ... d7 und a0, ... a7. Ich habe mich gefragt, ob ich eine Schleife in meinem Inline-GCC verwenden kann, die mir erlauben würde, diese Register zu speichern, anstatt eine separate Codezeile für jedes Register zu schreiben.gcc Inline-Assembly für Kontextwechsel
für zB.
move.l% d0, Temperatur pcb.cpuregs.d0 = Temp
Ich möchte 0 innerhalb d0 wie ein Schleifenzähler machen.
Ja, wirklich, verwenden Sie setjmp. Wenn Sie den Assemblercode vermeiden können, tun Sie dies. –
Ich mache etwas ähnliches: Setze Stapelzeiger von Coroutinen auf ihre eigenen separaten Stapelräume, bevor sie aufgerufen werden, für die 'setjmp' alleine nicht ausreicht. Kann asm so in eine Inline-Funktion eingefügt werden, die garantiert inline sein kann, oder muss ein Makro verwendet werden, um einen funktionalen Aufruf (und damit verbundene Mutationen in den Registern, die wir speichern wollen) zu vermeiden? – Alexander
Hängt von Ihrem Compiler ab, aber das klingt genau so, wie Sie Inline Assembly für verwenden würden. –