SMULWy |
Multiplication de mot signé |
| ARM |
Syntaxe
|
SMULWy{cond} {Rd}, Rn, Rm
|
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. |
Description
Cette instruction permet d'effectuer une large multiplication avec des opérandes 32 bits et 16 bits, et fournissant une somme de 32 bits.
Remarques
- Multiplication asymétrique entre 32 et 16 bits : L'instruction SMULWy effectue une multiplication entre un entier signé de 32 bits (Rn) et un demi-mot
signé de 16 bits extrait de Rm. Cette asymétrie est utile lorsqu'on travaille avec des données compactées ou des structures contenant des champs courts, typiques en
traitement du signal.
- Contrôle granulaire via le paramètre y : Le suffixe y permet de choisir quelle moitié du registre Rm sera utilisée : la moitié basse (B) ou haute (T). Cela
permet de doubler l'utilisation utile d'un seul registre 32 bits en entreposant deux valeurs 16 bits à y extraire dynamiquement selon le contexte.
- Pas de suffixe x, car le 32 bits vient toujours de Rn : Contrairement à d'autres instructions du type SMULxy, ici seul y est présent, car Rn est toujours
utilisé dans son intégralité (32 bits). Cette simplification structurelle limite les erreurs potentielles et clarifie le comportement de l'instruction.
- Résultat tronqué à 32 bits : Bien que le produit d'un entier 32 bits par un entier 16 bits pourrait produire un résultat sur 48 bits, celui-ci est tronqué
pour ne conserver que les 32 bits significatifs. Il est donc essentiel d'avoir conscience de cette limitation pour éviter des erreurs de débordement ou de précision.
- Optimisation pour le traitement de flux ou le DSP : Cette instruction est souvent utilisée dans le contexte du traitement du signal numérique (DSP), où des
multiplications fréquentes entre données 16 bits et coefficients 32 bits sont nécessaires. Elle permet ainsi un traitement rapide et compact dans des boucles optimisées.
- Compatible avec l'exécution conditionnelle ARM : Grâce au paramètre {cond}, l'instruction peut être exécutée conditionnellement sans branchement, une
capacité spécifique à l'architecture ARM qui permet de maintenir l'efficacité du pipeline et de limiter les sauts coûteux en performance.
- Gestion explicite du format signé : SMULWy est une multiplication signée, ce qui signifie que les deux opérandes doivent être interprétés comme des entiers
signés. Une confusion avec des valeurs non signées peut produire des résultats négatifs inattendus, surtout pour le demi-mot extrait de Rm.
- Instruction idéale pour les tableaux de coefficients : Quand des tableaux contiennent des coefficients en 16 bits (par exemple des filtres ou des poids de
réseaux de neurones), cette instruction est très économique pour les multiplier avec des entrées 32 bits. Elle permet ainsi une optimisation mémoire tout en gardant de
bonnes performances.
Dernière mise à jour : Dimanche, le 12 novembre 2017