SMUSD |
Duo de multiplication et de soustraction signé |
| ARM |
Syntaxe
|
SMUSD{X}{cond} {Rd}, Rn, Rm
|
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. |
Description
Cette instruction permet d'effectuer la soustraction de deux multiplications d'entier.
Remarques
- Double multiplication 16 bits avec soustraction : L'instruction SMUSD réalise deux multiplications d'entiers 16 bits signés, extraits des registres Rn
et Rm, puis effectue la soustraction des deux produits. Elle condense en une seule opération ce qui nécessiterait plusieurs instructions classiques, améliorant ainsi
les performances.
- Le paramètre X pour inverser les demi-mots : Quand le suffixe X est utilisé, il échange les moitiés haute et basse du registre Rm avant la multiplication.
Cela est utile pour s'adapter à différentes organisations de données en mémoire, notamment dans le traitement de signaux ou d'images où l'ordre des échantillons peut
varier.
- Exploitation des demi-mots des registres : Les deux opérandes sont chacun divisés en deux parties de 16 bits (haut et bas), ce qui permet d'effectuer
deux produits 16x16 signés. Cela suppose que les données sont formatées de manière appropriée, souvent en compactant deux entiers 16 bits dans un seul registre 32 bits.
- Soustraction des produits : attention au sens : La soustraction est faite dans un ordre spécifique : (Rn_lo * Rm_lo) - (Rn_hi * Rm_hi), ou l'inverse selon
la présence de X. Cette différence peut modifier radicalement le résultat final, il est donc crucial de connaître le sens de calcul selon l'usage de l'instruction.
- Instruction efficace pour des algorithmes vectoriels : SMUSD est souvent utilisée dans des algorithmes de traitement du signal vectoriel, comme les
convolutions ou les différences pondérées, car elle permet de gagner en performance en combinant plusieurs opérations en une seule instruction ARM optimisée.
- Nécessite une bonne gestion des signes : Comme les multiplications sont signées, une mauvaise interprétation des bits 16 comme étant signés ou non signés
peut produire des erreurs graves. Il faut donc s'assurer que les données manipulées respectent bien le format entier signé 16 bits.
- Résultat final sur 32 bits : Bien que deux multiplications 16x16 soient effectuées, puis soustraites, le résultat est un entier 32 bits signé
entreposé dans Rd. Ce comportement est utile mais suppose que l'utilisateur prend en compte les possibles débordements ou saturations dans certains cas.
- Peut être combinée avec des instructions conditionnelles : Le paramètre {cond} permet d'exécuter cette instruction de façon conditionnelle sans
branchement, ce qui est particulièrement adapté dans des boucles critiques ou dans du code d'optimisation, notamment sur des architectures embarquées ou en temps
réel.
Dernière mise à jour : Dimanche, le 12 novembre 2017