UADD16 |
Addition 16 bits non-signé |
| ARM |
Syntaxe
|
UADD16{cond} {Rd}, Rn, Rm
|
Paramètres
| Nom |
Description |
| 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 une addition parallèle de demi-mot avec des valeurs non-signés.
Remarques
- Sur le principe de l'addition parallèle 16 bits : L'instruction UADD16 fonctionne selon le principe de l'addition parallèle, mais au lieu de traiter les
données sur 8 bits, elle les traite sur des blocs de 16 bits. Cela signifie qu'elle effectue deux additions simultanément, chaque addition portant sur un demi-mot (16 bits),
ce qui est très utile pour les traitements vectoriels ou DSP (Digital Signal Processing).
- Sur la notion de "demi-mot" : Dans le vocabulaire ARM, un "demi-mot" (halfword) correspond exactement à 16 bits. En utilisant UADD16, les registres de 32
bits sont interprétés comme contenant deux demi-mots indépendants, ce qui oblige le développeur à être attentif au positionnement des données dans le registre, notamment
pour les opérations multicanal (stéréo, image 2x16 bits,...).
- Sur l'intérêt pour le traitement du signal et du multimédia : L'instruction UADD16 est particulièrement adaptée aux applications de traitement du signal,
telles que l'addition d'échantillons audio 16 bits, ou aux calculs d'images en haute définition. Elle permet d'accélérer des opérations qui autrement nécessiteraient
plusieurs instructions séparées pour traiter les canaux ou les composants.
- Sur l'absence de propagation de retenue entre les demi-mots : Chaque demi-mot est additionné indépendamment. Il n'y a pas de report de la retenue du premier
demi-mot vers le second. Cela simplifie la logique, mais peut également demander des traitements supplémentaires si une addition complète sur 32 bits est nécessaire.
- Sur la gestion du débordement : Lorsque la somme d'un demi-mot dépasse la valeur maximale d'un entier non signé 16 bits (65535), il y a un débordement
naturel (wrap-around) sans signal d'erreur ni saturation automatique. Cela est parfaitement acceptable pour des traitements où seuls les bits de poids faible sont
importants, mais peut nécessiter une vérification supplémentaire dans d'autres cas.
- Sur le champ conditionnel {cond} : La possibilité d'ajouter un {cond} permet de n'exécuter UADD16 que sous certaines conditions définies par les drapeaux
du processeur. Cela renforce la flexibilité de l'instruction pour s'intégrer dans des flux de contrôle optimisés, en évitant des branches coûteuses et en permettant des
optimisations de pipeline.
- Sur la différence avec UADD8 : Comparé à UADD8, qui travaille sur 8 bits, UADD16 est optimisé pour des données nécessitant plus de précision. Le choix
entre UADD8 et UADD16 dépend donc directement du format des données manipulées, et cette capacité à sélectionner l'instruction adaptée montre la richesse de l'assembleur
ARM pour le traitement parallèle.
- Sur les gains en performance : Utiliser UADD16 permet de doubler l'efficacité par rapport à une addition classique sur 16 bits réalisée avec deux
instructions séparées. Le traitement simultané des deux demi-mots réduit les cycles nécessaires et minimise l'empreinte mémoire du code, ce qui est critique dans les
applications embarquées ou mobiles.
Dernière mise à jour : Dimanche, le 12 novembre 2017