SMUAD |
Multiplication avec addition signé |
| ARM |
Syntaxe
|
SMUAD{X}{cond} {Rd}, Rn, Rm
|
Paramètres
| Nom |
Description |
| R |
Ce paramètre optionnel permet d'indiquer que le résultat est arrondit. S'il n'est pas présent, le résultat sera tronqué. |
| 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 l'addition de deux multiplications d'entier.
Remarques
- Deux multiplications en parallèle sur des demi-mots : L'instruction SMUAD décompose chacun des registres Rn et Rm en deux demi-mots signés de 16 bits. Elle
effectue deux multiplications indépendantes (haut × haut et bas × bas), puis additionne les deux résultats, offrant ainsi une exécution parallèle très efficace.
- Option X pour échanger les demi-mots de Rm : Le suffixe optionnel X permet de permuter les moitiés hautes et basses du registre Rm avant la
multiplication. Cela est utile lorsqu'on traite des données entrelacées (interleaved) ou organisées en paires spécifiques, par exemple dans le traitement du signal stéréo
ou multicanal.
- Instruction très efficace pour les algorithmes DSP : Grâce à sa capacité à effectuer deux opérations de multiplication + addition en un seul cycle, SMUAD
est idéale pour des applications de traitement numérique du signal, comme les filtres FIR ou les produits scalaires dans des algorithmes vectoriels.
- Résultat de 32 bits adapté aux besoins typiques : Le résultat de l'opération est un entier signé sur 32 bits, ce qui convient parfaitement à la majorité
des calculs intermédiaires. Cela évite la complexité de gestion des registres longs comme dans SMLALD, tout en restant assez précis.
- Utile pour les formats de type Q15 : En traitant deux entiers signés de 16 bits, SMUAD est particulièrement bien adaptée aux formats en virgule fixe
comme Q15, largement utilisés dans les environnements embarqués sans unité de calcul flottant. Cela permet un traitement rapide et stable des données.
- Compatible avec l'exécution conditionnelle ARM : Le paramètre {cond} permet une exécution conditionnelle selon les drapeaux du programme, une spécificité de
l'architecture ARM. Cela rend l'instruction plus flexible, en éliminant certains branchements dans les boucles critiques.
- Ne pas confondre avec SMUADX ou SMLAD : Il est important de bien différencier SMUAD de SMLAD (qui inclut un accumulateur) et de SMUADX (avec permutation
par défaut). SMUAD ne fait ni accumulation avec un registre supplémentaire, ni permutation implicite, sauf indication explicite avec X.
- Attention à la saturation en cas de dépassement : Même si les multiplications sont sur 16 bits, la somme des deux produits peut dépasser la capacité d'un
registre 32 bits, surtout si les valeurs sont proches de la borne maximale. Il faut alors prévoir un mécanisme de saturation ou de gestion des débordements selon le
contexte.
Dernière mise à jour : Dimanche, le 12 novembre 2017