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. |
| Rm |
Ce paramètre permet d'indiquer le registre contenant le premier opérande. |
| Rn |
Ce paramètre permet d'indiquer le registre contenant le deuxième opérande. |
Description
Cette instruction permet d'effectuer une saturation d'addition de valeur entière.
Remarques
- Addition avec saturation pour éviter les débordements : L'instruction QADD effectue une addition entière de deux opérandes, mais contrairement à une
addition classique, elle applique une saturation. Cela signifie que si le résultat dépasse les limites représentables d'un entier signé sur 32 bits, il est "clampé" à
la valeur maximale ou minimale possible, évitant ainsi un débordement non contrôlé.
- Protection contre les comportements indéfinis : Dans de nombreux cas, un dépassement d'entier peut entraîner un comportement indéfini ou erroné. QADD
est conçue pour protéger contre cela en verrouillant le résultat dans l'intervalle autorisée. Ce comportement est particulièrement utile dans les systèmes embarqués, où
la fiabilité de chaque opération arithmétique est cruciale.
- Idéale pour le traitement du signal et le multimédia : L'addition avec saturation est largement utilisée dans le traitement du signal numérique (DSP),
notamment dans les algorithmes audio ou vidéo. Elle permet d'additionner des échantillons sans crainte de dépassement, ce qui garantit une qualité et une stabilité
accrues des traitements numériques dans les codecs ou les filtres numériques.
- Un indicateur de saturation via le drapeau Q : Lorsque la saturation est déclenchée, le drapeau Q (Saturation Flag) du Program Status Register
(CPSR) est mis à 1. Ce comportement permet au programme de détecter facilement qu'une saturation a eu lieu, et d'éventuellement adapter son comportement
(exemple : journalisation d'erreur, stratégie de repli...).
- Instruction conditionnelle pour plus de contrôle : Comme d'autres instructions ARM, QADD peut être conditionnelle via le suffixe {cond}. Cela permet de
n'exécuter l'addition que si certaines conditions sont réunies, basées sur les drapeaux de statut. Cette caractéristique renforce l'efficacité du code en réduisant le
besoin de branches conditionnelles.
- Peut entraîner une perte d'information intentionnelle : Lorsque la saturation se produit, le résultat est tronqué à une valeur extrême (comme 0x7FFFFFFF
ou 0x80000000), ce qui signifie que l'excès d'information est perdu. Ce comportement est acceptable dans des applications comme l'audio, mais doit être utilisé avec
prudence dans des contextes où la précision est primordiale.
- Supportée uniquement sur certaines architectures : L'instruction QADD fait partie du jeu d'instructions saturées ARM, introduites avec certaines versions
avancées du processeur. Elle n'est donc pas disponible sur toutes les architectures ARM, notamment les plus anciennes ou les profils les plus réduits (comme ARMv4 ou
les Cortex-M0/M1). Il faut donc vérifier la compatibilité matérielle.
- Complémentaire avec d'autres instructions saturées : QADD s'insère dans un ensemble cohérent d'instructions arithmétiques saturées, telles que QSUB
(soustraction saturée), QDADD, ou encore QDSUB. Utilisées ensemble, ces instructions permettent de développer des algorithmes numériques robustes et fiables, avec des
garanties sur la non-propagation des erreurs de débordement.
Dernière mise à jour : Dimanche, le 12 novembre 2017