SMULL |
Longue multiplication signé |
| ARM |
Syntaxe
|
SMULL{S}{cond} RdLo, RdHi, Rn, Rm
|
Paramètres
| Nom |
Description |
| S |
Ce paramètre optionnel permet d'indiquer le suffixe. Si ce paramètre est spécifié, les drapeaux de condition sont mise à jour dans le résultat de l'opérande |
| 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 multiplication d'entier long.
Remarques
- Multiplication entière signée sur 64 bits : L'instruction SMULL permet d'effectuer la multiplication de deux entiers signés de 32 bits pour produire un
résultat de 64 bits, réparti dans deux registres (RdHi et RdLo). Elle est donc parfaitement adaptée aux cas où un simple produit 32 bits ne suffit pas à contenir
l'intervalle de résultat.
- Séparation explicite des registres de destination : Le résultat étant sur 64 bits, il est nécessaire de désigner deux registres de destination
distincts : l'un pour la partie basse (RdLo), l'autre pour la partie haute (RdHi). Cela impose à l'utilisateur de bien planifier l'allocation des registres pour
éviter toute collision ou perte de données.
- Aucune accumulation, à la différence de SMLAL : Contrairement à l'instruction SMLAL, SMULL n'ajoute
aucune valeur préexistante au résultat du produit. Elle est donc idéale pour les multiplications de base, sans accumulation, ce qui permet de l'utiliser comme brique
de base pour des calculs plus complexes.
- Utilisation dans les algorithmes à haute précision : SMULL est très utile dans les algorithmes nécessitant une haute précision arithmétique, comme les
calculs d'algèbre linéaire, les cryptosystèmes ou les opérations sur des entiers longs. Le résultat 64 bits évite les pertes d'information dues à un débordement.
- Simplicité et performance sur processeurs ARM : L'instruction est bien optimisée dans les architectures ARM, notamment celles qui incluent une unité
MAC (Multiply-Accumulate). Son exécution est rapide et déterministe, ce qui en fait une option fiable pour des boucles de traitement intensif.
- Mise à jour optionnelle des drapeaux avec le suffixe S : Avec le suffixe S, SMULL peut mettre à jour les drapeaux de condition (Zero, Negative,...), ce
qui permet d'enchaîner facilement des tests logiques sans instruction supplémentaire. Cela permet d'économiser du code dans les séquences critiques.
- Exécution conditionnelle avec {cond} : L'instruction accepte un code conditionnel ({cond}), permettant une exécution sélective sans branchement. Cela
s'avère utile dans les boucles optimisées ou les traitements conditionnels intégrés, réduisant ainsi le besoin en sauts et améliorant la fluidité du pipeline.
- Attention au signe des opérandes : Étant une instruction de multiplication signée, SMULL suppose que les deux opérandes (Rn et Rm) sont des entiers
avec extension de signe. Une mauvaise interprétation des valeurs signées/non signées pourrait conduire à des résultats erronés ou incohérents.
Dernière mise à jour : Dimanche, le 12 novembre 2017