SMLSD |
Duo de multiplication et de soustraction signé |
| ARM |
Syntaxe
|
SMLSD{X}{cond} Rd, Rn, Rm, Ra
|
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 |
| Rd |
Ce paramètre permet d'indiquer le 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. |
| Ra |
Ce paramètre permet d'indiquer le registre contenant l'opérande accumulateur. |
Description
Cette instruction permet d'effectuer une double multiplication 16 bits entière avec la soustraction des produits et de l'accumulation de 32 bits.
Remarques
- Principe de fonctionnement double : L'instruction SMLSD effectue deux multiplications signées sur des demi-mots (16 bits) extraits des registres Rn et
Rm, puis soustrait les deux produits et ajoute le résultat à une valeur contenue dans le registre Ra. Cette opération est donc une forme spécialisée de soustraction
de produits, utile dans des algorithmes de calcul matriciel ou vectoriel.
- Échange conditionnel des demi-mots : Le suffixe optionnel X permet d'inverser les demi-mots dans Rm avant la multiplication. Cela autorise un contrôle
précis sur l'ordre des opérations sans manipulations supplémentaires de bits, ce qui est crucial dans des traitements SIMD, où les données sont compactées dans un seul
registre.
- Optimisée pour le traitement du signal : Cette instruction est particulièrement utile dans des applications DSP (Digital Signal Processing) où l'on
manipule des signaux sous forme de paires de valeurs 16 bits. Elle permet d'exécuter rapidement une étape typique de filtrage différentiel, correlation ou traitement
de blocs audio.
- Accumulateur 32 bits intégré : Le résultat des deux multiplications, une fois soustrait, est additionné à l'accumulateur Ra, ce qui donne une structure
en trois étapes intégrées (multiply-multiply-subtract-add). Ce comportement s'apparente aux structures MAC, mais avec une soustraction entre les produits, ce qui peut être
utile pour les différences pondérées ou symétries dans les algorithmes.
- Préservation de la précision : Puisque les demi-mots multipliés sont signés, l'instruction garantit que le signe est bien conservé dans chaque opération
intermédiaire. Cela rend l'instruction robuste dans les environnements où la fidélité des calculs est essentielle, comme les codecs audio/vidéo ou les systèmes de commande.
- Réduction de la charge d'instructions : L'instruction regroupe deux multiplications, une soustraction et une addition, ce qui permet de remplacer plusieurs
instructions classiques (comme SMUL, SUB, puis ADD) par une seule. Cela réduit la taille du code assembleur et améliore la vitesse d'exécution, surtout dans des boucles
critiques.
- Instruction conditionnelle pour plus de souplesse : Grâce au suffixe {cond}, SMLSD peut être exécutée uniquement si certaines conditions sur les drapeaux
du CPSR sont remplies. Cela permet d'optimiser des traitements en supprimant des branches explicites et en adoptant une logique sans saut (branchless), avantageuse sur
les pipelines ARM.
- Utilisation dans des différences temporelles : Dans des applications comme la détection de mouvement, les algorithmes de prédiction ou les comparateurs
temporels, cette instruction est utile pour calculer rapidement des différences de produits croisés. C'est un outil adapté pour les situations où l'on cherche à quantifier
une variation ou une erreur entre deux signaux parallèles.
Dernière mise à jour : Dimanche, le 12 novembre 2017