SMLSLD |
Duo de multiplication long et de soustraction signé |
| ARM |
Syntaxe
|
SMLSD{X}{cond} RdLo, RdHi, Rn, Rm
|
Paramètres
| Nom |
Description |
| X |
Ce paramètre optionnel permet d'indiquer que le demi-mots les plus et les moins significatifs du deuxième opérande sont échangés avant que les multiplications ne se produisent. |
| cond |
Ce paramètre optionnel permet d'indiquer le code de condition |
| RdLo |
Ce paramètre permet d'indiquer la partie basse du registre de destination. |
| RdHi |
Ce paramètre permet d'indiquer la partie haute du registre de destination. |
| Rn |
Ce paramètre permet d'indiquer le registre contenant le premier opérande. |
| Rm |
Ce paramètre permet d'indiquer le registre contenant le deuxième opérande. |
Description
Cette instruction permet d'effectuer une double multiplication 16 bits entière avec la soustraction des produits et de l'accumulation de 64 bits.
Remarques
- Opérations sur demi-mots signés avec accumulation 64 bits : L'instruction SMLSLD réalise deux multiplications signées de 16 bits à partir des demi-mots
extraits de Rn et Rm, soustrait les deux produits, puis accumule le résultat dans un registre 64 bits (composé de RdLo et RdHi). Elle combine donc plusieurs opérations
arithmétiques complexes en une seule, optimisée pour la performance.
- Échange de demi-mots avec le suffixe X : Lorsque le suffixe X est utilisé, les demi-mots dans Rm sont échangés (haut et bas inversés) avant les
multiplications. Cela permet de manipuler efficacement des données vectorielles codées sur 32 bits (deux entiers de 16 bits), ce qui est très utile dans des traitements
SIMD ou des algorithmes utilisant des paires ordonnées de données.
- Structure idéale pour des opérations différentielles : Grâce à la soustraction entre les deux produits, SMLSLD est particulièrement bien adaptée aux
algorithmes de détection de changement, de filtrage différentiel, ou d'analyse de gradient, où l'on cherche à obtenir un résultat basé sur la différence pondérée de
deux valeurs.
- Format de résultat sur 64 bits : L'utilisation d'un accumulateur 64 bits (RdLo, RdHi) permet d'éviter les débordements lors de l'accumulation des résultats
intermédiaires, ce qui est indispensable dans les algorithmes intensifs ou les calculs impliquant de longues séquences. Cela garantit une précision maximale tout au long
du traitement.
- Gain en performance et réduction du code : Plutôt que de coder manuellement deux multiplications, une soustraction, et une addition longue en plusieurs
instructions séparées, SMLSLD offre une solution compacte et rapide. Elle réduit la taille du code assembleur et le nombre de cycles d'exécution, ce qui est essentiel
pour les applications temps réel.
- Utilisation fréquente dans le traitement du signal : Cette instruction trouve sa place dans les architectures de DSP intégrés, dans des tâches comme
la convolution, la corrélation croisée, les transformées de signaux, ou encore les moteurs de reconnaissance vocale, où la multiplication et l'accumulation de valeurs
16 bits sont omniprésentes.
- Instruction conditionnelle pour une exécution contrôlée : L'ajout optionnel du code de condition (cond) permet d'exécuter SMLSLD seulement si certaines
conditions de drapeaux sont réunies. Cela renforce la souplesse d'exécution, en autorisant des branchements implicites qui allègent le flot de contrôle du programme.
- Nécessité de respecter l'ordre des registres : Il est essentiel de bien maîtriser l'ordre des registres (en particulier pour les demi-mots Rn et Rm) afin
d'éviter les erreurs dans les multiplications ou l'accumulation. Un mauvais positionnement des demi-mots ou un oubli du suffixe X peut fausser complètement le résultat
final, surtout dans des contextes numériques sensibles.
Exemple
- SMLSLD r3, r0, r5, r1
Dernière mise à jour : Dimanche, le 12 novembre 2017