Syntaxe
Paramètres
| Nom |
Description |
| cond |
Ce paramètre optionnel permet d'indiquer le code de condition |
| Rt |
Ce paramètre permet d'indiquer le registre de destination. Ce registre ne peut pas être PC. |
| Rt2 |
Ce paramètre permet d'indiquer le registre source. |
| Rn |
Ce paramètre optionnel permet d'indiquer l'adresse dans la mémoire. |
Description
Cette instruction permet d'échanger des données 32 bits de registre et de mémoire.
Remarques
- Instruction d'échange atomique entre registre et mémoire : L'instruction SWP effectue un échange de donnée de 32 bits entre un registre et une adresse
mémoire. Ce mécanisme était historiquement utilisé pour mettre en ouvre des opérations atomiques, notamment pour la synchronisation dans des environnements multitâches
ou multicoeurs.
- Instruction obsolète dans les architectures ARM récentes : L'instruction SWP est dépréciée depuis ARMv6 et supprimée dans ARMv8. Elle a été remplacée par
LDREX/STREX, offrant une meilleure souplesse, une gestion plus fine du cache, et sont plus adaptées aux processeurs multicoeurs.
- Ne garantit pas l'exclusivité mémoire sur systèmes multicoeurs : Contrairement à LDREX/STREX, SWP ne garantit pas l'exclusivité mémoire en cas d'accès concurrents
sur plusieurs coeurs. Cela peut entraîner des conditions de course si elle est utilisée sans précaution dans des contextes multiprocesseurs.
- Simple à utiliser, mais avec des effets critiques : L'instruction est attractive par sa syntaxe concise et sa logique simple, mais son utilisation implique
une prise de contrôle directe sur la mémoire partagée, ce qui nécessite une gestion rigoureuse pour éviter les erreurs ou corruptions.
- Rt contient la valeur chargée depuis la mémoire : Après exécution, Rt reçoit la valeur initialement présente à l'adresse mémoire, tandis que la valeur
de Rt2 est stockée à cette adresse. Cela permet un échange direct entre un registre et la mémoire sans étape intermédiaire.
- Utilisable pour implémenter des sémaphores ou verrous simples : Grâce à son comportement atomique (sur processeur monocoeur), SWP peut servir à mettre en
place des primitives de synchronisation rudimentaires, comme un test-and-set, en lecture/écriture directe sur des drapeaux mémoires.
- Restrictions sur l'utilisation du registre PC : Le registre Rt ne peut pas être PC (R15), car cela compromettrait la cohérence du flot d'instruction. Cela
reflète les précautions à prendre lors de l'utilisation de SWP, notamment dans des routines sensibles comme celles du système d'exploitation.
- Une variante SWPB existe pour les échanges de type octet : L'instruction SWPB permet le même type d'opération qu'un SWP, mais en ne manipulant que des
valeurs de 8 bits (octets). Cela donne un peu plus de souplesse dans le type de données échangées, mais elle souffre des mêmes limitations de compatibilité et de
sécurité.
Dernière mise à jour : Dimanche, le 12 novembre 2017