SASX |
Soustraction et échange |
| 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 entière et une soustraction de demi-mots avec échange.
Remarques
- Opération mixte avec échange des demi-mots : L'instruction SASX combine deux opérations : une addition et une soustraction, réalisées en parallèle sur deux
paires de demi-mots (16 bits). Avant le calcul, les demi-mots de Rm sont échangés, ce qui permet une logique croisée dans le traitement des données.
- Mécanisme de traitement parallèle asymétrique : Contrairement aux instructions comme SADD16 qui effectuent deux additions en parallèle, SASX réalise :
- une addition entre la moitié haute de Rn et la moitié basse de Rm (échangée),
- une soustraction entre la moitié basse de Rn et la moitié haute de Rm (échangée). Cela permet une traitement asymétrique structuré, souvent utile dans le traitement de paires de données dépendantes.
- Utilisation du SWAR pour les structures de données : Cette instruction est un exemple typique de SIMD dans un registre (SWAR). Elle est utile pour traiter
des données codées en 16 bits (comme des pixels, des échantillons audio ou des composantes vectorielles), tout en maximisant l'usage du registre 32 bits.
- Échange automatique des demi-mots de Rm : Avant les opérations arithmétiques, les demi-mots de Rm sont échangés automatiquement (le bas devient le haut, et
inversement). Il faut donc être très attentif au positionnement des données dans ce registre, au risque d'obtenir des résultats incohérents.
- Pas de saturation ni de détection de dépassement : L'instruction SASX ne gère ni la saturation, ni la détection de dépassement. Si l'un des calculs dépasse
la plage d'un entier signé 16 bits, le résultat sera tronqué selon les règles du complément à deux, ce qui peut provoquer des artefacts dans les résultats.
- Décomposabilité en deux opérations indépendantes : Bien que combinée, cette instruction équivaut à effectuer séparément une addition signée sur les
bits [31:16] de Rn avec les bits [15:0] de Rm, et une soustraction sur les bits [15:0] de Rn avec les bits [31:16] de Rm. Cela peut aider à déboguer ou à écrire des
équivalents sans cette instruction.
- Optimisation des algorithmes de traitement du signal : Dans les domaines comme l'imagerie ou l'audio, où deux canaux sont traités en parallèle
(gauche/droite, Y/U ou Q/I), cette instruction permet des manipulations croisées très rapides, notamment pour calculer des sommes et différences en un seul cycle.
- Idéale pour les architectures sans unité SIMD dédiée : SASX fournit une manière simple et rapide de faire du traitement vectoriel léger dans des
architectures ARM sans extensions NEON. Cela permet d'optimiser du code embarqué ou temps réel sans surcharger le pipeline.
Dernière mise à jour : Dimanche, le 12 novembre 2017