SADD16 |
Addition 16 bits signé |
| ARM |
Syntaxe
|
SADD16{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 signés.
Remarques
- Addition parallèle de deux demi-mots signés : L'instruction SADD16 effectue deux additions signées simultanées sur des demi-mots (16 bits). Elle
considère les registres Rn et Rm comme contenant chacun deux entiers signés de 16 bits, ce qui permet de doubler le débit de traitement arithmétique dans certains
algorithmes.
- Traitement vectorisé implicite : SADD16 appartient à la famille des instructions SIMD dans un registre (SWAR - SIMD Within A Register). Elle est idéale
pour les cas où les performances sont cruciales, mais où une unité SIMD dédiée (comme NEON) n'est pas utilisée. C'est une bonne manière de vectoriser le code à moindre
coût.
- Formatage des registres en deux entiers : Pour que SADD16 produise des résultats fiables, il est important que les données contenues dans Rn et Rm soient
correctement alignées sur 16 bits. Chaque registre doit être considéré comme contenant deux entiers signés, et non un entier de 32 bits.
- Pas de saturation automatique : Contrairement à d'autres variantes comme QADD16, l'instruction SADD16 ne réalise aucune saturation. En cas de dépassement
de capacité sur 16 bits, le résultat est simplement tronqué selon la logique du complément à deux, ce qui peut entraîner des erreurs silencieuses si non anticipées.
- Calcul bidirectionnel synchronisé : L'instruction effectue en une seule fois :
- Rd[15:0] = Rn[15:0] + Rm[15:0]
- Rd[31:16] = Rn[31:16] + Rm[31:16] Cela permet un traitement parallèle parfaitement symétrique, pratique pour des opérations en miroir sur des tampons audio
ou image, ou dans des structures de données dupliquées.
- Parfait pour des traitements sur signaux compressés : Dans les applications de traitement du signal, les données sont souvent entreposées sous forme
d'échantillons 16 bits. SADD16 permet de traiter deux échantillons simultanément, ce qui est très utile pour les codecs audio, les effets en temps réel ou le DSP embarqué.
- Optimisation des performances sans NEON : Même sans utiliser les extensions NEON, SADD16 permet d'approcher les performances du SIMD grâce à une réduction
du nombre d'instructions nécessaires pour traiter des tableaux de données. Cela en fait une instruction prisée sur les microcontrôleurs ARM où NEON est absent.
- Attention aux débordements discrets : Le programmeur doit rester vigilant face aux débordements silencieux, surtout dans des calculs cumulés (séries
d'additions). Il peut être pertinent d'effectuer des vérifications manuelles, ou de basculer vers QADD16 si une gestion explicite des dépassements est nécessaire.
Dernière mise à jour : Dimanche, le 12 novembre 2017