UADD8 |
Addition 8 bits non-signé |
| ARM |
Syntaxe
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 d'octets avec des valeurs non-signés.
Remarques
- Sur le principe de l'addition parallèle : L'instruction UADD8 est spécialisée dans l'addition parallèle, c'est-à-dire qu'elle traite indépendamment les
quatre octets de deux registres. Plutôt que de faire une addition classique sur 32 bits, elle additionne séparément chaque paire d'octets correspondants. Cette approche
est extrêmement efficace pour les applications multimédia, comme le traitement d'images ou d'audio.
- Sur le fait que l'addition est non signée : UADD8 réalise des additions sur des valeurs interprétées comme non signées (unsigned), ce qui veut dire qu'aucun
bit n'est utilisé pour représenter un signe négatif. Cela évite les complications liées aux débordements d'interprétation et rend cette instruction idéale pour manipuler
des pixels (exemple valeurs RGB) ou des comptages purs.
- Sur la signification du paramètre conditionnel {cond} : Le champ {cond} permet d'exécuter l'instruction uniquement si une certaine condition est remplie,
basée sur les indicateurs de statut (NZCV). Cette souplesse permet de chaîner des traitements vectoriels sans brancher systématiquement, ce qui réduit les sauts dans le
pipeline et augmente l'efficacité du code.
- Sur le type de registres utilisés : Les registres Rn, Rm, et Rd sont tous des registres 32 bits standards. Cependant, leur contenu est ici vu comme quatre octets
indépendants. Cela exige du programmeur de faire attention à la structuration des données avant d'utiliser UADD8, pour s'assurer que chaque octet est correctement aligné et
contient l'information voulue.
- Sur l'absence de propagation de retenue entre octets : Chaque addition d'octet est totalement indépendante des autres : il n'y a pas de report (carry) d'un
octet vers l'autre. Même si une addition individuelle dépasse 255, le débordement est géré séparément pour chaque octet. Cela simplifie l'écriture d'algorithmes de
traitement parallèle sans devoir prendre en compte des propagations complexes.
- Sur les applications dans le traitement d'images : En traitement d'image, UADD8 est très pratique pour réaliser des opérations comme l'ajout de filtres
ou le mélange d'images. Par exemple, additionner rapidement les composantes R, G, B et alpha de deux pixels en une seule instruction accélère énormément les effets
graphiques temps réel ou les calculs de shaders.
- Sur l'optimisation par rapport à une addition classique : Plutôt que d'effectuer quatre additions successives de 8 bits, ce que ferait une approche
classique, UADD8 les exécute toutes en un seul cycle (ou très peu selon l'architecture ARM). Cela réduit drastiquement l'empreinte en instructions et améliore
significativement les performances des algorithmes intensifs en données.
- Sur la gestion des débordements (saturation non automatique) : Il est important de noter que UADD8 ne gère pas la saturation : si une addition dépasse 255,
elle enregistre simplement le résultat modulo 256. Si une saturation était nécessaire, le programmeur devrait utiliser d'autres instructions spécifiques ou ajouter des
tests supplémentaires. Cela montre que UADD8 est rapide mais nécessite une utilisation précise selon les besoins.
Dernière mise à jour : Dimanche, le 12 novembre 2017