SMLAWy |
Multiplication double signé |
| ARM |
Syntaxe
|
SMLAWy{cond} Rd, Rn, Rm, Ra
|
Paramètres
| Nom |
Description |
| y |
Ce paramètre permet d'indiquer un B ou un T lequel signifie si B est mentionné qu'il faut utiliser la moitié inférieure (bits[15:0]) de Rm ou T est mentionné qu'il faut utiliser la moitié supérieur (bits[31:16]) de Rm. |
| 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 à multiplier. |
| Rm |
Ce paramètre permet d'indiquer le registre contenant le deuxième opérande à multiplier. |
| Ra |
Ce paramètre permet d'indiquer le registre contenant la valeur à additionner. |
Description
Cette instruction permet d'effectuer une multiplication d'un entier 32 bits avec un entier 16 bits et de l'accumulateur.
Remarques
- Multiplication mixte 32x16 bits : L'instruction SMLAWy réalise une multiplication entre un entier 32 bits signé (Rn) et un entier 16 bits signé extrait
de Rm. Ce traitement asymétrique (32 × 16) est particulièrement utile pour des algorithmes où des poids ou coefficients sont encodés en 16 bits, comme dans les
filtres numériques ou les modèles quantifiés de machine learning.
- Accumulateur intégré (MAC) : Le résultat de la multiplication est additionné à un accumulateur contenu dans le registre Ra, ce qui en fait une instruction
MAC (Multiply-Accumulate). Ce genre d'instruction est fondamental dans les calculs répétés, tels que les produits scalaires, les convolutions, ou les transformées
discrètes.
- Sélection dynamique de la moitié de Rm : Le suffixe y permet de choisir la moitié haute (T) ou basse (B) du registre Rm, ce qui permet d'extraire
dynamiquement un demi-mot de 16 bits sans avoir à effectuer un décalage manuel préalable. Cela optimise la performance et réduit le nombre d'instructions nécessaires dans
une boucle.
- Utilisation typique dans le traitement du signal : SMLAWy est très bien adaptée aux systèmes DSP (Digital Signal Processing), car elle permet de combiner
un poids 16 bits avec une entrée 32 bits, souvent nécessaire dans les filtres FIR/IIR. L'accumulation automatique rend l'instruction idéale pour les algorithmes
vectoriels comme les produits scalaires.
- Instruction conditionnelle pour plus de contrôle : Comme beaucoup d'instructions ARM, SMLAWy peut être conditionnelle via le suffixe {cond}. Cela permet de
n'exécuter la multiplication que si certaines conditions sur les drapeaux sont remplies, améliorant l'efficacité des branches et réduisant les erreurs de prédiction.
- Réduction du nombre d'instructions : Cette instruction combine extraction, multiplication et addition en une seule opération. Cela évite l'utilisation
d'instructions intermédiaires comme UXTH, MOV, ou ADD, ce qui est crucial dans des boucles critiques ou des routines d'optimisation en assembleur.
- Résultat tronqué à 32 bits : Bien que le produit intermédiaire soit potentiellement sur 48 bits (32×16), le résultat final est tronqué à 32 bits, avec
gestion du signe. Il est important de prendre cela en compte pour éviter les erreurs de dépassement lors de l'accumulation, surtout si les valeurs manipulées peuvent être
élevées.
- Optimisée pour les processeurs embarqués : SMLAWy est particulièrement efficace sur les microcontrôleurs ARM Cortex-M et autres processeurs embarqués, où
la performance par cycle est critique. Elle permet d'implémenter des fonctions complexes, comme des réseaux de neurones ou des décodeurs audio, en conservant une empreinte
mémoire et un coût en cycles réduits.
Dernière mise à jour : Dimanche, le 12 novembre 2017