QADD8 |
Addition 8 bits |
| 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 saturation parallèle d'addition d'un demi-octet.
Remarques
- Addition parallèle sur 4 octets indépendants : L'instruction QADD8 effectue quatre additions simultanées sur les paires de bits de poids faible de deux
registres. Chaque addition se fait sur 8 bits (1 octet), ce qui permet un traitement parallèle très efficace sur des données telles que des pixels, des échantillons
audio ou des valeurs compressées.
- Protection par saturation sur chaque addition : Chaque addition est saturée indépendamment : si la somme dépasse la valeur maximale pour un octet
signé (127 ou -128), elle est tronquée à cette limite. Cela évite les débordements imprévus tout en maintenant un comportement stable, ce qui est crucial pour les
applications de traitement du signal.
- Optimisation pour les algorithmes SIMD : QADD8 s'inscrit dans la philosophie SIMD (Single Instruction, Multiple Data), en permettant à une seule
instruction d'opérer sur plusieurs jeux de données. Cela le rend idéal pour des traitements vectoriels à haute performance, par exemple dans la compression d'image, la
convolution ou la normalisation de vecteurs.
- Utilisation des drapeaux de saturation : Lorsque l'une des additions entraîne une saturation, le drapeau Q du PSR est activé. Ce mécanisme permet de
détecter automatiquement les cas limites, ce qui est essentiel dans les algorithmes sensibles où la précision est critique (comme les filtres adaptatifs ou les
analyseurs audio).
- Différence majeure avec QADD : Contrairement à QADD, agissant sur des entiers 32 bits complets, QADD8 agit sur quatre octets indépendants dans
chaque registre. Il ne faut donc pas les confondre : QADD est pour les entiers classiques, tandis que QADD8 est spécifique aux données paquetées, souvent utilisées
en multimédia.
- Support limité selon l'architecture ARM : QADD8 fait partie de l'ensemble d'instructions SIMD saturées, n'étant pas disponibles sur toutes les
architectures ARM. Il faut un processeur supportant au minimum ARMv6 ou ARMv7 avec l'option SIMD, comme dans les Cortex-A. Les processeurs plus légers (Cortex-M0/M3) ne
la prennent pas en charge.
- Efficacité dans les calculs de matrices ou d'images : Grâce à son comportement vectoriel, QADD8 peut être utilisé pour additionner des matrices de pixels
ou faire des opérations de mélange d'images très rapidement. Plutôt que d'écrire une boucle d'addition manuelle sur 4 pixels, une seule instruction suffit à traiter une
ligne entière de données compressées.
- Réduction de la taille et du temps de code : Avec QADD8, les performances du code peuvent être grandement améliorées car moins d'instructions sont
nécessaires pour effectuer plusieurs additions sécurisées. Cela permet de réduire à la fois la taille du binaire compilé et le temps d'exécution, deux éléments très
recherchés dans les systèmes embarqués à faibles ressources.
Dernière mise à jour : Dimanche, le 12 novembre 2017