MCRR |
Déplace du coprocesseur au registre |
| ARM |
Syntaxe
|
MCRR{cond} coproc, #opcode, Rt, Rt2, CRn
|
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. |
| CRn |
Ce paramètre permet d'indiquer une opérande de registre de coprocesseur. |
Description
Cette instruction permet de déplacer des données du coprocesseur vers un registre ARM pour l'architecture ARMv6 et les variantes E pour le ARMv5T.
Remarques
- Transfert de données sur 64 bits : L'instruction MCRR permet de transférer 64 bits de données depuis deux registres ARM (Rt et Rt2) vers un registre
d'un coprocesseur. Elle est donc particulièrement utile dans les contextes où le coprocesseur utilise des registres 64 bits, comme dans certains coprocesseurs de
cryptographie ou de traitement numérique.
- Utilise deux registres ARM : Contrairement à MCR ne mobilisant qu'un seul registre ARM, MCRR nécessite deux registres contigus (Rt et Rt2). Cette
contrainte garantit un transfert cohérent des 64 bits. Il est important que Rt et Rt2 soient choisis avec attention pour éviter les conflits ou pertes de données.
- Restrictions sur l'utilisation du PC : Comme pour d'autres instructions coprocesseur, ni Rt ni Rt2 ne peuvent être le registre PC (R15). L'utilisation de
PC dans ce contexte générerait un comportement indéfini ou une exception, car le PC est un registre spécial contrôlant le flot d'exécution.
- Instruction privilégiée : L'instruction MCRR est réservée aux modes privilégiés du processeur ARM. Cela signifie qu'elle ne peut pas être utilisée dans
du code utilisateur standard. Elle est généralement employée dans des systèmes embarqués, OS temps réel, ou firmware pour communiquer avec un coprocesseur matériel.
- Dépend du coprocesseur ciblé : La signification exacte des paramètres comme #opcode et CRn dépend entièrement de la conception du coprocesseur ciblé. Par
exemple, pour un coprocesseur cryptographique, cette instruction pourrait envoyer une clef ou une commande. Elle nécessite donc une documentation spécifique au
coprocesseur.
- Précision sur l'ordre des registres : L'ordre des registres ARM (Rt puis Rt2) est crucial, car Rt contient la partie basse des 64 bits, tandis que Rt2
contient la partie haute. Une inversion de ces registres entraînerait un transfert de données erroné dans le coprocesseur, pouvant corrompre l'opération attendue.
- Peut être utilisée avec MRC pour vérification : Elle est souvent utilisée avec l'instruction MRRC, qui effectue l'opération inverse : elle récupère un
registre 64 bits du coprocesseur dans deux registres ARM. Cette symétrie permet une lecture/écriture complète et vérifiable des données entre les deux environnements.
- Moins fréquente dans les systèmes modernes : Bien que toujours disponible sur certaines architectures ARM, MCRR est moins utilisée dans les architectures
ARM récentes, surtout avec la montée en puissance des extensions système (comme les instructions SIMD ou NEON) et la transition vers ARMv8 et AArch64, offrant des
mécanismes différents pour le traitement 64 bits.
Dernière mise à jour : Dimanche, le 12 novembre 2017