J'essaie d'implémenter le changement de contexte en utilisant gcc pour les processeurs m68k. J'ai besoin d'utiliser l'assemblage en ligne pour sauvegarder tous les registres d0, d1 ... d7 et a0, ... a7. Je me demandais si je pouvais utiliser une boucle dans mon gcc en ligne qui me permettrait de sauvegarder ces registres au lieu d'écrire une ligne de code séparée pour chaque registre.gcc assembly en ligne pour le changement de contexte
par ex.
move.l% d0, temp = pcb.cpuregs.d0 température
je veux faire 0 à l'intérieur d0 comme un compteur de boucle.
Oui, vraiment, utilisez setjmp. Si vous pouvez éviter le code d'assemblage, faites-le. –
Je suis en train de faire quelque chose de similaire: placer des pointeurs de coroutines sur leurs propres espaces de pile avant de les appeler, pour lesquels 'setjmp' est insuffisant. Est-ce que cela peut être mis dans une fonction inline qui peut être garantie inline, ou faut-il utiliser une macro, pour éviter un appel fonctionnel (et des mutations associées dans les registres que nous voulons sauvegarder)? – Alexander
Cela dépend de votre compilateur, mais cela ressemble exactement à ce que vous utiliseriez pour l'assemblage en ligne. –