SMULxy |
Multiplication signé |
| ARM |
Syntaxe
|
SMULxy{cond} {Rd}, Rn, Rm
|
Paramètres
| Nom |
Description |
| x |
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 Rn ou T est mentionné qu'il faut utiliser la moitié supérieur (bits[31:16]) de Rn. |
| 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 multiplication de deux entiers 16 bits.
Remarques
- Multiplication de demi-mots de 16 bits : L'instruction SMULxy effectue une multiplication entre deux entiers signés de 16 bits, extraits de moitiés
spécifiques des registres Rn et Rm. Cela permet un traitement plus fin des données, sans devoir gérer manuellement les décalages ou masques binaires.
- Contrôle explicite avec les suffixes x et y : Les paramètres x et y permettent de choisir entre la moitié inférieure (B) ou la moitié supérieure (T) de
chaque registre source. Cette granularité rend SMULxy particulièrement utile dans les boucles de traitement vectoriel ou audio, où les données sont souvent paquetées dans
un seul registre.
- Résultat sur 32 bits, malgré des opérandes 16 bits : Bien que les deux opérandes soient codés sur 16 bits, le résultat de leur multiplication est entreposé
dans un registre de 32 bits (Rd). Cela permet de préserver la précision du calcul et d'éviter les débordements pour les plages usuelles d'entiers signés.
- Idéal pour les algorithmes SIMD manuels : Cette instruction est parfaite pour les opérations SIMD artisanales (Single Instruction, Multiple Data), où
un registre contient plusieurs sous-opérandes. En combinant plusieurs SMULxy, on peut simuler un traitement parallèle de plusieurs paires de valeurs dans une seule
boucle.
- Utilisation complémentaire avec SMLAxy : SMULxy est souvent utilisée en complément de SMLAxy, qui fait la même chose avec accumulation. Ainsi, SMULxy
est idéale pour un calcul initial, tandis que SMLAxy permet d'enchaîner des étapes de type produit-somme dans les algorithmes DSP.
- Pas de permutation automatique comme dans SMUAD : Contrairement à des instructions comme SMUAD avec option X, SMULxy ne propose aucune permutation
automatique des demi-mots. Cela donne à l'utilisateur un contrôle total mais aussi une responsabilité accrue dans le choix de la paire de sous-opérandes à traiter.
- Exécution conditionnelle avec {cond} : Comme pour de nombreuses instructions ARM, SMULxy peut être rendue conditionnelle grâce au suffixe {cond}, ce qui
est très utile dans les boucles optimisées ou les branches compactes. Cela permet de réduire les branchements classiques, souvent coûteux en performance.
- S'assurer de la validité des données 16 bits : Avant d'utiliser SMULxy, il faut veiller à ce que les données soient bien alignées sur les moitiés
concernées des registres. Utiliser la moitié "T" ou "B" d'un registre contenant un entier complet non préparé pourrait produire des résultats incorrects ou inattendus.
Dernière mise à jour : Dimanche, le 12 novembre 2017