MRRC |
Déplace le registre au coprocesseur |
| ARM |
Syntaxe
|
MRRC{cond} coproc, #opcode, Rt, Rt2, CRm
|
Paramètres
| Nom |
Description |
| cond |
Ce paramètre optionnel permet d'indiquer le code de condition |
| coproc |
Ce paramètre permet d'indiquer le nom de l'instruction de coprocesseur. |
| #opcode |
Ce paramètre permet d'indiquer le opcode de coprocesseur en 4 bits. |
| Rt |
Ce paramètre permet d'indiquer le premier registre source ARM. Le registre ne doit pas être PC. |
| Rt2 |
Ce paramètre permet d'indiquer le deuxième registre source ARM. Le registre ne doit pas être PC. |
| CRm |
Ce paramètre permet d'indiquer l'opérande de registre de coprocesseur. |
Description
Cette instruction permet de copier les registres ARM vers le coprocesseur pour une architecture ARMv6 et les variants E d'une architecture ARMv5T.
Remarques
- Transfert du coprocesseur vers deux registres ARM : L'instruction MRRC permet de lire une valeur de 64 bits à partir d'un registre du coprocesseur et de
la transférer vers deux registres ARM 32 bits, Rt et Rt2. Cette opération est nécessaire pour manipuler des données plus larges que les registres standards de 32 bits
dans ARM.
- Complémentaire de MCRR : MRRC est la contrepartie de l'instruction MCRR, effectuant l'opération inverse (copie de deux registres ARM vers un registre de
64 bits dans le coprocesseur). Ces deux instructions sont conçues pour fonctionner ensemble lors de l'échange de données 64 bits entre le CPU et le coprocesseur.
- Restrictions sur les registres utilisés : Les registres Rt et Rt2 ne doivent pas être le registre PC, ce qui est cohérent avec les contraintes de sécurité
de l'architecture ARM. Cela évite que l'exécution du programme soit modifiée accidentellement lors d'un transfert depuis un coprocesseur.
- Opcode sur 4 bits, plus de granularité : Le champ #opcode dans cette instruction est codé sur 4 bits, contrairement à certains autres transferts
coprocesseur utilisant 3 bits. Cela permet un plus grand éventail d'opérations spécifiques, utiles pour adresser différents types de registres ou fonctions dans les
coprocesseurs.
- Instruction dédiée aux transferts 64 bits : MRRC est particulièrement utile lorsque le coprocesseur contient des valeurs ou états sur 64 bits (par
exemple, des minuteries haute résolution, des états cryptographiques ou des registres de performance étendus). Elle garantit une cohérence de lecture entre les deux
moitiés de la donnée.
- Spécifique à certaines architectures ARM : L'instruction est supportée à partir de l'architecture ARMv6, et aussi dans certains variants étendus
d'ARMv5T (E variants). Elle ne doit pas être utilisée sur des coeurs ne la prenant pas en charge, sous peine de générer des exceptions ou de produire un comportement
indéfini.
- Importante dans les opérations système ou sécurisées : Dans les environnements privilégiés (superviseur, hyperviseur,...), MRRC peut être utilisée pour
accéder à des registres système du coprocesseur, comme ceux du CP15 dans les anciennes architectures, ce qui est essentiel pour la gestion mémoire, les caches ou les
exceptions.
- Indispensable dans les transferts avec coprocesseur NEON/VFP : Même si MRRC est souvent associée à CP15 (le coprocesseur système), elle peut aussi être
utilisée pour lire certaines données internes dans d'autres coprocesseurs, comme le VFP ou NEON, lorsqu'on veut manipuler leurs registres de configuration ou d'état
en 64 bits.
Dernière mise à jour : Dimanche, le 12 novembre 2017