QADD16 |
Addition 16 bits |
| ARM |
Syntaxe
|
QADD16{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 saturation parallèle d'addition d'un demi-mot.
Remarques
- Addition SIMD sur deux demi-mots : L'instruction QADD16 permet d'effectuer deux additions saturées simultanées sur deux blocs de 16 bits (demi-mots) dans
un seul registre de 32 bits. Concrètement, elle prend la partie haute (bits 31 à 16) et la partie basse (bits 15 à 0) de Rn et les additionne respectivement avec les
parties correspondantes de Rm, donnant deux résultats indépendants.
- Utile pour les algorithmes DSP et multimédia : Cette instruction est particulièrement précieuse pour des algorithmes de traitement du signal ou de
multimédia qui nécessitent de traiter des données compressées en demi-mots (par exemple, des échantillons audio en 16 bits ou des pixels en haute précision). Elle permet
de gagner du temps de calcul en traitant deux données en parallèle.
- Sécurité grâce à la saturation sur 16 bits : Chaque addition est protégée par une saturation. Si la somme dépasse la valeur maximale d'un entier signé
sur 16 bits (32767 ou -32768), elle est clampée à cette valeur extrême. Cela protège les calculs des débordements pouvant entraîner des résultats inattendus ou des
comportements indésirables.
- Signalisation de la saturation via le drapeau Q : Lorsque la saturation se produit dans l'une ou les deux additions parallèles, le drapeau Q du CPSR est
activé. Cela permet au code de détecter les cas où un résultat a été tronqué, offrant une possibilité de gérer des cas d'erreur ou d'ajuster la logique de traitement.
- Mode conditionnel pour un contrôle précis : Comme pour toutes les instructions ARM, QADD16 peut être exécutée sous condition grâce au suffixe {cond}. Cela
permet d'intégrer l'instruction dans des branches de code conditionnelles sans nécessiter d'instruction de saut, optimisant ainsi le flux d'exécution.
- Performances optimisées avec l'architecture SIMD : L'utilisation de QADD16 permet de doubler l'efficacité des opérations d'addition dans les systèmes
ARM disposant de l'extension SIMD (comme les Cortex-A). Au lieu d'exécuter deux additions saturées classiques, on obtient les deux résultats en une seule instruction,
réduisant ainsi la latence et le nombre de cycles CPU.
- Complément d'autres instructions SIMD saturées : QADD16 fait partie d'une famille d'instructions SIMD saturées, telles que QADD8 (pour les octets) et
QSUB16 (soustraction saturée sur 16 bits). Ces instructions permettent de créer des algorithmes robustes de calculs vectoriels pour le traitement d'images ou d'audio
sans se soucier des débordements.
- Disponible uniquement sur les architectures avancées : Cette instruction est disponible à partir des architectures ARMv6 et plus, avec l'extension SIMD
activée (ARMv6 SIMD ou ARMv7). Elle est absente sur les microcontrôleurs de la famille Cortex-M0/M3 qui n'ont pas d'extensions SIMD, donc il faut bien vérifier la
compatibilité matérielle.
Dernière mise à jour : Dimanche, le 12 novembre 2017